Arduino escribiendo Protocolo Mewtocol de PLC’S Panasonic

Gracias a las solicitud de  uno de mis suscriptores he creado este tutorial, en el cual se escribirá en registros de un PLC Panasonic (Nais) de la  Familia FPX Series, Estos PLC son muy prácticos y un alto porcentaje de maquinas lo tienen como unidad de control.

En esta ocasion utilizare un Arduino MEGA 2560 R3 y un convertidor MAX232  (RS232) para escribir en registros DT del PLC, dado que en la red estan los manuales del Protocolo Mewtocol de panasonic que es utilizado por PLC’S, HMI Pantallas, Variadores, Servo Drives entre otros dispositivos industriales.






El Arduino se comunicara por el Toolport, puerto de programación del PLC que soporta la configuración como Maestro-esclavo Mewtocol- Computer Link y propósito general (Basculas, lectores de codigo de barras)

El protocolo Mewtocol tiene similitudes a Modbus, aunque el Mewtocol mezcla Hexadecimal y Ascii en sus tramas,  con 2 convertidores seriales usb, 1 PLC y una panatalla panasonic, me tome la tarea de espiar físicamente la trama, comprenderla y replicarla en Arduino IDE.

Realterm

Realterm

Solo hemos implementado una parte de Mewtocol, específicamente las tramas [WD] Write data area  que escriben en solo permite escribir  los registros  DT, LD, y FL, Solo de escritura.

Descripcion de Trama Mewtocol

Esta trama permite escribir en los registros:

  • DT  Data Registers
  • LD  Link Data Registers
  • FL  File Registers

Frame-Mewtocol

Arduino IDE

Funcion addcero

Esta funcion concatena una serie de ceros a la izquierda “0000” a una variable de entrada segun el tamaño maximo que se requiere de salida y la retorna de salida. parametros de entrada String (Variable a concatenar )  int tamaño o cantidad de ceros  maximo a adicionar.

ejemplo: addcero(“10”,5)   retorna  “10”+”000″.

 Funcion WD_Mewtocol

La funcion principal es  WD_Mewtocol  que genera y envia  la trama mewtocol, esta funcion  requiere 2 parametros de entrada

  1.  String Direccion de registro, ejemplo “DT100”.
  2.  int 16 bits  valor que se escribira en el “DT100”

Encabezado

Indica el inicio de trama e indica el tipo de registro sobre el cual se quiere escribir:

ejemplo: %EE#WD” + Datacode (D or L or F).

Tipo de Registro y Direccion de Registro

Separa la direccion del tipo de registro y concatenamos ceros.

 ejemplo  “DT”,”1000″

 Conversion de valor  int, Hex a Ascii

El valor a enviar requiere un proceso para adicionarlo  a la trama.

  1. Se debe separa la capa alta y baja de del valor utilizamos la funciones highByte y lowByte.
  2. convertir ambos registros de hex a String.
  3. convertir a Mayusculas.
  4. Rellenar con ceros a la izquierda funcion addcero.

Concatenación de Trama

Calculo BCC

BCC (código de verificación de bloque)
– El BCC es un código que realiza una comprobación de errores mediante paridad horizontal, para
Mejorar la fiabilidad de los datos que se envían.
– El BCC utiliza un OR exclusivo desde el encabezado (%) hasta el carácter final del
Texto y convierte los datos de 8 bits en un código ASCII de 2 caracteres.

BCC-Mewtocol

BCC en Arduino

Tomamos la trama completa, y con la funcion getBytes la movemos a un array de byte y el bucle for  realiza una or exclusiva con los registros y el resultado BCC lo convertimos a String y lo concatenamos a al final de la trama, si el BCC esta erroneo el PLC panasonic descartara la trama automaticamente.

Envio de Trama

Finalmente enviamos la trama por el Puerto Serial1 y concatenamos solo  CR.

Confirmacion de Respuesta de PLC

Luego de enviar la trama, el PLC envia como respuesta una trama,  indicando si es correcta  enviara algo similar a esto “%EE$WD12 “ y en error  de trama “%EE!4202”.

Codigo Completo

Nota: Descarga codigo desde Github enlace en parte inferior:

Materiales

  • Arduino MEGA 2560 R3
  • Convertidor MAX232
  • Equipo Industrial Panasonic, PLC o Pantalla





Montaje

Arduino_PLC_Panasonic

Conclusiones

En este caso se ha creado esta trama para un PLC Panasonic pero con la destreza 2 convertidores seriales y el dispositivo en cuestion y la documentación pueden generar la trama de comunicación para cualquier marca  dispositivo sea PLC o HMI.

Tener en cuenta  funcion  WD_Mewtocol,  funciona correctamente, pero aun esta en prueba, pero en caso de encontrar algun error.

La función solo permite la Escritura en registros, Para lectura de registros se debe crear una nueva trama que solicite datos de un registro especifico y el PLC enviara la respuesta que debe ser interpretada en arduino.

Con este ejemplo podrán escribir en cualquier registro DT principalmente de las familias de PLC Panasonic Fpx, FP0, FP0R, FP2, FP2SH y FPSigma entre otras familias existentes.

Actualmente se esta creando una  libreria Mewtocol para Arduino o ESP8266.

Facilmente este ejemplo que solo escribe en DT’S se puede modificar para la escritura de otros registros tales como Relay R, y Salidas Y, WR y WY.

Referencias

Descargas

Codigo Arduino IDE Arduino-Mewtocol-WriteArea

 





You may also like...

Deja un comentario