应项目需求需要使用上位机软件和三菱的PLC进行通信,C# 和PLC都是零基础,
C#的学习过程略,不难,学会空间就好
下面简述和PLC通信的关键步骤:
1、串口设置:
1) 串口线(三菱的422线)
2)串口工具
波特率:9600 (PLC是固定的)
奇偶检验:偶校验 (PLC固定的)
数据位:7
停止位:1
2、通信测试
上位机:发送 0x05
PLC:回应0x06(正常) 返回0x15 说明指令无效,看看自己串口设置问题
3、获取x个点的当前状态
1)通信格式
读:
STX | CMD | x/y地址(4字节) | 读取几个字节 | EXT | 校验 | |||||
0x02 | '0'读 / '1' 写 | ‘0’ | '0' | 'A' | '0' | ‘0’ | ‘2’ | 0x03 | ‘6’ crc1 | ‘6’ crc2 |
固定值0x02 | 0x30 /0x31 | 0x30 | 0x30 | 0x41 | 0x30 | 0x30 | 0x32 | 固定值 | 0x36 | 0x36 |
注 : ‘A’ 直接 转asiic 码 放置的是字符 ‘9’-9= 0x30 ‘A’ - 0x0a = 0x31,此处要注意,运算的时候要区别对待
校验值计算:CMD+地址值+读取字节值+ext = 总和
temp = 总和&0xff
a = ((temp >> 4) & 0x0f) > 9 ? ((temp >> 4) & 0x0f) + 7 : ((temp >> 4) & 0x0f);
b = (temp & 0x0f) > 9 ? ((temp & 0x0f) + 7) : (temp & 0x0f);
crc1= (byte) ( a + 0x30);
crc2= (byte)( b + 0x30);
PLC返回:
错误返回:0x15
成功返回:
STX | 第一值 | 第二值 | EXT | 校验 | |||
0x02 | ‘3’ | '5' | '8' | '4' | 0x03 | ‘D’ crc1 | ‘7’ crc2 |
固定值0x02 | 0x33 | 0x35· | 0x38 | 0x34 | 固定值 | 0x44 | 0x37 |
第一值:
y7 | y6 | y5 | y4 | y3 | y2 | y1 | y0 |
0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 |
3 | 5 |
第二值
y17 | y16 | y15 | y14 | y13 | y12 | y11 | y10 |
1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
8 | 4 |
多字节的同理2字节的方式
写:
STX | CMD | x/y地址(4字节) | 读取几个字节 | 第一值 | 第二值 | EXT | 校验 | |||||||
0x02 | ' '1' 写 | ‘0’ | '0' | 'A'(Y地址) | '0' | ‘0’ | ‘2’ | ‘3’ | ‘5’ | ‘8’ | ‘4’ | 0x03 | ‘6’ crc1 | ‘6’ crc2 |
固定值0x02 | 0x31 | 0x30 | 0x30 | 0x41 | 0x30 | 0x30 | 0x32 | 0x33 | 0x35 | 0x38 | 0x34 | 固定值 | 0x33 | 0x42 |
第一值:
y7 | y6 | y5 | y4 | y3 | y2 | y1 | y0 |
0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 |
3 | 5 |
第二值:
y17 | y16 | y15 | y14 | y13 | y12 | y11 | y10 |
1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
8 | 4 |
写入成功返回:0x06
写入失败返回:0x15
PLC寄存器个点的对应关系:
x: 0x0080
y:0x00a0