private bool ParseReadSend(FinsAddrInfo addrInfo, ref List <byte> sendmsg) { byte[] command = new byte[8]; // 指令 读 command[0] = PLCConvert.HighByte(Convert.ToUInt16(addrInfo.Operator)); command[1] = PLCConvert.LowByte(Convert.ToUInt16(addrInfo.Operator)); // 地址 command[2] = addrInfo.Area; // 区域 command[3] = addrInfo.HighByte; // 地址-整数位 command[4] = addrInfo.LowByte; command[5] = addrInfo.Decimal; // 地址-小数位 // 长度 command[6] = PLCConvert.HighByte(Convert.ToUInt16(addrInfo.FinsCount)); command[7] = PLCConvert.LowByte(Convert.ToUInt16(addrInfo.FinsCount)); var length = -8 + header.Count + 8; sendmsg.AddRange(header); sendmsg.RemoveRange(4, 4); // 数据段长度设置 sendmsg.InsertRange(4, PLCConvert.ArrayByte((UInt32)length)); sendmsg.AddRange(command); // 添加command return(true); }
private bool ParseWriteSend <T>(FinsAddrInfo addrInfo, List <T> values, ref List <byte> sendmsg) { List <byte> command = new List <byte>(8); // 指令 读 command[0] = PLCConvert.HighByte(Convert.ToUInt16(addrInfo.Operator)); command[1] = PLCConvert.LowByte(Convert.ToUInt16(addrInfo.Operator)); // 地址 command[2] = addrInfo.Area; // 区域 command[3] = addrInfo.HighByte; // 地址-整数位 command[4] = addrInfo.LowByte; command[5] = addrInfo.Decimal; // 地址-小数位 // 长度 command[6] = PLCConvert.HighByte(Convert.ToUInt16(addrInfo.Count)); command[7] = PLCConvert.LowByte(Convert.ToUInt16(addrInfo.Count)); // 数据 EValueType valueType = EValueType._BOOL; if (!PLCConvert.AddrValueType(typeof(T).Name, ref valueType)) { return(false); } List <byte> data = new List <byte>(); switch (valueType) { case EValueType._UNKNOW: return(false); case EValueType._BOOL: foreach (var i in values) { data.AddRange(BitConverter.GetBytes((Byte)(Object)i).Reverse()); } break; case EValueType._INT16: foreach (var i in values) { data.AddRange(BitConverter.GetBytes((Int16)(Object)i).Reverse()); } break; case EValueType._INT32: foreach (var i in values) { data.AddRange(BitConverter.GetBytes((Int32)(Object)i).Reverse()); } break; case EValueType._INT64: foreach (var i in values) { data.AddRange(BitConverter.GetBytes((Int64)(Object)i).Reverse()); } break; case EValueType._UINT16: foreach (var i in values) { data.AddRange(BitConverter.GetBytes((UInt16)(Object)i).Reverse()); } break; case EValueType._UINT32: foreach (var i in values) { data.AddRange(BitConverter.GetBytes((UInt32)(Object)i).Reverse()); } break; case EValueType._UINT64: foreach (var i in values) { data.AddRange(BitConverter.GetBytes((UInt64)(Object)i).Reverse()); } break; case EValueType._FLOAT: foreach (var i in values) { data.AddRange(BitConverter.GetBytes((Single)(Object)i).Reverse()); } break; case EValueType._DOUBLE: foreach (var i in values) { data.AddRange(BitConverter.GetBytes((Double)(Object)i).Reverse()); } break; } command.AddRange(data); var length = -8 + header.Count + command.Count + data.Count; var length_read = data.Count; sendmsg.AddRange(header); sendmsg.RemoveRange(4, 4); // 数据段长度设置 sendmsg.InsertRange(4, PLCConvert.ArrayByte((UInt32)length)); sendmsg.AddRange(command); // 添加command sendmsg.AddRange(data); // 添加data return(true); }