pvbrowser manual
Back Content Forward

modbus интерфейс

Modbus INI-file
Modbus INI-file

Ние поддържаме Modbus RTU/ASCII със сериен и TCP интерфейси. Основния Modbus клас е rlModbus . Изберете "Daemon->Modbus" от pvbuilder, за да създадете Modbus демон, след което редактирайте малкия INI файл, който описва какво да се чете от Modbus.

Можете да използвате rlModbusClient в pvserver, за да комуникирате с Modbus.

Modbus се поддържа от много устройства, а дори устройството да не го поддържа, има възможност да използвате "преходник".

Изберете менюто "rllib->uncomment modbus" в pvbuilder, за да използвате Modbus.

Modbus демо

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