各位大神,做了一个项目,遇到了一个很匪夷所思的问题,具体情况是上位机采用C++进行编程,做了一个运行界面,下位机采用200SMART编程进行数据接收,上位机与下位机之间的通讯采用485转232,也就是说PLC端接的是200SMRT的串口,通过485转232模块,接到笔记本电脑上(USB口)。PLC端采用的是XMT和RCV指令,目前产生的现象是,比如说上位机端发送三个字节,代表三组数据,PLC端依次接收三个字节,我发2570和1,两个数据转成16进制为0A 0A和 01,(2570是16进制按高低位发送过来的,PLC端再进行重新换算),目前发生的现象是上位机只要发送2570到2812之间的数据,前两个字节都能收到,第三个字节(也就是1)PLC端就收不到,但是如果前两个字节不是发送这个区间2570到2812之间的数据(小于2570或者大于2812),三个字节都能正常接收。我的PLC端接收到的数据是放在VB寄存器中,很神奇,请各位大神指点。
问题补充:
测试过了,首先只有前两个字节发送2570到2812之间的数据时,第三个字节的数据就收不到,目前看来是高位字节只要是0A,那第三个字节肯定就收不到。
应该也不是存储位的问题,因为发送2570到2812这个区间以外的数据时,第三个字节的接收都是没有问题的。
地址位也查过,VB500这个地址是专门分配接收数据用的,试了一下VB700以及VB800,还是原来的现象,没有改善。
钻石用户推荐最佳答案
建议你用虚拟串口看看上位机的实际数据,如果数据正常再看看是不是VB寄存器与其他库函数的地址重复了。还有如果是modbus的数据单位是W,就不存在3个byte的说法,再检查下上位机与PLC的大小端问题
提问者对于答案的评价:
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc344413.html