读数据
控制字符
控制字符 | ASCII码 | 含义 |
---|---|---|
ENQ | 05H |
PC机要求通信 |
ACK | 06H |
PLC响应“了解” |
NAK | 15H |
PLC响应“不了解” |
STX | 02H |
报文开始标志 |
EXT | 03H |
报文结束标志 |
发送
命令通用格式:
STX | CMD | ADD | LEN | EXT | CHK |
---|---|---|---|---|---|
起始符 | 读命令 | 元件起始地址 | 长度 | 停止符 | 校验码 |
0x02 |
0x30 |
... |
... |
0x03 |
... |
[说明]
- CMD的
0x30
代表这是一条读取指令;- ADD是一次读取位元件或字元件的4位起始地址,高位在前,地位在后,ASCII码;
- LEN是读取的长度,2个字节,ASCII码;
- CHK是两位校验和,将CMD, ADD, LEN, EXT四项进行累加,取最低两位ASCII码。
响应
STX | DATA | EXT | CHK |
---|---|---|---|
起始符 | 数据 | 停止符 | 校验码 |
0x02 |
... |
0x03 |
... |
[说明]
- DATA为返回的数据,低位在前,高位在后;
- CHK为DATA和EXT两项的累加和取低两位ASCII码。
写数据
发送
命令通用格式:
STX | CMD | ADD | LEN | DATA | EXT | CHK |
---|---|---|---|---|---|---|
起始符 | 读命令 | 元件起始地址 | 长度 | 写入的数据 | 停止符 | 校验码 |
0x02 |
0x31 |
... |
... |
... |
0x03 |
... |
[说明]
- CMD的
0x31
代表这是一条写入指令;- DATA是待写入PLC缓冲区的数据,低位在前,高位在后,ASCII码。
- 返回数据如果为
ACK(0x06)
,表示写入成功,为NAK(0x15)
则表示失败;- 其他和读取指令基本一致。
举例
现在想读取Y1的值,已知Y1的内部地址是00A0H
,其ASCII码是30H 30H 41H 30H
,因为00A0H
只有一个字节,所以LEN = 01D = 30H 31H(ASCII)
,可以计算出CHK校验码为36H 35H(ASCII)
,因此发送的完整指令为:
02H 30H 30H 30H 41H 30H 30H 31H 03H 36H 35H
如果PLC收到读取指令后,响应指令如下:
02H 30H 32H 03H 36H 35H
则返回的数据低位在前高位在后,因此是32H 30H
程序操作流程
首先对端口进行配置,然后发送ENQ
信号给PLC请求通信,在收到PLC返回ACK
信号后,PC机可对PLC连续进行读写操作,通信结束后关闭端口。
[串口配置]
波特率:
9600 bit/s
数据位:
7
校验: 偶校验
停止位:
1
[流程图]