int main(
int argc,
char **
const argv)
{
int rc, i;
UINT32 diSlot = 1;
UINT32 doSlot = 2, slotMin = 0, slotMax = 0;
int diChannelAmount = 16;
int doChannelAmount = 16;
UINT8 arrMode[diChannelAmount];
UINT8 arrTrigger[diChannelAmount];
UINT32 arrFilter[diChannelAmount];
UINT32 filter = 1000, filterMin = 1, filterMax = 0x7FFFFFFF;
UINT32 arru32Val[diChannelAmount];
UINT32 u32Val = 0;
int cnt = 0, lastCnt = 0, stopCnt = 10;
while(-1 != (rc = getopt(argc, argv, "hi:f:t:s:")))
{
switch(rc)
{
case 'i':
diSlot = atoi(optarg);
if(diSlot < slotMin || diSlot > slotMax)
{
printf("Error parameter: slot: %d\n", diSlot);
return -1;
}
break;
case 'f':
filter = atoi(optarg);
if(filter < filterMin)
filter = filterMin;
if(filter > filterMax)
filter = filterMin;
break;
case 't':
trigger = atoi(optarg);
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 sample program.\n\n");
printf("Usage: ./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 Filter of DI module [%d-%d]. Default filter = %d\n",
"-f", filterMin, filterMax, filter);
printf("\t%-8s (One unit = 100us)\n", "");
printf("\t%-8s Trigger mode of DI counter [%d,%d,%d]. Default mode = %d\n",
printf("\t%-8s (L2H: %d, H2L: %d, BOTH: %d)\n",
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", "DI filter", filter);
printf("%-10s: %d\n", "DI trigger", trigger);
printf("%-10s: %d\n", "DO slot", doSlot);
diChannelAmount = doChannelAmount = 16;
for(i = 0; i < diChannelAmount; i++)
{
arrMode[i] = mode;
arrFilter[i] = filter;
arrTrigger[i] = trigger;
arru32Val[i] = 0;
}
printf("MX_RTU_Module_DI_Mode_Set(%d, %d, %d, %d), return code = %d.\n",
diSlot, 0, diChannelAmount, mode, rc);
printf("MX_RTU_Module_DI_Filter_Set(%d, %d, %d, %d), return code = %d.\n",
diSlot, 0, diChannelAmount, filter, rc);
printf("MX_RTU_Module_DI_Counter_Trigger_Set(%d, %d, %d, %d), return code = %d.\n",
diSlot, 0, diChannelAmount, trigger, rc);
printf("MX_RTU_Module_DI_Counter_Value_Set(%d, %d, %d), return code = %d.\n",
diSlot, 0, diChannelAmount, rc);
printf("MX_RTU_Module_DI_Counter_Start_Set(%d, 0x%04X), return code = %d.\n",
diSlot, 0xFFFF, rc);
for(i = 0; i < doChannelAmount; i++)
printf("MX_RTU_Module_DO_Mode_Set(%d, %d, %d, %d), return code = %d.\n",
while(1)
{
{
printf("MX_RTU_Module_DI_Value_Get(%d), return code = %d.\n", diSlot, rc);
break;
}
{
printf("MX_RTU_Module_DO_Value_Set(%d, 0x%04X), return code = %d.\n",
doSlot, u32Val, rc);
break;
}
arru32Val, &diTriggerTime);
{
printf("MX_RTU_Module_DI_Counter_Value_Get(%d, %d, %d), return code = %d.\n",
diSlot, 0, diChannelAmount, rc);
break;
}
else
{
for(i = 0, cnt = 0; i < diChannelAmount; i++)
cnt += arru32Val[i];
if(cnt > stopCnt)
{
printf("\nCount > %d --> Stop!\n", stopCnt);
break;
}
lastCnt = cnt;
}
printf("\rDI = 0x%04X, Counter = %d", u32Val, cnt);
}
printf("\n");
u32Val = 0xFFFF;
{
printf("MX_RTU_Module_DO_Value_Set(%d, 0x%04X), return code = %d.\n",
doSlot, u32Val, rc);
}
return 0;
}