登录
首页 PLC论坛 西门子SIEMENS
回帖 发帖
正文

主题:救助!!PLC在用ModBus协议时如何让Q1.0置位?

点击:2290 回复:14

用的西门子PLC200SMART,用的ModBus从站协议,
18-04-12 15:50
用串口助手发送01 0F 00 00 00 08 01 01 3F 55可以让Q0.0置位,但是发什么指令能让Q1.0置位啊!!!急急急!!!
其中:
01:从站地址,指的就是PLC站地址
0F:功能码,用来写多路位变量的功能码
00:预写的寄存器起始地址高8位
00:预写的寄存器起始地址低8位
00:预写的寄存器个数的高8位
08:预写的寄存器个数的低8位
01:预写寄存器数据的字节计数,8个位变量组成一个字节,所以为01
01:预写的寄存器数据内容,最低位为1,即就是给Q0.0置位
3F:CRC校验的低8位
55:CRC校验的高8位
上述,如果只是对一个Q区的位进行置位、复位操作的话,也可以用05功能码,命令如下:
01 05 00 00 FF 00 8C 3A
解释如下:
01:地址码
05:功能码
00 00:寄存器地址
FF:对位变量置位的数据内容,如果复位的话则为00
00:位变量的原状态
8C 3A:CRC校验
多余说一句:
如果要对多路Q区执行写操作的话,则寄存器起始地址必须为Q0.0、Q1.0、Q2.0等开始,寄存器个数必须是8的整倍数!
18-04-12 15:51
你是在求助还是在科普知识啊,哈哈哈。
解释如下:
01:地址码
05:功能码
00 00:寄存器地址
FF:对位变量置位的数据内容,如果复位的话则为00(这个地方的数据可以单独操作每一个输出点,01,02,04,08,10,20,40,80对应8个输出点)
00:位变量的原状态(这个地方任然是数据位,不是原状态,讲道理我感觉你这个FF和00写反了,不过你已经很不错了,加油)
8C 3A:CRC校验
多余说一句:
如果要对多路Q区执行写操作的话,则寄存器起始地址必须为Q0.0、Q1.0、Q2.0等开始,寄存器个数必须是8的整倍数!
18-04-12 16:22
不是,可能我没有给你说清楚,Q0的所有位我都弄好了,就是到了Q1.0就不行了,可能我的地址码寄存器不正确,但是又不知道问题出在哪儿
18-04-12 16:38

引用 2829065211 在 2018/4/12 16:38:18 发言【内容省略】

把寄存器地址换0001试试,注意校验算对了
最后修改:2018/4/12 16:55:46
18-04-12 16:54

引用 121111115 在 2018/4/12 16:54:45 发言【内容省略】

如果不行就把地址寄存器改回去,把FF00改成FFFF试试,注意校验别算错
18-04-12 16:58
加Q聊吧,你的多少,我的648425145,论坛里面说不清清楚
18-04-12 17:04
你要自己生成通讯数据吗?这个需要好好学学,不是简单了解就可以的。一般plc的modbus指令是对原生通讯数据的二次封装,用户只需要知道对什么地址数据进行什么操作就可以了,指令会自动转换为所需通讯数据。
如果你要实验,问题的关键还不是这些,而是如何生成检验码。
18-04-12 17:39
你要对DQ进行操作,dq在modbus rtu协议里不叫寄存器,应该是线圈。05号功能是对单个线圈操作,如果需要一次对多个操作应该是15号功能。
18-04-12 17:46

引用 121111115 在 2018/4/12 16:54:45 发言【内容省略】

楼主问的是Q1.0的在Modbus RTU中的实际地址!
你回答的0001是Q0.1的在Modbus RTU中的实际地址
所以,回答错误!
18-04-13 17:41

上一页下一页

工控新闻

更多新闻资讯