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