前言
SMEMA是一种用于自动化生产线上相邻设备之间的标准通信协议,它通过IO信号来控制和协调设备间的物料传输。
原理说明
相邻设备间采用两组IO进行通讯。进料过程中,In1接收前站的请求出料信号,Out1通知前站当前设备空闲可以进行出料。同理,在出料过程中,Out2向后发生请求信号,In2 接受后站的状态。
运行逻辑如下
- 叫料:当本站空闲时,将Out1 设置为True,向前进进行叫料,并同步开始轮询In1 信号
- 进料:当本站检测到In1信号为True后,轨道启动进料,完成进料后将Out1信号设置为False
- 加工:对物料进行加工
- 等待出料:加工完成后,将Out2 信号设置为True,轮询In2信号,等待后站叫料。
- 出料:本站检查到In2 信号为True时,轨道开始出料,出料完成后将Out2 信号设置为False
程序实现
程序原理图如下,共分为5个状态:叫料、进料、加工、等待出料、出料。
伪代码
var _cts = new CancellationTokenSource();
var token = _cts.Token;
try
{
while(true)
{
token.ThrowIfCancellationRequested();
if(status == 叫料)
{
out1 = true;
if(!in1)
continue;
status = 进料;
}
else if(stasus == 进料)
{
LineStart();
if(!物料到位)
continue;
LineStop();
status = 加工;
}
else if(stasus == 加工)
{
Work();
status = 等待出料;
}
else if(stasus == 等待出料)
{
out2 = true;
if(!in2)
continue;
status = 出料;
}
else if(stasus == 出料)
{
LineStart();
if(!物料离开)
continue;
LineStop();
status = 叫料;
}
}
}
finally
{
AllStop();
}