新聞中心
PRESS CENTER本章主要實現(xiàn)一個流程:EG8200采集西門子S7-200smart的數(shù)據(jù),并將數(shù)據(jù)存儲在Modbus寄存器中,等待外部主機通過Modbus TCP協(xié)議來讀取。
要采集的PLC的IP及端口:
PLC | S7-200smart | ||
IP | 192.168.0.34/102 | ||
地址 | 數(shù)據(jù)類型 | 屬性 | 名稱 |
I0.0 | Boolean | 只讀 | bitSignal1 |
I0.1 | Boolean | 只讀 | itSignal2 |
I0.2 | Boolean | 只讀 | itSignal3 |
I0.3 | Boolean | 只讀 | itSignal4 |
I0.4 | Boolean | 只讀 | itSignal5 |
I0.5 | Boolean | 只讀 | itSignal6 |
I0.6 | Boolean | 只讀 | itSignal7 |
I0.7 | Boolean | 只讀 | itSignal8 |
VD20 | Float | 只讀 | floatSignal1 |
VD24 | Float | 只讀 | floatSignal2 |
VD28 | Float | 只讀 | floatSignal3 |
VD32 | Float | 只讀 | floatSignal4 |
VW36 | Usint16 | 只讀 | uintSignal1 |
VW38 | Usint16 | 只讀 | uintSignal2 |
VW40 | Usint16 | 只讀 | uintSignal3 |
VW42 | Usint16 | 只讀 | uintSignal4 |
在制作流程時,基礎(chǔ)的邏輯是根據(jù)功能實現(xiàn)來制作流程。該需求經(jīng)過分析可以得出,主要分為PLC數(shù)據(jù)讀取與存儲、Modbus TCP通信兩個部分。
1.通過西門子S7協(xié)議讀取PLC的數(shù)據(jù),得到的數(shù)據(jù)存儲在內(nèi)存中(西門子節(jié)點)
2.將數(shù)據(jù)進行格式化(函數(shù)節(jié)點)
3.將格式化后的數(shù)據(jù)存儲到寄存器中(Modbus Server節(jié)點)
4.外部主機連接主動讀取
1.采集PLC數(shù)據(jù)
從節(jié)點庫拖入一個S7讀數(shù)據(jù)節(jié)點,以及一個調(diào)試節(jié)點,調(diào)試節(jié)點用于查看讀取到的PLC的數(shù)據(jù),方便定位問題:
雙擊西門子節(jié)點,根據(jù)需求概述的內(nèi)容填寫對應(yīng)的設(shè)置參數(shù),如下圖所示:
如果是連續(xù)地址,可配置起始地址并填寫讀取長度即可
IP:PLC的IP 端口:102(S7協(xié)議通信默認端口102) 采集周期:1000ms(默認2000ms,可自定義) 超時周期:2000ms(默認2000ms,可自定義) 數(shù)據(jù)點配置(根據(jù)幫助文檔可以找到對應(yīng)關(guān)系) V0.0 V0.6 V1.6 V2.5 I0.0 I0.1 VD4 VD8 VD12 VD16 VD20 VD24 VD28 VD32 VW36 VW38 VW40 VW42 如果是連續(xù)地址,可配置起始地址并填寫讀取長度即可 |
如果設(shè)置正確,調(diào)試窗口會有日志打印,顯示的是讀取到的數(shù)據(jù)內(nèi)容:
有的時候PLC數(shù)據(jù)點比較多,手動依次錄入比較繁瑣。節(jié)點支持數(shù)據(jù)點的導(dǎo)入導(dǎo)出或者參數(shù)傳遞的方式來讀?。?/p>
本例程用到的傳參代碼如下:
msg.payload = [ { func: "ReadBoolArray", body: { name: "", address: "I0", length: 8 } }, { func: "ReadFloatArray", body: { name: "", address: "VD20", length: 4 } }, { func: "ReadUInt16Array", body: { name: "", address: "VW36", length: 4 } } ] return msg; |
2.數(shù)據(jù)進行格式化
使用函數(shù)節(jié)點將PLC數(shù)據(jù)處理成對應(yīng)格式:
數(shù)據(jù)格式化參考代碼如下:
var discretes = [] var holdings = [] var data = msg.payload discretes = data.I0 holdings[0] = data.VD20[0] holdings[2] = data.VD20[1] holdings[4] = data.VD20[2] holdings[6] = data.VD20[3] holdings[8] = data.VW36[0] holdings[9] = data.VW36[1] holdings[10] = data.VW36[2] holdings[11] = data.VW36[3] msg.discretes = discretes msg.holdings = holdings return msg; |
3.存儲到Modbus寄存器
使用Modbus服務(wù)節(jié)點,將格式化的數(shù)據(jù)傳入,并配置存儲方式:
使用TCP IN節(jié)點和TCP OUT節(jié)點搭配實現(xiàn)TCP 服務(wù)端:
使用上位機(Modbus Poll軟件)通過Modbus TCP來讀取映射的數(shù)據(jù):
源碼
[{"id":"ac557854c44a5144","type":"Siemens","z":"a73a8f4565433249","name":"","protocol":"iplink_SiemensS7","IPAddress":"192.168.0.34","DestPort":"102","IPLinkTimeout":"2000","IPCommTimeout":"2000","Spname":"COM10","Baudrate":"9600","Databits":"8","Stopbit":"1","Paritybit":"0","RTSEnable":false,"SpLinktimeout":"2000","SpIntertimeout":"-1","workMode":"read","readMode":"trigger","readCyc":"2000","vartable":[],"SiemensS7Model":"5","SiemensS7ConnectionType":"1","SiemensS7Rack":"0","SiemensS7Slot":"0","SiemensS7LocalTSAP":"0","SiemensS7DestTSAP":"0","SiemensPPIStation":"2","stringvar":[],"customName":"Siemens:S7-S200Smart","x":670,"y":1080,"wires":[["416b9e28dcbaffa9"]]},{"id":"06b785ae918b8f6a","type":"debug","z":"a73a8f4565433249","name":"調(diào)試 278","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1260,"y":1140,"wires":[]},{"id":"db188f4ed1966c88","type":"function","z":"a73a8f4565433249","name":"函數(shù)計算 31","func":"msg.payload = [\n{ func: \"ReadBoolArray\", body: { name: \"\", address: \"I0\", length: 8 } },\n{ func: \"ReadFloatArray\", body: { name: \"\", address: \"VD20\", length: 4 } },\n{ func: \"ReadUInt16Array\", body: { name: \"\", address: \"VW36\", length: 4 } }\n]\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":430,"y":1080,"wires":[["ac557854c44a5144"]]},{"id":"425a932dfda4e617","type":"inject","z":"a73a8f4565433249","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":230,"y":1080,"wires":[["db188f4ed1966c88"]]},{"id":"416b9e28dcbaffa9","type":"function","z":"a73a8f4565433249","name":"函數(shù)計算 33","func":"var discretes = []\nvar holdings = []\nvar data = msg.payload\ndiscretes = data.I0\nholdings[0] = data.VD20[0]\nholdings[2] = data.VD20[1]\nholdings[4] = data.VD20[2]\nholdings[6] = data.VD20[3]\nholdings[8] = data.VW36[0]\nholdings[9] = data.VW36[1]\nholdings[10] = data.VW36[2]\nholdings[11] = data.VW36[3]\nmsg.discretes = discretes\nmsg.holdings = holdings\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":870,"y":1080,"wires":[["539601edce2e5927"]]},{"id":"539601edce2e5927","type":"modbusServer","z":"a73a8f4565433249","name":"","uid":1,"model":"2","coils":100,"discretes":100,"holdings":100,"input":100,"columns":[{"Type":"3","Address":"0","Method":"7"},{"Type":"3","Address":"2","Method":"7"},{"Type":"3","Address":"4","Method":"7"},{"Type":"3","Address":"6","Method":"7"}],"x":1100,"y":1080,"wires":[["815f45a3a40a372a"],["06b785ae918b8f6a"]]},{"id":"fbadcb99655853f9","type":"tcp in","z":"a73a8f4565433249","name":"","server":"server","host":"","port":"502","datamode":"stream","datatype":"buffer","newline":"","topic":"","trim":false,"base64":false,"tls":"","x":870,"y":1040,"wires":[["539601edce2e5927"]]},{"id":"815f45a3a40a372a","type":"tcp out","z":"a73a8f4565433249","name":"","host":"","port":"","beserver":"reply","base64":false,"end":false,"tls":"","x":1270,"y":1060,"wires":[]}]
西門子S7協(xié)議與Modbus協(xié)議之間的轉(zhuǎn)換,是工業(yè)自動化領(lǐng)域常見的需求之一。通過硬件縱橫智控公司的產(chǎn)品EG8200可以確保設(shè)備之間的數(shù)據(jù)通信順暢。在實施過程中,合理配置地址映射和通信參數(shù),能有效提升系統(tǒng)的可靠性和實時性,為工業(yè)自動化系統(tǒng)的優(yōu)化和擴展提供堅實的基礎(chǔ)。