應項目需求需要使用上位機軟件和三菱的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 碼 而是 A = 0x10 ,然後加 0x31 (爲什麼是加0x31而不是0x30 我也不清楚)
校驗值計算: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