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: ./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;
}
}
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);
}
printf("MX_RTU_Tag_Write(%s), return code = %d\r\n", di_counter[2], retval);
}
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);
if (retval !=
TAG_ERR_OK && i != diCounterChannel) {
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;
}