浅谈用单片机模拟PLC(山寨三菱系列)
下面是我的模拟程序,因为只实现了几条指令而且还并不完善所以编译程序和PLC指令表程序混在一起的,但这只是个思路因为我发现有些指令按我的办法基本不能实现但也算是个开始后面再慢慢改进吧,如果你想做一个更牛的可以去参考http://www.51hei.com/mcu/1985.html 下面是模拟编译的程序:本文引用地址:https://www.eepw.com.cn/article/201612/324257.htm
#include
//指令表模拟
#define AND &&
#define ANI && !
#define LD if(
#define LDI if( !
#define OUT )
//输入输出指令模拟
#define X000 P1_0
#define Y000 P2_0=1; else P2_0=0;
#define X001 P1_1
#define Y001 P2_1=1; else P2_1=0;
#define X002 P1_2
#define Y002 P2_2=1; else P2_2=0;
#define X003 P1_3
#define Y003 P2_3=1; else P2_3=0;
#define X004 P1_4
#define Y004 P2_4=1; else P2_4=0;
#define X005 P1_5
#define Y005 P2_5=1; else P2_5=0;
#define X006 P1_6
#define Y006 P2_6=1; else P2_6=0;
#define X007 P1_7
#define Y007 P2_7=1; else P2_7=0;
//输入输出口资源定义
int P1_0,P2_0,P1_1,P2_1,P1_2,P2_2,P1_3,P2_3,P1_4,P2_4,P1_5,P2_5,P1_6,P2_6,P1_7,P2_7;
//初始化函数
void chushihua()
{
P1_0=0;
P2_0=0;
P1_1=0;
P2_1=0;
P1_2=0;
P2_2=0;
P1_3=0;
P2_3=0;
P1_4=0;
P2_4=0;
P1_5=0;
P2_5=0;
P1_6=0;
P2_6=0;
P1_7=0;
P2_7=0;
}
//显示输入输出状态
void shurushuchu()
{
printf("输入输出口状态表");
printf("X0->%d X1->%d X2->%d X3->%d X4->%d X5->%d X6->%d X7->%d",P1_0,P1_1,P1_2,P1_3,P1_4,P1_5,P1_6,P1_7);
printf("Y0->%d Y1->%d Y2->%d Y3->%d Y4->%d Y5->%d Y6->%d Y7->%d",P2_0,P2_1,P2_2,P2_3,P2_4,P2_5,P2_6,P2_7);
}
//采集输入状态
void shuru()
{
printf("请更新输入点状态");
printf("X0<-");
scanf("%d",&P1_0);
printf("X1<-");
scanf("%d",&P1_1);
printf("X2<-");
scanf("%d",&P1_2);
printf("X3<-");
scanf("%d",&P1_3);
printf("X4<-");
scanf("%d",&P1_4);
printf("X5<-");
scanf("%d",&P1_5);
printf("X6<-");
scanf("%d",&P1_6);
printf("X7<-");
scanf("%d",&P1_7);
}
int main()
{
int x=0;
chushihua();
while(1)
{
shuru();
//进入PLC指令表程序部分编译器主体完工的话就能把这部分直接拿出来通过编译器编译了
LD X000
AND X002
ANI X001
OUT Y000
LD X003
AND X004
ANI X006
AND X007
OUT Y001
shurushuchu();
}
return 0;
}
评论