Herramientas de usuario

Herramientas del sitio


docu:fw:bm:examples:blinking_modbus

Blinking Modbus

En el Firmware de la CIAA tenemos dos ejemplos de uso del protocolo Modbus, blinking_modbus_slave y blinking_modbus_master. Estos están armados de manera tal que si programamos una placa con el ejemplo slave, otra con con el master y las interconectamos a través del la uart 0 (RS485), el estado de las entradas de la primera se verá reflejado en las salidas de la segunda y viceversa. Ambos ejemplos transportan los mensajes por el puerto serie conforme al formato Modbus ASCII a una velocidad de 115200 baudios, 8 bits de datos, sin paridad y 1 bit de stop.

Blinkin Modbus Slave

En este ejemplo, se puede ver el uso de Modbus en modo slave, comunicando los mensajes en formato ASCII.

Descripción de tareas

InitTask

Es la tarea encargada de inicalizar el kernel de la CIAA, abrir los dispositivos utilizado y los distintos componentes del Stack Modbus. Además configura la alarma ActivateModbusTask para que sea activada luego de 100 ticks (100 milisegundos) y con una periodicidad de 5 ticks (5 milisegundos). Es importate aclarar que es la primera en ejecutarse y luego no vuelve a ejecutarse más.

ModbusSlave

Se encarga de atender las tareas del Stack Modbus. Para esto se llama a la función ciaaModbus_gatewayMainTask() pasando como argumento el handler del gateway utilizado.

Comandos Modbus

Los comandos que se pueden ejecutar son 0x03 Read Holding Registers y 0x10 Write Multiple Registers. En ambos casos el stack Modbus ejecuta el call back correspondiente pasando los siguientes argumentos:

static uint16_t cmd0x03ReadHoldingReg(
       uint16_t start,
       uint16_t quantity,
       uint8_t * exceptioncode,
       uint8_t * buf
       );

start: dirección de inicio para comenzar a leer registros (este valor es recibido desde el master) quantity: cantidad de registros consecutivos que se desean leer (este valor es recibido desde el master) exceptioncode: código de excepción en caso de producirse un error (debe ser escrito por el slave) buf: valores de los registros leídos (debe ser escrito por el slave) retorno: cantidad de registros leídos (debe coincidir con quantity). En caso de producirse un error, retornar -1

static void cmd0x10WriteMultipleReg(
      uint16_t start,
      uint16_t quantity,
      uint8_t bytecount,
      uint8_t * exceptioncode,
      uint8_t * buf
      );

start: dirección de inicio para comenzar a escribir registros (este valor es recibido desde el master) quantity: cantidad de registros consecutivos que se desean escribir (este valor es recibido desde el master) bytecount: cantidad de bytes que se van a escribir (este valor es recibido desde el master) exceptioncode: código de excepción en caso de producirse un error (debe ser escrito por el slave) buf: valores a escribir en registros (es recibido desde el master)

Estas callback no deben bloquearse ya que son ejecutadas desde la tarea ModbusSlave.

Blinkin Modbus Master

En este ejemplo, se puede ver el uso de Modbus en modo master, comunicando los mensajes en formato ASCII.

Descripción de tareas

InitTask

Es la tarea encargada de inicalizar el kernel de la CIAA, abrir los dispositivos utilizado y los distintos componentes del Stack Modbus. Además configura dos alarmas:

  • ActivateModbusTask: Utilizada para activar la tarea que atiende el Stack Modbus. Se activada luego de 5 ticks (5 milisegundos) y con una periodicidad de 5 ticks (5 milisegundos).
  • AlarmCallBackPollingSlave: Utilizada para ejecutar el call back CallBackActivatePollingSlave. Esta función activar la tarea PollingSlave si se encuentra suspendida. Se activada luego de 5 ticks (5 milisegundos) y con una periodicidad de 100 ticks (100 milisegundos).

Es importate aclarar que es la primera en ejecutarse y luego no vuelve a ejecutarse más.

ModbusMaster

Se encarga de atender las tareas del Stack Modbus. Para esto se llama a la función ciaaModbus_gatewayMainTask() pasando como argumento el handler del gateway utilizado.

PollingSlave

Esta tarea ejecuta las funciones 0x03 y 0x10 sobre el slave, la primera es para leer el estado de las entradas y la segunda es para escribir las salidas.

docu/fw/bm/examples/blinking_modbus.txt · Última modificación: 2015/09/03 15:53 por gmuro

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki