int main(
int argc,
char **
const argv)
{
int rc, i;
UINT32 doSlot = 2, slotMin = 0, slotMax = 9;
unsigned short burnStat;
int aiChannelAmount = 8;
int doChannelAmount = 2;
float u32Val = 0;
while(-1 != (rc = getopt(argc, argv, "hi:c:s:")))
{
switch(rc)
{
case 'i':
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 < 0 || aiChannel >= aiChannelAmount)
aiChannel = 0;
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("AI TAG sample program.\n\n");
printf("Usage: ./tag_ai [OPTIONS]\n\n");
printf("Options:\n");
printf("\t%-8s Slot of AI module [%d-%d]. Default slot = %d\n",
"-i", slotMin, slotMax, aiSlot);
printf("\t%-8s Channel on AI module [%d-%d]. Default channel = %d\n",
"-c", 0, aiChannelAmount - 1, aiChannel);
printf("\t%-8s Slot of DO module [%d-%d]. Default slot = %d\n",
"-s", slotMin, slotMax, doSlot);
printf("\n");
return;
}
}
printf("%-10s: %d\n", "AI slot", aiSlot);
printf("%-10s: %d\n", "AI channel", aiChannel);
printf("%-10s: %d\n", "DO slot", doSlot);
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;
}
for (i = 0; i < doChannelAmount; i++) {
sprintf(do_tagName[i], "S%d_DO%d_DOValue", doSlot, i);
}
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;
}
}
while (1) {
printf("MX_RTU_Tag_Read(%s) = %d\n", ai[3], retval);
break;
}
printf("MX_RTU_Tag_Read(%s) = %d\n", ai[2], retval);
break;
}
printf("\rAI ENG Value = %10f, AI Status = %d", u32Val, burnStat);
fflush(0);
if (u32Val >= 8.0) {
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;
}
}
}
else if ( u32Val < 8.0 && u32Val >= 4.0) {
for (i = 0; i < doChannelAmount-1; 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;
}
}
}
}
printf("MX_RTU_Tag_Uninit(), return code = %d\n", retval);
}
return 0;
}