?功能码05是写单个线圈
功能码15是写多个线圈
手册里有句话:输出点不是被强制,用户程序可以重写由modbus的请求而写入的值
PLC做从站,计算机发送01 0F 00 00 00 08 01 FF BE D5
程序是试验程序 就用I0.0去点Q0.0,I0.0不闭合,Q0.0不输出
这时发现输出点,Q0.0灭,Q0.1~Q0.7亮。按理说应该全都亮吧
把程序改动,I0.0去点Q0.1,再发送一遍发现Q0.0亮,Q0.1灭,Q0.2~Q0.7亮
计算机发送01 0F 00 00 00 08 01 01 CRC码,程序还是I0.0去点Q0.0,依旧点不亮Q0.0,PLC返回代码正常
怎么去重写modbus请求呢?比如怎么选择性去输出Q0.0?
问题补充:
谢谢半瓶醋,dyhhh,wb210xa
wb210xa所说:如果希望看到由程序和上位下发命令的不同变化,其实很简单,找个地址如I0.1或其他任何地址作为程序赋值和上位赋值的切换开关。当该开关为0时,程序赋值,当开关为1时,上位赋值。
因为我用的是MODBUS指令库,库程序上锁啊,我不知道上位赋值在哪,该怎么处理?能详细指点下吗?谢谢各位了
最佳答案
正如楼上所述,楼主的原因出现在对同一Q0.0线圈出现重复赋值现象。
1)对于PLC程序来说,由于I0.0直接赋值给Q0.0,而PLC扫描时间很短,同时不断的执行。而上位计算机发送时只是一瞬间赋值为1,赋值完成后很快就被PLC程序刷新成0了,因此,楼主只能看到0,而不是楼主希望的1;
2)楼主如果希望看到由程序和上位下发命令的不同变化,其实很简单,找个地址如I0.1或其他任何地址作为程序赋值和上位赋值的切换开关。当该开关为0时,程序赋值,当开关为1时,上位赋值。修改一下PLC程序在不同情况下把相关的值输出到Q0.0,这时楼主就可以看到希望的变化了。
提问者对于答案的评价:
因为我用的是MODBUS指令库,我不知道上位赋值在哪,地址在哪?能详细指点下吗?
专家置评
已阅,最佳答案正确。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc252407.html