/// <summary> /// 保护定值选择 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void DownloadProtectSetSelect_Click(object sender, RoutedEventArgs e) { try { var observale = (ObservableCollection <ProtectSetPoint>)protectSetPoint; if ((observale != null) && (observale.Count > 0)) { var qos = new QualifyCommandSet(ActionDescrible.Select); var protectsetAPDU = new APDU(appMessageManager.TransmitSequenceNumber, appMessageManager.RealReceiveSequenceNumber, TypeIdentification.C_SE_NC_1, true, (byte)observale.Count, CauseOfTransmissionList.Activation, appMessageManager.ASDUADdress, ProtectSetPoint.BasicAddress, qos); foreach (var m in observale) { if (m.InternalID <= observale.Count) { var sf = new ShortFloating((float)m.ParameterValue); protectsetAPDU.AddInformationObject(sf.GetDataArray(), (byte)sf.GetDataArray().Length, (byte)(m.InternalID - 1)); } else { throw new Exception("序号不在顺序范围之内,无法使用序列化方法,请检查InternalID是否连续"); } } //BeginInvokeUpdateHistory(fram.GetAPDUDataArray(), fram.FrameArray.Length, "测试"); SendTypeIMessage(TypeIdentification.P_ME_NC_1, protectsetAPDU); MakeLogMessage(sender, "定值选择" + protectsetAPDU.ToString(), LogType.ProtectSetpoint); } } catch (Exception ex) { MessageBox.Show(ex.Message, "DownloadProtectSetSelect_Click"); } }
/// <summary> /// 针对遥测信息,序列化 /// <summary> /// <param name="sf">浮点数</param> /// <param name="time">时间信标</param> public bool AddInformationObject(ShortFloating sf, CP56Time2a time) { bool state = false; if (ASDU.IsSequence == true) { return(state); } var data = new byte[sf.GetDataArray().Length + time.GetDataArray().Length]; Array.Copy(sf.GetDataArray(), 0, data, 0, sf.GetDataArray().Length); Array.Copy(time.GetDataArray(), 0 + sf.GetDataArray().Length, data, sf.GetDataArray().Length, time.GetDataArray().Length); ASDU.AddInformationObject(data, (byte)data.Length); return(true); }
/// <summary> /// 添加信息对象,非序列化,浮点数+地址+品质描述词 /// </summary> /// <param name="Address">遥测地址</param> /// <param name="sf">浮点数</param> public bool AddInformationObject(UInt32 address, ShortFloating sf) { bool state = false; if (ASDU.IsSequence == true) { return(state); } var data = new byte[3 + sf.GetDataArray().Length]; data[0] = ElementTool.GetBit7_0(address); data[1] = ElementTool.GetBit15_8(address); data[2] = ElementTool.GetBit23_16(address); Array.Copy(sf.GetDataArray(), 0, data, 3, sf.GetDataArray().Length); ASDU.AddInformationObject(data, (byte)data.Length); return(true); }
/// <summary> /// 添加序列化的信息对象:短浮点数(byte4)+品质描述词(byte1) /// <summary> /// <param name="sf">浮点数</param> /// <param name="qds">品质描述词</param> /// <param name="position">添加的位置</param> public bool AddInformationObject(ShortFloating sf, QualityDescription qds, byte position) { var data = new byte[5]; Array.Copy(sf.GetDataArray(), data, 4); data[4] = qds.QDS; ASDU.AddInformationObject(data, 5, position); return(true); }