//Public public ADU_FunctionRequest(PublicFunctionCodes functionCode, int address, object value) => Create(PDU.PDUType.Request, functionCode, address, value);
//Protected protected void Create(PDUType type, PublicFunctionCodes functionCode, int startAddress, object value) { if (value.GetType() == typeof(short[])) { short[] val = (short[])value; Type = type; Data.Add((byte)functionCode); Data.Add(HighByte(startAddress)); Data.Add(LowByte(startAddress)); Data.Add(HighByte(val.Length)); Data.Add(LowByte(val.Length)); Data.Add((byte)(val.Length * 2)); for (int i = 0; i < val.Length; i++) { Data.Add(HighByte(val[i])); Data.Add(LowByte(val[i])); } } else if (value.GetType() == typeof(int[])) { int[] val = (int[])value; Type = type; Data.Add((byte)functionCode); Data.Add(HighByte(startAddress)); Data.Add(LowByte(startAddress)); Data.Add(HighByte(val.Length * 2)); Data.Add(LowByte(val.Length * 2)); Data.Add((byte)(val.Length * 4)); for (int i = 0; i < val.Length; i++) { Data.Add(HighByteHighWord(val[i])); Data.Add(LowByteHighWord(val[i])); Data.Add(HighByte(val[i])); Data.Add(LowByte(val[i])); } } else if (value.GetType() == typeof(float[])) { float[] val = (float[])value; Type = type; Data.Add((byte)functionCode); Data.Add(HighByte(startAddress)); Data.Add(LowByte(startAddress)); Data.Add(HighByte(val.Length * 2)); Data.Add(LowByte(val.Length * 2)); Data.Add((byte)(val.Length * 4)); for (int i = 0; i < val.Length; i++) { byte[] b = BitConverter.GetBytes(val[i]); b = Reverse(b); Data.AddRange(b); } } else if (value.GetType() == typeof(int)) { Type = type; Data.Add((byte)functionCode); Data.Add(HighByte(startAddress)); Data.Add(LowByte(startAddress)); Data.Add(HighByte((int)value)); Data.Add(LowByte((int)value)); } else if (value.GetType() == typeof(bool)) { Type = type; Data.Add((byte)functionCode); Data.Add(HighByte(startAddress)); Data.Add(LowByte(startAddress)); if ((bool)value) { Data.Add(0xFF); } else { Data.Add(0xFF); } Data.Add(0); } }