Saya sudah lama ingin berbicara tentang seluk-beluk pemrograman pertukaran melalui protokol Modbus RTU jika pengontrol (dalam kasus kami, S7-1214) adalah RTU Master. Baru-baru ini, saya diminta untuk membantu pertukaran antara PLC dan konverter frekuensi Sinamics V20, dan mengapa tidak menulis catatan pada saat yang sama, mencoba membawa solusi masalah lebih dekat ke kondisi pertempuran.
Faktanya, Jerman sendiri membahas topik ini untuk waktu yang lama:
Lihat contoh ini, dibuat dengan sangat bijaksana, dengan visualisasi, dialog dan pencarian serta kemampuan untuk memperluas program aplikasi untuk mengumpulkan beberapa V20 inverter melalui beberapa antarmuka (S7-1200 memungkinkan Anda untuk menginstal hingga 4 port RS-485/422 di keranjangnya). Contoh dilakukan dengan sangat baik dan sangat saksama. Saya telah menyentuh masalah komunikasi yang menggunakan protokol Modbus TCP sebelumnya, yaitu di Habré.
Oleh karena itu, saya tidak akan menjelaskan beberapa nuansa lagi, saya hanya akan langsung menulis bagaimana melakukannya dengan benar dan nyaman dari sudut pandang saya, khususnya dalam kasus survei V20. Pengaturan awal konverter frekuensi dijelaskan dalam dokumentasi, termasuk dokumentasi yang menyertai contoh di atas. Mari kita ambil hanya poin yang penting bagi kita sebagai pengantar.
Alamat budak modbus di jaringan: 1
Parameter komunikasi: 9600 8-Even-1
Membaca register penyimpanan budak:
40110 ZSW "Kata status"
40111 HIW "Kecepatan saat ini"
Register penyimpanan untuk menulis:
40100 STW "Kata Kontrol"
40101 HSW "Referensi kecepatan"
«Telegram off time (ms)» P2014[0] , 2000 (2 ), 130 . Modbus , , 130 , Fault 72.
. . S7-1214 1241 RS-485/422:
Step 7 V15.1 Update 4, CPU — 4.3.
, . Simatic : Modbus_Comm_Load (, ) Modbus_Master ( / /). FB Modbus_Comm_Load , Modbus_Master — , , , , ( ). , ( ) .
, , , SCL. ModbusMasterV20 SCL. « », .. . , Modbus_Master . , , , — «» , .
Init (Bool) — ,
PORT (PORT) —
BAUD (UDINT) —
STOP_BITS (USINT) — «»
PARITY (USINT) — , 0 — , 1 — odd, , 2 — even,
Step UInt, « » « »
Modbus RTU
, .
1.
#instModbusCommLoad.MODE := 4; // RS-485 4!
#instModbusCommLoad.STOPBITS := #STOP_BITS;
Modbus_Comm_Load, «» . , , . , () . , , , , . -, :
MODE , . , RS-485 4. 0, .
STOP_BITS — .
Modbus_Comm_Load. PORT ( ) . BAUD PARITY — — «» , . MB_DB . P2P_MB_BASE, Modbus_Master. «» , :
: .
«» CASE, , , .. .
Modbus Master :
#instModbusMaster(REQ := TRUE,
MB_ADDR := 1,
MODE := 0,
DATA_ADDR := 40110,
DATA_LEN := 2,
DATA_PTR := #ZSWHIW);
REQ — . TRUE, , FALSE — . ( Modbus RTU S7-300/S7-400), TRUE
MB_ADDR — Modbus RTU. = 1.
MODE — , 0 — , 1 —
DATA_ADDR — . ( 4), 110. Modbus ( RTU, TCP) «» «». . . 2 , 40110. Modbus 3. 3 Modbus. 40110, 109. , . , . , . ( ), , . « 0 », DATA_ADDR 30001. , - , «», . 16 , , 15 . ? 17. .
DATA_LEN — , 2
DATA_PTR — , «» . , , , . — STAT . , , , ( ). , , /.
FB:
,
ZSW — ( )
HIW —
, . , :
- , ( , №1). — - .
, , . , . , , «» , . , « ». . — . , Init . - .
OB1 CPU:
FirstScan «» OB. , CPU.
Port. Step 7, :
, . , , :
- , . ZSW:
Low enabled . , №15, , , 0, 1. watch table , , — , :
, . , , , , (fault, №3).
, WORD , - .
, . , — . , , - . DataV20:
, Inv :
- :
, Real, . , , . , , , .
— . .
:
, , , . , . , V20Data , Real.
№1, №2.
, :
. , , , / CPU.
. , . (MODE), 1, , . , .
, , — . ( ) . . , . , , «» ( ) , Invalid data. , «» , V20 . , , , . , «Control by PLC», . RTFM, !
, ( , ). , 0 16384. . , .
DataV20 «»:
V20 , , , .. 50 . , modbus.
, №1 ( ), №2 , . «» , , .
DataV20 .
25 , Running .
, , . (), (), , .. - , :
, , , , . .
, , , . , , - «» . , , DataV20. :
(mode = 0) 40025. [0..4] of WORD. Real .
, . Modbus_Master DONE Error (, «» , — ).
, Modbus. , 10 , , , «» , 30. , , , , .
Kami akan berasumsi bahwa konverter frekuensi bertukar informasi secara stabil dengan PLC ketika ketiga permintaan itu diselesaikan dengan sukses. Oleh karena itu, baris terakhir dari blok fungsi kami adalah sebagai berikut (pertama-tama kami akan menambahkan variabel boolean Terhubung di blok data DataV20):