功能码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返回代码正常
后来发现是双线圈输出了,通讯和程序同时控制Q0.0,并被程序刷新了,所以Q0.0一直点不亮,这里谢谢大家!
我的目的是程序和通讯在不同条件下去控制Q0.0
wb210xa的解答如下:
正如楼上所述,楼主的原因出现在对同一Q0.0线圈出现重复赋值现象。
1)对于PLC程序来说,由于I0.0直接赋值给Q0.0,而PLC扫描时间很短,同时不断的执行。而上位计算机发送时只是一瞬间赋值为1,赋值完成后很快就被PLC程序刷新成0了,因此,楼主只能看到0,而不是楼主希望的1;
2)楼主如果希望看到由程序和上位下发命令的不同变化,其实很简单,找个地址如I0.1或其他任何地址作为程序赋值和上位赋值的切换开关。当该开关为0时,程序赋值,当开关为1时,上位赋值。修改一下PLC程序在不同情况下把相关的值输出到Q0.0,这时楼主就可以看到希望的变化了。
楼主通过计算机发送01 0F 00 00 00 08 01 FF BE D5,modbus功能码15的请求格式是:从站地址(01) 功能码(0F) 线圈起始地址(00 00)写出数据长度(00 08) 写出数据值 (01 FF) CRC校验值(BE D5)。所以说楼主写出的数据地址为00001~00008。00001~00008对应的数据值分别是1,0,0,0,0,0,0,0。
wb210xa说的是modbus的0区是没错,可是对应到PLC的地址什么呢?
我做了实验,我的库存储区是从VB1000开始
计算机发送:01 0F 00 00 00 08 01 FF BE D5
监视PLC状态表:01(VB1001) 15(VB1002) 00(VB1003) 00(VB1004) 00(VB1005) 08(VB1006) 54(VB1007) 0D(VB1008)
监视的结果:VB1001~VB1008中是PLC的返回代码
我想要的是PLC通讯给Q输出暂存内容的地址,也就是wb210xa所说的上位赋值的PLC地址。不知道这个地址,我没法把上位赋值输出给Q。是在库存储区中还是在哪里?请朋友们帮帮忙,以前从来没有做过强制线圈,这个问题困惑我很久了,谢谢了!
最佳答案
你好,对于输出的q点,只能有一个地方控制q点输出,不要出现双线包(即大于两个地方控制q点输出)的情况发生,关于你的问题,如果你要是能明确表达具体要问什么问题,还是建议你给4008104288热线打电话,通过语言来解释会更准确和方便些的
提问者对于答案的评价:
衷心谢谢你,提了三次这种问题,你每次都回答我,再同一程序块下,不管怎么做都是双线圈,我想了一个办法,用开关去切换程序块,满足远程条件的执行远程的程序块,满足本地条件的执行本地的程序块,试验了一下,解决了,明儿打电话再问问,看看还有没有别的办法,哈哈,困扰几天的问题解决了。谢谢,谢谢!
专家置评
已阅,最佳答案正确。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc252319.html