发布于 2008-09-05 08:40:56
0楼
今天又模拟了多站轮询的功能,包括FC03,FC16读写功能。
思路和调试结果如下,供大家参考和并指教,结果不是很理想。
在程序中调度FB8中LEN和DBB_NO,将四个子站的读、写八条报文放在一个DB42里面,按顺序1#站读,1#写,2#读。。。,1s定时发送一条报文。
运行,在FB8中,在线看LEN和DBB_NO变化,长度和地址都和DB42中一致,但我用sscom32查看,报文却不是按照顺序调度的,有时候全是写,有时候全是读。(结果可惜被我删了)后来我只做了一个站的读写,结果如下。
01 03 00 00 00 0A C5 CD 01 03 00 00 00 0A C5 CD
01 03 00 00 00 0A C5 CD 01 03 00 00 00 0A C5 CD
01 03 00 00 00 0A C5 CD 01 03 00 00 00 0A C5 CD
01 03 00 00 00 0A C5 CD 01 03 00 00 00 0A C5 CD
01 03 00 00 00 0A C5 CD 01 03 00 00 00 0A C5 CD
01 03 00 00 00 0A C5 CD 01 03 00 00 00 0A C5 CD
01 10 00 00 00 02 04 00 01 00 02 23 AE
01 10 00 00 00 02 04 00 01 00 02 23 AE
01 10 00 00 00 02 04 00 01 00 02 23 AE
01 10 00 00 00 02 04 00 01 00 02 23 AE
01 10 00 00 00 02 04 00 01 00 02 23 AE
后面就全是发的写了,我不知为什么这样。
REQ触发我用的clock meomry M100.5 1s,占空比1:1,方波。不知道是不是这个问题。那1S定时发报文,难道脉冲的宽度不能太大(现在500ms)?
同时用M100.5触发计数,计数值存于MW0中,我这样想的,mw0=1发第一条报文
MW=2发第二条报文....MW=8发第八条报文。但是我监看到的报文发送顺序不是我安排调度发送报文的顺序。
试了多种方法,还是不行。我想肯定是报文发送有问题,但问题在哪,我想不通,请教大家了!!!
最近被MODBUS搞的有点烦