Klien Modbus TCP untuk Simatic S7-1200 / S7-1500

Kami melanjutkan topik pemrograman protokol Modbus TCP pada pengontrol Simatic S7-1500. Terakhir kali kami berbicara tentang sisi server, hari ini kami akan menjelaskan sisi klien. Klien Modbus TCP adalah node yang menghasilkan permintaan ke server, mis. meminta data dan mengirimkan setpoint / perintah. Dalam terminologi Modbus RTU, ini adalah "master", perangkat master. Tidak seperti RTU, TCP dapat memiliki beberapa "master" (benar - klien).





Pemrograman sisi klien lebih sulit. Sementara satu panggilan blok fungsi dan satu blok data cukup untuk server, hal-hal tidak sesederhana itu dengan klien. Pertama, klien dapat berkomunikasi dengan banyak server, yang sebenarnya terjadi dalam praktik. Kedua, dapat (dan memang) lebih dari satu permintaan ke satu server - untuk membaca register masukan, membaca register penyimpanan, menulis perintah ke keluaran "gulungan", dan semua ini dengan satu "perangkat pelanggan". Ketiga, jangan lupa tentang urutan byte yang "menunjuk" dan "tumpul" dalam kata-kata dari platform perangkat keras yang berbeda, jika ada ketidakcocokan, byte harus dibalik secara independen.





Untuk alasan ini, masuk akal untuk memprogram klien dalam SCL (ST dalam terminologi IEC 61131-3) dan menggabungkan semua pemrosesan dalam blok fungsi. Agar lebih realistis, dalam contoh ini, pengontrol akan berkomunikasi dengan dua server Modbus TCP dengan beberapa permintaan untuk masing-masing.





Pertama-tama, mari buat blok fungsi ModbusClient dalam bahasa SCL dan tambahkan panggilan ke instance-nya di OB1.





Selanjutnya, di area STAT variabel blok fungsi, dua struktur TCON_IP_v4 harus ditulis. Mengapa dua? Karena kami memiliki dua koneksi ke dua server yang berbeda. Faktanya, kami memiliki dua koneksi berbeda dan masing-masing perlu dijelaskan. Seperti yang saya katakan sebelumnya, dimungkinkan untuk menggunakan koneksi yang dapat dikonfigurasi, tetapi mereka tidak digunakan dalam contoh ini.





Dua struktur dideklarasikan untuk komunikasi dengan dua server





. , . .





, InterfaceId. ( « ») . Modbus №1 , ID .





ID 64. , , .





, ID. . . «» -. « » , 1 4096. «» . . ID = 1 .





, ConnectionType — TCP UDP. 0x0B hex 11 dec. , TCP.





ActiveEstablished. «». .





RemoteAddress. IP- . 192.168.43.100.





RemotePort. , Modbus TCP . «» 502.





LocalPort. .





, .









. , ID IP . .





. MB_CLIENT .





. - .













« »





. — 0 , , -, .





REQ . REQ = TRUE, .





DISCONNECT —





MB_MODE — «» . MB_DATA_ADDR Modbus TCP. . MODE 0.





MB_DATA_ADDR Modbus TCP. 40001 — « »





MB_DATA_LEN — . — . « 40001»





MB_DATA_PTR — , . , SingleHR INT, 2 Modbus. «» .





CONNECT — TCON_IP_V4





Modbus, , … . . . . . — , , … ( « » ). , , .





, (DONE) (ERROR) «» . , . . — .





, «» .





, . 80C6. MB_CLIENT , TCON ( TSEND, TRECEIVE ). : The connection partner cannot be reached (network error). . , - Modbus Windows Firewall. , , . , , . .





, . (REAL) — 4 . 2 . , 2, «» . — REAL ( ).





. , ModbusClient , Modbus, , 80A3. , , (- ). /. ( ), :





/ «» Srv1Req . «» ( , ) «» Srv1Disconnect, ( , .. , ), , . , REQ DISCONNECT , , , .





, «» (little-endian big-endian) . modbus 0.666. Modbus 1.663175E+38, (, , ). , , . . .





SWAP ( — ). , ( Data.Test) . , , «» , «», «». , 4 — .





, . 4 4 , .





Deserialize «» - , — . , Modbus.





, , , Modbus TCP, — () (). Modbus RTU «» . , , , . Unit ID, Device ID, — , , . Modbus TCP « » IP-. , Device ID . , . , «» Modbus TCP ID . Unit ID , Modbus RTU Modbus TCP (, , ). Modbus Unit ID. «» , , . , Modbus MB_Unit_ID. «» , .. Modbus. 0xFF 255. «» , TCP/IP. «», Unit ID . .





, , , , .. .





, . 3 (6 ), 40001, ( 40011). , «». ( «» ) . , , « » , ( Deserialize, ), . «» . Data , REAL.





, Data «» «», , — 818B.





, , «» .





, .





0.5, 0.7, 0.33 () « »





— ( ). , . , — . — , . « » ( « », ).





.





, , Server1Query ( Server2Query). CASE. « » .





, , . , , ( MODBUS_CLIENT) / .





Dengan server kedua kami memiliki koneksi terpisah yang dikonfigurasi, ada contoh terpisah dari blok fungsional modbus. Kita dapat menyebutnya "secara bersamaan" dengan komunikasi server pertama, oleh karena itu dalam program umum ada dua pernyataan CASE yang bekerja secara independen satu sama lain.





Pada prinsipnya, akan logis untuk menambahkan analisis respons terhadap permintaan tertentu dan pembentukan tanda keandalan data, dan membuat beberapa perbaikan lainnya. Misalnya - mengirim perintah dan pengaturan tidak wajib, tetapi hanya dengan perubahan.





Namun demikian, di sinilah saya menyelesaikan deskripsi bekerja dengan protokol Modbus TCP. Lain kali, mari kita lihat pemrograman protokol Modbus RTU.












All Articles