internal override void InterpretResult(bool reverseByteOrder, IEECmdConverters cmdConv, IEECommandParameter cmdParams) { // ACK received... if (Data.Length < 4) { Code = EECmdResultCode.InvalidResult; return; } DpIdx = Data[1]; Variant = (ValueVariant)Data[2]; Precision = Data[3]; Name = StringHelper.ExtractStringContent(Data, 4, -1); }
internal override void InterpretResult(bool reverseByteOrder, IEECmdConverters cmdConv, IEECommandParameter cmdParams) { // ACK received... if (Data.Length < 6) { Code = EECmdResultCode.InvalidResult; return; } DpIdx = Data[1]; Variant = (ValueVariant)Data[2]; DataType = Data[3]; ScaleFactor = DataTypeConverter.ByteConverter.ToUInt16(Data, 4, reverseByteOrder); }
internal override void InterpretResult(bool reverseByteOrder, IEECmdConverters cmdConv, IEECommandParameter cmdParams) { // Create command specific result from data if (Data.Length < 1) { Code = EECmdResultCode.InvalidResult; } else { // Payload begins at second byte Payload = new byte[Data.Length - 1]; Array.Copy(Data, 1, Payload, 0, Data.Length - 1); } }
internal override void InterpretResult(bool reverseByteOrder, IEECmdConverters cmdConv, IEECommandParameter cmdParams) { if (Data.Length < 4) { Code = EECmdResultCode.InvalidResult; return; } ModeIdx = Data[1]; DataType = Data[2]; if (EE31DataType.ToValue(DataType, Data, 3, out object value, out byte[] valueData)) { ValueData = valueData; Value = value; }
internal override void InterpretResult(bool reverseByteOrder, IEECmdConverters cmdConv, IEECommandParameter cmdParams) { // Create command specific result from data if (Data.Length < cmdParams.CmdData.Length + 1) { Code = EECmdResultCode.InvalidResult; } else { // First response byte is 0, data begins at 1 int resultIdx = 1; // Get number of requested values from sent command data int nrValues = cmdParams.CmdData.Length / 2; for (int i = 0; i < nrValues; i++) { // Get MVCode from sent command data MVCode code = cmdConv.MVIndexToMVCode(cmdParams.CmdData[i * 2]); // Get data type (try to get from MVCode if invalid) MVDataType dataType = (MVDataType)Data[resultIdx++]; // Get value for data type double value = double.NaN; switch (dataType) { case MVDataType.Float: if ((resultIdx + 4) <= Data.Length) { value = DataTypeConverter.ByteConverter.ToFloat(Data, resultIdx, reverseByteOrder).ToDoubleWithFloatResolution(); } resultIdx += 4; break; case MVDataType.Double: if ((resultIdx + 8) <= Data.Length) { value = DataTypeConverter.ByteConverter.ToDouble(Data, resultIdx, reverseByteOrder); } resultIdx += 8; break; } MeasValues.Add(new KeyValuePair <MVCode, double>(code, value)); } } }
internal override void InterpretResult(bool reverseByteOrder, IEECmdConverters cmdConv, IEECommandParameter cmdParams) { // ACK received... if (Data.Length > 1 && 0xFF != Data[1]) { // Switch intervall [msec/100] SwitchInterval = Data[1] * 100; } if (Data.Length > 2 && 0xFF != Data[2]) { // Backlight brightness 0..100% BacklightBrightness = Data[2]; } if (Data.Length > 3 && 0xFF != Data[3]) { // Contrast 0..100% Contrast = Data[3]; } if (Data.Length > 4 && 0xFF != Data[4]) { // Display orientation (Normal, upside down,...) switch (Data[4]) { default: case 0: // Normal DisplayOrientation = Protocol.DisplayOrientation.Normal; break; case 1: // Upside down (180°) DisplayOrientation = Protocol.DisplayOrientation.UpsideDown; break; case 2: // Side (270°) DisplayOrientation = Protocol.DisplayOrientation.Side270; break; case 3: // Side (90°) DisplayOrientation = Protocol.DisplayOrientation.Side90; break; } } }
internal override void InterpretResult(bool reverseByteOrder, IEECmdConverters cmdConv, IEECommandParameter cmdParams) { // Create command specific result from data if (Data.Length < 18) { Code = EECmdResultCode.InvalidResult; return; } Out1_Voltage = Data[0] == 0x1; Out2_Voltage = Data[1] == 0x1; Out1_RangeMin = DataTypeConverter.ByteConverter.ToFloat(Data, 2, reverseByteOrder); Out1_RangeMax = DataTypeConverter.ByteConverter.ToFloat(Data, 6, reverseByteOrder); Out2_RangeMin = DataTypeConverter.ByteConverter.ToFloat(Data, 10, reverseByteOrder); Out2_RangeMax = DataTypeConverter.ByteConverter.ToFloat(Data, 14, reverseByteOrder); }
internal override void InterpretResult(bool reverseByteOrder, IEECmdConverters cmdConv, IEECommandParameter cmdParams) { // ACK received... if (Data.Length < 26) { Code = EECmdResultCode.InvalidResult; return; } BusAddr = Data[1]; IsEEProbe = Data[2] != 0; Name = StringHelper.ExtractStringContent(Data, 3, 16); int day = Math.Max(1, (int)Data[19]); int month = Math.Max(1, (int)Data[20]); int year = Math.Max(1, (int)DataTypeConverter.ByteConverter.ToUInt16(Data, 21, reverseByteOrder)); CalibExpiration = new DateTime(year, month, day); NrOfRetries = Data[23]; TimeoutMs = DataTypeConverter.ByteConverter.ToUInt16(Data, 24, reverseByteOrder); }
internal override void InterpretResult(bool reverseByteOrder, IEECmdConverters cmdConv, IEECommandParameter cmdParams) { if (Data.Length < 2) { Code = EECmdResultCode.InvalidResult; } else { // Create command specific result from data var hwCodes = new List <ushort>(); var major = new List <byte>(); var minor = new List <byte>(); var rev = new List <byte>(); for (int i = 0; i < Data.Length; i++) { hwCodes.Add(DataTypeConverter.ByteConverter.ToUInt16(Data, i, reverseByteOrder)); i += 2; if (i + 2 < Data.Length) { // Optional information for this HW code major.Add(Data[i]); minor.Add(Data[i + 1]); rev.Add(Data[i + 2]); } else { break; } } HWCodes = hwCodes; MajorVersions = major; MinorVersions = minor; Revisions = rev; } }
internal override void InterpretResult(bool reverseByteOrder, IEECmdConverters cmdConv, IEECommandParameter cmdParams) { // ACK received... if (Data.Length < 25) { Code = EECmdResultCode.InvalidResult; return; } ProbeID = Data[1]; SourceType = (ModbusSource)Data[2]; FuncCode = (ModbusFunc)Data[3]; SourceRegAddr = DataTypeConverter.ByteConverter.ToUInt16(Data, 4, reverseByteOrder); RequestIntervalMs = DataTypeConverter.ByteConverter.ToUInt16(Data, 6, reverseByteOrder); DataType = Data[8]; ScaleFactor = DataTypeConverter.ByteConverter.ToUInt16(Data, 9, reverseByteOrder); // TODO: LimitErrorMin = DataTypeConverter.ByteConverter.ToFloat(Data, ??, reverseByteOrder); // TODO: LimitErrorMax = DataTypeConverter.ByteConverter.ToFloat(Data, ??, reverseByteOrder); LimitWarningMin = DataTypeConverter.ByteConverter.ToFloat(Data, 11, reverseByteOrder); LimitWarningMax = DataTypeConverter.ByteConverter.ToFloat(Data, 15, reverseByteOrder); LimitHysteresis = DataTypeConverter.ByteConverter.ToFloat(Data, 19, reverseByteOrder); CustomUnitIdx = Data[23]; Unit = Data[24]; }
internal override void ConvertData(IEECmdConverters protConverters) { //... set bytes }
internal override void InterpretResult(bool reverseByteOrder, IEECmdConverters cmdConv, IEECommandParameter cmdParams) { // Create command specific result from data if (Data.Length < 1) { Code = EECmdResultCode.InvalidResult; } else { if (Data.Length > 1) { ModuleState = Data[1]; } ComPortSettings cps = new ComPortSettings(); // Decode settings byte cpsCoded = Data[0]; // Bits 0..2: Baudrate // Bit 7 = 0: (000 = 4k8, 001 = 9k6, 010 = 19k2, 011 = 38k4, 100 = 57k6, 101 = 76k8, 110 = 115k2) // Bit 7 = 1: (000 = 300, 001 = 600, 010 = 1k2, 011 = 2k4) // Bits 3..4: Parität (01 = None, 10 = Odd, 11 = Even) // Bit 5: Stoppbits (0 = 1 Stoppbit, 1 = 2 Stoppbits) // Bit 6: Datenbits (0 = 8 Datenbits, 1 = 7 Datenbits) if (0x80 == (cpsCoded & 0x80)) { // Bit 7 is 1 switch (cpsCoded & 0x07) { case 0: cps.Baudrate = 300; break; case 1: cps.Baudrate = 600; break; case 2: cps.Baudrate = 1200; break; case 3: cps.Baudrate = 2400; break; default: Code = EECmdResultCode.InvalidResult; break; } } else { // Bit 7 is 0 switch (cpsCoded & 0x07) { case 0: cps.Baudrate = 4800; break; case 1: cps.Baudrate = 9600; break; case 2: cps.Baudrate = 19200; break; case 3: cps.Baudrate = 38400; break; case 4: cps.Baudrate = 57600; break; case 5: cps.Baudrate = 76800; break; case 6: cps.Baudrate = 115200; break; default: Code = EECmdResultCode.InvalidResult; break; } } switch (cpsCoded & 0x18) { case (1 * 8): cps.Parity = System.IO.Ports.Parity.None; break; case (2 * 8): cps.Parity = System.IO.Ports.Parity.Odd; break; case (3 * 8): cps.Parity = System.IO.Ports.Parity.Even; break; default: Code = EECmdResultCode.InvalidResult; break; } switch (cpsCoded & 0x20) { case (0 * 32): cps.Stopbits = System.IO.Ports.StopBits.One; break; case (1 * 32): cps.Stopbits = System.IO.Ports.StopBits.Two; break; default: Code = EECmdResultCode.InvalidResult; break; } switch (cpsCoded & 0x40) { case (0 * 64): cps.Databits = 8; break; case (1 * 64): cps.Databits = 7; break; default: Code = EECmdResultCode.InvalidResult; break; } if (Code == EECmdResultCode.Success) { ComSettings = cps; } } }
/// <summary> /// Result classes might overwrite to provide special result handling. /// </summary> internal virtual void InterpretResult(bool reverseByteOrder, IEECmdConverters cmdConv, IEECommandParameter cmdParams) { }
internal override void InterpretResult(bool reverseByteOrder, IEECmdConverters cmdConv, IEECommandParameter cmdParams) { // ACK received... if (Data.Length < 2) { Code = EECmdResultCode.InvalidResult; return; } byte dispMode = Data[0]; // Bit 7 = 0: measurands numbering is from EE31 indices list. // Bit 7 = 1: measurands numbering as in Gen.Cfg MVCodesNumberTranslationNeeded = (0x80 != (dispMode & 0x80)); // Bit 6 = 0: automatic measuring range switch (on overflow) off // Bit 6 = 1: automatic measuring range switch (on overflow) on // settings.xxx = (0x40 == (dispMode & 0x40)); // Bit 5 = 0: backlight off // Bit 5 = 1: backlight on BacklightActive = (0x20 == (dispMode & 0x20)); // Bit 4 = 0: Startup logo off // Bit 4 = 1: Startup logo on // settings.xxx = (0x10 == (dispMode & 0x10)); // Bit 3 = 0: Startup lamptest off // Bit 3 = 1: Startup lamptest on // settings.xxx = (0x08 == (dispMode & 0x08)); // Bits 0..2: Display mode switch ((dispMode & 0x07)) { case 0: // Display off DisplayMode = Protocol.DisplayMode.Off; break; case 1: // One line DisplayMode = Protocol.DisplayMode.OneLine; break; case 2: // One line alternating DisplayMode = Protocol.DisplayMode.OneLineAlternating; break; case 3: // Two lines DisplayMode = Protocol.DisplayMode.TwoLines; break; case 4: // Three lines DisplayMode = Protocol.DisplayMode.ThreeLines; break; case 5: // Four lines // unused break; case 6: // unused break; case 7: // unused break; } // Fetch following measurand codes var listAssignedMeasurands = new List <MVCode>(); for (int idx = 1; idx < Data.Length; idx++) { MVCode mvc; if (MVCodesNumberTranslationNeeded) { mvc = cmdConv.MVIndexToMVCode(Data[idx]); } else { if (0xFF == Data[idx]) { mvc = MVCode.INVALID; } else { mvc = (MVCode)Data[idx]; } } listAssignedMeasurands.Add(mvc); } AssignedMeasurands = listAssignedMeasurands; }
internal virtual void ConvertData(IEECmdConverters protConverters) { }
internal override void ConvertData(IEECmdConverters protConverters) { // Translate MVCode to index if neccessary base.CmdData[0] = protConverters.MVCodeToEE31MVIndex((MVCode)base.CmdData[0]); base.CmdData[1] = protConverters.MVCodeToEE31MVIndex((MVCode)base.CmdData[1]); }