#define DEFAULT_OUT_NAME "di_event.log"
int main(
int argc,
char **
const argv)
{
int rc, i;
UINT32 diSlot = 1, slotMin = 0, slotMax = 0;
int diChannelAmount = 16;
UINT32 filter = 1000, filterMin = 1, filterMax = 0x7FFFFFFF;
char szOutFlieName[64];
FILE *pOutFile;
int handle = -1;
memset(szOutFlieName, 0, sizeof(szOutFlieName));
while(-1 != (rc = getopt(argc, argv, "hs:c:f:t:o:")))
{
switch(rc)
{
case 's':
diSlot = atoi(optarg);
if(diSlot < slotMin || diSlot > slotMax)
{
printf("Error parameter: slot: %d\n", diSlot);
return -1;
}
break;
case 'c':
diChannel = atoi(optarg);
if(diChannel < 0 || diChannel >= diChannelAmount)
{
printf("Error parameter: channel: %d\n", diChannel);
return -1;
}
break;
case 'f':
filter = atoi(optarg);
if(filter < filterMin)
filter = filterMin;
if(filter > filterMax)
filter = filterMin;
break;
case 't':
eventTrigger = atoi(optarg);
break;
case 'o':
memset(szOutFlieName, 0, sizeof(szOutFlieName));
strncpy(szOutFlieName, optarg, strlen(optarg));
break;
case '?':
case 'h':
default:
printf("DI event sample program.\n\n");
printf("Usage: ./di_event [OPTIONS]\n\n");
printf("Options:\n");
printf("\t%-8s Slot of DI module [%d-%d]. Default slot = %d\n",
"-s", slotMin, slotMax, diSlot);
printf("\t%-8s Channel of DI module [%d-%d]. Default channel = %d\n",
"-c", 0, diChannelAmount - 1, diChannel);
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 Output file name. Default name = %s\n",
"-o", szOutFlieName);
printf("\n");
return 0;
}
}
printf("%-10s: %d\n", "DI slot", diSlot);
printf("%-10s: %d\n", "DI channel", diChannel);
printf("%-10s: %d\n", "DI filter", filter);
printf("%-10s: %d\n", "DI trigger", eventTrigger);
printf("%-10s: %s\n", "output", szOutFlieName);
pOutFile = fopen(szOutFlieName, "w");
if(pOutFile == NULL)
{
fprintf(stderr, "Error open file: %s\n", szOutFlieName);
return -1;
}
printf("MX_RTU_Module_DI_Filter_Set(%d, %d, %d), return code = %d.\n",
diSlot, diChannel, 1, rc);
printf("MX_RTU_DI_Event_Reset(), return code = %d.\n", rc);
printf("MX_RTU_DI_Event_Register(%d, %d, %d), return code = %d.\n",
diSlot, diChannel, eventTrigger, rc);
while(1)
{
{
printf("MX_RTU_DI_Event_Count(%d), return code = %d.\n", handle, rc);
break;
}
while(count--)
{
char szLine[64];
{
printf("MX_RTU_DI_Event_Get(%d), return code = %d.\n", handle, rc);
break;
}
sprintf(szLine, "%d/%d/%d %02d:%02d:%02d.%d\t%d\n",
time.year, time.mon, time.day, time.hour, time.min, time.sec, time.msec, status);
printf(szLine);
fprintf(pOutFile, szLine);
fflush(pOutFile);
}
}
fclose(pOutFile);
printf("MX_RTU_DI_Event_Unregister(%d), return code = %d.\n", handle, rc);
return 0;
}