示例#1
0
        /*
         * public uint NodeID { get { return _NodeID; } }
         * public string ModuleName { get { return _ModuleName; } }
         * public string SerialNo { get { lock (SyncObject) return _SerialNo; } }
         * public string FireWareVer { get { lock (SyncObject) return _FireWareVer; } }
         * public Byte ModuleIndex { get { lock (SyncObject) return _ModuleIndex; } }
         * public Byte ErrorCode { get { lock (SyncObject) return _ErrorCode; } }
         * public Byte WaringCode { get { lock (SyncObject) return _WaringCode; } }
         * public TModuleType ModuleType { get { lock (SyncObject) return _ModuleType; } }
         * public Byte ExecMask { get { lock (SyncObject) return _ExecMask; } }
         * public TModuleState ModuleState { get { lock (SyncObject) return _ModuleState; } }
         */

        public TBaseModule(uint ID, string Name)
        {
            //SyncObject = new object();

            _NodeID     = ID;
            _ModuleName = Name;
            _ModuleType = TModuleType.mtNone;
            _ExecMask   = 0;

            _ModuleState = TModuleState.msNone;

            _PortOpened = false;

            _WorkThread = WorkThread.CreateInstance();
            _WorkThread.AddModuleToList(this);

            //Dlgt = new AsyncSendWorker(SendMsgMethod);

            WriteDlgt = new WriteParamWorker(WriteDataToEEPRom);
            ReadDlgt  = new ReadParamWorker(ReadDataFromEEPRom);

            _SendCmd = new byte[8];

            //_SendCmd = System.Text.Encoding.Unicode.GetBytes();

            //处理该模块硬件响应数据的线程
            //Task.Factory.StartNew(DataHandlerMethod, cancelTokenSource.Token);
        }
示例#2
0
        private TModuleType InitializeModule <TModuleType>() where TModuleType : IModule, new()
        {
            var moduleInstance = new TModuleType();

            _modules.Add(moduleInstance);
            moduleInstance.Initialize();
            return(moduleInstance);
        }
示例#3
0
        //硬件的返回数据处理方法
        public virtual void DoMsg(byte[] Msg)
        {
            int Cnt;

            string MsgData;

            //下位机有响应数据返回

            if (_SendCmd != null)
            {
                if ((_SendCmd[0] == Msg[0]) ||
                    ((_SendCmd[0] == (byte)TCommandCode.CMD_EXTEND_CODE) &&
                     (Msg[0] == _SendCmd[1])))
                {
                    //_RecTime = Environment.TickCount;
                    _ReponseEvent.Set();  //事件置为有信号
                }
            }


            switch (Msg[0])
            {
            case (byte)TCommandCode.CMD_INFO_1:
                _ModuleIndex = Msg[1];
                _SerialNo    = ConvertSerail(Msg, 2);
                break;

            case (byte)TCommandCode.CMD_INFO_2:
                try
                {
                    SetModuleState(Msg);

                    //_ModuleState = TModuleState.msNone;
                    //for (int i = 0; i < 8; i++)
                    //{
                    //    _State.Set(i, (Msg[1] & (1 << i)) > 0);
                    //}
                    ////
                    //if (_State.Get(0)) _ModuleState = _ModuleState | TModuleState.msInited;
                    //if (_State.Get(1)) _ModuleState = _ModuleState | TModuleState.msPrepared;
                    //if (_State.Get(2)) _ModuleState = _ModuleState | TModuleState.msActive;
                    //if (_State.Get(3)) _ModuleState = _ModuleState | TModuleState.msHasErr;
                    //if (_State.Get(4)) _ModuleState = _ModuleState | TModuleState.msHasWarn;
                    //if (_State.Get(5)) _ModuleState = _ModuleState | TModuleState.msMoving;
                    //if (_State.Get(6)) _ModuleState = _ModuleState | TModuleState.msDetect;
                    //if (_State.Get(7)) _ModuleState = _ModuleState | TModuleState.msData;

                    //if (((_ModuleState & TModuleState.msHasErr) == TModuleState.msHasErr) ||
                    //    ((_ModuleState & TModuleState.msHasWarn) == TModuleState.msHasWarn))
                    //{
                    //    _ErrorCode = Msg[2];
                    //    _WaringCode = Msg[3];

                    //    MsgData = System.Text.Encoding.Unicode.GetString(Msg);

                    //    DoHander(TCommandEvent.CV_MODULE_ERROR, NodeID, MsgData);
                    //}
                    //else
                    //{
                    //    _ErrorCode = 0;
                    //    _WaringCode = 0;
                    //}
                }
                catch (NullReferenceException e)
                {
                    LogHelper.WriteLog(e.ToString());
                }

                break;

            case (byte)TCommandCode.CMD_INFO_3:
                _ModuleType  = GetModuleType(Msg[1]);                             //模块的类型
                _FireWareVer = System.Text.Encoding.Unicode.GetString(Msg, 2, 6); //Fireware版本号

                break;

            case (byte)TCommandCode.CMD_INFO_4:
                _ExecMask = Msg[1];
                break;

            case (byte)TCommandCode.CMD_GET_SHARE_EEPROM:
            case (byte)TCommandCode.CMD_UPLOAD:
            case (byte)TCommandCode.CMD_UPLOAD_EX:
            case (byte)TCommandCode.CMD_GET_MEM:
            case (byte)TCommandCode.CMD_GET_SW_EEPROM:
            case (byte)TCommandCode.CMD_GET_FW_EEPROM:
                if (Msg[1] == 0)
                {
                    MsgData = System.Text.Encoding.Unicode.GetString(Msg);
                    DoHander(TCommandEvent.CV_MODULE_ERROR, NodeID, MsgData);
                }

                else
                {
                    MsgData = System.Text.Encoding.Unicode.GetString(Msg, 2, 6);
                    _DataBuff.Append(MsgData);
                }
                break;

            case (byte)TCommandCode.CMD_GET_PORT:
                MsgData = System.Text.Encoding.Unicode.GetString(Msg, 1, 7);
                _DataBuff.Append(MsgData);

                break;

            case (byte)TCommandCode.CMD_COM_PORT_IO:
                if ((Msg[1] & 0x01) != 0x01)
                {
                    MsgData = System.Text.Encoding.Unicode.GetString(Msg);
                    DoHander(TCommandEvent.CV_MODULE_ERROR, NodeID, MsgData);
                }

                else if ((Msg[1] & 0x02) != 0x02)
                {
                    Cnt     = (Msg[2] & 0x1C) >> 2;
                    MsgData = System.Text.Encoding.Unicode.GetString(Msg, 2, Cnt);
                    _DataBuff.Append(MsgData);
                    DoHander(TCommandEvent.CV_MODULE_PORT, NodeID, _DataBuff.ToString());
                }
                break;

            default:
                if (Enum.IsDefined(typeof(TCommandCode), Msg[0]))
                {
                    if (Msg[1] == 0)
                    {
                        MsgData = System.Text.Encoding.Unicode.GetString(Msg);
                        DoHander(TCommandEvent.CV_MODULE_ERROR, NodeID, MsgData);
                    }
                }
                break;
            }
        }