#define DEFAULT_OUT_NAME "fast_ai_data.csv"
int main(
int argc,
char **
const argv)
{
int rc, i;
UINT32 aiSlot = 3, slotMin = 0, slotMax = 9;
UINT32 aiChannel = 0, channelMin = 0, channelMax = 7;
UINT32 foreInterval = 1, intervalMin = 0, intervalMax = 3;
char szOutFlieName[64];
FILE *pOutFile;
memset(szOutFlieName, 0, sizeof(szOutFlieName));
UINT32 triggerFlags = 0x1 << aiChannel;
int isDISet = 0, isTriggered = 0;
int diChannelAmount = 16;
while(-1 != (rc = getopt(argc, argv, "hi:s:c:f:b:o:")))
{
switch(rc)
{
case 'i':
diSlot = atoi(optarg);
if(diSlot < slotMin || diSlot > slotMax)
{
printf("Error parameter: slot: %d\n", diSlot);
return -1;
}
break;
case 's':
aiSlot = atoi(optarg);
if(aiSlot < slotMin || aiSlot > slotMax)
{
printf("Error parameter: slot: %d\n", aiSlot);
return -1;
}
break;
case 'c':
aiChannel = atoi(optarg);
if(aiChannel < channelMin || aiChannel > channelMax)
{
printf("Error parameter: channel: %d\n", aiChannel);
return -1;
}
triggerFlags = 0x1 << aiChannel;
break;
case 'f':
foreInterval = atoi(optarg);
if(foreInterval > intervalMax)
foreInterval = intervalMax;
break;
case 'b':
backInterval = atoi(optarg);
if(backInterval > intervalMax)
backInterval = intervalMax;
break;
case 'o':
memset(szOutFlieName, 0, sizeof(szOutFlieName));
strncpy(szOutFlieName, optarg, strlen(optarg));
break;
case '?':
case 'h':
default:
printf("Fast AI TAG sample program.\n\n");
printf("Usage: ./ioPAC8500_tag_fast_ai [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 Slot of fast AI module [%d-%d]. Default slot = %d\n",
"-s", slotMin, slotMax, aiSlot);
printf("\t%-8s Channel on Fast AI module [%d-%d]. Default channel = %d\n",
"-c", channelMin, channelMax, aiChannel);
printf("\t%-8s Fore interval [%d-%d]. Default interval = %d\n",
"-f", intervalMin, intervalMax, foreInterval);
printf("\t%-8s (One unit = 1sec)\n", "");
printf("\t%-8s Back interval [%d-%d]. Default interval = %d\n",
"-b", intervalMin, intervalMax, backInterval);
printf("\t%-8s (One unit = 1sec)\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", "AI slot", aiSlot);
printf("%-10s: %d\n", "AI channel", aiChannel);
printf("%-10s: %d\n", "fore", foreInterval);
printf("%-10s: %d\n", "back", backInterval);
printf("%-10s: %s\n", "output", szOutFlieName);
sprintf(ai[0], "S%d_AI%d_AIMaxValue", aiSlot, aiChannel);
sprintf(ai[1], "S%d_AI%d_AIMinValue", aiSlot, aiChannel);
sprintf(ai[2], "S%d_AI%d_BurnOutState", aiSlot, aiChannel);
sprintf(ai[3], "S%d_AI%d_EngineeringValue", aiSlot, aiChannel);
sprintf(ai[4], "S%d_AI%d_RawMaxValue", aiSlot, aiChannel);
sprintf(ai[5], "S%d_AI%d_RawMinValue", aiSlot, aiChannel);
sprintf(ai[6], "S%d_AI%d_RawValue", aiSlot, aiChannel);
sprintf(ai[7], "S%d_AI%d_ResetMaxMin", aiSlot, aiChannel);
{
printf("MX_RTU_Tag_Init(), return code = %d.\n", retval);
return 0;
}
pOutFile = fopen(szOutFlieName, "w");
if(pOutFile == NULL)
{
fprintf(stderr, "Error open file: %s\n", szOutFlieName);
return -1;
}
for(i = 0; i < diChannelAmount; i++)
{
sprintf(di_tagName[i], "S%d_DI%d_DIValue", diSlot, i);
}
printf("MX_RTU_Module_Fast_AI_Buf_Overflow_Reset(%d, %d), return code = %d.\n",
aiSlot, triggerFlags, rc);
do
{
{
printf("MX_RTU_Tag_Read(%s) = %d\n", di_tagName[0], rc);
break;
}
else if(u32Val & 0x1 != 0)
{
isDISet = 1;
}
}
while(!isDISet);
if(isDISet)
{
printf("Trigger Fast AI !\n");
do
{
foreInterval, backInterval, &requiredBufSize);
printf("MX_RTU_Module_Fast_AI_Trigger_Set(%d, 0x%02X, %d, %d), return code = %d.\n",
aiSlot, triggerFlags, foreInterval, backInterval, rc);
else
isTriggered = 1;
}
}
if(isTriggered)
{
buf = (
UINT8*) malloc(requiredBufSize);
if(buf == NULL)
{
fprintf(stderr, "Error allocate memory\n");
return -1;
}
do
{
foreInterval, backInterval, buf, &aiTime);
{
float eng;
fprintf(pOutFile, "DI Trigger time: %02d:%02d:%02d.%02d\n",
diTriggerTime.hour, diTriggerTime.min, diTriggerTime.sec,
diTriggerTime.msec);
fprintf(pOutFile, "AI data start time: %02d:%02d:%02d.%02d\n",
aiTime.hour, aiTime.min, aiTime.sec, aiTime.msec);
for(i = 0; i < requiredBufSize; i += 2)
{
memcpy(&raw, &buf[i], 2);
fprintf(pOutFile, "%f\n", eng);
}
printf("Save AI data into %s.\n", szOutFlieName);
break;
}
{
printf("MX_RTU_Module_Fast_AI_Batch_Data_Get(%d, %d, %d, %d), return code = %d.\n",
aiSlot, aiChannel, foreInterval, backInterval, rc);
}
}
}
free(buf);
fclose(pOutFile);
{
printf("MX_RTU_Tag_Uninit(), return code = %d\n", retval);
}
return 0;
}