pvbrowser manual
Zurück Inhalt Vor

Modbus Interface

Modbus INI-Datei
Modbus INI-Datei

Wir unterstützen das Modbus RTU/ASCII

Interface mit serieller Schnittstelle und TCP. Die grundlegende Klasse ist rlModbus . Um den Modbus Daemon zu erstellen wählen Sie "Daemon->Modbus" in pvdevelop. Nun können Sie eine kleine INI-Datei editieren, die beschreibt, was von dem Modbus gelesen werden soll.

Innerhalb Ihres pvserver können Sie nun rlModbusClient

nutzen, um mit dem Modbus zu kommunizieren.

Modbus ist für eine Vielzahl von Geräten verfügbar. Sogar, wenn das Gerät Modbus nicht direkt unterstützt, gibt es gute Möglichkeiten über ein Gateway zum Modbus zu verbinden.

Um Modbus zu nutzen, wählen Sie das Menu "rllib->uncomment modbus" in pvdevelop.

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;
}

Zurück Inhalt Vor