Programação Modbus RTU Master usando o exemplo dos inversores Simatic S7-1200 e Sinamics V20

Há muito tempo queria falar sobre os meandros da programação da troca por meio do protocolo Modbus RTU no caso em que o controlador (em nosso caso, S7-1214) é o RTU Master. Recentemente fui solicitado a ajudar na troca entre o PLC e o conversor de frequência Sinamics V20, bom, porque não escrever uma nota ao mesmo tempo, tentando trazer a solução do problema mais perto das condições de combate.





Na verdade, os próprios alemães cobriram esse assunto por muito tempo:





SINAMICS V: Controle de velocidade de um V20 com S7-1200 (TIA Portal) via protocolo USS® / MODBUS RTU com HMI





Veja este exemplo, é feito de forma muito sensata, com visualização,  diálogos e buscas  e a capacidade de expandir o programa de aplicação para pesquisar vários inversores V20 através de várias interfaces (S7-1200 permite a instalação de até 4 portas RS-485/422 em sua cesta). O exemplo é muito bem feito e muito pedante. Já mencionei anteriormente as questões de comunicação usando o protocolo Modbus TCP, elas estão no Habré.





Portanto, não irei explicar algumas das nuances novamente, apenas escreverei imediatamente como fazê-lo correta e convenientemente do meu ponto de vista, especificamente no caso da pesquisa V20. A configuração inicial do conversor de frequência é descrita na documentação, incluindo a documentação que acompanha o exemplo acima. Vamos retirar apenas os pontos que são importantes para nós como introdutórios.





Endereço escravo Modbus na rede: 1





Parâmetros de comunicação: 9600 8-Even-1





Lendo registros de armazenamento escravo:





40110 ZSW "Palavra de status"





40111 HIW "Velocidade atual"





Registros de armazenamento para gravação:





40100 STW "Palavra de controle"





40101 HSW "Referência de velocidade"





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





Assumiremos que o conversor de frequência está trocando informações de forma estável com o PLC quando todas as três solicitações para ele forem concluídas com êxito. Portanto, a última linha de nosso bloco de funções será a seguinte (primeiro adicionaremos a variável booleana Connected no bloco de dados DataV20):












All Articles