Programmation du maître Modbus RTU à l'aide de l'exemple des variateurs Simatic S7-1200 et Sinamics V20

J'ai longtemps voulu parler des subtilités de la programmation de l'échange via le protocole Modbus RTU dans le cas où le contrôleur (dans notre cas, S7-1214) est le maître RTU. Récemment, on m'a demandé d'aider à l'échange entre le PLC et le convertisseur de fréquence Sinamics V20, eh bien, pourquoi ne pas écrire une note en même temps, en essayant de rapprocher la solution du problème des conditions de combat.





En fait, les Allemands eux-mĂŞmes ont longtemps couvert ce sujet:





SINAMICS V: Contrôle de vitesse d'un V20 avec S7-1200 (TIA Portal) via protocole USS® / MODBUS RTU avec HMI





Voir cet exemple, il est fait de manière très judicieuse, avec visualisation,  dialogues et quĂŞtes  et la possibilitĂ© d'Ă©tendre le programme d'application pour interroger plusieurs onduleurs V20 via plusieurs interfaces (S7-1200 vous permet d'installer jusqu'Ă  4 ports RS-485/422 dans son panier). L'exemple est très bien fait et très pĂ©dant. J'ai dĂ©jĂ  Ă©voquĂ© plus tĂ´t les problĂ©matiques des communications utilisant le protocole Modbus TCP, elles sont sur HabrĂ©.





Par conséquent, je ne vais pas expliquer à nouveau certaines des nuances, je vais juste écrire tout de suite comment le faire correctement et commodément de mon point de vue, en particulier dans le cas de l'enquête V20. La configuration initiale du variateur de fréquence est décrite dans la documentation, y compris la documentation d'accompagnement de l'exemple ci-dessus. Ne retenons que les points importants pour nous en guise d'introduction.





Adresse esclave Modbus dans le réseau: 1





Paramètres de communication: 9600 8-Even-1





Lecture des registres de stockage esclaves:





40110 ZSW "Mot d'Ă©tat"





40111 HIW "Vitesse actuelle"





Registres de stockage pour l'Ă©criture:





40100 STW "Mot de contrĂ´le"





40101 HSW "Référence vitesse"





«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 .





, V20, .





, , . (), (), , .. - , :





, , , , . .





, , , . , , - «» . , , DataV20. :





(mode = 0) 40025. [0..4] of WORD. Real .





, . Modbus_Master DONE Error (, «» , — ).





, Modbus. , 10 , , , «» , 30. , , , , .





Nous supposerons que le variateur de fréquence échange des informations de manière stable avec l'API lorsque les trois requêtes qui lui sont adressées sont exécutées avec succès. Par conséquent, la toute dernière ligne de notre bloc fonctionnel sera la suivante (nous allons d'abord ajouter la variable booléenne Connected dans le bloc de données DataV20):












All Articles