Servidor Modbus TCP para Simatic S7-1200 / S7-1500

A primeira especificação do protocolo Modbus foi publicada em 1979. O protocolo é projetado para pesquisar dispositivos escravos com base na solicitação-resposta. Modbus RTU (Unidade Terminal Remota) opera por meio de uma interface de dados serial (RS-232, RS-485, RS-422). Hoje vamos nos concentrar em um protocolo ligeiramente modificado, o Modbus TCP, que opera na camada de aplicação da pilha de protocolos TCP / IP.





Primeiro, vamos ver como a parte do servidor está configurada (programada, para ser mais preciso). O Modbus TCP Server é análogo ao Modbus RTU Slave, ou seja, é um dispositivo escravo. Isso é importante, não se confunda. O servidor apenas responde às solicitações, mas não as gera.





Este exemplo usa uma CPU S7-1516 com firmware versão 2.6. A série S7-1200 é programada da mesma maneira.





Primeiro, vamos colocar uma instância do bloco de funções MB_SERVER em OB1 (Instruções → Comunicações → Outros → MODBUS TCP).





Em seguida, você precisa fazer três coisas. Primeiro, coloque algo na entrada MB_ HOLD_ REG. Este pino de entrada da instância FB deve conter uma área de memória que é alocada para reter registradores.





. Modbus TCP 5.0 « » (Discrete inputs), .. , — BOOL' %I. Coils, «» — , , , %Q. Input Registers, « » — %I, %IW. , Modbus I Q. , . - , , , «» . , Modbus TCP , .





, IB QB. QB_Count, QB_Read_Count IB_Count , 65535, / / .





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





, 5.0 ( 2.5 S7-1500 4.2 S7-1200) , . — . , «Access to data areas in DBs instead of direct access to MODBUS addresses as of version V5.0» .





, «» .





Add new block





«Data block» ,









« », ,









. () . .





MB_HOLD_REG





-, TCON_IP_v4 TCON_Configured. . , , — Hardware, . , «» Modbus, (, , ).





TCON_IP_v4





InterfaceID , .





ID — . 1 4096. ( MBSERVER, ). . 1.





ConnectionType — . 11 (0B ): TCP. .





ActiveEstablished — false, , .





RemoteAddress — , . IP- , . .





RemotePort — ,





LocalPort — TCP , . - ( RFC) Modbus TCP 502 ( Doom — 666, ). 502 .





:





ID . , network (MOVE) Modbus. Step 7 , . Modbus X1. , .





, , System Constants . , , .





64 "ModbusData".CONNECT_Struct.InterfaceId





CONNECT :





, , , MB_SERVER_DB. , . , , , , «» «» «».





, Online:





7002 , , . STATUS, . , / Modbus-, (, — « » « »).





Modbus- . — . 5 , 10, Modbus , . — : little endian , big endian, , . 5 , , float, «» :





, (, %Q) — «» Modbus, , . . , :





. 64, (8 * 8 + 0 = 64). «» Modbus-:





«» ( 64). «» modbus:





, , Step 7, , ( ):





, . , , . «» ( , ):





( online, ) modbus «» «Illegal data address», . : Restriction of read access to process images as of version V5.0.





, . Step 7 :





. . «MBHOLDREG parameter» :





. , .





№1. — (, ). 8187 : The MBHOLD_REG parameter has an invalid pointer. Data area is too small.





№2. WORD, «» . , , .





Experimento # 3. Região de Merker. Funciona, os valores foram inseridos do cliente, sem erros.





Do meu ponto de vista, a documentação não é suficientemente clara. Ele deve dizer “usar bloco de dados de acesso padrão ou memória de bits (token)”, não “acesso otimizado”. No caso de acesso otimizado, arrays de palavras são adequados. E, do meu ponto de vista, a forma mais conveniente é a descrita no exemplo original. O experimento 2, em princípio, também é viável (e há uma explicação para isso), mas do meu ponto de vista é inconveniente para o trabalho.





Na próxima vez, abordaremos o cliente Modbus TCP.








All Articles