int main(
int argc,
char * argv[])
{
int rc, i;
char szFileName[80] = "/etc/RTU/config.rtu";
UINT32 doSlot = 2, slotMin = 0, slotMax = 9;
UINT32 outMode = 0, lastOutMode = -1;
int diChannelAmount = 2;
int doChannelAmount = 16;
int doPWMChannel= 10;
while (-1 != (rc = getopt(argc, argv, "hi:s:c:p:"))) {
switch (rc) {
case 'i':
diSlot = atoi(optarg);
if (diSlot < slotMin || diSlot > slotMax) {
printf("Error parameter: slot: %d\n", diSlot);
return -1;
}
break;
case 's':
doSlot = atoi(optarg);
if (doSlot < slotMin || doSlot > slotMax) {
printf("Error parameter: slot: %d\n", doSlot);
return -1;
}
break;
case 'c':
doPWMChannel = atoi(optarg);
if (doPWMChannel < 0 || doPWMChannel > doChannelAmount-1) {
printf("Error parameter: Channel: %d\n", doPWMChannel);
return -1;
}
break;
case 'p':
PWMcount = atoi(optarg);
if (PWMcount < 0) {
printf("Error parameter: PWMcount: %d\n", PWMcount);
return -1;
}
break;
case '?':
case 'h':
default:
printf("DO TAG sample program.\n\n");
printf("Usage: ./tag_do [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 DO module [%d-%d]. Default slot = %d\n",
"-s", slotMin, slotMax, doSlot);
printf("\t%-8s Channel of DO PWM module [%d-%d]. Default Channel = %d\n",
"-c", 0, diChannelAmount-1, 10);
printf("\t%-8s The amount of PWM output count. Default count = %d\n",
"-p", 0);
printf("\n");
return;
}
}
printf("%-10s: %d\n", "DI slot", diSlot);
printf("%-10s: %d\n", "DO slot", doSlot);
printf("%-10s: %d\n", "PWMcount", PWMcount);
sprintf(do_PWM[0], "S%d_DO%d_PWMCount", doSlot, doPWMChannel);
sprintf(do_PWM[1], "S%d_DO%d_PWMStartStop", doSlot, doPWMChannel);
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));
}
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;
}
printf("MX_RTU_Tag_Get_Info(%s), return code = %d.\n", do_PWM[0], retval);
}
memcpy(tagBuf, &PWMcount, tagInfo.
tagSize);
printf(
"MX_RTU_Tag_Write(%s), return code = %d\r\n", tagInfo.
tagName, retval);
}
while (1) {
for (i = 0; i < diChannelAmount ; i++) {
retval =
MX_RTU_Tag_Read(di_tagName[i], &bitVal[i],
sizeof(bitVal), NULL, NULL);
printf("MX_RTU_Tag_Read(%s) = %d\n", di_tagName[i], retval);
break;
}
}
outMode = bitVal[0] + 2*bitVal[1];
printf("\rMode: %d", outMode);
fflush(0);
if(outMode == lastOutMode)
continue;
lastOutMode = outMode;
if (outMode == 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 (outMode == 1) {
printf("MX_RTU_Tag_Get_Info(%s), return code = %d.\n", do_PWM[1], retval);
break;
}
printf("MX_RTU_Tag_Write(%s), return code = %d\r\n", do_PWM[1], retval);
break;
}
}
else if (outMode == 2) {
printf("MX_RTU_Tag_Write(%s), return code = %d\r\n", do_PWM[1], retval);
break;
}
printf("MX_RTU_Tag_Read(%s) = %d\n", do_PWM[1], retval);
break;
}
}
else if (outMode == 3) {
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 {
printf("Error DI Value Input.\n");
return 0;
}
}
printf("MX_RTU_Tag_Uninit(), return code = %d\n", retval);
}
return 0;
}