public void CreateRequestCommandByteStreamForFunNum06() { FunNum06CustomerRequestData <int> customerRequestData = new FunNum06CustomerRequestData <int>(); customerRequestData.DeviceAddress = 1; customerRequestData.FunctionNum = FunctionNumType.FunctionNum06; customerRequestData.RegisterAddress = 1; customerRequestData.PresetData = 65535 + 1; List <List <byte> > rtuRequesCmdByteStreams = RTURequesCommandCreator.CreateRequestCommandByteStream <int>(customerRequestData); int countSplitOfcustomerRequestData = 2; Assert.True(countSplitOfcustomerRequestData == rtuRequesCmdByteStreams.Count); }
private static List <List <byte> > CreateRequestCommandByteStreamsForFunNum06 <T>(ICustomerRequestData customerRequestData) { List <List <byte> > requesCommandByteStreams = new List <List <byte> >(); FunNum06CustomerRequestData <T> funNum06CustomerRequestData = (FunNum06CustomerRequestData <T>)customerRequestData; List <FunNum06RequestDataBase> funNum06RequestDataBases = funNum06CustomerRequestData.CovertToFunNum06RequestDataBases(); foreach (FunNum06RequestDataBase item in funNum06RequestDataBases) { FunNum06RequestDataRTU funNum06RequestDataRTU = new FunNum06RequestDataRTU(); funNum06RequestDataRTU.FunNum06RequestDataBase = item; requesCommandByteStreams.Add(funNum06RequestDataRTU.ToByteList()); } return(requesCommandByteStreams); }
/// <summary> /// 因为:功能码06是设置单个寄存器(占两字节,所以T的类型只能为short ushort)的值 /// </summary> /// <param name="dataPoints"></param> /// <returns></returns> private static List <List <byte> > CreateRequestCommandByteStreamForFunNum06(DataAnalyzeMode dataAnalyzeMode, List <DataPoint> dataPoints) { List <List <byte> > requestCommandByteStreams = new List <List <byte> >(); DataPoint firstDataPoint = dataPoints.First(); int theFirstRegisterAddress = dataPoints.First().StartRegisterAddress; switch (firstDataPoint.DataPointDataType) { case DataPointDataType.S16: { FunNum06CustomerRequestData <short> customerRequestData = new FunNum06CustomerRequestData <short>(); customerRequestData.DataAnalyzeMode = dataAnalyzeMode; customerRequestData.DeviceAddress = (byte)firstDataPoint.DeviceAddress; customerRequestData.FunctionNum = FunctionNumType.FunctionNum06; customerRequestData.RegisterAddress = (ushort)theFirstRegisterAddress; customerRequestData.PresetData = (short)firstDataPoint.ValueToSet; requestCommandByteStreams = TCPRequesCommandCreator.CreateRequestCommandByteStream(customerRequestData); break; } case DataPointDataType.U16: { FunNum06CustomerRequestData <ushort> customerRequestData = new FunNum06CustomerRequestData <ushort>(); customerRequestData.DataAnalyzeMode = dataAnalyzeMode; customerRequestData.DeviceAddress = (byte)firstDataPoint.DeviceAddress; customerRequestData.FunctionNum = FunctionNumType.FunctionNum06; customerRequestData.RegisterAddress = (ushort)theFirstRegisterAddress; customerRequestData.PresetData = (ushort)firstDataPoint.ValueToSet; requestCommandByteStreams = TCPRequesCommandCreator.CreateRequestCommandByteStream(customerRequestData); break; } case DataPointDataType.S32: case DataPointDataType.U32: case DataPointDataType.S64: case DataPointDataType.U64: case DataPointDataType.F32: case DataPointDataType.D64: //因为:功能码06是设置单个寄存器(占两字节,所以T的类型只能为short ushort)的值 //其他T类型只能由功能码16(设置多个寄存器的值)去处理 requestCommandByteStreams = CreateRequestCommandByteStreamForFunNum16(dataAnalyzeMode, dataPoints); break; case DataPointDataType.Bit: break; default: break; } return(requestCommandByteStreams); }