quote:以下是引用dcount107在2008-09-07 13:51:01的发言:
我手头没有模块,没法测试。
你可以做个简单的实验,用ASCII方式,只调用FB8,用PC串口调试工具监视接收内容。
如果接收到的内容是交替显示的,那就没什么问题了。
今天完全按照你的建议做,用ASCII协议,使用两个FB8,各自有自己背景数据块和源数据块。(源数据块长度固定,也就是LEN,分别为6和18,一个读,一个写)用定时器1:1方波,周期2秒。=1,触发03功能,=0,触发16功能.EN和REQ的控制和我复述你帖子一样.
用SSCOM32接收数据,这完全是理想情况。交替发送03功能代码和16功能代码,非常规律。接收的代码如下:
02 10 00 00 00 06 00 0A 00 0B 00 0C 00 0D 00 0E 00 0F
01 10 00 00 00 06
02 10 00 00 00 06 00 0A 00 0B 00 0C 00 0D 00 0E 00 0F
01 10 00 00 00 06
02 10 00 00 00 06 00 0A 00 0B 00 0C 00 0D 00 0E 00 0F
01 10 00 00 00 06
02 10 00 00 00 06 00 0A 00 0B 00 0C 00 0D 00 0E 00 0F
01 10 00 00 00 06
。。。。。。。
这里没有RCR校验码。
但是把这段程序用到MODBUS协议(拷贝了OB1和相关数据块,协议变为MODBUS-MASTER),不再发码了.TDX灯不亮了.
对03功能等偶数字节的比较好办,自己添加CRC可以正确发MODBUS代码。但是恰恰FC16比较别扭,它的代码总数是奇数。第七字节是BYTE,我曾以前尝试在DB块里自己加,但是DB把中间加的BYTE作为WORD,总数变为偶数。(当然也可能我的方法还不对)所以有朋友建议自己以ASCII协议和ASCII码按MODBUS格式发,即使不考虑校验计算和双方握手,可能也有问题。
为什么在MODBUS协议下不能两次调用FB8呢?EN和REQ的控制和我复述你帖子一样.