HMI · HANDSHAKE
HMI Command와 Status를 같은 비트로 쓰면 왜 꼬일까?
HMI에서 Start를 눌렀다고 설비가 실제 Run 상태가 된 것은 아닙니다. “사용자가 요청했다”와 “PLC가 조건을 확인해 실제 운전 중이다”를 같은 비트로 표현하면 화면과 설비 상태가 쉽게 어긋납니다.
HMICommandStatusHandshakeRun
Command는 요청, Status는 결과입니다
예를 들어 HMI의 M100 Start_CMD는 운전을 요청하는 비트이고, PLC의 M200 Run_STS는 인터록을 통과해 실제 운전 상태가 됐음을 나타내는 비트로 분리할 수 있습니다. 이 구조에서는 Start 버튼을 눌러도 Fault가 있으면 Run_STS가 켜지지 않습니다.
Ownership flow
HMI Start_CMD→PLC Permissive→Run Logic→Run_STS → HMI
같은 비트를 쓰면 화면이 거짓말할 수 있습니다
버튼 비트 자체를 램프에도 쓰면 사용자가 Start를 누르는 순간 HMI는 “운전 중”처럼 보일 수 있습니다. 하지만 실제 출력은 인터록 때문에 꺼져 있을 수 있습니다. 특히 네트워크 지연이나 PLC 재시작이 섞이면 이 차이가 더 커집니다.
실무 패턴
| 역할 | 예시 | 소유자 |
|---|---|---|
| 운전 요청 | Start_CMD | HMI → PLC |
| 정지 요청 | Stop_CMD | HMI → PLC |
| 운전 상태 | Run_STS | PLC → HMI |
| 고장 상태 | Fault_STS | PLC → HMI |
Momentary 버튼은 펄스/ACK도 고려합니다
버튼이 통신 문제로 오래 ON되거나 반복 처리되지 않도록 PLC에서 상승엣지로 받거나, Command와 Acknowledge를 분리하는 방식도 사용할 수 있습니다. 중요한 건 HMI가 최종 설비 상태를 “결정”하지 않게 하는 것입니다.