Exemplo n.º 1
0
        /// <summary>
        /// 等待输入口稳定到指定状态
        /// </summary>
        /// <param name="pbquit">取消控制</param>
        /// <param name="sta_wait_for">指定状态</param>
        /// <param name="cnt">检查次数</param>
        /// <param name="delay">检查间隔</param>
        /// <param name="bdoevnet">为True时,循环中处理其他系统信息,例如界面刷新等</param>
        /// <returns></returns>
        public bool WaitForStable(ref bool pbquit, IO_STA sta_wait_for = IO_STA.IN_ON, int cnt = 3, int delay = 10, bool bdoevnet = true)
        {
            int n = 0;

            for (int i = 0; i < cnt; i++)
            {
                if (sta_wait_for == Status)
                {
                    n++;
                }
                Thread.Sleep(delay);
                if (bdoevnet)
                {
                    Application.DoEvents();
                }
                if (pbquit)
                {
                    break;
                }
            }
            if (n >= (cnt / 2 + 1))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 2
0
 /// <summary>
 /// IO翻转
 /// </summary>
 /// <returns></returns>
 public EM_RES Invert()
 {
     if (Status == IO_STA.OUT_ON)
     {
         Status = IO_STA.OUT_OFF;
     }
     else
     {
         Status = IO_STA.OUT_ON;
     }
     return(res);
 }
Exemplo n.º 3
0
        /// <summary>
        /// 等待到指定状态后立刻返回
        /// </summary>
        /// <param name="bquit">取消控制</param>
        /// <param name="sta_wait_for">指定状态</param>
        /// <param name="timeout_ms">超时控制</param>
        /// <param name="bshow_mgs">显示异常信息</param>
        /// <param name="bdoevnet">为True时,循环中处理其他系统信息,例如界面刷新等</param>
        /// <returns>在指时间内检查到指定状态则返回EM_RES.OK</returns>
        public EM_RES WaitForSta(ref bool bquit, IO_STA sta_wait_for, uint timeout_ms, bool bshow_mgs = true, bool bdoevnet = false)
        {
            //check
            res = ChkParam();
            if (res != EM_RES.OK)
            {
                return(res);
            }

            IO_STA pbitstate = 0;
            int    timeout   = (int)timeout_ms;

            do
            {
                //cancel
                if (bquit == true)
                {
                    return(res = EM_RES.QUIT);
                }

                //check and return
                pbitstate = Status;
                if (pbitstate == sta_wait_for)
                {
                    return(res = EM_RES.OK);
                }
                else if (pbitstate == IO_STA.ERR)
                {
                    res = EM_RES.ERR;
                    VAR.msg.AddMsg(Msg.EM_MSGTYPE.ERR, String.Format("{0} 等待状态返回异常!", disc));
                    return(res);
                }

                //delay 10ms
                if (timeout > 0)
                {
                    timeout -= 10;
                    if (bdoevnet)
                    {
                        Application.DoEvents();
                    }
                    Thread.Sleep(10);
                }
            } while (timeout > 0);

            if (bshow_mgs)
            {
                VAR.msg.AddMsg(Msg.EM_MSGTYPE.ERR, String.Format("{0} 等待 {1} 超时({2}ms)!", disc, sta_wait_for == IO_STA.IN_ON ? "ON" : "OFF", timeout_ms));
            }
            return(EM_RES.TIMEOUT);
        }
Exemplo n.º 4
0
        public GPIO(ushort io_num, AXIS ax, IO_DIR dir, IO_TYPE type, string disc, IO_STA default_sta = IO_STA.NULL, bool binvert = false)
        {
            this.bInvert = binvert;
            axis         = ax;
            card         = ax.card;
            if (card != null)
            {
                m_id = (int)(card.id << 8) + (int)(io_num & 0xFF);
            }
            else
            {
                m_id = -1;
            }

            num              = io_num;
            this.dir         = dir;
            this.type        = type;
            str_disc         = disc;
            this.default_sta = default_sta;

            //check num
            if (num < 0 || ((int)type == (int)IO_TYPE.VIRTUAL_ELN && (int)type == (int)IO_TYPE.VIRTUAL_ORG) && num >= card.ax_num)
            {
                VAR.msg.AddMsg(Msg.EM_MSGTYPE.ERR, String.Format("{0} io_num {1} 超范围[{2},{3})", disc, num, 0, card.ax_num));
            }
            else
            {
                if (dir == IO_DIR.IN && (type == IO_TYPE.MT_CARD && num >= card.input_num) || (type == IO_TYPE.IO_CARD && num > card.input_num))
                {
                    VAR.msg.AddMsg(Msg.EM_MSGTYPE.ERR, String.Format("{0} io_num {1} 超范围[{2},{3}]", disc, num, 0, card.input_num));
                }
                if (dir == IO_DIR.OUT && (type == IO_TYPE.MT_CARD && num >= card.output_num) || (type == IO_TYPE.IO_CARD && num > card.output_num))
                {
                    VAR.msg.AddMsg(Msg.EM_MSGTYPE.ERR, String.Format("{0} io_num {1} 超范围[{2},{3}]", disc, num, 0, card.output_num));
                }
            }

            ChkSafe = null;

            if (card != null)
            {
                card.GPIOList.Add(this);
            }
        }
Exemplo n.º 5
0
 /// <summary>
 /// 关闭IO
 /// </summary>
 /// <returns></returns>
 public EM_RES SetOff()
 {
     Status = IO_STA.OUT_OFF;
     return(res);
 }
Exemplo n.º 6
0
 /// <summary>
 /// 打开IO
 /// </summary>
 /// <returns></returns>
 public EM_RES SetOn()
 {
     Status = IO_STA.OUT_ON;
     return(res);
 }