TCP FB Modbus TCP AC Gonzalo Ala Omron
TCP FB Modbus. TCP AC Gonzalo Alía | Omron Electronics
• • Modbus y Modbus. TCP Librerías Librería Modbus. TCP Esclavo Librería Modbus. TCP Maestro 2
Modbus • Modbus fue desarrollado en 1979 por Modicon para comunicaciones industriales • Público y gratuito • ‘Sencillo’ de implementar 3
Modbus • Maestro (cliente) – Esclavo (servidor) • La comunicación del maestro a los esclavos puede ser peer-to-peer 1: 1 o broadcast 1: N • Variantes más conocidas: – Modbus RTU – Modbus ASCII – Modbus TCP 4
Modbus • Estándar – Muy conocido y utilizado • Compatible – Integrable con el resto del mundo Marca A Marca B Marca … 5
Modbus. TCP • Similar a Modbus RTU pero basado en Ethernet • En vez de número de estación, tenemos direcciones IP • Protocolo de la capa de aplicación (HW Ethernet estándar: switches, cables, …) 6
• • Modbus y Modbus. TCP Librerías Librería Modbus. TCP Esclavo Librería Modbus. TCP Maestro 7
Librerías Modbus TCP AC Esclavo Maestro 8
• • Modbus y Modbus. TCP Librerías Librería Modbus. TCP Esclavo Librería Modbus. TCP Maestro 9
FB Modbus TCP Esclavo AC • Sirve HR (Holding Registers) y Coils • Conexión de hasta 25 clientes • Válido para toda la gama de controladores Sysmac 10
Parámetros Parámetro Tipo de dato Descripción Límites Offset. Register (IN) UINT Para desplazar el zero y así no crear arrays muy grandes, para aquellos maestros que lean desde una dirección fija Only. One (IN) BOOL Solamente una conexión por IP (TRUE: se permite sólo una conexión por IP | FALSE: se permiten varias conexiones por IP) - Registers (INOUT) ARRAY [*] OF WORDS Memoria de HR que servirá el controlador Sin límite, máximo establecido por Sysmac Coils (INOUT) ARRAY [*] OF BOOL Memoria de Coils que servirá el controlador Sin límite, máximo establecido por Sysmac Mod. Stack (INOUT) ARRAY [*] OF s. Modbus. Slave Información de cada uno de los esclavos conectados. Si se monitoriza, se puede ver el estado de las conexiones, la cantidad de paquetes recibidos y enviados, el puerto de conexión del cliente y su dirección IP Máximo de 25 (crear un array de tamaño = núm. conexiones +1) n. Client (OUT) UINT Indica número de clientes conectados 11
Errores • El FB solamente devuelve la variable ERROR a TRUE con el ERRORID = 99, cuando se ha excedido el numero máximo de 25 conexiones 12
FB Modbus TCP Esclavo • Comandos Modbus que soporta: FC Comando 01 Read Coils 02 Read Inputs 05 Write Single Coil 15 Write Multiple Coils 03 Read Multiple Holding Registers 06 Write Single Holding Register 16 Write Multiple Holding Registers 04 Read Input Registers 23 Read/Write Multiple Registers 13
Ejemplo – Práctica FB Esclavo 1. Insertar librería 2. Configurar 3. Leer/Escribir desde un cliente Modbus (Ether. Way o FBs Modbus TCP Maestro de NX 102) 14
Ejemplo – Práctica FB Esclavo 15
Ejemplo – Práctica FB Esclavo Escribir múltiples HR (FC: 16 (10 h)) Tamaño 1 Registro Comienzo en el registro 5 Se escribe el valor CAFEh Maestro Ether. Way 16
Ejemplo – Práctica FB Esclavo Leer múltiples HR (FC: 03 h) Tamaño 100 Registros (64 h) Comienzo en el registro 0 Escribir múltiples HR (FC: 10 h) Tamaño 3 Registros Comienzo en el registro 0 Escribimos los valores 7, 8 y 9 respectivamente Maestro NX 102 17
• • Modbus y Modbus. TCP Librerías Librería Modbus. TCP Esclavo Librería Modbus. TCP Maestro 18
FB Modbus TCP Maestro AC • • Librería Modbus TCP maestro para lectura-escritura de registros Mediante pooling Sólo para NX 102 Comandos modbus soportados: FC Comando 03 Read Multiple Holding Registers 16 Write Multiple Holding Registers *Lectura/escritura de coils aún no implementado, a futuro 19
FB Modbus TCP Maestro AC 20
FB Modbus TCP Maestro AC • Librería que consta de varias funciones y un FB • El flujo de programación sería: Habilitar/ deshabilitar paquete Crear esclavo Añadir paquetes Conectar ¿Escrito o leído? 21
Crear esclavo | FUN Create. Slave • Función para crear esclavos con los que comunicar • Límite de 254 • Simplemente esta función rellena la vble de tipo estructura s. Slave que contendrá los datos de cada esclavo • Lo ideal es que se ejecute una vez en el primer ciclo de scan del controlador P_First_Run 22
Crear esclavo | FUN Create. Slave Argumentos Tipo de dato Descripción Límites Slave s. Slave[] Esclavo a comunicar con (elemento del array de estructuras tipo s. Slave) Máx. 254 EIPPort INT 1: EIP Port 1 | 2: EIP Port 2 - IPAddress STRING[30] IP del esclavo destino - Port UINT Puerto lógico (0: 502) - Node BYTE SIEMPRE a 0 - Delay UINT Tiempo de espera entre paquetes. Por defecto 0: no tiempo de espera. Unidades de 10 ms - Devuelve Slave s. Slave[0] 23
Crear esclavo | FUN Create. Slave 24
Añadir paquete | FUN Add. Packet • Añadir paquetes de datos al esclavo que se especifique • Es como especificar qué comando Modbus se ejecutará y sobre cuántos registros • Máximo 20 paquetes por esclavo s. Slave[x]. Packet[0. . 19] • El índice de cada paquete será asignado según se creen por programa, del 0 al 19 25
Añadir paquete | FUN Add. Packet Argumentos Tipo de dato Descripción Límites Type. Packet ENUM e. Operation#Write. Registers e. Operation#Read. Registers - Address UINT Offset de lectura o escritura (número de registro o coil desde el que empezar a leer-escribir) - Qty UINT Cuantos registros escribir o leer Máx. 127 Slave s. Slave[] Esclavo asociado al paquete - Devuelve Slave s. Slave[] 26
Añadir paquete | FUN Add. Packet 27
Conectar | FB_Modbus_Master • FB para conectar con el esclavo específico • Define el área el cual se escribirá o en donde se leerá en/del esclavo 28
Conectar | FB_Modbus_Master Parámetro Tipo de dato Descripción Connect BOOL Condición de ejecución Offset. Register (IN) UINT Para indicar la dirección de inicio de área de lectura/escritura que van a utilizar los maestros Límites (si esta área de lectura/escritura va de la dirección 5000 a la 6000, lo que hacemos es poner un Offset. Registrer de 5000 y creamos un área de registro (un array) de solo 1000 elementos, así no consumimos 5000 elementos de array que no vamos a utilizar y no gastamos memoria del controlador) Wait. Connect (IN) ULINT Tiempo de espera para reintentar la comunicación con el esclavo. Unidades de 10 ms PSLAVE (INOUT) s. Slave[] Esclavo con el que conectamos Register (INOUT) ARRAY [*] OF WORD Área de registros en donde se leerán o desde las que se escribirán No límite Coil (INOUT) ARRAY[*] OF BOOL Área de coils en donde se leerán o desde las que se escribirán * En desarrollo No límite Connected (OUT) BOOL Conectado al esclavo 29
Conectar | FB_Modbus_Master 30
s. Slave • Estructura que gestiona la conexión con cada esclavo • Básicamente, la FUN Create. Slave va creando esclavos (s. Slave[]) con los parámetros necesarios para la conexión • Pero dispone de más miembros que nos dan información de la conexión 31
s. Slave STRUCT Online BOOL Indica si la conexión está establecida EIPPort INT Puerto EIP de NX 102 1 ó 2 IPAddress STRING[16] Dirección IP del esclavo Port UINT Por defecto 0 (502) Node BYTE Siempre a 0 Delay UINT Retardo en las comunicaciones Retries UINT Reintentos de comunicación antes de cerra la conexión (por defecto 3) Processed. Packet BOOL Packet. Index INT Paso INT Socket s. Modbus. Master n. Packets INT Packets ARRAY[0. . 19] OF PACKET Se define con Create. Slave 32
s. Modbus. Master STRUCT Is. Open BOOL state INT Error. Port STRING[16] n. Read UINT n. Read. Error BYTE n. Write UINT n. Write. Error UINT Error. ID BOOL Error. IDEx INT Connect. Count INT Retries. Count s. Modbus. Master Paso INT socket ARRAY[0. . 19] OF PACKET Número de lecturas Número de escrituras Error relacionado con los FB Modbus incluidos para NX 102 y buscar en manual 33
PACKET s. Slave STRUCT Enable BOOL Operation e. Operation With. Data BOOL Address WORD Qty UINT Write. Error. Count UINT Read. Error. Count UINT Indica si el paquete se ha leído o escrito Lo mismo nos devuelve la FUN Is. Data 34
FUN Is. Data | Disable. Packet | Enable. Packet • Podemos saber si se ha escrito o leído un paquete y así deshabilitar el mismo hasta próxima condición para ahorra ancho de banda 35
FUN Is. Data | Disable. Packet | Enable. Packet 1 Conectado al esclavo 2 Vemos si se ha escrito el paquete 0 del esclavo 0 4 Y podemos habilitarlo cuando queramos 3 En cuanto se escriba, deshabilitamos dicho paquete 36
Ejemplo – práctica FB Maestro • Insertar librería en NX 102 • Leer y escribir registros de otro controlador Sysmac utilizando el FB Esclavo que se acaba de ver • Realizar el envío de paquetes de 1 en 1, mediante un bit de enable como trigger 37
38
I Gracias Gonzalo Alía Omron Electronics Iberia SAU 39
- Slides: 39