pvbrowser manual
Back Content Forward

Inerfaz modbus

Modbus INI-file
Modbus INI-file

Tenemos soporte para Modbus RTU/ASCII con interfaz serial y TCP. La clase Modbus básica es rlModbus . Para crear un daemon Modbus debes elegir "Daemon->Modbus" en pvbuilder. Ahora puedes editar un pequeño archivo-INI que describe lo que quieres leer desde Modbus. Dentro de pvserver puedes usar rlModbusClient para comunicarte con Modbus.

Modbus esta disponible para una gran variedad de dispositivos. Si el dispositivo que tengas no soporta Modbus aún existe la posibilidad de cambiar su protocolo a Modbus mediante una pasarela. Para usar Modbus selecciona del menu "rllib->uncomment modbus" en pvbuilder.

Modbus Demo

typedef struct // (todo: define your data structure here)
{
  char s[6]; // switches
}
DATA;

static int slotInit(PARAM *p, DATA *d)
{
  if(p == NULL || d == NULL) return -1;
  memset(d,0,sizeof(DATA));
  d->s[0] = -1;
  d->s[1] = -1;
  d->s[2] = -1;
  d->s[3] = -1;
  d->s[4] = -1;
  d->s[5] = -1;
  return 0;
}

static int slotNullEvent(PARAM *p, DATA *d)
{
  if(p == NULL || d == NULL) return -1;
  int i,val;
  for(i=0; i<6; i++)
  {
    val = modbus.readBit(0,i+4); // the first 4 bits are outputs
    if(d->s[i] != val)
    {
      if(val == 1) pvSetTablePixmap(p,table1,0,i,"icon_green.bmp");
      else         pvSetTablePixmap(p,table1,0,i,"icon_red.bmp");
      d->s[i] = val;
    }
  }
  return 0;
}

static int slotTableTextEvent(PARAM *p, int id, DATA *d, int x, int y, const char *text)
{
  if(p == NULL || id == 0 || d == NULL || x < -1000 || y < -1000 || text == NULL) return -1;

  if(i == table1 && x == 1)
  {
    int val;
    sscanf(text,"%d",&val);
    modbus.writeSingleCoil(1,y,val);
  }
  return 0;
}

Back Content Forward