前几年做过一次3964(R)的开发,因为不知道协议,查了很多地方都没有,只好用设备一点一点测试,pojie协议,想起来,比较痛苦。这个协议现在用的不多了,不过还是有设备用到,典型的siemens 点对点通讯模块或和利时几款plc都是这个协议,在此帖出来,供大家参考,希望能减少您开发时间。
1.3964(R)协议使用的控制字符与报文帧格式
BCC 是所有正文中的字符(包括正文中连发的DLE)和报文帧结束标志(DLE 和ETX)的“异或”运算的结果。
3964(R)报文帧格式
正文中如果有字符10H,在发送时自动重发一次。接收方在收到两个连续的10H 时自动地剔除一个。
3964(R)报文帧传输过程
2.建立发送数据的连接
发送方首先应发送控制字符STX。在“应答延迟时间(ADT)”到来之前,接收到接收方发来的控制字符DLE,表示通信链路已成功地建立。
如果通信伙伴返回NAK 或返回除DLE 和STX 之外的其他控制代码,或应答延迟时间到时没有应答,程序将再次发送STX,重试连接。若约定的重试次数到后,都没有成功建立通信链路,程序将放弃建立连接,并发送NAK 给通信伙伴。
接收方在接收到DLE、ETX 和BCC 后,根据接收到的数据计算BCC,并与通信伙伴发送过来的BCC 进行比较。如果二者相等,并且没有其他接收错误发生,接收方的CPU 将发送DLE,断开通信连接。
如果二者不等,将发送NAK,在规定的块等待时间内(4s)等待重新发送。如果在设置的重试次数内没有接收到报文,或者在块等待时间内没有进一步的尝试,将取消接收操作。
如果两台设备都请求发送。具有较低优先级的设备将暂时放弃其发送请求,向对方发送控制字符DLE。具有较高优先级的设备将以上述方式发送其数据。等到高优先级的传输结束,连接被释放,具有较低优先级的设备就可以执行其发送请求。通信的双方必须设置优先级。