public void SetControlMessage(TransmissionCotrolFunction fun) { switch (fun) { case TransmissionCotrolFunction.StartDataTransmission: { apci.ControlDomain1 = (1 << 2) | 0x03; break; } case TransmissionCotrolFunction.StopDataTransmission: { apci.ControlDomain1 = (1 << 4) | 0x03; break; } case TransmissionCotrolFunction.TestFrame: { apci.ControlDomain1 = (1 << 6) | 0x03; break; } case TransmissionCotrolFunction.AcknowledgementStartDataTransmission: { apci.ControlDomain1 = (1 << 3) | 0x03; break; } case TransmissionCotrolFunction.AcknowledgementStopDataTransmission: { apci.ControlDomain1 = (1 << 5) | 0x03; break; } case TransmissionCotrolFunction.AcknowledgementTestFrame: { apci.ControlDomain1 = (1 << 7) | 0x03;; break; } default: { throw new Exception("TransmissionCotrolFunction功能选择项不正确"); } } apci.ControlDomain2 = 0; apci.ControlDomain3 = 0; apci.ControlDomain4 = 0; transmissionCotrolFunction = fun; }
/// <summary> /// 查找是否包含指定typeID的类型EventProperty,若有则返回。 /// </summary> /// <param name="typeID">类型ID</param> /// <returns>EventProperty</returns> public EventProperty <TransmissionCotrolFunction> GetEventProcess(TransmissionCotrolFunction typeID) { try { return(eventList.Find(x => x.TypeID == typeID)); } catch (ArgumentNullException) { return(null); } }
/// <summary> /// 发送传输控制指令 /// </summary> /// <param name="tcf">传输控制功能</param> private void SendTCFCommand(TransmissionCotrolFunction tcf) { try { eventTransmissionManager.AddEventProcess(new EventProperty <TransmissionCotrolFunction>(tcf)); var apciU = new APCITypeU(tcf); TCFProcess(apciU.GetAPCIDataArray(), (byte)apciU.GetAPCIDataArray().Length, 5000, tcf); } catch (Exception ex) { MessageBox.Show(ex.Message, "SendTCFCommand"); } }
/// <summary> /// 传输控制功能TCF, 消息处理未完成后处理 /// </summary> /// <param name="n"></param> private void MeeageProcessNoCompleted(TransmissionCotrolFunction tcf) { Action <string> myDelegate = UpdateReciveTxt; Dispatcher.BeginInvoke(myDelegate, "应答失败\n"); switch (tcf) { case TransmissionCotrolFunction.StartDataTransmission: { break; } default: { break; } } }
/// <summary> /// TCF 处理流程 /// </summary> /// <param name="data">消息帧转化后,发送的字节数组</param> /// <param name="len">发送的数据长度</param> /// <param name="ms">超时时间,单位ms</param> /// <param name="EventTCF eventTCF">事件控制帧</param> private bool TCFProcess(byte[] data, byte len, int ms, TransmissionCotrolFunction tcf) { if (data.Length < len) { return(false); } var mStartEvent = eventTransmissionManager.GetEventProcess(tcf); var process = new ProcessControl <byte[], TransmissionCotrolFunction, TransmissionCotrolFunction>(data, tcf, tcf, StartMessageProcess, MeeageProcessCompleted, MeeageProcessNoCompleted, ms, mStartEvent.Event); process.StartProcessThread(); processList.Add(process); BeginInvokeUpdateHistory(data, len, "主站发送:U帧"); return(true); }
public APCITypeU(TransmissionCotrolFunction fun) { apci = new ApplicationProtocalControlnformation(); SetControlMessage(fun); apci.APDULength = 4; //仅仅只有APCI }
/// <summary> /// 移除指定typeID的类型EventProperty /// </summary> /// <param name="typeID">类型ID</param> public void RemoveEventProcess(TransmissionCotrolFunction typeID) { eventList.Remove(eventList.Find(x => x.TypeID == typeID)); }