1001 lines
15 KiB
C
1001 lines
15 KiB
C
|
|
|
|||
|
|
#define _IN_DEBUG_C
|
|||
|
|
|
|||
|
|
#include "debug.h"
|
|||
|
|
#include "shell.h"
|
|||
|
|
#include "inout.h"
|
|||
|
|
#include "delay.h"
|
|||
|
|
#include "trigger.h"
|
|||
|
|
#include "operator.h"
|
|||
|
|
#include "workctrl.h"
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------
|
|||
|
|
void TestInputs(char * para1, char * para2);
|
|||
|
|
void TestOutputs(char * para1, char * para2);
|
|||
|
|
void TestExInputs(char * para1, char * para2);
|
|||
|
|
void TestExOutput(char * para1, char * para2);
|
|||
|
|
//--------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
void InitDebug(void)
|
|||
|
|
{
|
|||
|
|
#if (INPUT_NUM > 0)
|
|||
|
|
AddShellCmd("INPUT", "input detect", TestInputs);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#if (OUTPUT_NUM > 0)
|
|||
|
|
AddShellCmd("OUTPUT", "output control", TestOutputs);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#if (USE_IOEX > 0)
|
|||
|
|
AddShellCmd("EXINPUT", "ex input detect", TestExInputs);
|
|||
|
|
AddShellCmd("EXOUTPUT", "ex output control", TestExOutput);
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|
typedef char NameStr[INPUT_STR_LEN];
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD>
|
|||
|
|
#if (INPUT_NUM > 0)
|
|||
|
|
|
|||
|
|
NameStr * g_inputName = NULL;
|
|||
|
|
|
|||
|
|
#define INPUT_CASE_OP(cs) \
|
|||
|
|
{\
|
|||
|
|
case cs:\
|
|||
|
|
{\
|
|||
|
|
char*str="";\
|
|||
|
|
if (g_inputName != NULL)\
|
|||
|
|
{\
|
|||
|
|
str = g_inputName[cs-1];\
|
|||
|
|
}\
|
|||
|
|
if ((temp&mod) != 0)\
|
|||
|
|
{\
|
|||
|
|
printf("%d. Input%d is off (%s) \r\n", inidx++, cs, str);\
|
|||
|
|
}\
|
|||
|
|
else\
|
|||
|
|
{\
|
|||
|
|
printf("%d. Input%d is on (%s) \r\n", inidx++, cs, str);\
|
|||
|
|
}\
|
|||
|
|
break;\
|
|||
|
|
}\
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#define ALM_CASE_OP(cs) \
|
|||
|
|
{\
|
|||
|
|
case (cs):\
|
|||
|
|
{\
|
|||
|
|
if ((temp&mod) != 0)\
|
|||
|
|
{\
|
|||
|
|
printf("%d. M%d alarm is off \r\n", inidx++, cs);\
|
|||
|
|
}\
|
|||
|
|
else\
|
|||
|
|
{\
|
|||
|
|
printf("%d. M%d alarm is on \r\n", inidx++, cs);\
|
|||
|
|
}\
|
|||
|
|
break;\
|
|||
|
|
}\
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void TestInputs(char * para1, char * para2)
|
|||
|
|
{
|
|||
|
|
int p1, p2;
|
|||
|
|
|
|||
|
|
if (para1 == NULL || para2 == NULL)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("para1=%s, para2=%s\r\n", para1, para2);
|
|||
|
|
|
|||
|
|
p1 = 0;
|
|||
|
|
p2 = 0;
|
|||
|
|
if (strcmp(para1, "") != 0)
|
|||
|
|
{
|
|||
|
|
p1 = atoi(para1);
|
|||
|
|
}
|
|||
|
|
if (strcmp(para2, "") != 0)
|
|||
|
|
{
|
|||
|
|
p2 = atoi(para2);
|
|||
|
|
}
|
|||
|
|
if (p1 == p2)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------
|
|||
|
|
{
|
|||
|
|
int inidx = 0;
|
|||
|
|
u16 inputsta;
|
|||
|
|
u16 almsta;
|
|||
|
|
u8 zp1sta, zp2sta;
|
|||
|
|
s32 ecd1, ecd2, ecdtemp;
|
|||
|
|
u16 temp, mod;
|
|||
|
|
int delay = 0; // <20><>ʱʱ<CAB1><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
int i;
|
|||
|
|
|
|||
|
|
inputsta = GetInputStatus();
|
|||
|
|
inputsta = ~inputsta;
|
|||
|
|
|
|||
|
|
almsta = GetAlarmValue();
|
|||
|
|
almsta = ~almsta;
|
|||
|
|
|
|||
|
|
zp1sta = GetZP1Status();
|
|||
|
|
zp1sta = ~zp1sta;
|
|||
|
|
|
|||
|
|
zp2sta = GetZP2Status();
|
|||
|
|
zp2sta = ~zp2sta;
|
|||
|
|
|
|||
|
|
ecd1 = GetEcdCounter(ECD_SEL1);
|
|||
|
|
ecd1 = ~ecd1;
|
|||
|
|
ecd2 = GetEcdCounter(ECD_SEL2);
|
|||
|
|
ecd2 = ~ecd2;
|
|||
|
|
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
temp = GetInputStatus();
|
|||
|
|
if (temp != inputsta)
|
|||
|
|
{
|
|||
|
|
mod = 0x01;
|
|||
|
|
for (i = 1; i <= 16; i++)
|
|||
|
|
{
|
|||
|
|
if ((inputsta&mod) != (temp&mod))
|
|||
|
|
{
|
|||
|
|
switch (i)
|
|||
|
|
{
|
|||
|
|
INPUT_CASE_OP(1);
|
|||
|
|
INPUT_CASE_OP(2);
|
|||
|
|
INPUT_CASE_OP(3);
|
|||
|
|
INPUT_CASE_OP(4);
|
|||
|
|
INPUT_CASE_OP(5);
|
|||
|
|
INPUT_CASE_OP(6);
|
|||
|
|
INPUT_CASE_OP(7);
|
|||
|
|
INPUT_CASE_OP(8);
|
|||
|
|
INPUT_CASE_OP(9);
|
|||
|
|
INPUT_CASE_OP(10);
|
|||
|
|
INPUT_CASE_OP(11);
|
|||
|
|
INPUT_CASE_OP(12);
|
|||
|
|
INPUT_CASE_OP(13);
|
|||
|
|
INPUT_CASE_OP(14);
|
|||
|
|
INPUT_CASE_OP(15);
|
|||
|
|
INPUT_CASE_OP(16);
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
mod = mod << 1;
|
|||
|
|
DelayMs(1);
|
|||
|
|
delay++;
|
|||
|
|
}
|
|||
|
|
inputsta = temp;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
temp = GetAlarmValue();
|
|||
|
|
if (temp != almsta)
|
|||
|
|
{
|
|||
|
|
mod = 0x01;
|
|||
|
|
for (i = 1; i <= 6; i++)
|
|||
|
|
{
|
|||
|
|
if ((almsta&mod) != (temp&mod))
|
|||
|
|
{
|
|||
|
|
switch (i)
|
|||
|
|
{
|
|||
|
|
ALM_CASE_OP(1);
|
|||
|
|
ALM_CASE_OP(2);
|
|||
|
|
ALM_CASE_OP(3);
|
|||
|
|
ALM_CASE_OP(4);
|
|||
|
|
ALM_CASE_OP(5);
|
|||
|
|
ALM_CASE_OP(6);
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
mod = mod << 1;
|
|||
|
|
DelayMs(1);
|
|||
|
|
delay++;
|
|||
|
|
}
|
|||
|
|
almsta = temp;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
temp = GetZP1Status();
|
|||
|
|
if (temp != zp1sta)
|
|||
|
|
{
|
|||
|
|
if (temp == SENSOR_ON)
|
|||
|
|
{
|
|||
|
|
printf("%d. ZP1 is on \r\n", inidx++);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
printf("%d. ZP1 is off \r\n", inidx++);
|
|||
|
|
}
|
|||
|
|
DelayMs(1);
|
|||
|
|
delay++;
|
|||
|
|
zp1sta = temp;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
temp = GetZP2Status();
|
|||
|
|
if (temp != zp2sta)
|
|||
|
|
{
|
|||
|
|
if (temp == SENSOR_ON)
|
|||
|
|
{
|
|||
|
|
printf("%d. ZP2 is on \r\n", inidx++);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
printf("%d. ZP2 is off \r\n", inidx++);
|
|||
|
|
}
|
|||
|
|
DelayMs(1);
|
|||
|
|
delay++;
|
|||
|
|
zp2sta = temp;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
ecdtemp = GetEcdCounter(ECD_SEL1);
|
|||
|
|
if (ecdtemp != ecd1)
|
|||
|
|
{
|
|||
|
|
ecd1 = ecdtemp;
|
|||
|
|
|
|||
|
|
printf("%d. Ecd1 = %d \r\n", inidx++, ecd1);
|
|||
|
|
|
|||
|
|
DelayMs(1);
|
|||
|
|
delay++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
ecdtemp = GetEcdCounter(ECD_SEL2);
|
|||
|
|
if (ecdtemp != ecd2)
|
|||
|
|
{
|
|||
|
|
ecd2 = ecdtemp;
|
|||
|
|
|
|||
|
|
printf("%d. Ecd2 = %d \r\n", inidx++, ecd2);
|
|||
|
|
|
|||
|
|
DelayMs(1);
|
|||
|
|
delay++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
DelayMs(10);
|
|||
|
|
delay += 10;
|
|||
|
|
|
|||
|
|
if (delay >= 500)
|
|||
|
|
{
|
|||
|
|
delay = 0;
|
|||
|
|
ReportError(0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TriggerTask();
|
|||
|
|
OperatorTaskWhenRun(0);
|
|||
|
|
|
|||
|
|
if (IsConsoleCancel() != 0) // <20>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD>ֹͣ
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}while(p1 != 0);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void SetInputNameString(void* pDat)
|
|||
|
|
{
|
|||
|
|
g_inputName = pDat;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
//----------------------------------------------------------------
|
|||
|
|
|
|||
|
|
#if (OUTPUT_NUM > 0)
|
|||
|
|
|
|||
|
|
NameStr * g_outputName = NULL;
|
|||
|
|
|
|||
|
|
#define OUT_CASE_OP(cs) \
|
|||
|
|
{\
|
|||
|
|
case cs: \
|
|||
|
|
{\
|
|||
|
|
char*str="";\
|
|||
|
|
if (g_outputName != NULL)\
|
|||
|
|
{\
|
|||
|
|
str = g_outputName[cs-1];\
|
|||
|
|
}\
|
|||
|
|
if (p2 == 0)\
|
|||
|
|
{\
|
|||
|
|
Output##cs##Off();\
|
|||
|
|
printf("Output%d is off (%s) \r\n", cs, str);\
|
|||
|
|
}\
|
|||
|
|
else if (p2 == 1)\
|
|||
|
|
{\
|
|||
|
|
Output##cs##On();\
|
|||
|
|
printf("Output%d is on (%s) \r\n", cs, str);\
|
|||
|
|
}\
|
|||
|
|
break; \
|
|||
|
|
}\
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#define MOTO_CASE_DIR(cs) \
|
|||
|
|
{\
|
|||
|
|
case cs: \
|
|||
|
|
{\
|
|||
|
|
if (p2 == 0)\
|
|||
|
|
{\
|
|||
|
|
SetMoto##cs##SignOff();\
|
|||
|
|
printf("moto%d dir is off \r\n", cs);\
|
|||
|
|
}\
|
|||
|
|
else if (p2 == 1)\
|
|||
|
|
{\
|
|||
|
|
SetMoto##cs##SignOn();\
|
|||
|
|
printf("moto%d dir is on \r\n", cs);\
|
|||
|
|
}\
|
|||
|
|
break; \
|
|||
|
|
}\
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#define MOTO_CASE_PULSE(cs) \
|
|||
|
|
{\
|
|||
|
|
case cs: \
|
|||
|
|
{\
|
|||
|
|
if (p2 == 0)\
|
|||
|
|
{\
|
|||
|
|
SetMoto##cs##PulseOff();\
|
|||
|
|
printf("moto%d pulse is off \r\n", cs);\
|
|||
|
|
}\
|
|||
|
|
else if (p2 == 1)\
|
|||
|
|
{\
|
|||
|
|
SetMoto##cs##PulseOn();\
|
|||
|
|
printf("moto%d pulse is on \r\n", cs);\
|
|||
|
|
}\
|
|||
|
|
break; \
|
|||
|
|
}\
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#define MOTO_CASE_SEL1(cs) \
|
|||
|
|
{\
|
|||
|
|
case cs: \
|
|||
|
|
{\
|
|||
|
|
if (p2 == 0)\
|
|||
|
|
{\
|
|||
|
|
SetMoto##cs##SelAOff();\
|
|||
|
|
printf("moto%d sel1 is off \r\n", cs);\
|
|||
|
|
}\
|
|||
|
|
else if (p2 == 1)\
|
|||
|
|
{\
|
|||
|
|
SetMoto##cs##SelAOn();\
|
|||
|
|
printf("moto%d sel1 is on \r\n", cs);\
|
|||
|
|
}\
|
|||
|
|
break; \
|
|||
|
|
}\
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#define MOTO_CASE_SEL2(cs) \
|
|||
|
|
{\
|
|||
|
|
case cs: \
|
|||
|
|
{\
|
|||
|
|
if (p2 == 0)\
|
|||
|
|
{\
|
|||
|
|
SetMoto##cs##SelBOff();\
|
|||
|
|
printf("moto%d sel2 is off \r\n", cs);\
|
|||
|
|
}\
|
|||
|
|
else if (p2 == 1)\
|
|||
|
|
{\
|
|||
|
|
SetMoto##cs##SelBOn();\
|
|||
|
|
printf("moto%d sel2 is on \r\n", cs);\
|
|||
|
|
}\
|
|||
|
|
break; \
|
|||
|
|
}\
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#define MOTO_CASE_SERVO(cs) \
|
|||
|
|
{\
|
|||
|
|
case cs: \
|
|||
|
|
{\
|
|||
|
|
if (p2 == 0)\
|
|||
|
|
{\
|
|||
|
|
MotoServoCtrl(cs-1, SERVO_OFF);\
|
|||
|
|
printf("moto%d servo is off \r\n", cs);\
|
|||
|
|
}\
|
|||
|
|
else if (p2 == 1)\
|
|||
|
|
{\
|
|||
|
|
MotoServoCtrl(cs-1, SERVO_ON);\
|
|||
|
|
printf("moto%d servo is on \r\n", cs);\
|
|||
|
|
}\
|
|||
|
|
break; \
|
|||
|
|
}\
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void TestOutputs(char * para1, char * para2)
|
|||
|
|
{
|
|||
|
|
int p1, p2;
|
|||
|
|
|
|||
|
|
if (para1 == NULL || para2 == NULL)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("para1=%s, para2=%s\r\n", para1, para2);
|
|||
|
|
|
|||
|
|
p1 = 0;
|
|||
|
|
p2 = 0;
|
|||
|
|
if (strcmp(para1, "") != 0)
|
|||
|
|
{
|
|||
|
|
p1 = atoi(para1);
|
|||
|
|
}
|
|||
|
|
if (strcmp(para2, "") != 0)
|
|||
|
|
{
|
|||
|
|
p2 = atoi(para2);
|
|||
|
|
}
|
|||
|
|
if (p1 == p2)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------
|
|||
|
|
if (p1 == 0)
|
|||
|
|
{
|
|||
|
|
int p2, count, timeout;
|
|||
|
|
p2 = 1;
|
|||
|
|
count = 1;
|
|||
|
|
timeout = 0;
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
if (timeout == 0)
|
|||
|
|
{
|
|||
|
|
Output1Off();
|
|||
|
|
Output2Off();
|
|||
|
|
Output3Off();
|
|||
|
|
Output4Off();
|
|||
|
|
Output5Off();
|
|||
|
|
Output6Off();
|
|||
|
|
Output7Off();
|
|||
|
|
Output8Off();
|
|||
|
|
switch (count)
|
|||
|
|
{
|
|||
|
|
OUT_CASE_OP(1);
|
|||
|
|
OUT_CASE_OP(2);
|
|||
|
|
OUT_CASE_OP(3);
|
|||
|
|
OUT_CASE_OP(4);
|
|||
|
|
OUT_CASE_OP(5);
|
|||
|
|
OUT_CASE_OP(6);
|
|||
|
|
OUT_CASE_OP(7);
|
|||
|
|
OUT_CASE_OP(8);
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
count++;
|
|||
|
|
if (count > 8)
|
|||
|
|
{
|
|||
|
|
count = 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
DelayRef(1);
|
|||
|
|
timeout++;
|
|||
|
|
if (timeout > 1000)
|
|||
|
|
{
|
|||
|
|
timeout = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (IsConsoleCancel() != 0) // <20>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD>ֹͣ
|
|||
|
|
{
|
|||
|
|
Output1Off();
|
|||
|
|
Output2Off();
|
|||
|
|
Output3Off();
|
|||
|
|
Output4Off();
|
|||
|
|
Output5Off();
|
|||
|
|
Output6Off();
|
|||
|
|
Output7Off();
|
|||
|
|
Output8Off();
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}while(1);
|
|||
|
|
}
|
|||
|
|
else if (p1 >= 1 && p1 <= 8)
|
|||
|
|
{
|
|||
|
|
switch (p1)
|
|||
|
|
{
|
|||
|
|
OUT_CASE_OP(1);
|
|||
|
|
OUT_CASE_OP(2);
|
|||
|
|
OUT_CASE_OP(3);
|
|||
|
|
OUT_CASE_OP(4);
|
|||
|
|
OUT_CASE_OP(5);
|
|||
|
|
OUT_CASE_OP(6);
|
|||
|
|
OUT_CASE_OP(7);
|
|||
|
|
OUT_CASE_OP(8);
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (p1 == 10)
|
|||
|
|
{
|
|||
|
|
if (p2 == 0)
|
|||
|
|
{
|
|||
|
|
SerIdOutOff();
|
|||
|
|
printf("SerIdOutOff\r\n");
|
|||
|
|
}
|
|||
|
|
else if (p2 == 1)
|
|||
|
|
{
|
|||
|
|
SerIdOutOn();
|
|||
|
|
printf("SerIdOutOn\r\n");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (p1 == 20)
|
|||
|
|
{
|
|||
|
|
if (p2 == 0)
|
|||
|
|
{
|
|||
|
|
SetMpOutOff();
|
|||
|
|
printf("SetMpOutOff\r\n");
|
|||
|
|
}
|
|||
|
|
else if (p2 == 1)
|
|||
|
|
{
|
|||
|
|
SetMpOutOn();
|
|||
|
|
printf("SetMpOutOn\r\n");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (p1 == 21)
|
|||
|
|
{
|
|||
|
|
for (int i = 0; i < p2; i++)
|
|||
|
|
{
|
|||
|
|
SetMpOutOn();
|
|||
|
|
DelayUs(100);
|
|||
|
|
SetMpOutOff();
|
|||
|
|
DelayUs(100);
|
|||
|
|
}
|
|||
|
|
printf("mp signal end\r\n");
|
|||
|
|
}
|
|||
|
|
else if (p1 == 30)
|
|||
|
|
{
|
|||
|
|
if (p2 == 0)
|
|||
|
|
{
|
|||
|
|
SetEn485OutOff();
|
|||
|
|
printf("SetEn485OutOff\r\n");
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
SetEn485OutOn();
|
|||
|
|
printf("SetEn485OutOn\r\n");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (p1 >= 41 && p1 <= 46)
|
|||
|
|
{// <20><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
p1 -= 40;
|
|||
|
|
switch (p1)
|
|||
|
|
{
|
|||
|
|
MOTO_CASE_DIR(1);
|
|||
|
|
MOTO_CASE_DIR(2);
|
|||
|
|
MOTO_CASE_DIR(3);
|
|||
|
|
MOTO_CASE_DIR(4);
|
|||
|
|
MOTO_CASE_DIR(5);
|
|||
|
|
MOTO_CASE_DIR(6);
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (p1 >= 51 && p1 <= 56)
|
|||
|
|
{// <20><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
p1 -= 50;
|
|||
|
|
switch (p1)
|
|||
|
|
{
|
|||
|
|
MOTO_CASE_PULSE(1);
|
|||
|
|
MOTO_CASE_PULSE(2);
|
|||
|
|
MOTO_CASE_PULSE(3);
|
|||
|
|
MOTO_CASE_PULSE(4);
|
|||
|
|
MOTO_CASE_PULSE(5);
|
|||
|
|
MOTO_CASE_PULSE(6);
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (p1 >= 61 && p1 <= 66)
|
|||
|
|
{// <20><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ1
|
|||
|
|
p1 -= 60;
|
|||
|
|
switch (p1)
|
|||
|
|
{
|
|||
|
|
MOTO_CASE_SEL1(1);
|
|||
|
|
MOTO_CASE_SEL1(2);
|
|||
|
|
MOTO_CASE_SEL1(3);
|
|||
|
|
MOTO_CASE_SEL1(4);
|
|||
|
|
MOTO_CASE_SEL1(5);
|
|||
|
|
MOTO_CASE_SEL1(6);
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (p1 >= 71 && p1 <= 76)
|
|||
|
|
{// <20><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ2
|
|||
|
|
p1 -= 70;
|
|||
|
|
switch (p1)
|
|||
|
|
{
|
|||
|
|
MOTO_CASE_SEL2(1);
|
|||
|
|
MOTO_CASE_SEL2(2);
|
|||
|
|
MOTO_CASE_SEL2(3);
|
|||
|
|
MOTO_CASE_SEL2(4);
|
|||
|
|
MOTO_CASE_SEL2(5);
|
|||
|
|
MOTO_CASE_SEL2(6);
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (p1 >= 81 && p1 <= 86)
|
|||
|
|
{// <20><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
|
p1 -= 80;
|
|||
|
|
switch (p1)
|
|||
|
|
{
|
|||
|
|
MOTO_CASE_SERVO(1);
|
|||
|
|
MOTO_CASE_SERVO(2);
|
|||
|
|
MOTO_CASE_SERVO(3);
|
|||
|
|
MOTO_CASE_SERVO(4);
|
|||
|
|
MOTO_CASE_SERVO(5);
|
|||
|
|
MOTO_CASE_SERVO(6);
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void SetOutputNameString(void* pDat)
|
|||
|
|
{
|
|||
|
|
g_outputName = pDat;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#if (USE_IOEX > 0)
|
|||
|
|
NameStr * g_exInputName = NULL;
|
|||
|
|
NameStr * g_exOutputName = NULL;
|
|||
|
|
int g_exInputNum = 0;
|
|||
|
|
int g_exOutputNum = 0;
|
|||
|
|
NameStr * g_exidName = NULL;
|
|||
|
|
|
|||
|
|
void SetExInputNameString(void * pDat, int inum)
|
|||
|
|
{
|
|||
|
|
g_exInputName = pDat;
|
|||
|
|
g_exInputNum = inum;
|
|||
|
|
}
|
|||
|
|
void SetExOutputNameString(void * pDat, int onum)
|
|||
|
|
{
|
|||
|
|
g_exOutputName = pDat;
|
|||
|
|
g_exOutputNum = onum;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#define EXID_CASE_OP(cs) \
|
|||
|
|
{\
|
|||
|
|
case (cs+1+20):\
|
|||
|
|
{\
|
|||
|
|
char*str="";\
|
|||
|
|
if (g_exidName != NULL)\
|
|||
|
|
{\
|
|||
|
|
str = g_exidName[cs];\
|
|||
|
|
}\
|
|||
|
|
if ((temp&mod) != 0)\
|
|||
|
|
{\
|
|||
|
|
printf("%d. Exid%d is off (%s) \r\n", inidx++, cs, str);\
|
|||
|
|
}\
|
|||
|
|
else\
|
|||
|
|
{\
|
|||
|
|
printf("%d. Exid%d is on (%s) \r\n", inidx++, cs, str);\
|
|||
|
|
}\
|
|||
|
|
}\
|
|||
|
|
break;\
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void TestExInputs(char * para1, char * para2)
|
|||
|
|
{
|
|||
|
|
int p1, p2;
|
|||
|
|
int inidx = 0;
|
|||
|
|
|
|||
|
|
if (para1 == NULL || para2 == NULL)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("para1=%s, para2=%s\r\n", para1, para2);
|
|||
|
|
|
|||
|
|
p1 = 0;
|
|||
|
|
p2 = 0;
|
|||
|
|
if (strcmp(para1, "") != 0)
|
|||
|
|
{
|
|||
|
|
p1 = atoi(para1);
|
|||
|
|
if (strcmp(para2, "") != 0)
|
|||
|
|
{
|
|||
|
|
p2 = atoi(para2);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (p1 == p2)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------
|
|||
|
|
{
|
|||
|
|
u16 exinbuf[EXIO_PORT_NUM], oldexinbuf[EXIO_PORT_NUM];
|
|||
|
|
u16 temp, old, mod, i, j;
|
|||
|
|
int addr;
|
|||
|
|
int num;
|
|||
|
|
int init;
|
|||
|
|
int sdct = 0;
|
|||
|
|
|
|||
|
|
num = (g_exInputNum + EXIO_PER_PORT-1) / EXIO_PER_PORT;
|
|||
|
|
if (num > EXIO_PORT_NUM)
|
|||
|
|
{
|
|||
|
|
num = EXIO_PORT_NUM;
|
|||
|
|
}
|
|||
|
|
GetExInputs(exinbuf);
|
|||
|
|
for (i = 0; i < num; i++)
|
|||
|
|
{
|
|||
|
|
temp = exinbuf[i];
|
|||
|
|
temp = ~temp;
|
|||
|
|
oldexinbuf[i] = temp;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
for (i = 0; i < num; i++)
|
|||
|
|
{
|
|||
|
|
temp = exinbuf[i];
|
|||
|
|
old = oldexinbuf[i];
|
|||
|
|
mod = 0x01;
|
|||
|
|
for (j = 0; j < EXIO_PER_PORT; j++)
|
|||
|
|
{
|
|||
|
|
if ((temp&mod) != (old&mod))
|
|||
|
|
{
|
|||
|
|
char*str="";
|
|||
|
|
addr = i*EXIO_PER_PORT+j;
|
|||
|
|
if (g_exInputName != NULL)
|
|||
|
|
{
|
|||
|
|
str = g_exInputName[addr];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ((temp&mod) != 0)
|
|||
|
|
{
|
|||
|
|
printf("%d. addr=%d, N7(%d) Input%d is off (%s) \r\n", inidx++, addr+1, i+1, j+1, str);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
printf("%d. addr=%d, N7(%d) Input%d is on (%s) \r\n", inidx++, addr+1, i+1, j+1, str);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
mod *= 2;
|
|||
|
|
DelayMs(2);
|
|||
|
|
sdct += 2;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (init == 0)
|
|||
|
|
{// <20><><EFBFBD>ӷָ<D3B7><D6B8><EFBFBD>
|
|||
|
|
printf("--------------------- \r\n");
|
|||
|
|
DelayMs(50);
|
|||
|
|
sdct += 50;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
memcpy(oldexinbuf, exinbuf, EXIO_PORT_NUM*sizeof(u16));
|
|||
|
|
|
|||
|
|
DelayMs(1);
|
|||
|
|
|
|||
|
|
sdct += 1;
|
|||
|
|
if (sdct > 500)
|
|||
|
|
{
|
|||
|
|
sdct = 0;
|
|||
|
|
ReportError(0);
|
|||
|
|
}
|
|||
|
|
TriggerTask(); // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>У<EFBFBD>TCP <20><><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
OperatorTaskWhenRun(0);
|
|||
|
|
|
|||
|
|
if (IsConsoleCancel() != 0) // <20>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD>ֹͣ
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
init = 1;
|
|||
|
|
GetExInputs(exinbuf);
|
|||
|
|
|
|||
|
|
}while(p1 != 0);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void OutByAddrOn(int idx, int addr)
|
|||
|
|
{
|
|||
|
|
char*str="";\
|
|||
|
|
if (g_exOutputName != NULL)
|
|||
|
|
{
|
|||
|
|
str = g_exOutputName[addr-1];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
SetExOutput(addr, Bit_RESET);
|
|||
|
|
printf("%d. addr=%d, N7(%d) Output%d is on (%s) \r\n", idx++, addr, (addr-1)/EXIO_PORT_NUM+1, addr%EXIO_PORT_NUM, str);
|
|||
|
|
DelayMs(4);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void OutByAddrOff(int idx, int addr)
|
|||
|
|
{
|
|||
|
|
char*str="";\
|
|||
|
|
if (g_exOutputName != NULL)
|
|||
|
|
{
|
|||
|
|
str = g_exOutputName[addr-1];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
SetExOutput(addr, Bit_SET);
|
|||
|
|
printf("%d. addr=%d, N7(%d) Output%d is off (%s) \r\n", idx++, addr, (addr-1)/EXIO_PORT_NUM+1, addr%EXIO_PORT_NUM, str);
|
|||
|
|
DelayMs(4);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void TestExOutput(char * para1, char * para2)
|
|||
|
|
{
|
|||
|
|
int p1, p2;
|
|||
|
|
int count, delay;
|
|||
|
|
int inidx = 0;
|
|||
|
|
int dl;
|
|||
|
|
int num;
|
|||
|
|
|
|||
|
|
if (para1 == NULL || para2 == NULL)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("para1=%s, para2=%s\r\n", para1, para2);
|
|||
|
|
|
|||
|
|
if (strcmp(para1, "") == 0 || strcmp(para2, "") == 0)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
p1 = atoi(para1);
|
|||
|
|
p2 = atoi(para2);
|
|||
|
|
|
|||
|
|
if (p1 == p2)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------
|
|||
|
|
|
|||
|
|
num = g_exOutputNum;
|
|||
|
|
if (num > MAX_EXIO_ADDR)
|
|||
|
|
{
|
|||
|
|
num = MAX_EXIO_ADDR;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (p1 == 0)
|
|||
|
|
{
|
|||
|
|
if (p2 == 0 || p2 == 1)
|
|||
|
|
{
|
|||
|
|
int i;
|
|||
|
|
if (p2 == 0)
|
|||
|
|
{
|
|||
|
|
for (i = 1; i <= num; i++)
|
|||
|
|
{
|
|||
|
|
OutByAddrOff(inidx, i);
|
|||
|
|
}
|
|||
|
|
inidx++;
|
|||
|
|
}
|
|||
|
|
else if (p2 == 1)
|
|||
|
|
{
|
|||
|
|
for (i = 1; i <= num; i++)
|
|||
|
|
{
|
|||
|
|
OutByAddrOn(inidx, i);
|
|||
|
|
}
|
|||
|
|
inidx++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
int rep, i;
|
|||
|
|
if (p2 == 2)
|
|||
|
|
{
|
|||
|
|
rep = 1;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
rep = S32_MAX;
|
|||
|
|
}
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
for (i = 1; i <= num; i++)
|
|||
|
|
{
|
|||
|
|
OutByAddrOn(inidx, i);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for (i = 1; i <= num; i++)
|
|||
|
|
{
|
|||
|
|
OutByAddrOn(inidx, i);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (IsConsoleCancel() != 0)
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TriggerTask(); // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>У<EFBFBD>TCP <20><><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
OperatorTaskWhenRun(0);
|
|||
|
|
|
|||
|
|
DelayMs(100);
|
|||
|
|
rep--;
|
|||
|
|
}while(rep != 0);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (p1 <= num)
|
|||
|
|
{
|
|||
|
|
dl = 1000;
|
|||
|
|
|
|||
|
|
if (p2 == 0)
|
|||
|
|
{
|
|||
|
|
OutByAddrOff(inidx, p1);
|
|||
|
|
inidx++;
|
|||
|
|
}
|
|||
|
|
else if (p2 == 1)
|
|||
|
|
{
|
|||
|
|
OutByAddrOn(inidx, p1);
|
|||
|
|
inidx++;
|
|||
|
|
}
|
|||
|
|
else if (p2 == 2)
|
|||
|
|
{
|
|||
|
|
OutByAddrOn(inidx, p1);
|
|||
|
|
inidx++;
|
|||
|
|
DelayMs(dl);
|
|||
|
|
if (dl != 0)
|
|||
|
|
{
|
|||
|
|
OutByAddrOff(inidx, p1);
|
|||
|
|
inidx++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (p2 > 0)
|
|||
|
|
{
|
|||
|
|
count = S32_MAX;
|
|||
|
|
while(count > 0)
|
|||
|
|
{
|
|||
|
|
count--;
|
|||
|
|
OutByAddrOn(inidx, p1);
|
|||
|
|
inidx++;
|
|||
|
|
delay = (p2+9)/10;
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
TriggerTask(); // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>У<EFBFBD>TCP <20><><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
OperatorTaskWhenRun(0);
|
|||
|
|
|
|||
|
|
DelayMs(10);
|
|||
|
|
if (IsConsoleCancel() != 0)
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
delay--;
|
|||
|
|
}while(delay != 0);
|
|||
|
|
|
|||
|
|
if (delay != 0)
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
if (dl == 1)
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
OutByAddrOff(inidx, p1);
|
|||
|
|
inidx++;
|
|||
|
|
|
|||
|
|
delay = (p2+9)/10;
|
|||
|
|
delay *= 4;
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
TriggerTask(); // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>У<EFBFBD>TCP <20><><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
OperatorTaskWhenRun(0);
|
|||
|
|
|
|||
|
|
DelayMs(10);
|
|||
|
|
if (IsConsoleCancel() != 0)
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
delay--;
|
|||
|
|
}while(delay != 0);
|
|||
|
|
if (delay != 0)
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
if (dl == 0)
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
OutByAddrOff(inidx, p1);
|
|||
|
|
inidx++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|
|