/* * 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); }
private TModuleType InitializeModule <TModuleType>() where TModuleType : IModule, new() { var moduleInstance = new TModuleType(); _modules.Add(moduleInstance); moduleInstance.Initialize(); return(moduleInstance); }
//硬件的返回数据处理方法 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; } }