// read mailbox and write to modbus
void *reader(void *arg)
{
int ret,slave,function,buflen;
unsigned char buf[128+1];
mbx.clear(); // clear old messages
while((buflen = mbx.read(buf,sizeof(buf))) > 0)
{
slave = buf[0];
function = buf[1];
thread.lock();
rlsleep(MODBUS_IDLETIME);
ret = modbus.write( slave, function, &buf[2], buflen-2);
ret = modbus.response( &slave, &function, buf);
rlsleep(MODBUS_IDLETIME);
thread.unlock();
}
return arg;
}
// read cycle on modbus
int modbusCycle(int offset, int slave, int function, int start_adr, int num_register)
{
unsigned char data[128+1];
int ret;
watchcnt1++;
if(watchcnt1 > 10000) watchcnt1 = 0;
thread.lock();
rlsleep(MODBUS_IDLETIME);
ret = modbus.request(slave, function, start_adr, num_register);
ret = modbus.response( &slave, &function, data);
thread.unlock();
//printf("slave=%d function=%d ret=%d :",slave,function,ret);
//for(int i=0; i<ret; i++) printf(" %d",(int) data[i]);
//printf("\n");
if(ret > 0) shm.write(offset,data,ret);
return ret;
}
|