用1200与欧姆龙的E5CC温控仪通讯,读取3组,每组1个数据,写入1组5个数据。
新建一个项目,只编写了MODBUS RTU通讯相关程序,轮询通讯一切正常。
在原有的一个项目里面(无MODBUS通讯),新建了一个FC块,然后在这个FC块里面进行modbus RTU通讯(通讯内容同上),通讯失败,无法读取写入任何数据。
检查发现,轮询通讯的每一次Modbus_Master通讯, done都显示完成,但实际无通讯。实时监控该FC块,发现每个读取的Modbus_Master指令,mode设置为0,但监控到的mode为1。此时同时用串口工具监控通讯,发现PLC确实只发出了写入的指令。
将FC块中轮询通讯的唯一一个写入数据的Modbus_Master指令,改成读取 (mode从1改成0),其他3个读取的Modbus_Master指令不变,此时再运行PLC,通讯正常。
将该Modbus_Master指令改回写入(mode改回0),但实际不参与轮询,即 3个读取的Modbus_Master指令自轮询,这段写入的Modbus_Master指令的REQ始终为false,此时运行PLC,通讯依然失败,监控FC块,发现每个读取的Modbus_Master指令的mode在监控下确实又变成1了。
按照官方教程的轮询,每个参与轮询的Modbus_Master指令需要使用相同的背景块,为什么会出现这种参数互相干涉,甚至不起作用的指令依然干涉了其他指令的情况?同时在一个新建的项目中又完全不会有这个问题?
而且我为了排除原有的项目的其他干扰,在OB1中删除了所有引用的其他块,只引用了该通讯的FC块,依然出现了这个问题。
请问谁是否有碰到过这种情况,是怎么解决的?
谢谢。