📄 main.plm
字号:
HSO_COMMAND=01H;
HSO_TIME=TIMER1+TURNOFF;
R0=0;
R0=0;
HSO_COMMAND=02H;
HSO_TIME=TIMER1+04H;
R0=0;
R0=0;
END;
T83:DO;
HSO_COMMAND=21H;
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=02H;
HSO_TIME=TIMER1+TURNOFF;
R0=0;
R0=0;
HSO_COMMAND=03H;
HSO_TIME=TIMER1+04H;
R0=0;
R0=0;
END;
END;
END;
ELSE IF AIM_SPD>=400 THEN DO;
TURNON=T_SPAN/3;
TURNOFF=T_SPAN/3;
DO CASE ORDER;
T70:DO;
HSO_COMMAND=22H;
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=03H;
HSO_TIME=TIMER1+TURNOFF;
R0=0;
R0=0;
HSO_COMMAND=00H;
HSO_TIME=TIMER1+04H;
R0=0;
R0=0;
END;
T71:DO;
HSO_COMMAND=23H;
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=00H;
HSO_TIME=TIMER1+TURNOFF;
R0=0;
R0=0;
HSO_COMMAND=01H;
HSO_TIME=TIMER1+04H;
R0=0;
R0=0;
END;
T72:DO;
HSO_COMMAND=20H;
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=01H;
HSO_TIME=TIMER1+TURNOFF;
R0=0;
R0=0;
HSO_COMMAND=02H;
HSO_TIME=TIMER1+04H;
R0=0;
R0=0;
END;
T73:DO;
HSO_COMMAND=21H;
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=02H;
HSO_TIME=TIMER1+TURNOFF;
R0=0;
R0=0;
HSO_COMMAND=03H;
HSO_TIME=TIMER1+04H;
R0=0;
R0=0;
END;
END;
END;
ELSE IF AIM_SPD>=200 THEN DO;
TURNON=T_SPAN*3/5;
TURNOFF=T_SPAN/3;
DO CASE ORDER;
T60:DO;
HSO_COMMAND=22H;
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=03H;
HSO_TIME=TIMER1+TURNOFF;
R0=0;
R0=0;
HSO_COMMAND=00H;
HSO_TIME=TIMER1+04H;
R0=0;
R0=0;
END;
T61:DO;
HSO_COMMAND=23H;
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=00H;
HSO_TIME=TIMER1+TURNOFF;
R0=0;
R0=0;
HSO_COMMAND=01H;
HSO_TIME=TIMER1+04H;
R0=0;
R0=0;
END;
T62:DO;
HSO_COMMAND=20H;
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=01H;
HSO_TIME=TIMER1+TURNOFF;
R0=0;
R0=0;
HSO_COMMAND=02H;
HSO_TIME=TIMER1+04H;
R0=0;
R0=0;
END;
T63:DO;
HSO_COMMAND=21H;
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=02H;
HSO_TIME=TIMER1+TURNOFF;
R0=0;
R0=0;
HSO_COMMAND=03H;
HSO_TIME=TIMER1+04H;
R0=0;
R0=0;
END;
END;
END;
ELSE DO;
TURNON=T_SPAN*4/5;
TURNOFF=T_SPAN/5;
DO CASE ORDER;
T55:DO;
HSO_COMMAND=22H;
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=03H;
HSO_TIME=TIMER1+TURNOFF;
R0=0;
R0=0;
HSO_COMMAND=00H;
HSO_TIME=TIMER1+04H;
R0=0;
R0=0;
END;
T56:DO;
HSO_COMMAND=23H;
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=00H;
HSO_TIME=TIMER1+TURNOFF;
R0=0;
R0=0;
HSO_COMMAND=01H;
HSO_TIME=TIMER1+04H;
R0=0;
R0=0;
END;
T57:DO;
HSO_COMMAND=20H;
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=01H;
HSO_TIME=TIMER1+TURNOFF;
R0=0;
R0=0;
HSO_COMMAND=02H;
HSO_TIME=TIMER1+04H;
R0=0;
R0=0;
END;
T58:DO;
HSO_COMMAND=21H;
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=02H;
HSO_TIME=TIMER1+TURNOFF;
R0=0;
R0=0;
HSO_COMMAND=03H;
HSO_TIME=TIMER1+04H;
R0=0;
R0=0;
END;
END;
END;
END;
ENABLE;
END HSO_PROCESS;
T1_INT:PROCEDURE INTERRUPT 0;
T1OVER=T1OVER+1;
IF T1OVER>50000 THEN T1OVER=0;
END T1_INT;
STOP:PROCEDURE;
DISABLE;
IF T1OVER>5 THEN DO;
HSO_COMMAND=06H;
HSO_TIME=TIMER1+02H;
R0=0;
R0=0;
HSO_COMMAND=07H;
HSO_TIME=TIMER1+02H;
R0=0;
R0=0;
END;
ELSE DO;
IF T_SPAN>18000 THEN DO;
HSO_COMMAND=07H;
HSO_TIME=TIMER1+02H;
R0=0;
R0=0;
HSO_COMMAND=06H;
HSO_TIME=TIMER1+02H;
R0=0;
R0=0;
END;
ELSE DO;
TURNON=T_SPAN*5/6;
TURNOFF=T_SPAN/2;
IF DIRECT=1 THEN DO;
DO CASE ORDER;
S00:DO;
HSO_COMMAND=23H;
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=02H;
HSO_TIME=TIMER1+TURNOFF;
END;
S01:DO;
HSO_COMMAND=20H; /*此处原来为00H*/
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=03H;
HSO_TIME=TIMER1+TURNOFF;
END;
S02:DO;
HSO_COMMAND=21H;
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=00H;
HSO_TIME=TIMER1+TURNOFF;
END;
S03:DO;
HSO_COMMAND=22H;
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=01H;
HSO_TIME=TIMER1+TURNOFF;
END;
END;
END;
ELSE DO;
DO CASE ORDER;
S10:DO;
HSO_COMMAND=23H;
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=00H;
HSO_TIME=TIMER1+TURNOFF;
END;
S11:DO;
HSO_COMMAND=20H; /*此处原来为00H*/
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=01H;
HSO_TIME=TIMER1+TURNOFF;
END;
S12:DO;
HSO_COMMAND=21H;
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=02H;
HSO_TIME=TIMER1+TURNOFF;
END;
S13:DO;
HSO_COMMAND=22H;
HSO_TIME=TIMER1+TURNON;
R0=0;
R0=0;
HSO_COMMAND=03H;
HSO_TIME=TIMER1+TURNOFF;
END;
END;
END;
END;
END;
ENABLE;
END STOP;
PWMTIME:PROCEDURE;
IOC2=0C0H;
HSO_COMMAND=0CEH;
HSO_TIME=150;
R0=0;
R0=0;
HSO_COMMAND=0E5H;
HSO_TIME=150;
R0=0;
R0=0;
CALL PWM_OUT;
END PWMTIME;
HSO_INT:PROCEDURE INTERRUPT 3;
KK=KK+1;
IF START_SIGN=0 THEN DO;
IF KK>20 THEN DO;
KK=1;
CALL PWM;
END;
ELSE CALL PWM_OUT;
END;
ELSE DO;
IF RUN_SPD<60 THEN DO;
IF KK>300 THEN DO;
KK=1;
CALL PWM;
END;
ELSE CALL PWM_OUT;
END;
ELSE IF AIM_SPD>300 THEN DO;
IF RUN_SPD<(AIM_SPD-300) THEN DO;
IF KK>32 THEN DO;
KK=1;
CALL PWM;
END;
ELSE CALL PWM_OUT;
END;
ELSE DO;
IF KK>400 THEN DO;
KK=1;
CALL PWM;
END;
ELSE CALL PWM_OUT;
END;
END;
ELSE DO;
IF KK>600 THEN DO;
KK=1;
CALL PWM;
END;
ELSE CALL PWM_OUT;
END;
END;
END HSO_INT;
PWM:PROCEDURE;
DECLARE(GE,GEC) BYTE;
DECLARE EE1 INTEGER;
DISABLE;
IF START_SIGN=0 THEN DO;
PWM_WIDTH=PWM_WIDTH-1;
IF T_SPAN>10000 THEN PWM_WIDTH=2;
ELSE IF T1OVER>15 THEN PWM_WIDTH=2;
IF PWM_WIDTH<2 THEN PWM_WIDTH=2;
END;
ELSE DO;/*E0 前次误差 E1 本次误差 EC 本次误差的变化率*/
E1=SIGNED(AIM_SPD-RUN_SPD);
EE1=E1;
IF IABS(EE1)>42 THEN DO;
IF AIM_SPD>RUN_SPD THEN EE1=42;
ELSE EE1=-42;
END;
GE=UNSIGN(EE1/6+7);
EC=E1-E0;
IF IABS(EC)>7 THEN DO;
IF E1>E0 THEN EC=7;
ELSE EC=-7;
END;
GEC=UNSIGN(EC+7);
PWM_WIDTH=PWM_WIDTH+FUZZY(GE*15+GEC);
PWM_WIDTH=PWM_WIDTH-7;
IF PWM_WIDTH>145 THEN PWM_WIDTH=145;
IF PWM_WIDTH<2 THEN PWM_WIDTH=2;
E0=E1;
END;
CALL PWM_OUT;
ENABLE;
END PWM;
PWM_OUT:PROCEDURE;
DISABLE;
HSO_COMMAND=55H;
HSO_TIME=PWM_WIDTH;
R0=0;
R0=0;
ENABLE;
END PWM_OUT;
/***主过程***/
MAINPROC:DO;
CALL TIME(500);
DISABLE;
IOC0=05H;
IOC1=66H;
IOC2=80H;
SP=0C0H;
INT_MASK=2DH;
INT_MASK1=23H;
INT_PENDING=00H;
INT_PEND1=00H;
HSI_MODE=0FH;
IOPORT1=0FFH;
IOPORT2=0;
COMM_8279=2FH;
R0=0;
R0=0;
COMM_8279=01H;
R0=0;
R0=0;
COMM_8279=0D3H;
START_SIGN=0;
AIM_SPD=0;
DIRECT=0;
FAULT=1FH;
PWM_WIDTH=0;
E0=0;
E1=0;
EC=0;
DISP_STATUS=0;
SPD_STEP=100;
RUN_SPD=0;
CONV_SPD=0;
KK=0;
DO II=0 TO 7;
TM1=HSI_TIME;
R0=0;
R0=0;
END;
ENABLE;
MAINLOOP:
DO;
CALL BITCPL(.IOPORT2,6);
IF START_SIGN=0 THEN DO;
IF T_SPAN>100000 THEN DO;
PWM_WIDTH=2;
RUN_SPD=0;
END;
ELSE IF T1OVER>5 THEN DO;
PWM_WIDTH=2;
RUN_SPD=0;
END;
END;
IF BID=1 THEN DO;
IF RUN_SPD=0 THEN DO;
IF DIRECT=1 THEN DIRECT=0;
ELSE DIRECT=1;
BID=0;
AIM_SPD=DEFAULT_SPD;
CALL START;
END;
END;
CALL DISPLAY;
END;
GOTO MAINLOOP;
END MAINPROC;
END MAIN;
EOF;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -