方式3
请求-响应机制,1次握手
这种方式和IT系统的MQ/WEB SERVICE等消息处理机制非常类似。
如发动机上线工位,MES给PLC下发工单,过程可参考下图:
具体握手过程为:
1.
PLC在PLC_MSG写入请求数据,如工位,同时将REQUEST_SENT置位。
2.
MES扫描到REQUEST_SENT,读取PLC_MSG,然后生成工单数据,并写入MES_MSG,同时将RESPONSE_SENT置位。
3.
PLC扫描RESPONSE_SENT,读取MES_MSG并写入本地数据块,然后将REQUEST_SENT和PLC_MSG复位。
4.
MES将所有数据和控制位复位。
5.
我们可以看出,整个数据交换的过程只发生了1个来回,即1-2步,而3-4步是将消息销毁的动作。
这种方式还有一个特点,就是封装性好,同样一个接口,既可以下发工单,也可以上传过站数据,区别在于PLC_MSG/MES_MSG里存储的数据内容不一样。
方式4
请求-响应机制,2次握手
同样是发动机上线的例子,过程可参考下图:
具体握手过程为:
1.
PLC在PLC_MSG写入请求数据,如工位
PLC将REQUEST_SENT置位。
2.
MES扫描到REQUEST_SENT,读取PLC_MSG,然后发送REQUEST_RECEIVED。
3.
MES生成工单数据,并写入MES_MSG。
4.
MES将RESPONSE_SENT置位。
5.
PLC扫描RESPONSE_SENT,读取MES_MSG并写入本地数据块,然后将RESPONSE_RECEIVED置位。
6.
MES扫描RESPONSE_RECEIVED,将所有数据和控制位复位。
7.
PLC将本地数据和控制位复位。
我们可以看出,整个过程相当于进行了2次握手,其中1-3步是第1次握手,用于接收请求;4-8步是第2次握手,用于下发数据。
我们可以看出,方式4比方式3繁琐很多,但是这种方式在实际项目中用得还非常多。这是因为完整响应时间可能多达数秒,而PLC的扫描周期只有几十毫秒,中间多出的状态位可以作为状态指示缓解工人等待的焦虑,也可以作为断点方便通信调试。