📄 plc_run.c
字号:
PLC_TEMP2=PLC_ByteRead16(PLC_PC+6);
PLC_TEMP3=PLC_ByteRead16(PLC_PC+10);
PLC_TEMP4=PLC_ProgAddReturn(PLC_PC+14);
if(PLC_TEMP1>PLC_TEMP3)
{PLC_BIT_ON(PLC_TEMP4);PLC_BIT_OFF(PLC_TEMP4+1);PLC_BIT_OFF(PLC_TEMP4+2);}
else if(PLC_TEMP2<PLC_TEMP3)
{PLC_BIT_OFF(PLC_TEMP4);PLC_BIT_OFF(PLC_TEMP4+1);PLC_BIT_ON(PLC_TEMP4+2);}
else{PLC_BIT_OFF(PLC_TEMP4);PLC_BIT_ON(PLC_TEMP4+1);PLC_BIT_OFF(PLC_TEMP4+2);}
}}//END PLC_ACC_BIT&0x01
else{PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=18;}break; //ZCP
case 0x1028:
{if(PLC_ACC_BIT&0x01)
{if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_ByteWrite16(PLC_PC+6,PLC_ByteRead16(PLC_PC+2));}}
else{PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=10;}break; //MOV
case 0x102E:
{if(PLC_ACC_BIT&0x01){
if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_TEMP5=PLC_ProgAddReturn(PLC_PC+2)+PLC_R_START_ADD;
PLC_TEMP6=PLC_ProgAddReturn(PLC_PC+6)+PLC_R_START_ADD;
PLC_TEMP3=PLC_ByteRead16(PLC_PC+10)*2;
for(PLC_TEMP4=0;PLC_TEMP3>PLC_TEMP4;PLC_TEMP4+=2)
{if(PLC_BIT_TEST(M8024)){PLC_RAM16(PLC_TEMP5+PLC_TEMP4)=PLC_RAM16(PLC_TEMP6+PLC_TEMP4);}
else {PLC_RAM16(PLC_TEMP6+PLC_TEMP4)=PLC_RAM16(PLC_TEMP5+PLC_TEMP4);}
}
}}//END PLC_ACC_BIT&0x01
else{PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=14;}break; //BMOV(M8024)
/********************(D)传送比较指令(P)******************************************/
case 0x1025://CMP
{if(PLC_ACC_BIT&0x01){
if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_TEMP5=PLC_ByteRead32(PLC_PC+2);
PLC_TEMP6=PLC_ByteRead32(PLC_PC+10);
PLC_TEMP3=PLC_ProgAddReturn(PLC_PC+18);
if(PLC_TEMP5>PLC_TEMP6)
{PLC_BIT_ON(PLC_TEMP3);PLC_BIT_OFF(PLC_TEMP3+1);PLC_BIT_OFF(PLC_TEMP3+2);}
else if(PLC_TEMP5==PLC_TEMP6)
{PLC_BIT_OFF(PLC_TEMP3);PLC_BIT_ON(PLC_TEMP3+1);PLC_BIT_OFF(PLC_TEMP3+2);}
else{PLC_BIT_OFF(PLC_TEMP3);PLC_BIT_OFF(PLC_TEMP3+1);PLC_BIT_ON(PLC_TEMP3+2);}
}}//END PLC_ACC_BIT&0x01
else{PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=26;}break; //CMP
case 0x1027://ZCP
{if(PLC_ACC_BIT&0x01){
if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_TEMP5=PLC_ByteRead32(PLC_PC+2);
PLC_TEMP6=PLC_ByteRead32(PLC_PC+10);
PLC_TEMPA=PLC_ByteRead32(PLC_PC+18);
PLC_TEMP4=PLC_ProgAddReturn(PLC_PC+26);
if(PLC_TEMP5>PLC_TEMPA)
{PLC_BIT_ON(PLC_TEMP4);PLC_BIT_OFF(PLC_TEMP4+1);PLC_BIT_OFF(PLC_TEMP4+2);}
else if(PLC_TEMP6<PLC_TEMPA)
{PLC_BIT_OFF(PLC_TEMP4);PLC_BIT_OFF(PLC_TEMP4+1);PLC_BIT_ON(PLC_TEMP4+2);}
else{PLC_BIT_OFF(PLC_TEMP4);PLC_BIT_ON(PLC_TEMP4+1);PLC_BIT_OFF(PLC_TEMP4+2);}
}}//END PLC_ACC_BIT&0x01
else{PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=34;}break; //ZCP
case 0x1029://MOV
{if(PLC_ACC_BIT&0x01)
{if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_ByteWrite32(PLC_PC+10,PLC_ByteRead32(PLC_PC+2));}}
else{PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=18;}break; //MOV
/********************四则.逻辑运算*******************************************/
case 0x0038://ADD(+)M8020(零标志)M8021(借位)M8022(进位)
{if(PLC_ACC_BIT&0x01)
{PLC_ByteWrite16(PLC_PC+10,PLC_ByteRead16(PLC_PC+2)+PLC_ByteRead16(PLC_PC+6));}
PLC_PC+=14;}break; //ADD(+)
case 0x003A://SUB(-)M8020(零标志)M8021(借位)M8022(进位)
{if(PLC_ACC_BIT&0x01)
{PLC_ByteWrite16(PLC_PC+10,PLC_ByteRead16(PLC_PC+2)-PLC_ByteRead16(PLC_PC+6));}
PLC_PC+=14;}break; //SUB(-)
case 0x003C://MUL(*)
{if(PLC_ACC_BIT&0x01)
{PLC_ByteWrite32(PLC_PC+10,PLC_ByteRead16(PLC_PC+2)*PLC_ByteRead16(PLC_PC+6));}
PLC_PC+=14;}break; //MUL(*)
case 0x003E: //DIV(/)
{if(PLC_ACC_BIT&0x01){
PLC_TEMP1=PLC_ByteRead16(PLC_PC+2);
PLC_TEMP2=PLC_ByteRead16(PLC_PC+6);
PLC_ByteWrite32(PLC_PC+10,(PLC_TEMP1/PLC_TEMP2)+((PLC_TEMP1%PLC_TEMP2)*0x10000));
}//END PLC_ACC_BIT
PLC_PC+=14;}break; //DIV(/)
case 0x0040://INC(++)
{if(PLC_ACC_BIT&0x01)
{PLC_ByteWrite16(PLC_PC+2,PLC_ByteRead16(PLC_PC+2)+1);}
PLC_PC+=6;}break; //INC(++)
case 0x0042://DEC(--)
{if(PLC_ACC_BIT&0x01)
{PLC_ByteWrite16(PLC_PC+2,PLC_ByteRead16(PLC_PC+2)-1);}
PLC_PC+=6;}break; //DEC(--)
case 0x0044://WAND
{if(PLC_ACC_BIT&0x01)
{PLC_ByteWrite16(PLC_PC+10,PLC_ByteRead16(PLC_PC+2)&PLC_ByteRead16(PLC_PC+6));}
PLC_PC+=14;}break; //WAND
case 0x0046://WOR
{if(PLC_ACC_BIT&0x01)
{PLC_ByteWrite16(PLC_PC+10,PLC_ByteRead16(PLC_PC+2)|PLC_ByteRead16(PLC_PC+6));}
PLC_PC+=14;}break; //WOR
case 0x0048://WXOR
{if(PLC_ACC_BIT&0x01)
{PLC_ByteWrite16(PLC_PC+10,PLC_ByteRead16(PLC_PC+2)^PLC_ByteRead16(PLC_PC+6));}
PLC_PC+=14;}break; //WXOR
/********************(D)四则.逻辑运算*******************************************/
case 0x0039://ADD(+)M8020(零标志)M8021(借位)M8022(进位)
{if(PLC_ACC_BIT&0x01)
{PLC_ByteWrite32(PLC_PC+18,PLC_ByteRead32(PLC_PC+2)+PLC_ByteRead32(PLC_PC+10));}
PLC_PC+=26;}break; //ADD(+)
case 0x003B://SUB(-)
{if(PLC_ACC_BIT&0x01)
{PLC_ByteWrite32(PLC_PC+18,PLC_ByteRead32(PLC_PC+2)-PLC_ByteRead32(PLC_PC+10));}
PLC_PC+=26;}break; //SUB(-)M8020(零标志)M8021(借位)M8022(进位)
case 0x003D://MUL(*)
{if(PLC_ACC_BIT&0x01)
{PLC_TEMP8=PLC_ByteRead32(PLC_PC+2);
PLC_TEMP9=PLC_ByteRead32(PLC_PC+10);
PLC_TEMP7=PLC_TEMP8*PLC_TEMP9;
PLC_ByteWrite64(PLC_PC+18,PLC_TEMP7,(PLC_TEMP7/0x100000000));}
PLC_PC+=26;}break; //MUL(*)
case 0x003F://DIV(/)
{if(PLC_ACC_BIT&0x01){
PLC_TEMP5=PLC_ByteRead32(PLC_PC+2);
PLC_TEMP6=PLC_ByteRead32(PLC_PC+10);
PLC_ByteWrite64(PLC_PC+18,PLC_TEMP5/PLC_TEMP6,PLC_TEMP5%PLC_TEMP6);
}//END PLC_ACC_BIT
PLC_PC+=26;}break; //DIV(/)
case 0x0041://INC(++)
{if(PLC_ACC_BIT&0x01)
{PLC_ByteWrite32(PLC_PC+2,PLC_ByteRead32(PLC_PC+2)+1);}
PLC_PC+=10;}break; //INC(++)
case 0x0043://DEC(--)
{if(PLC_ACC_BIT&0x01)
{PLC_ByteWrite32(PLC_PC+2,PLC_ByteRead32(PLC_PC+2)-1);}
PLC_PC+=10;}break; //DEC(--)
case 0x0045://WAND
{if(PLC_ACC_BIT&0x01)
{PLC_ByteWrite32(PLC_PC+18,PLC_ByteRead32(PLC_PC+2)&PLC_ByteRead32(PLC_PC+10));}
PLC_PC+=26;}break; //WAND
case 0x0047://WOR
{if(PLC_ACC_BIT&0x01)
{PLC_ByteWrite32(PLC_PC+18,PLC_ByteRead32(PLC_PC+2)|PLC_ByteRead32(PLC_PC+10));}
PLC_PC+=26;}break; //WOR
case 0x0049://WXOR
{if(PLC_ACC_BIT&0x01)
{PLC_ByteWrite32(PLC_PC+18,PLC_ByteRead32(PLC_PC+2)^PLC_ByteRead32(PLC_PC+10));}
PLC_PC+=26;}break; //WXOR
/********************四则.逻辑运算(P)*******************************************/
case 0x1038://ADD(+)M8020(零标志)M8021(借位)M8022(进位)
{if(PLC_ACC_BIT&0x01)
{if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_ByteWrite16(PLC_PC+10,PLC_ByteRead16(PLC_PC+2)+PLC_ByteRead16(PLC_PC+6));}}
else {PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=14;}break; //ADD(+)
case 0x103A://SUB(-)M8020(零标志)M8021(借位)M8022(进位)
{if(PLC_ACC_BIT&0x01)
{if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_ByteWrite16(PLC_PC+10,PLC_ByteRead16(PLC_PC+2)-PLC_ByteRead16(PLC_PC+6));}}
else {PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=14;}break; //SUB(-)
case 0x103C://MUL(*)
{if(PLC_ACC_BIT&0x01)
{if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_ByteWrite32(PLC_PC+10,PLC_ByteRead16(PLC_PC+2)*PLC_ByteRead16(PLC_PC+6));}}
else {PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=14;}break; //MUL(*)
case 0x103E: //DIV(/)
{if(PLC_ACC_BIT&0x01){
if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_TEMP1=PLC_ByteRead16(PLC_PC+2);
PLC_TEMP2=PLC_ByteRead16(PLC_PC+6);
PLC_ByteWrite32(PLC_PC+10,(PLC_TEMP1/PLC_TEMP2)+((PLC_TEMP1%PLC_TEMP2)*0x10000));}
}//END PLC_ACC_BIT
else {PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=14;}break; //DIV(/)
case 0x1040://INC(++)
{if(PLC_ACC_BIT&0x01)
{if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_ByteWrite16(PLC_PC+2,PLC_ByteRead16(PLC_PC+2)+1);}}
else {PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=6;}break; //INC(++)
case 0x1042://DEC(--)
{if(PLC_ACC_BIT&0x01)
{if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_ByteWrite16(PLC_PC+2,PLC_ByteRead16(PLC_PC+2)-1);}}
else {PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=6;}break; //DEC(--)
case 0x1044://WAND
{if(PLC_ACC_BIT&0x01)
{if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_ByteWrite16(PLC_PC+10,PLC_ByteRead16(PLC_PC+2)&PLC_ByteRead16(PLC_PC+6));}}
else {PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=14;}break; //WAND
case 0x1046://WOR
{if(PLC_ACC_BIT&0x01)
{if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_ByteWrite16(PLC_PC+10,PLC_ByteRead16(PLC_PC+2)|PLC_ByteRead16(PLC_PC+6));}}
else {PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=14;}break; //WOR
case 0x1048://WXOR
{if(PLC_ACC_BIT&0x01)
{if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_ByteWrite16(PLC_PC+10,PLC_ByteRead16(PLC_PC+2)^PLC_ByteRead16(PLC_PC+6));}}
else {PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=14;}break; //WXOR
/********************(D)四则.逻辑运算(P)*******************************************/
case 0x1039://ADD(+)M8020(零标志)M8021(借位)M8022(进位)
{if(PLC_ACC_BIT&0x01)
{if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_ByteWrite32(PLC_PC+18,PLC_ByteRead32(PLC_PC+2)+PLC_ByteRead32(PLC_PC+10));}}
else {PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=26;}break; //ADD(+)
case 0x103B://SUB(-)
{if(PLC_ACC_BIT&0x01)
{if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_ByteWrite32(PLC_PC+18,PLC_ByteRead32(PLC_PC+2)-PLC_ByteRead32(PLC_PC+10));}}
else {PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=26;}break; //SUB(-)M8020(零标志)M8021(借位)M8022(进位)
case 0x103D://MUL(*)
{if(PLC_ACC_BIT&0x01)
{if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_TEMP8=PLC_ByteRead32(PLC_PC+2);
PLC_TEMP9=PLC_ByteRead32(PLC_PC+10);
PLC_TEMP7=PLC_TEMP8*PLC_TEMP9;
PLC_ByteWrite64(PLC_PC+18,PLC_TEMP7,PLC_TEMP7/0x100000000);}}
else {PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=26;}break; //MUL(*)
case 0x103F://DIV(/)
{if(PLC_ACC_BIT&0x01){
if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_TEMP5=PLC_ByteRead32(PLC_PC+2);
PLC_TEMP6=PLC_ByteRead32(PLC_PC+10);
PLC_ByteWrite64(PLC_PC+18,PLC_TEMP5/PLC_TEMP6,PLC_TEMP5%PLC_TEMP6);}
}//END PLC_ACC_BIT
else {PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=26;}break; //DIV(/)
case 0x1041://INC(++)
{if(PLC_ACC_BIT&0x01)
{if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_ByteWrite32(PLC_PC+2,PLC_ByteRead32(PLC_PC+2)+1);}}
else {PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=10;}break; //INC(++)
case 0x1043://DEC(--)
{if(PLC_ACC_BIT&0x01)
{if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_ByteWrite32(PLC_PC+2,PLC_ByteRead32(PLC_PC+2)-1);}}
else {PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=10;}break; //DEC(--)
case 0x1045://WAND
{if(PLC_ACC_BIT&0x01)
{if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_ByteWrite32(PLC_PC+18,PLC_ByteRead32(PLC_PC+2)&PLC_ByteRead32(PLC_PC+10));}}
else {PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=26;}break; //WAND
case 0x1047://WOR
{if(PLC_ACC_BIT&0x01)
{if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_ByteWrite32(PLC_PC+18,PLC_ByteRead32(PLC_PC+2)|PLC_ByteRead32(PLC_PC+10));}}
else {PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=26;}break; //WOR
case 0x1049://WXOR
{if(PLC_ACC_BIT&0x01)
{if(PLC_FNC_P_BIT_TEST(PLC_PC-PLC_PROG_START_ADD2)==0)
{PLC_FNC_P_BIT_ON(PLC_PC-PLC_PROG_START_ADD2);
PLC_ByteWrite32(PLC_PC+18,PLC_ByteRead32(PLC_PC+2)^PLC_ByteRead32(PLC_PC+10));}}
else {PLC_FNC_P_BIT_OFF(PLC_PC-PLC_PROG_START_ADD2);}
PLC_PC+=26;}break; //WXOR
/********************数据处理************************************************/
case 0x0060: //ZRST
{if(PLC_ACC_BIT&0x01)
{PLC_TEMP1=PLC_ProgTypeReturn(PLC_PC+2);
if(PLC_TEMP1==0x02)
{PLC_TEMP2=PLC_ProgAddReturn(PLC_PC+6)+1;
if(PLC_TEMP2>=0x0C00&&PLC_TEMP2<=0x0CDF){PLC_TEMP2+=2;}
PLC_ByteReset(PLC_ProgAddReturn(PLC_PC+2),PLC_TEMP2);}
else if(PLC_TEMP1==0x0b)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -