這幾天測試西門子200PLC和組態王自由口方式進行通信。
因為(wei) 以前沒做過這方麵的通信,組態王也隻熟悉一點,所以網上找點資料看看。
原以為(wei) 很簡單的通信,感覺就是觸摸屏和PLC通信那樣,簡單配置一下參數:地址、波特率等。
現在看來還真是差不多,隻是要看的資料很多,結合起來看,弄清楚兩(liang) 者之間的通信協議。
明白之後就很簡單。
整理下測試程序和大家分享下,歡迎指導,學習(xi) ,分享。
(1)下圖是西門子200PLC編程軟件STEP7的通信端口設置:和組態王裏麵設置要一致;
(2)下圖是PLC編程 STEP7,需要下載亞(ya) 控的一個(ge) 初始化程序。
測試程序如下:
測試地址如下:
(3)下圖是組態王KingView操作:
和PLC中的一致:
數據詞典的操作
定義(yi) 變量:
測試畫麵製作:
(4)下圖是兩(liang) 者通信的截圖:
(5)總結
組態王和200PLC之間協議
選取其中一點,這個(ge) 沒怎麽(me) 看懂,歡迎大家指導。
上位機發送讀指令:
BYTE1: PLC地址 (1~255)
BYTE2: 0x00 (讀指令代碼)
BYTE3: 寄存器類型(0-V, 1-Q, 2-I)
BYTE4-5: 起始偏移地址(0-9999)
BYTE6: 數據個(ge) 數(1~32 n)
BYTE7: 數據類型(1,2,4 m)
BYTE8-11: 保留
BYTE12: 校驗字節
PLC應答:
讀成功時:
BYTE1: PLC地址 (1~255)
BYTE2: 0x00 (讀指令代碼)
BYTE3: 寄存器類型(0-V, 1-Q, 2-I)
BYTE4-5: 起始偏移地址(0-9999)
BYTE6: 數據個(ge) 數(1~32 n)
BYTE7: 數據類型(1,2,4 m)
BYTE8-n*m+8: 數據
BYTEn*m+9: 校驗字節
MAIN
LD SM0.1
CALL SBR_0:SBR0 //初始化子程序
LD SM0.7
= SM30.0
SBR_0:初始化子程序SUBROUTINE COMMENTS Press F1 for help and example program
LD SM0.0
MOVW +2, VW8 //PLC自由口地址,此處每台機器需設不同的地址
LD SM0.0
MOVB 9, SMB30 //通訊參數,波特率9600,自由口通訊
MOVD &VB100, VD40// VB100:接收緩衝(chong) 區的首字節
MOVW +10, VW54// VW54:存放發送數據按字節異或校驗的次數,10次校驗完已//接收了11個(ge) 字節了,最後一個(ge) 12號字節是校驗。
MOVB 12, VB150
MOVB VB9, VB151// VB151賦以本機地址
MOVD &VB151, VD60// 發送首地址VD60賦以地址
MOVB 6, SMB34
ATCH INT_0:INT0, 10
ATCH INT_1:INT1, 8
ENI
INT_0://用作初始化幾個(ge) 參數。每次接受新一幀數據前調用,完了就進入INT_2(接受地址,//並判斷,)
LD SM0.0
DTCH 10
MOVD VD40, VD46//初始化 VD46為(wei) VD40
MOVW +10, VW44//初始化異或校驗的次數
MOVW +10, VW54//初始化異或校驗的次數
ATCH INT_2:INT2, 8 //接受中斷起用服務程序INT2
INT_1://延時轉向INT0//網絡正常時這裏應該很少調用
LD SM0.0
MOVB 5, SMB34
ATCH INT_0:INT0, 10
INT_2:接受地址,並判斷
LDB= SMB2, VB9 //地址和本機相符
MOVW VW8, AC0// AC0這時存入的是本機地址
MOVB 255, SMB34//255MS的長延時監控,如超過將做異常處理回到初始化重新再來接//收,要知道傳(chuan) 送一個(ge) 字節是毫秒級的。就是200字節左右看做異常
ATCH INT_3:INT3, 8 //起用中斷服務INT3,接受包
ATCH INT_5:INT5, 10 //起用延時監控服務INT5
CRETI
LDB= SMB2, VB9 //地址和本機不符
NOT
ATCH INT_0:INT0, 10 //返回中斷入口
ATCH INT_1:INT1, 8
INT_3://主接受服務程序,同時做異或校驗
LD SM0.0
XORW SMW1, AC0// AC0上次已存入本機地址,這次做第一次異或,記住異或的次數
MOVB SMB2, *VD46// 指針VD46這時指向VB100,即將讀寫(xie) 代碼存入VB100
INCD VD46//指針VD46指向VB101
DECW VW44//異或的次數VW44-1=10-1=9
LD SM1.0 //完成預定的接受字節數//10次異或完就接收11
//個(ge) 字節,一楨是12個(ge) 字節,第12字節是校驗位,
ATCH INT_4:INT4, 8 //起用通訊數據處理主程序//第12字節交INT4比較//處理
INT4://通訊數據處理主服務程序
LD SM0.0
BMB VB100, VB152, 6//接受報頭拷貝到發送報頭// VB100存讀寫(xie) 代碼,VB151賦以本
//機地址,VB152存讀寫(xie) 代碼
LD SM0.0
DTCH 8 //暫停響應接受中斷
INCD VD46// VD46這時指向VB111,
MOVB SMB2, *VD46//校驗位存入*VD46即VB111
XORW SMW1, AC0// AC0是前11個(ge) 字節的異或
ANDW 16#FF, AC0 //檢查異或校驗
LDN SM1.0 //異或校驗錯誤
MOVB VB100, AC0// VB100存讀寫(xie) 代碼
MOVB 16#80, AC1
ORW AC0, AC1//這步運算,如讀AC1=0X80,如寫(xie) AC1=0X81
MOVB AC1, VB152// VB152存入發送幀的BYTE2,VB151是BYTE1:本機地址
MOVB 16#1, VB158// VB158:BYTE8: 0x01(校驗錯代碼)
MOVW +10, VW54//10次異或的次數
JMP 3 //校驗錯誤,向PC返回錯誤碼
LD SM1.0 //異或正確//兩(liang) 數相同異或結果=0,很好理解
MOVW +4, VW34
ATCH INT_8:INT8, 8 //起用服務程序INT8響應接受中斷,接受包尾
LD SM0.0 //數據處理