文章目录
- 背景说明
- 通讯帧
- 通讯数据地址
- 16进制数据元和ASCII的转换
- 永宏通讯协议举例
- 命令码40(PLC概略系统状态读取)
- 命令码41(PLC的RUN/STOP控制)
- 命令码42(单一个单点运作控制)
- 命令码43(多个连续单点的抑/致能状态读取)
- 命令码44(多个连续单点状态读取)
- 命令码45(多个连续单点状态写入)
- 命令码46(多个连续缓存器数据读取)
- 命令码47(PLC的RUN/STOP控制)
- 命令码48(多个任意单点状态或缓存器数据混合读取)
- 命令码49(多个任意单点状态或缓存器数据混合写入)
- 命令码4E(测试回转 loop back)
- 命令码53(PLC详细系统状态读取)
背景说明
该协议是根据永宏FBs-PLC型号进行测试验证的。参考手册名称是《永宏使用手册Ⅱ进阶应用篇.pdf》,里面有详细的PLC通讯协议介绍,以及通讯案例。下文的介绍大部分都是从手册中截取出来的,仅作学习记录。
通讯帧
通讯均采用ASC码,校验方式采用和校验,现在发现最大帧长521
请求帧格式: | 报文开始 | PLC站号 | 命令字 | 地址长度(有些无) | 地址(有些无) | 数据(有些无) | 和校验(两位) | 报文结束 |
STX(02H) | SLAVE(两位) | CMD(两位) | LEN(两位) | ADDRESS(四位) | DATA (2*LEN) | SUM | EXT(03H) | |
例子 | STX, | SLAVE, | CMD, | LEN, | ADDRESS, | SUM, | ETX, | |
02H, | 30H, 31H, | 34H, 34H, | 30H, 32H, | 30H, 30H, 35H, 30H | 34H, 41H, | 03H | ||
指令解释如下: | ||||||||
STX, | SLAVE | "44" | "02" | "0X0050" | "SUM" | "ETX" | ||
报文开始 | PLC站地址 | 读命令 | 02H字字节数据 | 地址0x0050H处 | 累加方式和校验 | 报文结束 | ||
其中 SUM=(STX+SLAVE+CMD......+ADDRESS) =(02H + 30H + 31H + 34H + 34H + 30H + 32H + 30H + 30H + 35H + 30H)= 4Ah 累加和超过两位取低位,转成ascii码,分SUM(upper),SUM(lower)二次传送 |
通讯命令字含义: | |||
分类 | 命令字 | ||
命令 | HEX | 命令解释 | |
基本命令 | STX | 02H | 报文开始 |
ETX | 03H | 报文结束 | |
ENQ | 05H | 通信请求 | |
ACK | 0H | PLC正确响应 | |
NAK | 15H | PLC错误响应 | |
基本命令字 | 40 | 34H,30H | PLC概略系统状态读取 |
41 | 34H,31H | PLC的RUN/Stop控制 | |
42 | 34H,32H | 单一个单点的操作控制 | |
43 | 34H,33H | 连续多个单点的抑\致能状态读取 | |
44 | 34H,34H | 连续多个单点的状态读取 | |
45 | 34H,35H | 连续多个单点的状态写入 | |
46 | 34H,36H | 连续多个缓存器的数据读取 | |
47 | 34H,37H | 连续多个缓存器的数据写入 | |
48 | 34H,38H | 任意单点/缓存器混合状态/数据读取 | |
49 | 34H,39H | 任意单点/缓存器混合状态/数据写入 | |
4E | 34H,45H | 测试回转 | |
53 | 35H,33H | PLC详细系统参数状态读取 |
通讯数据地址
16进制数据元和ASCII的转换
A到Z分别是65到90,16进制则是0x41到0x5A.
地址1 | 映射通讯地址 | 地址2 | 映射通讯地址 |
X0000 | 58H 30H 30H 30H 30H | X9999 | 58H 39H 39H 39H 39H |
Y0000 | 59H 30H 30H 30H 30H | Y9999 | 59H 39H 39H 39H 39H |
M0000 | 4DH 30H 30H 30H 30H | M9999 | 4DH 39H 39H 39H 39H |
S0000 | 53H 30H 30H 30H 30H | S9999 | 53H 39H 39H 39H 39H |
T0000 | 54H 30H 30H 30H 30H | T9999 | 54H 39H 39H 39H 39H |
C0000 | 43H 30H 30H 30H 30H | C9999 | 43H 39H 39H 39H 39H |
WX0000 | 57H 58H 30H 30H 30H 30H | WX9984 | 57H 58H 39H 39H 38H 34H |
WY0000 | 57H 59H 30H 30H 30H 30H | WY9984 | 57H 59H 39H 39H 38H 34H |
WM0000 | 57H 4DH 30H 30H 30H 30H | WM9984 | 57H 4DH 39H 39H 38H 34H |
WS0000 | 57H 53H 30H 30H 30H 30H | WS9984 | 57H 53H 39H 39H 38H 34H |
WT0000 | 57H 54H 30H 30H 30H 30H | WT9984 | 57H 54H 39H 39H 38H 34H |
WC0000 | 57H 43H 30H 30H 30H 30H | WC9984 | 57H 43H 39H 39H 38H 34H |
RT0000 | 52H 54H 30H 30H 30H 30H | RT9999 | 52H 54H 39H 39H 39H 39H |
RC0000 | 52H 43H 30H 30H 30H 30H | RC9999 | 52H 43H 39H 39H 39H 39H |
R00000 | 52H 30H 30H 30H 30H 30H | R65535 | 52H 36H 35H 35H 33H 35H |
D00000 | 44H 30H 30H 30H 30H 30H | D65535 | 44H 36H 35H 35H 33H 35H |
F00000 | 46H 30H 30H 30H 30H 30H | F65535 | 46H 36H 35H 35H 33H 35H |
永宏通讯协议举例
命令码40(PLC概略系统状态读取)
1 格式:
2 范例:
命令码41(PLC的RUN/STOP控制)
1 格式
2 范例
命令码42(单一个单点运作控制)
1 格式
2 范例
命令码43(多个连续单点的抑/致能状态读取)
1 格式
2 范例
命令码44(多个连续单点状态读取)
1 格式
2 范例
命令码45(多个连续单点状态写入)
1 格式
2 范例
命令码46(多个连续缓存器数据读取)
1 格式
2 范例
命令码47(PLC的RUN/STOP控制)
1 格式
2 范例
命令码48(多个任意单点状态或缓存器数据混合读取)
1 格式
2 范例
命令码49(多个任意单点状态或缓存器数据混合写入)
1 格式
2 范例
命令码4E(测试回转 loop back)
1 格式
2 范例
命令码53(PLC详细系统状态读取)
1 格式
2 范例