采用RS485 MODBUS RTU标准通讯
,说明如下
2、数字量输入信号采集命令:
发送:01 02 00 00 00 08 79 CC (例/16进制)
数据 | 字节 | 数据说明 | 备注 |
01 | 1 | 模块地址 | 地址范围01-FE |
02 | 1 | 功能码 | 02-读取输入位 |
0000 | 2 | 输入地址(1x型) | 0000-输入位起始地址 |
0008 | 2 | 读取输入位长度 | 0008-读取8个输入位 |
79CC | 2 | CRC校验码 | 前面所有数据的CRC校验码 |
接收:01 02 01 C2 20 19(例/16进制)
数据 | 字节 | 数据说明 | 备注 |
01 | 1 | 模块地址 | 地址范围01-FE |
02 | 1 | 功能码 | 02-读取输入位 |
01 | 1 | 字节数 | 01-读取1个字节长度 |
C2 | 1 | 读取数据 | C2-读取输入位状态 |
2019 | 2 | CRC校验码 | 前面所有数据的CRC校验码 |
读取的数据“C2”,转换成2进制数为“11000010”,从左至右分别对应8路数字量输入信号DI_08-DI_01的状态,即DI_08、DI_07、DI_02有输入,其它通道无输入
项目打开后写入
Ports.Add("COM15")
With Ports("COM15")
.Close()
.Parity = Parity.None
.Handshake = Handshake.None
.StopBits = StopBits.One
.BaudRate = 9600
.DataBits = 8
.Open
End With
窗体 计时器写入
Ports("COM15").Write("01 02 00 00 00 08 79 CC ")
Dim s1 As String = Ports("COM15").ReadExisting()
Dim s2 As String
s2 = s1.Replace("g","").Trim()
e.Form.Controls("TextBox1").text = s2
e.Form.Controls("Label1").text = s2
不能读出数值,求指点