Serveur Modbus TCP pour Simatic S7-1200 / S7-1500

La première spécification du protocole Modbus a été publiée en 1979. Le protocole est conçu pour interroger les périphériques esclaves sur une base requête-réponse. Modbus RTU (Remote Terminal Unit) fonctionne sur une interface de données série (RS-232, RS-485, RS-422). Aujourd'hui, nous allons nous concentrer sur un protocole légèrement modifié, Modbus TCP, fonctionnant au niveau de la couche application de la pile de protocoles TCP / IP.





Voyons d'abord comment la partie serveur est configurée (programmée, pour être plus précis). Le serveur Modbus TCP est analogue à l'esclave Modbus RTU, c'est-à-dire qu'il s'agit d'un appareil esclave. Ceci est important, ne soyez pas confus. Le serveur ne répond qu'aux requêtes, mais ne les génère pas.





Cet exemple utilise une CPU S7-1516 avec la version de firmware 2.6. La série S7-1200 est programmée de la même manière.





Commençons par placer une instance du bloc fonction MB_SERVER dans l'OB1 (Instructions → Communications → Autres → MODBUS TCP).





Ensuite, vous devez faire trois choses. Tout d'abord, mettez quelque chose sur l'entrée MB_ HOLD_ REG. Cette broche d'entrée de l'instance FB doit contenir une zone de mémoire allouée aux registres de maintien.





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





Expérience n ° 3. Région de Merker. Fonctionne, les valeurs ont été saisies à partir du client, aucune erreur.





De mon point de vue, la documentation n'est pas assez claire. Il devrait dire «utiliser un bloc de données d'accès standard ou une mémoire de bits (jeton)», et non «accès optimisé». Dans le cas d'un accès optimisé, les tableaux de mots conviennent. Et de mon point de vue, le moyen le plus pratique est celui décrit dans l'exemple d'origine. L'expérience 2, en principe, est également réalisable (et il y a une explication à cela), mais de mon point de vue, elle n'est pas pratique pour le travail.





La prochaine fois, nous aborderons le client Modbus TCP.








All Articles