Example #1
0
int main(int ac, char **av)
{
  int offset,ret,first;
  if(ac > 0) av0 = av[0];
  first = 1;
  printf("\n%s starting\n",av0);
  modbus.registerSocket(&sock);
  thread.create(reader,NULL);
  watchdog.create(watchdogthread,NULL);

  shm.write(modbusdaemon_LIFE_COUNTER_BASE,&lifeCounter,2);
  shm.write(modbusdaemon_READ_ERROR_COUNT_BASE,&readErrorCount,2);
  shm.write(modbusdaemon_WRITE_ERROR_COUNT_BASE,&writeErrorCount,2);
  while(1)
  {
    lifeCounter++;
    if(lifeCounter >= 256*128) lifeCounter = 0;
    shm.write(modbusdaemon_LIFE_COUNTER_BASE,&lifeCounter,2);
    offset = 0;
    //    modbusCycle(offset, slave, function, start_adr, num_register);
    ret = modbusCycle(offset,1,3,100,2);
    if(ret>0) offset += ret; else continue;
  }

  // we will never come here
  return 0;
}
Example #2
0
static int readModbus(int i)
{
  unsigned char data[512];
  char          name[1024]; 
  int           i1, ind, ret;
  unsigned int  val;

  ret = modbusCycle(namelist_slave[i], namelist_function[i], namelist_start_adr[i], namelist_count[i], data);
  if(ret < 0)
  {
    if(debug) printf("modbusCycle returned error\n");
    for(i1=0; i1<namelist_count[i]; ) // store all errors in shared memory
    {
      sprintf(name,"%s(%d,%d)", var, namelist_slave[i], namelist_start_adr[i] + i1); // print name
      if     (namelist_datasize[i] == 1)  // bit
      {
        if(debug) printf("write 8bits %s=ERR Error to shared memory\n", name);
        provider->setStringValue(name,"ERR");
        ind += 1;
        i1  += 8;
      }
      else if(namelist_datasize[i] == 16) // bit
      {
        if(debug) printf("write short %s=ERR Error to shared memory\n", name);
        provider->setStringValue(name,"ERR");
        ind += 2;
        i1  += 1;
      }
    }  
    return ret;
  }
  ind = 0;
  for(i1=0; i1<namelist_count[i]; ) // store all values in shared memory
  {
    sprintf(name,"%s(%d,%d)", var, namelist_slave[i], namelist_start_adr[i] + i1); // print name
    if     (namelist_datasize[i] == 1)  // bit
    {
      val = data[ind];
      if(debug) printf("write 8bits %s=0x%x to shared memory\n", name, val);
      provider->setIntValue(name,val);
      ind += 1;
      i1  += 8;
    }
    else if(namelist_datasize[i] == 16) // bit
    {
      val = data[ind]*256 + data[ind+1];
      if(debug) printf("write short %s=%d to shared memory\n", name, val);
      provider->setIntValue(name,val);
      ind += 2;
      i1  += 1;
    }
    else
    {
      printf("ERROR: unknown datasize\n");
      return -1;
    }
  }  
  return 0;
}