現場有一套S7 1500 PLC,與三套quantum PLC有一定量的數據需要交換。由於S7 1500與quantum PLC均支持MobusTCP協議,於是考慮通過此協議來實現功能。由於以前沒有做過這兩個品牌PLC的通訊,心里也不是很有底,與施工方日昊公司許工合作,還得到了熱心網友小皮無私的幫助,這里一並表示感謝。把要點記錄如下。
一 設置S7 1500 CPU的IP地址
現場三套quantum PLC地址分別為10.10.10.2,10.10.10.3,10.10.10.4,新加入的S7 1500需要處於同一網段,將其設置為10.10.10.100.
二 啟用S7 1500 CPU的時鍾寄存器
記下用於通訊的接口編號64
三 quantum一側通訊處理
在三套quantum PLC程序上,將傳遞給S7 1500PLC的ebool變量通過bit_to_word打包成一個字,確保打包后的字寄存器地址連續,留有一定余量便於今后擴展。將S7 1500傳遞來的變量使用word_to_bit解包。
四 S7 1500新建一個共享數據塊,設置通訊參數。DB塊內新建6個TCON_IP_V4數據類型,用於和三套quantum PLC讀和寫數據。
Conn_PLC2變量用於讀取二期quantum PLC數據,詳細結構如下
參數interfaceid為前面看到的CPU通訊接口的硬件接口編號。
ID為任務編號,每一個讀寫任務ID編號不同,這里是1。
RemoteAddress為quantumPLC的IP地址,這里是10.10.10.2
remotePort是modbustcp的端口號,這里是標准的502
conn_PLC3變量用於讀取三期quantum PLC數據,詳細如下
參數interfaceid為前面看到的CPU通訊接口的硬件接口編號。
ID為任務編號,每一個讀寫任務ID編號不同,這里是2。
RemoteAddress為quantumPLC的IP地址,這里是10.10.10.3
remotePort是modbustcp的端口號,這里是標准的502
conn_PLC4變量用於讀取四期quantum PLC數據,詳細結構如下
參數interfaceid為前面看到的CPU通訊接口的硬件接口編號。
ID為任務編號,每一個讀寫任務ID編號不同,這里是3。
RemoteAddress為quantumPLC的IP地址,這里是10.10.10.4
remotePort是modbustcp的端口號,這里是標准的502
變量conn_PLC2_2用於向二期quantum PLC寫數據,詳細如下
參數interfaceid為前面看到的CPU通訊接口的硬件接口編號。
ID為任務編號,每一個讀寫任務ID編號不同,這里是4。
RemoteAddress為quantumPLC的IP地址,這里是10.10.10.2
remotePort是modbustcp的端口號,這里是標准的502
變量conn_PLC3_2用於向三期quantum PLC寫數據,詳細如下
參數interfaceid為前面看到的CPU通訊接口的硬件接口編號。
ID為任務編號,每一個讀寫任務ID編號不同,這里是5。
RemoteAddress為quantumPLC的IP地址,這里是10.10.10.3
remotePort是modbustcp的端口號,這里是標准的502
變量conn_PLC3_2用於向四期quantum PLC寫數據,詳細如下
參數interfaceid為前面看到的CPU通訊接口的硬件接口編號。
ID為任務編號,每一個讀寫任務ID編號不同,這里是6。
RemoteAddress為quantumPLC的IP地址,這里是10.10.10.4
remotePort是modbustcp的端口號,這里是標准的502
至此,通訊參數定義完畢。
五 定義一個存儲通訊狀態的共享數據塊
六 由於通訊時需要地址連續,定義3個共享數據塊,與三套quantum PLC數據傳遞,取消“優化的快訪問”選項。
與二期quantumPLC交換數據的共享數據塊如下
與三期、四期quantum PLC數據交換的共享數據塊就不截圖了,大同小異。數據塊里面預留了很多位用於今后擴展
七 將傳遞給quantum PLC的變量賦值到前面定義的DB塊里面,這樣就使變量處在連續的地址范圍了,方法就不介紹了。
八 新建一個FC,用於和二期quantumPLC通訊,1500PLC為主,quantum PLC為從。
程序段1是讀取二期quantum PLC數據,使用了MB_Client功能塊
輸入端:
REQ是通訊請求,需要上升沿來觸發,這里使用了系統時鍾的脈沖M0.4,也可以改變請求的頻率。
DISCONNECT是中斷連接,這里使用了DB45.DBX24.3,DB45就是前面建立的通訊狀態的共享數據塊。作用是通訊出現錯誤就斷開連接,讓錯誤復位。
MB_MODE是通訊模式,這里寫0,標識讀取對方數據,如果是1,就是寫數據給對方。
MB_DATA_ADDR表示對方的寄存器起始地址,這里就是從quantumPPLC什么寄存器地址開始讀取數據,這里是41216表示從quantum PLC的%MW1216地址開始讀數。
MB_DATA_LEN,這里表示讀取寄存器長度,這里是3表示3個字的長度,如果前面寫的是1****,那么長度就是多少個bit,以此類推。這里就是前面建立的通訊參數共享數據塊的成員。
MB_DATA_PTR表示讀取過來的數據存放在什么地方,這里是P#DB34.DBX0.0 WORD 3,表示存放在DB34 DBX0.0開始3個字的長度,長度和前面MB_DATA_LEN對應。
CONNECT
表示連接參數,主要是1500PLC需要知道對方的IP地址、端口號,任務ID編號,用於通訊的硬件接口編號。這里是前面建立的通訊參數共享數據塊成員。
輸出端:
DONE表示本次通訊結束
BUSY表示本次通訊繁忙
ERROR表示本次通訊出錯
STATUS表示本次通訊狀態,這是一個16禁止數據,可以查詢幫助文件看具體含義。
程序段1讀取數據介紹完畢。
程序段2用於寫數據給對方
寫數據給對方同樣使用MB_CLIENT功能塊。
輸入端
REQ為通訊請求,由於和一個PLC同時只能做一個通訊,因此不能同時讀寫二期quantum PLC,這是用前面程序段1讀數據結束標志位,或者程序段1中讀數據出錯標志位來觸發寫數據的請求。
DISCONNECT參數表示斷開連接,一樣的使用寫數據通訊出錯來中斷連接。
MB_MODE表示通訊模式,這里是1,表示寫數據給對方。
MB_DATA_ADDR表示對方寄存器地址,這里是41206表示寫數據到二期quantum PLC的%MW1206地址。
MB_DATA_LEN表示寫數據的長度,這里是3,表示寫3個字長度數據給對方。如果前面的MB_DATA_ADDR是1****這樣的格式,那么這里的3就表示3個bit
MB_DATA_PTR表示1500PLC的什么地址的數據傳輸過去,這里是p#DB。DBX6.0 WORD 3。由於與二期quantum PLC通訊的S7 1500PLC數據存放在一個DB塊中,前面1500讀數據長度是3個word,因此寫數據給quantum PLC就是DB34.DBX6.0開始。
CONNECT表示連接參數,主要是1500PLC需要知道對方的IP地址、端口號,任務ID編號,用於通訊的硬件接口編號。這里是前面建立的通訊參數共享數據塊成員。
輸出端:
DONE表示本次通訊結束
BUSY表示本次通訊繁忙
ERROR表示本次通訊出錯
STATUS表示本次通訊狀態,這是一個16禁止數據,可以查詢幫助文件看具體含義。
成都段3和程序段4用於判斷是否有通訊故障,有故障就發出斷開連接的脈沖,將故障復位。
程序段5和程序段6設計了一個計數器,用於通訊失敗的技術,這是為了觀察通訊是否穩定而做的
程序段7是用於判斷通訊是否中斷。在現場調試時做過測試,拔掉網線,只有MB_CLIENT的背景數據塊的ACTIVE響應及時,其他參數都會延時一段時間,應該是為了再做嘗試連接吧
到這里,與二期quantumPLC的通訊連接讀寫數據就介紹完了。
與三期四期quantum plc通訊讀寫數據的方法類似。需要說明的是,與三期、四期PLC通訊,並不需要等到其他PLC通訊結束才能做,也就是說與各個PLC通訊可以同時進行,只是同一個PLC通訊,讀和寫分開進行。我沒有測試與更多PLC通訊的效果,估計會有通訊數量的上限,但本項目通訊量相對較小,還是比較好弄的。
quantum PLC里面的編程較為簡單,就是bit_to_word和word_to_bit使用。暫時沒有用到的寄存器,只定義了變量,沒在quantum PLC程序引用的話,1500這邊通訊也會有問題,需要引用一下,可以在一個空的bit_to_word和word_to_bit輸出輸入端賦值一下即可。