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

主题:请问如何使上位机和PLC通过Modbus协议通讯?

点击:8101 回复:14

我在MicroWin中创建了Modubus_Init和Modbus_Slave模块,设置PLC为从站,并且设置Q0.0为1。程序下载到PLC中能够将Q0.0置为1。然后断开网线,连接PLC和上位机的COM口,我想知道怎样使上位机和PLC通讯,是要发送指令吗?这个指令和其他串口设备的指令一样吗?我发了几个指令都没有返回。望各位大侠不吝赐教,谢谢!
16-09-17 22:41
你的是S7-200还是Smart 200?是要走MODBUS RTU协议吗?这个协议是基于RS232、RS485的一种串口通信协议,有关MODBUS RTU的报文格式百度上很多的!
16-09-17 23:00
如果是想通过串口调试助手给PLC发命令的话,假设PLC从站地址为1的情况下,比如要对Q0.0进行置位的话,可以发如下命令:
01 0F 00 00 00 08 01 01 3F 55
16-09-17 23:06
如果是想通过串口调试助手给PLC发命令的话,假设PLC从站地址为1的情况下,比如要对Q0.0进行置位的话,可以发如下命令:
01 0F 00 00 00 08 01 01 3F 55
其中:
01:从站地址,指的就是PLC站地址
0F:功能码,用来写多路位变量的功能码
00:预写的寄存器起始地址高8位
00:预写的寄存器起始地址低8位
00:预写的寄存器个数的高8位
08:预写的寄存器个数的低8位
01:预写寄存器数据的字节计数,8个位变量组成一个字节,所以为01
01:预写的寄存器数据内容,最低位为1,即就是给Q0.0置位
3F:CRC校验的低8位
55:CRC校验的高8位
16-09-17 23:24
如果是想通过串口调试助手给PLC发命令的话,假设PLC从站地址为1的情况下,比如要对Q0.0进行置位的话,可以发如下命令:
01 0F 00 00 00 08 01 01 3F 55
其中:
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校验
16-09-17 23:28
如果是想通过串口调试助手给PLC发命令的话,假设PLC从站地址为1的情况下,比如要对Q0.0进行置位的话,可以发如下命令:
01 0F 00 00 00 08 01 01 3F 55
其中:
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的整倍数!
16-09-17 23:30
西门子S7-200的PLC的9针串口是RS485类型的通讯端口,而一般电脑主机里面主板提供的9针串口是RS232类型的通讯端口,两者不能直接相连,需要购买端口转换器进行转换。
16-09-18 00:21
谢谢群主的耐心解答,令我受益匪浅。表情
16-09-18 10:26
用05码不是更好!
16-09-18 10:44
版主讲的好详细!
16-09-18 11:12

上一页下一页

工控新闻

更多新闻资讯