防止IO持续信号





List<int> list = new List<int>() { 1,11, 2,3, 4,5, 6,22, 7, 8,9,10 };//产品:双数为ng 单数为ok
bool a=false;//传感器信号,true为有产品过来了,false无产品
int i = 0;
bool temp = false;
Task.Run(() =>
{
    while (true)
    {
        //读取传感器信号,a默认是没有产品的所以为false
        if (!a) temp = true;
        /*这里的判断是为了一个产品只进入一次。如果产品停留在传感器位置一直不动
         * 就会导致传感器的状态一直为true。temp是为了记入产品与产品的间隔,也就是a的false状态
         */
        if (a && temp)
        {
            if (list.Count-1 == i) i=0;
            temp = false;
            if (list[i]%2 == 0)//如果产品为NG
            {
                //打开吹气IO点位500ms后再关闭吹气io
                Console.WriteLine(list[i] + " --吹气中");
                Thread.Sleep(500);
                Console.WriteLine(list[i] + " --关闭吹气");
            }
            else Console.WriteLine("OK品"+ list[i]);
            i++;
        }
    }
});



//下面是模拟io信号
while (true)
{
    a = true;
    Thread.Sleep(50);//产品经过感应器的时间
    a = false;
    Thread.Sleep(5);//产品与产品之间的间隔时间(也就是传感器没有感应到产品的时间)
}


有不对的地方或者是有更好的方法,希望大家能给出建议

posted @ 2023-02-24 01:29  小red裤  阅读(23)  评论(0)    收藏  举报