Programación Modbus RTU Master utilizando el ejemplo de los convertidores Simatic S7-1200 y Sinamics V20

Hace tiempo que quería hablar sobre las complejidades de programar el intercambio a través del protocolo Modbus RTU en el caso de que el controlador (en nuestro caso, S7-1214) sea el RTU Master. Recientemente me pidieron que ayudara con el intercambio entre el PLC y el convertidor de frecuencia Sinamics V20, bueno, ¿por qué no escribir una nota al mismo tiempo, tratando de acercar la solución del problema a las condiciones de combate?





De hecho, los propios alemanes cubrieron este tema durante mucho tiempo:





SINAMICS V: Speed ​​Control de un V20 con S7-1200 (TIA Portal) mediante protocolo USS® / MODBUS RTU con HMI





Vea este ejemplo, se hace de manera muy sensata, con visualización,  diálogos y búsquedas  y la capacidad de expandir el programa de aplicación para sondear múltiples inversores V20 a través de varias interfaces (S7-1200 le permite instalar hasta 4 puertos RS-485/422 en su canasta). El ejemplo está muy bien hecho y es muy pedante. Ya he abordado los problemas de las comunicaciones que utilizan el protocolo Modbus TCP anteriormente, están en Habré.





Por lo tanto, no volveré a explicar algunos de los matices, solo escribiré de inmediato cómo hacerlo de manera correcta y conveniente desde mi punto de vista, específicamente en el caso de la encuesta V20. La configuración inicial del convertidor de frecuencia se describe en la documentación, incluida la documentación adjunta para el ejemplo anterior. Saquemos solo los puntos que son importantes para nosotros como introductorios.





Dirección de esclavo Modbus en la red: 1





Parámetros de comunicación: 9600 8-Even-1





Lectura de registros de almacenamiento esclavo:





40110 ZSW "Palabra de estado"





40111 HIW "Velocidad actual"





Registros de almacenamiento para escritura:





40100 STW "Palabra de control"





40101 HSW "Referencia de velocidad"





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





Supondremos que el convertidor de frecuencia está intercambiando información de manera estable con el PLC cuando las tres solicitudes se hayan completado con éxito. Por lo tanto, la última línea de nuestro bloque de funciones será la siguiente (primero agregaremos la variable booleana Connected en el bloque de datos DataV20):












All Articles