📄 plc_progtest.c
字号:
case 0x1048:{PLC_ProgDataTest(PLC_PC+2,3);PLC_PC+=14;}break; //WXOR
/********************(D)四则.逻辑运算(P)*******************************************/
case 0x1039:{PLC_ProgDataTest(PLC_PC+2,6);PLC_PC+=26;}break; //ADD(+)M8020(零标志)M8021(借位)M8022(进位)
case 0x103B:{PLC_ProgDataTest(PLC_PC+2,6);PLC_PC+=26;}break; //SUB(-)M8020(零标志)M8021(借位)M8022(进位)
case 0x103D:{PLC_ProgDataTest(PLC_PC+2,6);PLC_PC+=26;}break; //MUL(*)
case 0x103F:{PLC_ProgDataTest(PLC_PC+2,6);PLC_PC+=26;}break; //DIV(/)
case 0x1041:{PLC_ProgDataTest(PLC_PC+2,2);PLC_PC+=10;}break; //INC(++)
case 0x1043:{PLC_ProgDataTest(PLC_PC+2,2);PLC_PC+=10;}break; //DEC(--)
case 0x1045:{PLC_ProgDataTest(PLC_PC+2,6);PLC_PC+=26;}break; //WAND
case 0x1047:{PLC_ProgDataTest(PLC_PC+2,6);PLC_PC+=26;}break; //WOR
case 0x1049:{PLC_ProgDataTest(PLC_PC+2,6);PLC_PC+=26;}break; //WXOR
/********************数据处理************************************************/
case 0x0060:
{PLC_ProgDataTest(PLC_PC+2,2);
if(PLC_ProgTypeReturn(PLC_PC+2)!=PLC_ProgTypeReturn(PLC_PC+6))
{PLC_PROG_ERROR(6501);}//操作类型不一至
PLC_PC+=10;}break; //ZRST
/********************数据处理(P)*********************************************/
case 0x1060:
{PLC_ProgDataTest(PLC_PC+2,2);
if(PLC_ProgTypeReturn(PLC_PC+2)!=PLC_ProgTypeReturn(PLC_PC+6))
{PLC_PROG_ERROR(6501);}//操作类型不一至
PLC_PC+=10;}break; //ZRSTP
/********************高速指令************************************************/
case 0x0082:{PLC_ProgDataTest(PLC_PC+2,3);PLC_PC+=14;}break; //PLSY
case 0x0084:{PLC_ProgDataTest(PLC_PC+2,3);PLC_PC+=14;}break; //PWM
/********************(D)高速指令*********************************************/
case 0x0083:{PLC_ProgDataTest(PLC_PC+2,6);PLC_PC+=26;}break; //PLSY
/********************方便指令************************************************/
case 0x0094:{PLC_ProgDataTest(PLC_PC+2,1);PLC_PC+=6;}break; //ALT
case 0x1094:{PLC_ProgDataTest(PLC_PC+2,1);PLC_PC+=6;}break; //ALT(P)
/********************接点比较************************************************/
case 0x01D0:{PLC_ProgDataTest(PLC_PC+2,2);PLC_PC+=10;}break; //LD=
case 0x01D2:{PLC_ProgDataTest(PLC_PC+2,2);PLC_PC+=10;}break; //LD>
case 0x01D4:{PLC_ProgDataTest(PLC_PC+2,2);PLC_PC+=10;}break; //LD<
case 0x01D8:{PLC_ProgDataTest(PLC_PC+2,2);PLC_PC+=10;}break; //LD<>
case 0x01DA:{PLC_ProgDataTest(PLC_PC+2,2);PLC_PC+=10;}break; //LD<=
case 0x01DC:{PLC_ProgDataTest(PLC_PC+2,2);PLC_PC+=10;}break; //LD>=
case 0x01E0:{PLC_ProgDataTest(PLC_PC+2,2);PLC_PC+=10;}break; //AND=
case 0x01E2:{PLC_ProgDataTest(PLC_PC+2,2);PLC_PC+=10;}break; //AND>
case 0x01E4:{PLC_ProgDataTest(PLC_PC+2,2);PLC_PC+=10;}break; //AND<
case 0x01E8:{PLC_ProgDataTest(PLC_PC+2,2);PLC_PC+=10;}break; //AND<>
case 0x01EA:{PLC_ProgDataTest(PLC_PC+2,2);PLC_PC+=10;}break; //AND<=
case 0x01EC:{PLC_ProgDataTest(PLC_PC+2,2);PLC_PC+=10;}break; //AND>=
case 0x01F0:{PLC_ProgDataTest(PLC_PC+2,2);PLC_PC+=10;}break; //OR=
case 0x01F2:{PLC_ProgDataTest(PLC_PC+2,2);PLC_PC+=10;}break; //OR>
case 0x01F4:{PLC_ProgDataTest(PLC_PC+2,2);PLC_PC+=10;}break; //OR<
case 0x01F8:{PLC_ProgDataTest(PLC_PC+2,2);PLC_PC+=10;}break; //OR<>
case 0x01FA:{PLC_ProgDataTest(PLC_PC+2,2);PLC_PC+=10;}break; //OR<=
case 0x01FC:{PLC_ProgDataTest(PLC_PC+2,2);PLC_PC+=10;}break; //OR>=
/********************(D)接点比较************************************************/
case 0x01D1:{PLC_ProgDataTest(PLC_PC+2,4);PLC_PC+=18;}break; //LD=
case 0x01D3:{PLC_ProgDataTest(PLC_PC+2,4);PLC_PC+=18;}break; //LD>
case 0x01D5:{PLC_ProgDataTest(PLC_PC+2,4);PLC_PC+=18;}break; //LD<
case 0x01D9:{PLC_ProgDataTest(PLC_PC+2,4);PLC_PC+=18;}break; //LD<>
case 0x01DB:{PLC_ProgDataTest(PLC_PC+2,4);PLC_PC+=18;}break; //LD<=
case 0x01DD:{PLC_ProgDataTest(PLC_PC+2,4);PLC_PC+=18;}break; //LD>=
case 0x01E1:{PLC_ProgDataTest(PLC_PC+2,4);PLC_PC+=18;}break; //AND=
case 0x01E3:{PLC_ProgDataTest(PLC_PC+2,4);PLC_PC+=18;}break; //AND>
case 0x01E5:{PLC_ProgDataTest(PLC_PC+2,4);PLC_PC+=18;}break; //AND<
case 0x01E9:{PLC_ProgDataTest(PLC_PC+2,4);PLC_PC+=18;}break; //AND<>
case 0x01EB:{PLC_ProgDataTest(PLC_PC+2,4);PLC_PC+=18;}break; //AND<=
case 0x01ED:{PLC_ProgDataTest(PLC_PC+2,4);PLC_PC+=18;}break; //AND>=
case 0x01F1:{PLC_ProgDataTest(PLC_PC+2,4);PLC_PC+=18;}break; //OR=
case 0x01F3:{PLC_ProgDataTest(PLC_PC+2,4);PLC_PC+=18;}break; //OR>
case 0x01F5:{PLC_ProgDataTest(PLC_PC+2,4);PLC_PC+=18;}break; //OR<
case 0x01F9:{PLC_ProgDataTest(PLC_PC+2,4);PLC_PC+=18;}break; //OR<>
case 0x01FB:{PLC_ProgDataTest(PLC_PC+2,4);PLC_PC+=18;}break; //OR<=
case 0x01FD:{PLC_ProgDataTest(PLC_PC+2,4);PLC_PC+=18;}break; //OR>=
/********************结束指令************************************************/
case 0x000F:{for(PLC_TEMP1=0;PLC_TEMP1<128;PLC_TEMP1++) //测试P0-P127
{if(PLC_P_TEST(PLC_TEMP1)) //测试P(x)
{if(PLC_RAM16(PLC_R_START_ADD+0x5700+(PLC_TEMP1*2)))//测试保存的地址是否为0
{if(PLC_RAM16(PLC_PROG_START_ADD2+PLC_RAM16(PLC_R_START_ADD+0x5700+(PLC_TEMP1*2)))!=(0xB000+PLC_TEMP1))
{PLC_PC=PLC_RAM16(PLC_R_START_ADD+0x5700+(PLC_TEMP1*2));
PLC_PROG_ERROR(9501); //指令出错 CJ,CALL,无地址(P)
PLC_TEMP1=128;}} //退出测试
}
}
if(PLC_STL_CMD!=0){PLC_PROG_ERROR(9501);} //无步进返回指令
if(D8065==0&&D8068==0)
{PLC_RUN_BIT=3; //启动PLC运行标志
BOT_BIT=0xaa; //启动掉电标志
PLC_BIT_ON(M8002);
PLC_BIT_OFF(M8003);
PLC_BIT_ON(M8000);} //启动M8000
PLC_PC=PLC_PROG_END_ADD; //返回PC指针
}break; //END 运行PLC(M8000)
/********************常规指令************************************************/
default: //default(1)
{PLC_CMD=PLC_TEMP1&0Xf000; //分离指令
switch (PLC_CMD)//switch(2)
{case 0x2000: {PLC_PC+=2;}break;//LD
case 0x3000: {PLC_PC+=2;}break;//LDI
case 0x4000: {PLC_PC+=2;}break;//AND
case 0x5000: {PLC_PC+=2;}break;//ANI
case 0x6000: {PLC_PC+=2;}break;//OR
case 0x7000: {PLC_PC+=2;}break;//ORI
case 0xB000:
{if((PLC_TEMP1&0xff00)==0xb000)//P(x)
{PLC_P_ON(PLC_RAM8(PLC_TEMP1&0x00ff)); //启动测试位
PLC_RAM16(PLC_R_START_ADD+0x5700+((PLC_TEMP1&0x00ff)*2))=PLC_PC-PLC_PROG_START_ADD2;}
//else if((PLC_TEMP1&0xff00)==0xb000)//I(x)
else{PLC_PROG_ERROR(6501);} //指令出错
PLC_PC+=2;}break;//P(1)I(1)
case 0xC000: {PLC_PC+=2;}break;//OUT Y M
case 0xD000: {PLC_PC+=2;}break;//SET Y M
case 0xE000: {PLC_PC+=2;}break;//RST Y M
case 0xF000://STL
{if((PLC_TEMP1&0x0fff)>0x03ff){PLC_PROG_ERROR(1916);} //指令与操作数出错
PLC_STL_CMD=1;
PLC_PC+=2;}break;//STL S
default: //default(2)
{PLC_CMD=PLC_TEMP1&0xFF00; //分离指令
switch (PLC_CMD)//switch(3)
{case 0x0600:{PLC_ProgDataTest(PLC_PC+2,1);
PLC_PC+=6;}break; //OUT
case 0x0E00:{if((PLC_TEMP1&0x00FF)<200)
{PLC_ProgDataTest(PLC_PC+2,1);
PLC_PC+=6;}
else{PLC_ProgDataTest(PLC_PC+2,2);
PLC_PC+=10;}
}break;//END OUT C
default:{PLC_PROG_ERROR(6506);}break; //指令出错
}//END switch(3)
}break;//END default(2)
}//END switch(2)
}break;//END default(1)
}//END switch(1)
/***********************************************/
}//END while
}//END test_M8000
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -