int main(
int argc,
char * argv[])
{
int rc, i;
char szFileName[80] = "/etc/RTU/config.rtu";
UINT32 doSlot = 2, slotMin = 0, slotMax = 9;
int cnt = 0, lastCnt = 0, stopCnt = 10;
int diChannelAmount = 16;
int doChannelAmount = 16;
int diCounterChannel = 15;
int reset[] = {1};
while(-1 != (rc = getopt(argc, argv, "hi:c:s:")))
{
switch(rc)
{
case 'i':
diSlot = atoi(optarg);
if(diSlot < slotMin || diSlot > slotMax)
{
printf("Error parameter: slot: %d\n", diSlot);
return -1;
}
break;
case 'c':
diCounterChannel = atoi(optarg);
if(diCounterChannel < 0 || diCounterChannel > diChannelAmount - 1)
{
printf("Error parameter: Channel: %d\n", diCounterChannel);
return -1;
}
break;
case 's':
doSlot = atoi(optarg);
if(doSlot < slotMin || doSlot > slotMax)
{
printf("Error parameter: slot: %d\n", doSlot);
return -1;
}
break;
case '?':
case 'h':
default:
printf("DI TAG sample program.\n\n");
printf("Usage: ./ioPAC8500_tag_di [OPTIONS]\n\n");
printf("Options:\n");
printf("\t%-8s Slot of DI module [%d-%d]. Default slot = %d\n",
"-i", slotMin, slotMax, diSlot);
printf("\t%-8s Channel of DI counter module [%d-%d]. Default Channel = %d\n",
"-c", 0, diChannelAmount - 1, 15);
printf("\t%-8s Slot of DO module [%d-%d]. Default slot = %d\n",
"-s", slotMin, slotMax, doSlot);
printf("\n");
return 0;
}
}
printf("%-10s: %d\n", "DI slot", diSlot);
printf("%-10s: %d\n", "DO slot", doSlot);
sprintf(di_counter[0], "S%d_DI%d_CounterOverflowClear", diSlot, diCounterChannel);
sprintf(di_counter[1], "S%d_DI%d_CounterOverflowStatus", diSlot, diCounterChannel);
sprintf(di_counter[2], "S%d_DI%d_CounterReset", diSlot, diCounterChannel);
sprintf(di_counter[3], "S%d_DI%d_CounterValue", diSlot, diCounterChannel);
{
printf("MX_RTU_Tag_Init(), return code = %d.\n", retval);
return 0;
}
for(i = 0; i < diChannelAmount; i++)
{
sprintf(buffer, "S%d_DI%d_DIValue", diSlot, i);
strncpy(di_tagName[i], buffer, sizeof(buffer));
}
{
printf("MX_RTU_Tag_Get_Info(%s), return code = %d.\n", di_counter[2], retval);
return 0;
}
{
printf("MX_RTU_Tag_Write(%s), return code = %d\r\n", di_counter[2], retval);
return 0;
}
for(i = 0; i < doChannelAmount; i++)
{
sprintf(buffer, "S%d_DO%d_DOValue", doSlot, i);
strncpy(do_tagName[i], buffer, sizeof(buffer));
}
UINT32 bitVal[diChannelAmount];
for(i = 0; i < diChannelAmount; i++)
{
bitVal[i] = 0;
}
while(1)
{
for(i = 0; i < diChannelAmount ; i++)
{
retval =
MX_RTU_Tag_Read(di_tagName[i], &bitVal[i],
sizeof(bitVal), NULL, NULL);
{
printf("MX_RTU_Tag_Read(%s) = %d\n", di_tagName[i], retval);
break;
}
}
for(i = 0; i < doChannelAmount; i++)
{
{
printf("MX_RTU_Tag_Get_Info(%s), return code = %d.\n", do_tagName[i], retval);
break;
}
{
printf("MX_RTU_Tag_Write(%s), return code = %d\r\n", do_tagName[i], retval);
break;
}
}
retval =
MX_RTU_Tag_Read(di_counter[3], &u32Val,
sizeof(u32Val), NULL, NULL);
{
printf("MX_RTU_Tag_Read(%s) = %d\n", di_counter[3], retval);
break;
}
else
{
cnt = u32Val;
if(cnt > stopCnt)
{
printf("\nCount > %d ---> Stop!\n", stopCnt);
break;
}
lastCnt = cnt;
}
printf("\rDI = 0x%04X, Counter = %d", u32Val, cnt);
fflush(0);
}
{
printf("MX_RTU_Tag_Uninit(), return code = %d\n", retval);
}
return 0;
}