From 741afaa30107e9b01050360f3d0cfa9719da2d6e Mon Sep 17 00:00:00 2001 From: babayaga Date: Thu, 24 Apr 2025 18:58:59 +0200 Subject: [PATCH] tests:each image to cpp --- packages/kbot/tests/pdf/omron/omron.h | 6882 +++++++++++++++++++++++++ 1 file changed, 6882 insertions(+) diff --git a/packages/kbot/tests/pdf/omron/omron.h b/packages/kbot/tests/pdf/omron/omron.h index fdbe23ce..2d4d292e 100644 --- a/packages/kbot/tests/pdf/omron/omron.h +++ b/packages/kbot/tests/pdf/omron/omron.h @@ -2092,3 +2092,6885 @@ enum class E5C_Status2Upper_Bits : uint16_t // ... add other relevant bits based on manual section 5-2 }; */ + + +#ifndef E5C_MODBUS_REGISTERS_HPP +#define E5C_MODBUS_REGISTERS_HPP + +#include // Required for uint16_t + +// --- E5C Modbus Command Codes --- +// Represents the Command Codes used for various operations on the E5C device. +// These codes are typically written to a specific command register (often 0x0000) via Modbus. +enum class E5C_CommandCode : uint16_t +{ + E_CommunicationsWriting = 0x00, // Controls Modbus communications writing (enable/disable) + E_RunStop = 0x01, // Starts or stops control operation + E_MultiSP = 0x02, // Selects the target Set Point (SP) number + E_ATExecuteCancel = 0x03, // Executes or cancels Auto-Tuning (AT) + E_WriteMode = 0x04, // Selects the write mode (Backup or RAM only) + E_SaveRAMData = 0x05, // Saves data from RAM to non-volatile memory (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_SoftwareReset = 0x06, // Performs a software reset (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_MoveToSetupArea1 = 0x07, // Moves operation to Setup Area 1 (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_MoveToProtectLevel = 0x08, // Moves operation to the Protect Level (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_AutoManualSwitch = 0x09, // Switches between Automatic and Manual control mode + E_ParameterInitialization = 0x0B, // Initializes parameters to default values (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_AlarmLatchCancel = 0x0C, // Cancels specified latched alarms + E_SPMode = 0x0D, // Selects Set Point (SP) mode (Local or Remote) + E_InvertDirectReverse = 0x0E, // Selects direct or reverse operation (Invert/Not Invert) via Command + E_ProgramStart = 0x11, // Starts or resets a program pattern +}; + +// --- Parameter Enums for Specific Command Codes --- +// These enums define the valid "Related Information" values (data) sent with specific commands. + +// Parameters for E_CommunicationsWriting (0x00) +enum class E5C_CommWrite_Param : uint16_t +{ + E_OffDisabled = 0x00, + E_OnEnabled = 0x01, +}; + +// Parameters for E_RunStop (0x01) +enum class E5C_RunStop_Param : uint16_t +{ + E_Run = 0x00, + E_Stop = 0x01, +}; + +// Parameters for E_MultiSP (0x02) +enum class E5C_MultiSP_Param : uint16_t +{ + E_SetPoint0 = 0x00, + E_SetPoint1 = 0x01, + E_SetPoint2 = 0x02, + E_SetPoint3 = 0x03, + E_SetPoint4 = 0x04, + E_SetPoint5 = 0x05, + E_SetPoint6 = 0x06, + E_SetPoint7 = 0x07, +}; + +// Parameters for E_ATExecuteCancel (0x03) +enum class E5C_ATExecuteCancel_Param : uint16_t +{ + E_ATCancel = 0x00, // Cancel Auto-Tuning + E_ATExecute100Pct = 0x01, // Execute 100% Auto-Tuning + E_ATEexecute40Pct = 0x02, // Execute 40% Auto-Tuning +}; + +// Parameters for E_WriteMode (0x04) +enum class E5C_WriteMode_Param : uint16_t +{ + E_Backup = 0x00, // Writes are backed up to non-volatile memory + E_RAMWriteMode = 0x01, // Writes affect RAM only +}; + +// Parameters for E_AutoManualSwitch (0x09) +enum class E5C_AutoManualSwitch_Param : uint16_t +{ + E_AutomaticMode = 0x00, + E_ManualMode = 0x01, +}; + +// Parameters for E_AlarmLatchCancel (0x0C) +enum class E5C_AlarmLatchCancel_Param : uint16_t +{ + E_Alarm1LatchCancel = 0x00, + E_Alarm2LatchCancel = 0x01, + E_Alarm3LatchCancel = 0x02, + E_HBAlarmLatchCancel = 0x03, // Heater Break alarm latch cancel + E_HSAlarmLatchCancel = 0x04, // Heater Short alarm latch cancel (?) + E_Alarm4LatchCancel = 0x05, // Alarm 4 latch cancel (?) + E_AllAlarmLatchCancel = 0x0F, // Cancel all latched alarms +}; + +// Parameters for E_SPMode (0x0D) +enum class E5C_SPMode_Param : uint16_t +{ + E_LocalSPMode = 0x00, + E_RemoteSPMode = 0x01, +}; + +// Parameters for E_InvertDirectReverse (0x0E) - Command based +enum class E5C_InvertDirectReverseCmd_Param : uint16_t +{ + E_NotInvert = 0x00, // Direct operation (Command parameter) + E_Invert = 0x01, // Reverse operation (Command parameter) +}; + +// Parameters for E_ProgramStart (0x11) +enum class E5C_ProgramStart_Param : uint16_t +{ + E_Reset = 0x00, // Reset the program/pattern + E_Start = 0x01, // Start the program/pattern +}; + +// Constant for commands where the related information is always 0x0000 +constexpr uint16_t E5C_COMMAND_PARAM_DEFAULT = 0x0000; +// This value should be used as the data when issuing commands like: +// - E_SaveRAMData +// - E_SoftwareReset +// - E_MoveToSetupArea1 +// - E_MoveToProtectLevel (Command, not the register 0x2504) +// - E_ParameterInitialization + +// --- E5C Modbus Variable Area Registers (Holding Registers - Two-Byte Mode Addresses) --- +// Represents the addresses for reading/writing various parameters and status values. +// Based on the "Variable Area (Setting Range) List" sections of the Communications Manual (H175). +// Note: Addresses are based on the "Two-byte mode" column. +enum class E5C_HoldingRegister : uint16_t +{ + // --- Operation Level Monitors (Addresses ~0x2000 - 0x20FF) --- + E_PV = 0x2000, // Process Value (Read-Only) + E_Status1 = 0x2001, // Status 1 (Bitfield, Read-Only, see manual section 5-2. Note *1, *2 apply) + E_InternalSetPoint = 0x2002, // Internal Set Point (Read-Only? Note *1 applies) + E_HeaterCurrent1Value = 0x2003, // Heater Current 1 Value Monitor (Read-Only, Range: 0.0 to 55.0 A) + E_MV_MonitorHeating = 0x2004, // Manipulated Value Monitor (Heating Output) (Read-Only, %: Range -5.0 to 105.0 or 0.0 to 105.0) + E_MV_MonitorCooling = 0x2005, // Manipulated Value Monitor (Cooling Output) (Read-Only, %: Range 0.0 to 105.0) + + // --- Primary Setting Parameters (Addresses ~0x2100 - 0x21FF) --- + E_SetPoint = 0x2103, // Set Point (SP) value (Writable & Readable, Primary SP setting, likely the *active* SP or SP0 in non-MultiSP mode) + E_AlarmValue1 = 0x2104, // Alarm Value 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueUpperLimit1 = 0x2105, // Alarm Value Upper Limit 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueLowerLimit1 = 0x2106, // Alarm Value Lower Limit 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValue2 = 0x2107, // Alarm Value 2 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueUpperLimit2 = 0x2108, // Alarm Value Upper Limit 2 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueLowerLimit2 = 0x2109, // Alarm Value Lower Limit 2 (Writable, Range: -1999 to 9999) [Main Setting] + // Add other registers from 0x21xx range if needed from other tables + + // --- Status/Monitor Parameters (Addresses ~0x2400 - 0x24FF) --- + E_PV_StatusArea = 0x2402, // Process Value (Read-Only status copy) + E_InternalSetPoint_StatusArea = 0x2403, // Internal Set Point (Read-Only status copy, Note *1) + E_MultiSP_NoMonitor = 0x2404, // Multi-SP No. Monitor (Which SP is currently active: 0 to 7, Read-Only) + E_Status1_StatusArea = 0x2406, // Status 1 (Read-Only status copy, Bitfield, Note *1, *2 apply) + E_StatusWord3_Leftmost = 0x2407, // Status Word 3 / Leftmost bits (Part of a larger status? Read-Only, Note *3 applies) + E_Status2_LowerWord = 0x2408, // Status 2 (Rightmost 16 bits / Lower Word. Read-Only, Bitfield, Note *1, *2 apply) + E_Status2_UpperWord = 0x2409, // Status 2 (Leftmost 16 bits / Upper Word. Read-Only, Bitfield, Note *1, *3 apply) + E_DecimalPointMonitor = 0x2410, // Decimal Point Monitor (Position for PV/SP display: 0 to 3, Read-Only) + // Add other registers from 0x24xx range if needed + + // --- Protect Level Parameters (Addresses ~0x2500 - 0x25FF, Ref Manual Page 5-3) --- + E_OperationAdjustmentProtect = 0x2500, // Sets Operation/Adjustment Protection Level (Writable, See E5C_OperationProtect_Param) + E_InitialSettingCommsProtect = 0x2501, // Sets Initial Setting/Communications Protection Level (Writable, See E5C_InitialProtect_Param) + E_SettingChangeProtect = 0x2502, // Enable/Disable Setting Change Protect via front panel (Writable, See E5C_SettingChangeProtect_Param) + E_PF_KeyProtect = 0x2503, // Enable/Disable PF Key Protect (Writable, See E5C_PFKeyProtect_Param) + E_MoveToProtectLevelSetting = 0x2504, // Sets the password value needed to move to protect level (Writable, Range: -1999 to 9999 or FFFF831 to 270F) + E_PasswordToMoveToProtectLevel = 0x2505, // Write the password here to attempt moving to the protect level (Write-Only? Monitor value always 0) + E_ParameterMaskEnable = 0x2506, // Enable/Disable Parameter Mask (Writable, See E5C_ParamMaskEnable_Param) (Monitor value always 0) + E_ChangedParametersOnly = 0x2507, // Control Change Parameters setting (Writable, See E5C_ChangedParamsOnly_Param) + + // --- Manual Control / Operation Level Parameters (Addresses ~0x2600 - 0x26FF, Ref Manual Page 5-3) --- + E_ManualMV = 0x2600, // Manual Manipulated Value (Writable in Manual Mode) (%: Ranges vary by model/setting) + E_SetPoint_OperationLevel = 0x2601, // Set Point visible/settable in Operation Level (Writable, Range: SP lower to SP upper limit) (Likely mirrors E_SetPoint=0x2103 but accessible differently) + E_RemoteSPMonitor = 0x2602, // Remote SP Monitor (Read-Only, Range: Remote SP lower limit +/-10% FS) + E_HeaterCurrent1ValueMonitor_OpLevel = 0x2604, // Heater Current 1 Value Monitor (Read-Only, 0.0 to 55.0 A) (Likely same value as 0x2003) + E_MVMonitorHeating_OpLevel = 0x2605, // MV Monitor (Heating) (Read-Only, %: -5.0 to 105.0 or 0.0 to 105.0) (Likely same value as 0x2004) + E_MVMonitorCooling_OpLevel = 0x2606, // MV Monitor (Cooling) (Read-Only, %: 0.0 to 105.0) (Likely same value as 0x2005) + E_ValveOpeningMonitor = 0x2607, // Valve Opening Monitor (Read-Only, %: -10.0 to 110.0) + + // --- Adjustment Level / PID / Control Parameters (Addresses ~0x2700 - 0x27FF approx. from page 5-4 and 5-5) --- + E_ProportionalBandCooling = 0x2701, // Proportional Band (Cooling) (Writable, Range: 0.1 to 999.9) [Adjustment Level] + E_IntegralTimeCooling = 0x2702, // Integral Time (Cooling) (Writable, Range: 0 to 9999 s / 0.0 to 999.9 s depending on derivative unit) [Adjustment Level] + E_DerivativeTimeCooling = 0x2703, // Derivative Time (Cooling) (Writable, Same range as Integral) [Adjustment Level] + E_DeadBand = 0x2704, // Dead Band (Writable, Range: -199.9 to 999.9 for temp input / -19.99 to 99.99 for analog input) [Adjustment Level] + E_ManualResetValue = 0x2705, // Manual Reset Value (Writable, Range: 0.0 to 100.0 %) [Adjustment Level] + E_HysteresisHeating = 0x2706, // Hysteresis (Heating) (Writable, Range: 0.1 to 999.9 for temp input / 0.01 to 99.99 for analog input) [Adjustment Level] + E_HysteresisCooling = 0x2707, // Hysteresis (Cooling) (Writable, Same range as Heating) [Adjustment Level] + E_ControlPeriodHeating = 0x2708, // Control Period (Heating) (Writable, Special values or 1 to 99 s) [Initial Setting Level] (See E5C_ControlPeriod_SpecialVal) + E_ControlPeriodCooling = 0x2709, // Control Period (Cooling) (Writable, Special values or 1 to 99 s) [Initial Setting Level] (See E5C_ControlPeriod_SpecialVal) + E_PositionPropDeadBand = 0x270A, // Position Proportional Dead Band (Writable, Range: 0.1 to 10.0) [Adjustment Level] + E_OpenCloseHysteresis = 0x270B, // Open/Close Hysteresis (Writable, Range: 0.1 to 20.0) [Adjustment Level] + E_SPRampTimeUnit = 0x270C, // SP Ramp Time Unit (Writable) [Advanced Function Setting Level] (See E5C_SPRampTimeUnit_Param) + E_SPRampSetValue = 0x270D, // SP Ramp Set Value (Writable, 0=OFF or 1 to 9999 in units from 0x270C) [Adjustment Level] (See E5C_SPRampSetValue_SpecialVal) + E_SPRampFallValue = 0x270E, // SP Ramp Fall Value (Writable, -1=Same as Set, 0=OFF or 1 to 9999) [Adjustment Level] (See E5C_SPRampFallValue_SpecialVal) + E_MVAtStop = 0x270F, // MV (%) at Stop (Writable, Range: -5.0 to 105.0 / -105.0 to 105.0 varies) [Advanced Function Setting Level] + E_MVAtPVError = 0x2711, // MV (%) at PV Error (Writable, Range: -5.0 to 105.0 / -105.0 to 105.0 varies) [Advanced Function Setting Level] + E_MVChangeRateLimit = 0x2713, // MV Change Rate Limit (Writable, 0.0=OFF or 0.1 to 100.0 %/s) [Advanced Function Setting Level] + E_PVInputSlopeCoeff = 0x2718, // PV Input Slope Coefficient (Writable, Range: 0.001 to 9.999) [Advanced Function Setting Level] + E_HeaterCurrent1ValueMonitor_Adv = 0x271A, // Heater Current 1 Value Monitor (Read-Only, 0.0 to 55.0 A) [ Seems redundant, matches 0x2003/0x2604] + E_HeaterBurnoutDetection1 = 0x271B, // Heater Burnout Detection 1 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_LeakageCurrent1Monitor = 0x271C, // Leakage Current 1 Monitor (Read-Only, 0.0 to 55.0? Units not specified, likely mA) [Operation Level] + E_HSAlarm1 = 0x271D, // HS (Heater Short?) Alarm 1 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_ProcessValueInputShift = 0x2723, // Process Value Input Shift (Writable, Range: -1999 to 9999) [Adjustment Level] + E_HeaterCurrent2ValueMonitor = 0x2724, // Heater Current 2 Value Monitor (Read-Only, 0.0 to 55.0 A) [Operation Level] + E_HeaterBurnoutDetection2 = 0x2725, // Heater Burnout Detection 2 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_LeakageCurrent2Monitor = 0x2726, // Leakage Current 2 Monitor (Read-Only, 0.0 to 55.0 mA?) [Operation Level] + E_HSAlarm2 = 0x2727, // HS (Heater Short?) Alarm 2 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_SoakTimeRemain = 0x2728, // Soak Time Remain (Read-Only?, Range: 0 to 9999) [Operation Level] + E_SoakTime = 0x2729, // Soak Time (Writable, Range: 1 to 9999) [Adjustment Level] + E_WaitBand = 0x272A, // Wait Band (Writable, 0=OFF, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Adjustment Level] (See E5C_WaitBand_SpecialVal) + E_RemoteSPInputShift = 0x272B, // Remote SP Input Shift (Writable, Range: -1999 to 9999) [Advanced Function Setting Level] + E_RemoteSPInputSlopeCoeff = 0x272C, // Remote SP Input Slope Coefficient (Writable, Range: 0.001 to 9.999) [Advanced Function Setting Level] + + // --- Advanced Function Setting Level / Initial Setting (Addresses ~0x2800 - 0x2DFF) --- + E_InputDigitalFilter = 0x2800, // Input Digital Filter (Writable, Range: 0.0 to 999.9) [Advanced Function Setting Level] + E_MovingAverageCount = 0x2804, // Moving Average Count (Writable) [Advanced Function Setting Level] (See E5C_MovingAverageCount_Param) + E_ExtractionOfSquareRootLowCutPoint = 0x2808, // Extraction of Square Root Low-cut Point (%) (Writable, Range: 0.0 to 100.0) [Adjustment Level] + + E_InputType = 0x2C00, // Input Type selection (Writable, See E5C_InputType_Param) [Initial Setting Level] + E_TemperatureUnit = 0x2C01, // Temperature Unit selection (Writable, See E5C_TemperatureUnit_Param) [Initial Setting Level] + E_ScalingLowerLimit = 0x2C09, // Scaling Lower Limit (Writable, Range: -1999 to Scaling Upper Limit - 1) [Advanced Function Setting Level] + E_ScalingUpperLimit = 0x2C0B, // Scaling Upper Limit (Writable, Range: Scaling Lower Limit + 1 to 9999) [Advanced Function Setting Level] + E_DecimalPoint = 0x2C0C, // Decimal Point position for PV/SP (Writable, 0-3) [Advanced Function Setting Level] (See E5C_DecimalPoint_Param) + E_RemoteSPUpperLimit = 0x2C0D, // Remote SP Upper Limit (Writable, Range depends on input type/scaling) [Advanced Function Setting Level] + E_RemoteSPLowerLimit = 0x2C0E, // Remote SP Lower Limit (Writable, Range depends on input type/scaling) [Advanced Function Setting Level] + E_PVDecimalPointDisplay = 0x2C0F, // PV Decimal Point Display ON/OFF (Writable, See E5C_PVDecimalPointDisplay_Param) [Advanced Function Setting Level] + + E_DirectReverseOperation = 0x2D12, // Direct/Reverse operation setting (Writable, See E5C_DirectReverseOperation_Param) [Initial Setting Level] (Different from Command 0x0E) + E_CloseFloating = 0x2D13, // Close/Floating (position-proportional control) (Writable, See E5C_CloseFloating_Param) [Initial Setting Level] + E_PidOnOff = 0x2D14, // PID/ON-OFF Control Selection (Writable, See E5C_PidOnOff_Param) [Initial Setting Level] + E_ST_Setting = 0x2D15, // Self-Tuning ON/OFF (Writable, See E5C_ST_Param) [Initial Setting Level] + E_ProgramPattern = 0x2D16, // Program Pattern Execution State (Writable, See E5C_ProgramPattern_Param) [Initial Setting Level] + E_RemoteSPInputType = 0x2D18, // Remote SP Input range selection (Writable, See E5C_RemoteSPInputType_Param) [Advanced Function Setting Level] + E_MinimumOutputOnOffBand = 0x2D19, // Minimum Output ON/OFF Band (Writable, Range: 0.0 to 50.0) [Advanced Function Setting Level] + E_ControlOutput1Signal = 0x2D03, // Control Output 1 Signal Type (Writable, See E5C_ControlOutputSignal_Param) [Initial Setting Level] + E_ControlOutput2Signal = 0x2D04, // Control Output 2 Signal Type (Writable, See E5C_ControlOutputSignal_Param) [Initial Setting Level] + E_SPUpperLimit = 0x2D0F, // SP Upper Limit (Writable, Range depends on input type/scaling) [Initial Setting Level] + E_SPLowerLimit = 0x2D10, // SP Lower Limit (Writable, Range depends on input type/scaling) [Initial Setting Level] + E_StandardOrHeatingCooling= 0x2D11, // Control Mode: Standard or Heating/Cooling (Writable, See E5C_ControlMode_Param) [Initial Setting Level] + + E_TransferOutputType = 0x2E00, // Transfer Output Type (Writable, See E5C_TransferOutputType_Param) [Initial Setting Level] + E_TransferOutputSignal = 0x2E01, // Transfer Output Signal Range (Writable, See E5C_TransferOutputSignal_Param) [Initial Setting Level] + + // --- Operation Level Parameters (Duplicated Address? / Specific Uses) (Addresses ~0x2900 - 0x29FF) --- + E_SP0_OperationLevel = 0x2900, // SP 0 Setting (Writable, Range: SP lower limit to SP upper limit) [Operation Level] (Likely same as E_SetPoint when SP 0 is selected) + E_AlarmValue1_OperationLevel = 0x2902, // Alarm Value 1 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValue1=0x2104) + E_AlarmValueUpperLimit1_OperationLevel = 0x2903, // Alarm Value Upper Limit 1 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValueUpperLimit1=0x2105) + E_AlarmValueLowerLimit1_OperationLevel = 0x2904, // Alarm Value Lower Limit 1 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValueLowerLimit1=0x2106) + E_AlarmValue2_OperationLevel = 0x2905, // Alarm Value 2 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValue2=0x2107) + E_AlarmValueUpperLimit2_OperationLevel = 0x2906, // Alarm Value Upper Limit 2 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValueUpperLimit2=0x2108) + E_AlarmValueLowerLimit2_OperationLevel = 0x2907, // Alarm Value Lower Limit 2 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValueLowerLimit2=0x2109) + E_AlarmValue3 = 0x2908, // Alarm Value 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueUpperLimit3 = 0x2909, // Alarm Value Upper Limit 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueLowerLimit3 = 0x290A, // Alarm Value Lower Limit 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValue4 = 0x290B, // Alarm Value 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueUpperLimit4 = 0x290C, // Alarm Value Upper Limit 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueLowerLimit4 = 0x290D, // Alarm Value Lower Limit 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_SP1_Setting = 0x290E, // SP 1 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 1) + E_SP2_Setting = 0x291C, // SP 2 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 2) + E_SP3_Setting = 0x292A, // SP 3 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 3) + E_SP4_Setting = 0x2938, // SP 4 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 4) + E_SP5_Setting = 0x2946, // SP 5 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 5) + E_SP6_Setting = 0x2954, // SP 6 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 6) + E_SP7_Setting = 0x2962, // SP 7 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 7) + + // --- Adjustment Level PID / MV Limits (Addresses ~0x2A00 - ...) --- + E_ProportionalBand = 0x2A00, // Proportional Band (Heating, Standard, or Close Position Control) (Writable, Range: 0.1 to 999.9) [Adjustment Level] + E_IntegralTime = 0x2A01, // Integral Time (Heating, Standard, or Close Position Control) (Writable, Range depends on time unit setting) [Adjustment Level] + E_DerivativeTime = 0x2A02, // Derivative Time (Heating, Standard, or Close Position Control) (Writable, Range depends on time unit setting) [Adjustment Level] + E_MVUpperLimit = 0x2A05, // MV Upper Limit (%) (Writable, Range depends on control type, see manual) [Adjustment Level] + E_MVLowerLimit = 0x2A06, // MV Lower Limit (%) (Writable, Range depends on control type, see manual) [Adjustment Level] + + // NOTE on Status Registers (e.g., E_Status1, E_Status2_LowerWord, E_Status2_UpperWord): + // These are bitfields. Refer to the E5C Communications Manual Section 5-2 "Status" + // for details on individual bit meanings. Explicit enums for these bits can be added if needed. + // Note *1: Not displayed on the Controller display. + // Note *2: In 2-byte mode, the rightmost 16 bits are usually read. + // Note *3: In 2-byte mode, the leftmost 16 bits are usually read. + // This suggests Status 2 (E_Status2_LowerWord/E_Status2_UpperWord) and potentially StatusWord3 (E_StatusWord3_Leftmost) + // might be parts of larger 32-bit status values if the controller supported 4-byte mode reads. +}; + +// --- Parameter Enums for Specific Holding Register Settings --- + +// Parameters for E_OperationAdjustmentProtect (0x2500) +enum class E5C_OperationProtect_Param : uint16_t +{ + E_NoRestrictions = 0x00, // No restrictions in operation and adjustment levels + E_AdjustLevelProhibited = 0x01, // Move to adjustment level is prohibited + E_DisplayChangePV_PVSP = 0x02, // Display and change of only "PV" and "PV/SP" allowed + E_DisplayOnlyPV_PVSP = 0x03, // Display of only "PV" and "PV/SP" allowed +}; + +// Parameters for E_InitialSettingCommsProtect (0x2501) +enum class E5C_InitialProtect_Param : uint16_t +{ + E_MoveToInitialAllowedAdvDisplayed = 0x00, // Move to initial/comms allowed. Adv func displayed. + E_MoveToInitialAllowedAdvNotDisplayed= 0x01, // Move to initial/comms allowed. Adv func not displayed. + E_MoveToInitialProhibited = 0x02, // Move to initial/comms prohibited. +}; + +// Parameters for E_SettingChangeProtect (0x2502) +enum class E5C_SettingChangeProtect_Param : uint16_t +{ + E_OffChangeAllowed = 0x00, // OFF (Changing settings via front panel allowed) + E_OnChangeProhibited = 0x01, // ON (Changing settings via front panel prohibited) +}; + +// Parameters for E_PF_KeyProtect (0x2503) +enum class E5C_PFKeyProtect_Param : uint16_t +{ + E_Off = 0x00, // PF Key Protection OFF + E_On = 0x01, // PF Key Protection ON +}; + +// Parameters for E_ParameterMaskEnable (0x2506) +enum class E5C_ParamMaskEnable_Param : uint16_t +{ + E_Off = 0x00, // Parameter Mask function OFF + E_On = 0x01, // Parameter Mask function ON +}; + +// Parameters for E_ChangedParametersOnly (0x2507) +enum class E5C_ChangedParamsOnly_Param : uint16_t +{ + E_Off = 0x00, // Display all parameters in adjustment level etc. + E_On = 0x01, // Display only parameters changed from default in adjustment level etc. +}; + + +// --- Special Values / Parameter Enums for specific registers --- + +// Special values for E_ControlPeriodHeating (0x2708) and E_ControlPeriodCooling (0x2709) +// Note: Positive values 1 to 99 represent seconds directly. Use raw integers for those. +enum class E5C_ControlPeriod_SpecialVal : int16_t // Use signed type for negative values +{ + E_Period_0_1_Sec = -2, // Represents 0.1 seconds + E_Period_0_2_Sec = -1, // Represents 0.2 seconds + E_Period_0_5_Sec = 0, // Represents 0.5 seconds + // Values 1..99 are direct seconds, do not add them here. Must be written as int16_t. +}; + +// Parameters for E_SPRampTimeUnit (0x270C) +enum class E5C_SPRampTimeUnit_Param : uint16_t +{ + E_EU_Per_Second = 0, // Unit is Engineering Unit / second + E_EU_Per_Minute = 1, // Unit is Engineering Unit / minute + E_EU_Per_Hour = 2, // Unit is Engineering Unit / hour +}; + +// Special value for E_SPRampSetValue (0x270D) +// Note: Positive values 1 to 9999 represent the rate directly. Use raw integers for those. +enum class E5C_SPRampSetValue_SpecialVal : uint16_t +{ + E_Off = 0, // SP Ramp Set is OFF + // Values 1..9999 are direct rates, do not add them here. Must be written as uint16_t. +}; + +// Special values for E_SPRampFallValue (0x270E) +// Note: Positive values 1 to 9999 represent the rate directly. Use raw integers for those. +enum class E5C_SPRampFallValue_SpecialVal : int16_t // Use signed type for negative value +{ + E_SameAsSet = -1, // Fall rate is same as Set rate (defined by 0x270D) + E_Off = 0, // SP Ramp Fall is OFF + // Values 1..9999 are direct rates, do not add them here. Must be written as int16_t. +}; + +// Special value for E_WaitBand (0x272A) +// Note: Positive values represent the band width directly (needs scaling based on Temp/Analog input). +// Use raw values for setting the width. +enum class E5C_WaitBand_SpecialVal : uint16_t +{ + E_Off = 0, // Wait Band function is OFF + // Other values represent the actual width. +}; + +// Parameters for E_MovingAverageCount (0x2804) +enum class E5C_MovingAverageCount_Param : uint16_t +{ + E_Off = 0, // Moving Average OFF + E_2_Times = 1, // Moving Average Count: 2 times + E_4_Times = 2, // Moving Average Count: 4 times + E_8_Times = 3, // Moving Average Count: 8 times + E_16_Times= 4, // Moving Average Count: 16 times + E_32_Times= 5, // Moving Average Count: 32 times +}; + +// Parameters for E_InputType (0x2C00) [Initial Setting Level] +enum class E5C_InputType_Param : uint16_t +{ + E_Pt_neg200_850C = 0, // Pt (-200 to 850°C / -300 to 1500°F) + E_Pt_neg199_500C_1DP = 1, // Pt (-199.9 to 500.0°C / -199.9 to 900.0°F) + E_Pt_0_100C_1DP = 2, // Pt (0.0 to 100.0°C / 0.0 to 210.0°F) + E_JPt_neg199_500C_1DP = 3, // JPt (-199.9 to 500.0°C / -199.9 to 900.0°F) + E_JPt_0_100C_1DP = 4, // JPt (0.0 to 100.0°C / 0.0 to 210.0°F) + E_K_neg200_1300C = 5, // K (-200 to 1300°C / -300 to 2300°F) + E_K_neg20_500C_1DP = 6, // K (-20.0 to 500.0°C / 0.0 to 900.0°F) + E_J_neg100_850C = 7, // J (-100 to 850°C / -100 to 1500°F) + E_J_neg20_400C_1DP = 8, // J (-20.0 to 400.0°C / 0.0 to 750.0°F) + E_T_neg200_400C = 9, // T (-200 to 400°C / -300 to 700°F) + E_T_neg199_400C_1DP = 10, // T (-199.9 to 400.0°C / -199.9 to 700.0°F) + E_E_neg200_600C = 11, // E (-200 to 600°C / -300 to 1100°F) + E_L_neg100_850C = 12, // L (-100 to 850°C / -100 to 1500°F) + E_U_neg200_400C = 13, // U (-200 to 400°C / -300 to 700°F) + E_U_neg199_400C_1DP = 14, // U (-199.9 to 400.0°C / -199.9 to 700.0°F) + E_N_neg200_1300C = 15, // N (-200 to 1300°C / -300 to 2300°F) + E_R_0_1700C = 16, // R (0 to 1700°C / 0 to 3000°F) + E_S_0_1700C = 17, // S (0 to 1700°C / 0 to 3000°F) + E_B_100_1800C = 18, // B (100 to 1800°C / 300 to 3200°F) + E_W_0_2300C = 19, // W (0 to 2,300°C / 0 to 3,200°F) + E_PLII_0_1300C = 20, // PLII (0 to 1,300°C / 0 to 2,300°F) + E_IR_K_140F_60C = 21, // Infrared temperature sensor (K 140°F/60°C) + E_IR_K_240F_120C = 22, // Infrared temperature sensor (K 240°F/120°C) + E_IR_K_280F_140C = 23, // Infrared temperature sensor (K 280°F/140°C) + E_IR_K_440F_220C = 24, // Infrared temperature sensor (K 440°F/220°C) + E_Analog_4_20MA = 25, // 4 to 20 mA + E_Analog_0_20MA = 26, // 0 to 20 mA + E_Analog_1_5V = 27, // 1 to 5 V + E_Analog_0_5V = 28, // 0 to 5 V + E_Analog_0_10V = 29, // 0 to 10 V + E_Analog_0_50MV = 30, // 0 to 50 mV (Only E5CC-U v2.2+ May 2014 or later) +}; + +// Parameters for E_TemperatureUnit (0x2C01) [Initial Setting Level] +enum class E5C_TemperatureUnit_Param : uint16_t +{ + E_Celsius = 0, // °C + E_Fahrenheit = 1, // °F +}; + +// Parameters for E_DecimalPoint (0x2C0C) [Advanced Function Setting Level] +enum class E5C_DecimalPoint_Param : uint16_t +{ + E_DP_0 = 0, // No decimal point (XXX) + E_DP_1 = 1, // One decimal place (XXX.X) + E_DP_2 = 2, // Two decimal places (XXX.XX) + E_DP_3 = 3, // Three decimal places (XXX.XXX) +}; + +// Parameters for E_PVDecimalPointDisplay (0x2C0F) [Advanced Function Setting Level] +enum class E5C_PVDecimalPointDisplay_Param : uint16_t +{ + E_PVDP_OFF = 0, // PV Decimal Point Display OFF + E_PVDP_ON = 1, // PV Decimal Point Display ON +}; + +// Parameters for E_ControlOutput1Signal (0x2D03) and E_ControlOutput2Signal (0x2D04) [Initial Setting Level] +enum class E5C_ControlOutputSignal_Param : uint16_t +{ + E_4_20MA = 0, // 4 to 20 mA + E_0_20MA = 1, // 0 to 20 mA + // Note: Check manual if voltage options exist for these registers +}; + +// Parameters for E_StandardOrHeatingCooling (0x2D11) [Initial Setting Level] +enum class E5C_ControlMode_Param : uint16_t +{ + E_Standard = 0, // Standard control (Heating OR Cooling, depending on wiring/config) + E_HeatingAndCooling = 1, // Heating and Cooling control +}; + +// Parameters for E_DirectReverseOperation (0x2D12) [Initial Setting Level] +enum class E5C_DirectReverseOperation_Param : uint16_t +{ + E_ReverseOperation = 0, // PID Reverse operation (e.g., heating) + E_DirectOperation = 1, // PID Direct operation (e.g., cooling) +}; + +// Parameters for E_CloseFloating (0x2D13) [Initial Setting Level] +// Only for Position-proportional Models +enum class E5C_CloseFloating_Param : uint16_t +{ + E_Floating = 0, + E_Close = 1, +}; + +// Parameters for E_PidOnOff (0x2D14) [Initial Setting Level] +enum class E5C_PidOnOff_Param : uint16_t +{ + E_ONOFF_CONTROL = 0, // Use ON/OFF control + E_PID_CONTROL = 1, // Use 2-PID control (or standard PID if 2-PID not applicable) +}; + +// Parameters for E_ST_Setting (0x2D15) [Initial Setting Level] +enum class E5C_ST_Param : uint16_t +{ + E_Off = 0, // Self-Tuning OFF + E_On = 1, // Self-Tuning ON +}; + +// Parameters for E_ProgramPattern (0x2D16) [Initial Setting Level] +enum class E5C_ProgramPattern_Param : uint16_t +{ + E_Off = 0, // Program Pattern function OFF (normal control) + E_Stop = 1, // Program Pattern STOP (reset or initial state) + E_Cont = 2, // Program Pattern CONTINUE (running) +}; + +// Parameters for E_RemoteSPInputType (0x2D18) [Advanced Function Setting Level] +enum class E5C_RemoteSPInputType_Param : uint16_t +{ + E_4_20MA = 0, + E_0_20MA = 1, + E_1_5V = 2, + E_0_5V = 3, + E_0_10V = 4, +}; + +// Parameters for E_TransferOutputType (0x2E00) [Initial Setting Level] +enum class E5C_TransferOutputType_Param : uint16_t +{ + E_Off = 0, // Transfer Output OFF + E_SetPoint = 1, // Output Set Point value + E_SetPointRamp = 2, // Output Set Point during SP ramp + E_PV = 3, // Output Process Value + E_MV_Heating = 4, // Output Manipulated Value (Heating) + E_MV_Cooling = 5, // Output Manipulated Value (Cooling) + E_ValveOpening = 6, // Output Valve Opening (% - Only for Position-proportional Models) +}; + +// Parameters for E_TransferOutputSignal (0x2E01) [Initial Setting Level] +enum class E5C_TransferOutputSignal_Param : uint16_t +{ + E_4_20MA = 0, + E_1_5V = 1, +}; + + +// --- Enums for Status Register Bits (Refer to Manual Section 5-2) --- +// These are *examples* and need to be carefully verified against the specific E5C model manual. +// Define these if you need to decode individual status bits from registers like E_Status1, E_Status2_LowerWord, etc. + +/* +// Example bits for E_Status1 (0x2001) / E_Status1_StatusArea (0x2406) +enum class E5C_Status1_Bits : uint16_t +{ + E_S1_Alarm1_Output = (1 << 0), // Bit 0: Alarm 1 Output Status (0: OFF, 1: ON) + E_S1_Alarm2_Output = (1 << 1), // Bit 1: Alarm 2 Output Status + E_S1_Alarm3_Output = (1 << 2), // Bit 2: Alarm 3 Output Status + E_S1_Alarm4_Output = (1 << 3), // Bit 3: Alarm 4 Output Status (?) + E_S1_HeaterBurnout1 = (1 << 4), // Bit 4: Heater Burnout 1 Status + E_S1_HeaterBurnout2 = (1 << 5), // Bit 5: Heater Burnout 2 Status + E_S1_RunMode = (1 << 8), // Bit 8: RUN/STOP Status (0: STOP, 1: RUN) + E_S1_AutoTuning = (1 << 9), // Bit 9: AT Execution Status (0: OFF, 1: ON) + E_S1_TaskOperating = (1 << 10), // Bit 10: Task Operating Status (Programs) + E_S1_CommWritingDisabled= (1 << 11), // Bit 11: Communications Writing Disabled Status + E_S1_ManualMode = (1 << 12), // Bit 12: Auto/Manual Mode Status (0: Auto, 1: Manual) + E_S1_RemoteSP_Mode = (1 << 13), // Bit 13: SP Mode (0: Local, 1: Remote) + // ... add other relevant bits based on manual section 5-2 +}; +*/ + +/* +// Example bits for E_Status2_LowerWord (0x2408) +enum class E5C_Status2Lower_Bits : uint16_t +{ + E_S2L_RAM_Error = (1 << 0), // Bit 0: RAM Error + E_S2L_MemoryError = (1 << 1), // Bit 1: Memory Error (Non-volatile) + E_S2L_ADC_Error = (1 << 2), // Bit 2: A/D Converter Error + E_S2L_InputTypeError = (1 << 3), // Bit 3: Input Type Error + E_S2L_WatchdogTimeout = (1 << 4), // Bit 4: Watchdog Timer Timeout + E_S2L_OverrunError = (1 << 5), // Bit 5: Overrun Error + E_S2L_FramingError = (1 << 6), // Bit 6: Framing Error + E_S2L_ParityError = (1 << 7), // Bit 7: Parity Error + E_S2L_CommsTimeoutError = (1 << 8), // Bit 8: Communications Timeout Error + E_S2L_CommsError = (1 << 9), // Bit 9: Communications Error + E_S2L_CommsBufferOverrun = (1 << 10),// Bit 10: Communications Buffer Overrun Error + E_S2L_PowerSupplyFreqError = (1 << 11),// Bit 11: Power Supply Frequency Error + // ... add other relevant bits based on manual section 5-2 +}; + */ + +/* +// Example bits for E_Status2_UpperWord (0x2409) - Note: Bit numbering starts from 16 conceptually +enum class E5C_Status2Upper_Bits : uint16_t +{ + E_S2U_PV_InputError = (1 << 0), // Bit 16 (0 in upper word): PV Input Error (Over/Under Range) + E_S2U_RemoteSPInputError = (1 << 1), // Bit 17 (1 in upper word): Remote SP Input Error (Over/Under Range) + E_S2U_MVOutputError = (1 << 2), // Bit 18 (2 in upper word): MV Output Error + E_S2U_ExternalDIError = (1 << 3), // Bit 19 (3 in upper word): Error via External DI (Digital Input) + E_S2U_HeaterShortAlarm1 = (1 << 4), // Bit 20 (4 in upper word): HS (Heater Short) Alarm 1 Status + E_S2U_HeaterShortAlarm2 = (1 << 5), // Bit 21 (5 in upper word): HS (Heater Short) Alarm 2 Status + E_S2U_TempSensorDisconnected= (1 << 6), // Bit 22 (6 in upper word): Temp Sensor Disconnected (Specific models?) + // ... add other relevant bits based on manual section 5-2 +}; +*/ + +#endif // E5C_MODBUS_REGISTERS_HPP + + +#ifndef E5C_MODBUS_REGISTERS_HPP +#define E5C_MODBUS_REGISTERS_HPP + +#include // Required for uint16_t and int16_t + +// --- E5C Modbus Command Codes --- +// Represents the Command Codes used for various operations on the E5C device. +// These codes are typically written to a specific command register (often 0x0000) via Modbus. +enum class E5C_CommandCode : uint16_t +{ + E_CommunicationsWriting = 0x00, // Controls Modbus communications writing (enable/disable) + E_RunStop = 0x01, // Starts or stops control operation + E_MultiSP = 0x02, // Selects the target Set Point (SP) number (0-7) + E_ATExecuteCancel = 0x03, // Executes or cancels Auto-Tuning (AT) + E_WriteMode = 0x04, // Selects the write mode (Backup or RAM only) + E_SaveRAMData = 0x05, // Saves data from RAM to non-volatile memory (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_SoftwareReset = 0x06, // Performs a software reset (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_MoveToSetupArea1 = 0x07, // Moves operation to Setup Area 1 (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_MoveToProtectLevel = 0x08, // Moves operation to the Protect Level (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_AutoManualSwitch = 0x09, // Switches between Automatic and Manual control mode + E_ParameterInitialization = 0x0B, // Initializes parameters to default values (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_AlarmLatchCancel = 0x0C, // Cancels specified latched alarms + E_SPMode = 0x0D, // Selects Set Point (SP) mode (Local or Remote) + E_InvertDirectReverse = 0x0E, // Selects direct or reverse operation (Invert/Not Invert) via Command + E_ProgramStart = 0x11, // Starts or resets a program pattern +}; + +// --- Parameter Enums for Specific Command Codes --- +// These enums define the valid "Related Information" values (data) sent with specific commands. + +// Parameters for E_CommunicationsWriting (0x00) +enum class E5C_CommWrite_Param : uint16_t +{ + E_OffDisabled = 0x00, + E_OnEnabled = 0x01, +}; + +// Parameters for E_RunStop (0x01) +enum class E5C_RunStop_Param : uint16_t +{ + E_Run = 0x00, + E_Stop = 0x01, +}; + +// Parameters for E_MultiSP (0x02) +enum class E5C_MultiSP_Param : uint16_t +{ + E_SetPoint0 = 0x00, + E_SetPoint1 = 0x01, + E_SetPoint2 = 0x02, + E_SetPoint3 = 0x03, + E_SetPoint4 = 0x04, + E_SetPoint5 = 0x05, + E_SetPoint6 = 0x06, + E_SetPoint7 = 0x07, +}; + +// Parameters for E_ATExecuteCancel (0x03) +enum class E5C_ATExecuteCancel_Param : uint16_t +{ + E_ATCancel = 0x00, // Cancel Auto-Tuning + E_ATExecute100Pct = 0x01, // Execute 100% Auto-Tuning + E_ATEexecute40Pct = 0x02, // Execute 40% Auto-Tuning +}; + +// Parameters for E_WriteMode (0x04) +enum class E5C_WriteMode_Param : uint16_t +{ + E_Backup = 0x00, // Writes are backed up to non-volatile memory + E_RAMWriteMode = 0x01, // Writes affect RAM only +}; + +// Parameters for E_AutoManualSwitch (0x09) +enum class E5C_AutoManualSwitch_Param : uint16_t +{ + E_AutomaticMode = 0x00, + E_ManualMode = 0x01, +}; + +// Parameters for E_AlarmLatchCancel (0x0C) +enum class E5C_AlarmLatchCancel_Param : uint16_t +{ + E_Alarm1LatchCancel = 0x00, + E_Alarm2LatchCancel = 0x01, + E_Alarm3LatchCancel = 0x02, + E_HBAlarmLatchCancel = 0x03, // Heater Break alarm latch cancel + E_HSAlarmLatchCancel = 0x04, // Heater Short alarm latch cancel (?) + E_Alarm4LatchCancel = 0x05, // Alarm 4 latch cancel (?) + E_AllAlarmLatchCancel = 0x0F, // Cancel all latched alarms +}; + +// Parameters for E_SPMode (0x0D) +enum class E5C_SPMode_Param : uint16_t +{ + E_LocalSPMode = 0x00, + E_RemoteSPMode = 0x01, +}; + +// Parameters for E_InvertDirectReverse (0x0E) - Command based +enum class E5C_InvertDirectReverseCmd_Param : uint16_t +{ + E_NotInvert = 0x00, // Direct operation (Command parameter) + E_Invert = 0x01, // Reverse operation (Command parameter) +}; + +// Parameters for E_ProgramStart (0x11) +enum class E5C_ProgramStart_Param : uint16_t +{ + E_Reset = 0x00, // Reset the program/pattern + E_Start = 0x01, // Start the program/pattern +}; + +// Constant for commands where the related information is always 0x0000 +constexpr uint16_t E5C_COMMAND_PARAM_DEFAULT = 0x0000; +// This value should be used as the data when issuing commands like: +// - E_SaveRAMData +// - E_SoftwareReset +// - E_MoveToSetupArea1 +// - E_MoveToProtectLevel (Command, not the register 0x2504) +// - E_ParameterInitialization + +// --- E5C Modbus Variable Area Registers (Holding Registers - Two-Byte Mode Addresses) --- +// Represents the addresses for reading/writing various parameters and status values. +// Based on the "Variable Area (Setting Range) List" sections of the Communications Manual (H175). +// Note: Addresses are based on the "Two-byte mode" column. +// Note: Ranges and accessibility levels (Operation, Adjustment, Initial, Advanced) are indicated where available. +enum class E5C_HoldingRegister : uint16_t +{ + // --- Operation Level Monitors (Addresses ~0x2000 - 0x20FF, Manual Page 5-1) --- + E_PV = 0x2000, // Process Value (Read-Only) + E_Status1 = 0x2001, // Status 1 (Bitfield, Read-Only, see manual section 5-2. Note *1, *2 apply) + E_InternalSetPoint = 0x2002, // Internal Set Point (Read-Only? Note *1 applies) + E_HeaterCurrent1Value = 0x2003, // Heater Current 1 Value Monitor (Read-Only, Range: 0.0 to 55.0 A) + E_MV_MonitorHeating = 0x2004, // Manipulated Value Monitor (Heating Output) (Read-Only, %: Range -5.0 to 105.0 or 0.0 to 105.0) + E_MV_MonitorCooling = 0x2005, // Manipulated Value Monitor (Cooling Output) (Read-Only, %: Range 0.0 to 105.0) + + // --- Primary Setting Parameters (Addresses ~0x2100 - 0x21FF, Manual Page 5-1) --- + E_SetPoint = 0x2103, // Set Point (SP) value (Writable & Readable, Primary SP setting, likely the *active* SP or SP0 in non-MultiSP mode) + E_AlarmValue1 = 0x2104, // Alarm Value 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueUpperLimit1 = 0x2105, // Alarm Value Upper Limit 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueLowerLimit1 = 0x2106, // Alarm Value Lower Limit 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValue2 = 0x2107, // Alarm Value 2 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueUpperLimit2 = 0x2108, // Alarm Value Upper Limit 2 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueLowerLimit2 = 0x2109, // Alarm Value Lower Limit 2 (Writable, Range: -1999 to 9999) [Main Setting] + // Add other registers from 0x21xx range if needed from other tables + + // --- Status/Monitor Parameters (Addresses ~0x2400 - 0x24FF, Manual Page 5-2) --- + E_PV_StatusArea = 0x2402, // Process Value (Read-Only status copy) + E_InternalSetPoint_StatusArea = 0x2403, // Internal Set Point (Read-Only status copy, Note *1) + E_MultiSP_NoMonitor = 0x2404, // Multi-SP No. Monitor (Which SP is currently active: 0 to 7, Read-Only) + E_Status1_StatusArea = 0x2406, // Status 1 (Read-Only status copy, Bitfield, Note *1, *2 apply) + E_StatusWord3_Leftmost = 0x2407, // Status Word 3 / Leftmost bits (Part of a larger status? Read-Only, Note *3 applies) + E_Status2_LowerWord = 0x2408, // Status 2 (Rightmost 16 bits / Lower Word. Read-Only, Bitfield, Note *1, *2 apply) + E_Status2_UpperWord = 0x2409, // Status 2 (Leftmost 16 bits / Upper Word. Read-Only, Bitfield, Note *1, *3 apply) + E_DecimalPointMonitor = 0x2410, // Decimal Point Monitor (Position for PV/SP display: 0 to 3, Read-Only) + // Add other registers from 0x24xx range if needed + + // --- Protect Level Parameters (Addresses ~0x2500 - 0x25FF, Ref Manual Page 5-3) --- + E_OperationAdjustmentProtect = 0x2500, // Sets Operation/Adjustment Protection Level (Writable, See E5C_OperationProtect_Param) + E_InitialSettingCommsProtect = 0x2501, // Sets Initial Setting/Communications Protection Level (Writable, See E5C_InitialProtect_Param) + E_SettingChangeProtect = 0x2502, // Enable/Disable Setting Change Protect via front panel (Writable, See E5C_SettingChangeProtect_Param) + E_PF_KeyProtect = 0x2503, // Enable/Disable PF Key Protect (Writable, See E5C_PFKeyProtect_Param) + E_MoveToProtectLevelSetting = 0x2504, // Sets the password value needed to move to protect level (Writable, Range: -1999 to 9999 or FFFF831 to 270F) + E_PasswordToMoveToProtectLevel = 0x2505, // Write the password here to attempt moving to the protect level (Write-Only? Monitor value always 0) + E_ParameterMaskEnable = 0x2506, // Enable/Disable Parameter Mask (Writable, See E5C_ParamMaskEnable_Param) (Monitor value always 0) + E_ChangedParametersOnly = 0x2507, // Control Change Parameters setting (Writable, See E5C_ChangedParamsOnly_Param) + + // --- Manual Control / Operation Level Parameters (Addresses ~0x2600 - 0x26FF, Ref Manual Page 5-3) --- + E_ManualMV = 0x2600, // Manual Manipulated Value (Writable in Manual Mode) (%: Ranges vary by model/setting) + E_SetPoint_OperationLevel = 0x2601, // Set Point visible/settable in Operation Level (Writable, Range: SP lower to SP upper limit) (Likely mirrors E_SetPoint=0x2103 but accessible differently) + E_RemoteSPMonitor = 0x2602, // Remote SP Monitor (Read-Only, Range: Remote SP lower limit -10% FS to Remote SP upper limit +10% FS) + E_HeaterCurrent1ValueMonitor_OpLevel = 0x2604, // Heater Current 1 Value Monitor (Read-Only, 0.0 to 55.0 A) (Likely same value as 0x2003) + E_MVMonitorHeating_OpLevel = 0x2605, // MV Monitor (Heating) (Read-Only, %: -5.0 to 105.0 or 0.0 to 105.0) (Likely same value as 0x2004) + E_MVMonitorCooling_OpLevel = 0x2606, // MV Monitor (Cooling) (Read-Only, %: 0.0 to 105.0) (Likely same value as 0x2005) + E_ValveOpeningMonitor = 0x2607, // Valve Opening Monitor (Read-Only, %: -10.0 to 110.0) + + // --- Adjustment Level Parameters (Addresses ~0x2700 - 0x27FF, Ref Manual Page 5-4/5-5) --- + E_ProportionalBandCooling = 0x2701, // Proportional Band (Cooling) (Writable, Range: 0.1 to 999.9) [Adjustment Level] + E_IntegralTimeCooling = 0x2702, // Integral Time (Cooling) (Writable, Range: 0 to 9999 s / 0.0 to 999.9 s depending on derivative unit) [Adjustment Level] + E_DerivativeTimeCooling = 0x2703, // Derivative Time (Cooling) (Writable, Same range as Integral) [Adjustment Level] + E_DeadBand = 0x2704, // Dead Band (Writable, Range: -199.9 to 999.9 for temp input / -19.99 to 99.99 for analog input) [Adjustment Level] + E_ManualResetValue = 0x2705, // Manual Reset Value (Writable, Range: 0.0 to 100.0 %) [Adjustment Level] + E_HysteresisHeating = 0x2706, // Hysteresis (Heating) (Writable, Range: 0.1 to 999.9 for temp input / 0.01 to 99.99 for analog input) [Adjustment Level] + E_HysteresisCooling = 0x2707, // Hysteresis (Cooling) (Writable, Same range as Heating) [Adjustment Level] + E_ControlPeriodHeating = 0x2708, // Control Period (Heating) (Writable, Special values or 1 to 99 s) [Initial Setting Level] (See E5C_ControlPeriod_SpecialVal) + E_ControlPeriodCooling = 0x2709, // Control Period (Cooling) (Writable, Special values or 1 to 99 s) [Initial Setting Level] (See E5C_ControlPeriod_SpecialVal) + E_PositionPropDeadBand = 0x270A, // Position Proportional Dead Band (Writable, Range: 0.1 to 10.0) [Adjustment Level] + E_OpenCloseHysteresis = 0x270B, // Open/Close Hysteresis (Writable, Range: 0.1 to 20.0) [Adjustment Level] + E_SPRampTimeUnit = 0x270C, // SP Ramp Time Unit (Writable) [Advanced Function Setting Level] (See E5C_SPRampTimeUnit_Param) + E_SPRampSetValue = 0x270D, // SP Ramp Set Value (Writable, 0=OFF or 1 to 9999 in units from 0x270C) [Adjustment Level] (See E5C_SPRampSetValue_SpecialVal) + E_SPRampFallValue = 0x270E, // SP Ramp Fall Value (Writable, -1=Same as Set, 0=OFF or 1 to 9999) [Adjustment Level] (See E5C_SPRampFallValue_SpecialVal) + E_MVAtStop = 0x270F, // MV (%) at Stop (Writable, Range: -5.0 to 105.0 / -105.0 to 105.0 varies) [Advanced Function Setting Level] + E_MVAtPVError = 0x2711, // MV (%) at PV Error (Writable, Range: -5.0 to 105.0 / -105.0 to 105.0 varies) [Advanced Function Setting Level] + E_MVChangeRateLimit = 0x2713, // MV Change Rate Limit (Writable, 0.0=OFF or 0.1 to 100.0 %/s) [Advanced Function Setting Level] + E_PVInputSlopeCoeff = 0x2718, // PV Input Slope Coefficient (Writable, Range: 0.001 to 9.999) [Advanced Function Setting Level] + E_HeaterCurrent1ValueMonitor_Adv = 0x271A, // Heater Current 1 Value Monitor (Read-Only, 0.0 to 55.0 A) [ Seems redundant, matches 0x2003/0x2604] + E_HeaterBurnoutDetection1 = 0x271B, // Heater Burnout Detection 1 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_LeakageCurrent1Monitor = 0x271C, // Leakage Current 1 Monitor (Read-Only, 0.0 to 55.0? Units not specified, likely mA) [Operation Level] + E_HSAlarm1 = 0x271D, // HS (Heater Short?) Alarm 1 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_ProcessValueInputShift = 0x2723, // Process Value Input Shift (Writable, Range: -1999 to 9999) [Adjustment Level] + E_HeaterCurrent2ValueMonitor = 0x2724, // Heater Current 2 Value Monitor (Read-Only, 0.0 to 55.0 A) [Operation Level] + E_HeaterBurnoutDetection2 = 0x2725, // Heater Burnout Detection 2 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_LeakageCurrent2Monitor = 0x2726, // Leakage Current 2 Monitor (Read-Only, 0.0 to 55.0 mA?) [Operation Level] + E_HSAlarm2 = 0x2727, // HS (Heater Short?) Alarm 2 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_SoakTimeRemain = 0x2728, // Soak Time Remain (Read-Only?, Range: 0 to 9999) [Operation Level] + E_SoakTime = 0x2729, // Soak Time (Writable, Range: 1 to 9999) [Adjustment Level] + E_WaitBand = 0x272A, // Wait Band (Writable, 0=OFF, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Adjustment Level] (See E5C_WaitBand_SpecialVal) + E_RemoteSPInputShift = 0x272B, // Remote SP Input Shift (Writable, Range: -1999 to 9999) [Advanced Function Setting Level] + E_RemoteSPInputSlopeCoeff = 0x272C, // Remote SP Input Slope Coefficient (Writable, Range: 0.001 to 9.999) [Advanced Function Setting Level] + + // --- Advanced Function Setting / Initial Setting Level Parameters (Addresses ~0x2800 - 0x2DFF, Ref Manual Page 5-5/5-6/5-7/5-8) --- + E_InputDigitalFilter = 0x2800, // Input Digital Filter (Writable, Range: 0.0 to 999.9) [Advanced Function Setting Level] + E_MovingAverageCount = 0x2804, // Moving Average Count (Writable) [Advanced Function Setting Level] (See E5C_MovingAverageCount_Param) + E_ExtractionOfSquareRootLowCutPoint = 0x2808, // Extraction of Square Root Low-cut Point (%) (Writable, Range: 0.0 to 100.0) [Adjustment Level] + + E_InputType = 0x2C00, // Input Type selection (Writable, See E5C_InputType_Param) [Initial Setting Level] + E_TemperatureUnit = 0x2C01, // Temperature Unit selection (Writable, See E5C_TemperatureUnit_Param) [Initial Setting Level] + E_ScalingLowerLimit = 0x2C09, // Scaling Lower Limit (Writable, Range: -1999 to Scaling Upper Limit - 1) [Advanced Function Setting Level] + E_ScalingUpperLimit = 0x2C0B, // Scaling Upper Limit (Writable, Range: Scaling Lower Limit + 1 to 9999) [Advanced Function Setting Level] + E_DecimalPoint = 0x2C0C, // Decimal Point position for PV/SP (Writable, 0-3) [Advanced Function Setting Level] (See E5C_DecimalPoint_Param) + E_RemoteSPUpperLimit = 0x2C0D, // Remote SP Upper Limit (Writable, Range depends on input type/scaling) [Advanced Function Setting Level] + E_RemoteSPLowerLimit = 0x2C0E, // Remote SP Lower Limit (Writable, Range depends on input type/scaling) [Advanced Function Setting Level] + E_PVDecimalPointDisplay = 0x2C0F, // PV Decimal Point Display ON/OFF (Writable, See E5C_PVDecimalPointDisplay_Param) [Advanced Function Setting Level] + + E_ControlOutput1Signal = 0x2D03, // Control Output 1 Signal Type (Writable, See E5C_ControlOutputSignal_Param) [Initial Setting Level] (Only for Linear Output Models) + E_ControlOutput2Signal = 0x2D04, // Control Output 2 Signal Type (Writable, See E5C_ControlOutputSignal_Param) [Initial Setting Level] (Only for Linear Output Models) + E_SPUpperLimit = 0x2D0F, // SP Upper Limit (Writable, Range depends on input type/scaling) [Initial Setting Level] + E_SPLowerLimit = 0x2D10, // SP Lower Limit (Writable, Range depends on input type/scaling) [Initial Setting Level] + E_StandardOrHeatingCooling= 0x2D11, // Control Mode: Standard or Heating/Cooling (Writable, See E5C_ControlMode_Param) [Initial Setting Level] + E_DirectReverseOperation = 0x2D12, // Direct/Reverse operation setting (Writable, See E5C_DirectReverseOperation_Param) [Initial Setting Level] (Different from Command 0x0E) + E_CloseFloating = 0x2D13, // Close/Floating (position-proportional control) (Writable, See E5C_CloseFloating_Param) [Initial Setting Level] (Only for Position-proportional Models) + E_PidOnOff = 0x2D14, // PID/ON-OFF Control Selection (Writable, See E5C_PidOnOff_Param) [Initial Setting Level] + E_ST_Setting = 0x2D15, // Self-Tuning ON/OFF (Writable, See E5C_ST_Param) [Initial Setting Level] + E_ProgramPattern = 0x2D16, // Program Pattern Execution State (Writable, See E5C_ProgramPattern_Param) [Initial Setting Level] + E_RemoteSPInputType = 0x2D18, // Remote SP Input range selection (Writable, See E5C_RemoteSPInputType_Param) [Advanced Function Setting Level] + E_MinimumOutputOnOffBand = 0x2D19, // Minimum Output ON/OFF Band (Writable, Range: 0.0 to 50.0 %) [Advanced Function Setting Level] + + E_TransferOutputType = 0x2E00, // Transfer Output Type (Writable, See E5C_TransferOutputType_Param) [Initial Setting Level] + E_TransferOutputSignal = 0x2E01, // Transfer Output Signal Range (Writable, See E5C_TransferOutputSignal_Param) [Initial Setting Level] + E_ControlOutput1Assignment = 0x2E06, // Assign function to Control Output 1 (Writable, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] (Ref Manual Page 5-9) + E_ControlOutput2Assignment = 0x2E07, // Assign function to Control Output 2 (Writable, See E5C_ControlOutputAssignment_Param, Note restrictions) [Advanced Function Setting] (Ref Manual Page 5-9) + + + // --- Operation Level Parameters (Duplicated Addresses? / Specific Uses) (Addresses ~0x2900 - 0x29FF, Ref Manual Page 5-6/5-7) --- + // These allow setting SPs and Alarm values within the Operation or Adjustment levels, potentially overriding the base settings (0x21xx) when active. + E_SP0_OperationLevel = 0x2900, // SP 0 Setting (Writable, Range: SP lower limit to SP upper limit) [Operation Level] (Likely same as E_SetPoint when SP 0 is selected) + E_AlarmValue1_OperationLevel = 0x2902, // Alarm Value 1 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValue1=0x2104 configuration) + E_AlarmValueUpperLimit1_OperationLevel = 0x2903, // Alarm Value Upper Limit 1 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValueUpperLimit1=0x2105) + E_AlarmValueLowerLimit1_OperationLevel = 0x2904, // Alarm Value Lower Limit 1 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValueLowerLimit1=0x2106) + E_AlarmValue2_OperationLevel = 0x2905, // Alarm Value 2 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValue2=0x2107) + E_AlarmValueUpperLimit2_OperationLevel = 0x2906, // Alarm Value Upper Limit 2 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValueUpperLimit2=0x2108) + E_AlarmValueLowerLimit2_OperationLevel = 0x2907, // Alarm Value Lower Limit 2 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValueLowerLimit2=0x2109) + E_AlarmValue3 = 0x2908, // Alarm Value 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueUpperLimit3 = 0x2909, // Alarm Value Upper Limit 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueLowerLimit3 = 0x290A, // Alarm Value Lower Limit 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValue4 = 0x290B, // Alarm Value 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueUpperLimit4 = 0x290C, // Alarm Value Upper Limit 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueLowerLimit4 = 0x290D, // Alarm Value Lower Limit 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_SP1_Setting = 0x290E, // SP 1 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 1) + E_SP2_Setting = 0x291C, // SP 2 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 2) + E_SP3_Setting = 0x292A, // SP 3 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 3) + E_SP4_Setting = 0x2938, // SP 4 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 4) + E_SP5_Setting = 0x2946, // SP 5 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 5) + E_SP6_Setting = 0x2954, // SP 6 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 6) + E_SP7_Setting = 0x2962, // SP 7 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 7) + + // --- Adjustment Level PID / MV Limits (Addresses ~0x2A00 - ..., Ref Manual Page 5-7) --- + E_ProportionalBand = 0x2A00, // Proportional Band (Heating, Standard, or Close Position Control) (Writable, Range: 0.1 to 999.9) [Adjustment Level] + E_IntegralTime = 0x2A01, // Integral Time (Heating, Standard, or Close Position Control) (Writable, Range depends on time unit setting) [Adjustment Level] + E_DerivativeTime = 0x2A02, // Derivative Time (Heating, Standard, or Close Position Control) (Writable, Range depends on time unit setting) [Adjustment Level] + E_MVUpperLimit = 0x2A05, // MV Upper Limit (%) (Writable, Range depends on control type, see manual) [Adjustment Level] + E_MVLowerLimit = 0x2A06, // MV Lower Limit (%) (Writable, Range depends on control type, see manual) [Adjustment Level] + + // NOTE on Status Registers (e.g., E_Status1, E_Status2_LowerWord, E_Status2_UpperWord): + // These are bitfields. Refer to the E5C Communications Manual Section 5-2 "Status" + // for details on individual bit meanings. Explicit enums for these bits can be added if needed (See examples below). + // Note *1: Not displayed on the Controller display. + // Note *2: In 2-byte mode, the rightmost 16 bits are usually read. + // Note *3: In 2-byte mode, the leftmost 16 bits are usually read. + // This suggests Status 2 (E_Status2_LowerWord/E_Status2_UpperWord) and potentially StatusWord3 (E_StatusWord3_Leftmost) + // might be parts of larger 32-bit status values if the controller supported 4-byte mode reads. +}; + +// --- Parameter Enums for Specific Holding Register Settings --- + +// Parameters for E_OperationAdjustmentProtect (0x2500) +enum class E5C_OperationProtect_Param : uint16_t +{ + E_NoRestrictions = 0x00, // No restrictions in operation and adjustment levels + E_AdjustLevelProhibited = 0x01, // Move to adjustment level is prohibited + E_DisplayChangePV_PVSP = 0x02, // Display and change of only "PV" and "PV/SP" allowed + E_DisplayOnlyPV_PVSP = 0x03, // Display of only "PV" and "PV/SP" allowed +}; + +// Parameters for E_InitialSettingCommsProtect (0x2501) +enum class E5C_InitialProtect_Param : uint16_t +{ + E_MoveToInitialAllowedAdvDisplayed = 0x00, // Move to initial/comms allowed. Adv func displayed. + E_MoveToInitialAllowedAdvNotDisplayed= 0x01, // Move to initial/comms allowed. Adv func not displayed. + E_MoveToInitialProhibited = 0x02, // Move to initial/comms prohibited. +}; + +// Parameters for E_SettingChangeProtect (0x2502) +enum class E5C_SettingChangeProtect_Param : uint16_t +{ + E_OffChangeAllowed = 0x00, // OFF (Changing settings via front panel allowed) + E_OnChangeProhibited = 0x01, // ON (Changing settings via front panel prohibited) +}; + +// Parameters for E_PF_KeyProtect (0x2503) +enum class E5C_PFKeyProtect_Param : uint16_t +{ + E_Off = 0x00, // PF Key Protection OFF + E_On = 0x01, // PF Key Protection ON +}; + +// Parameters for E_ParameterMaskEnable (0x2506) +enum class E5C_ParamMaskEnable_Param : uint16_t +{ + E_Off = 0x00, // Parameter Mask function OFF + E_On = 0x01, // Parameter Mask function ON +}; + +// Parameters for E_ChangedParametersOnly (0x2507) +enum class E5C_ChangedParamsOnly_Param : uint16_t +{ + E_Off = 0x00, // Display all parameters in adjustment level etc. + E_On = 0x01, // Display only parameters changed from default in adjustment level etc. +}; + + +// --- Special Values / Parameter Enums for specific registers --- + +// Special values for E_ControlPeriodHeating (0x2708) and E_ControlPeriodCooling (0x2709) +// Note: Positive values 1 to 99 represent seconds directly. Use raw integers for those. +enum class E5C_ControlPeriod_SpecialVal : int16_t // Use signed type for negative values +{ + E_Period_0_1_Sec = -2, // Represents 0.1 seconds + E_Period_0_2_Sec = -1, // Represents 0.2 seconds + E_Period_0_5_Sec = 0, // Represents 0.5 seconds + // Values 1..99 are direct seconds, do not add them here. Must be written as int16_t. +}; + +// Parameters for E_SPRampTimeUnit (0x270C) +enum class E5C_SPRampTimeUnit_Param : uint16_t +{ + E_EU_Per_Second = 0, // Unit is Engineering Unit / second + E_EU_Per_Minute = 1, // Unit is Engineering Unit / minute + E_EU_Per_Hour = 2, // Unit is Engineering Unit / hour +}; + +// Special value for E_SPRampSetValue (0x270D) +// Note: Positive values 1 to 9999 represent the rate directly. Use raw integers for those. +enum class E5C_SPRampSetValue_SpecialVal : uint16_t +{ + E_Off = 0, // SP Ramp Set is OFF + // Values 1..9999 are direct rates, do not add them here. Must be written as uint16_t. +}; + +// Special values for E_SPRampFallValue (0x270E) +// Note: Positive values 1 to 9999 represent the rate directly. Use raw integers for those. +enum class E5C_SPRampFallValue_SpecialVal : int16_t // Use signed type for negative value +{ + E_SameAsSet = -1, // Fall rate is same as Set rate (defined by 0x270D) + E_Off = 0, // SP Ramp Fall is OFF + // Values 1..9999 are direct rates, do not add them here. Must be written as int16_t. +}; + +// Special value for E_WaitBand (0x272A) +// Note: Positive values represent the band width directly (needs scaling based on Temp/Analog input). +// Use raw values for setting the width. +enum class E5C_WaitBand_SpecialVal : uint16_t +{ + E_Off = 0, // Wait Band function is OFF + // Other values represent the actual width. +}; + +// Parameters for E_MovingAverageCount (0x2804) +enum class E5C_MovingAverageCount_Param : uint16_t +{ + E_Off = 0, // Moving Average OFF + E_2_Times = 1, // Moving Average Count: 2 times + E_4_Times = 2, // Moving Average Count: 4 times + E_8_Times = 3, // Moving Average Count: 8 times + E_16_Times= 4, // Moving Average Count: 16 times + E_32_Times= 5, // Moving Average Count: 32 times +}; + +// Parameters for E_InputType (0x2C00) [Initial Setting Level] +enum class E5C_InputType_Param : uint16_t +{ + E_Pt_neg200_850C = 0, // Pt (-200 to 850°C / -300 to 1500°F) + E_Pt_neg199_500C_1DP = 1, // Pt (-199.9 to 500.0°C / -199.9 to 900.0°F) + E_Pt_0_100C_1DP = 2, // Pt (0.0 to 100.0°C / 0.0 to 210.0°F) + E_JPt_neg199_500C_1DP = 3, // JPt (-199.9 to 500.0°C / -199.9 to 900.0°F) + E_JPt_0_100C_1DP = 4, // JPt (0.0 to 100.0°C / 0.0 to 210.0°F) + E_K_neg200_1300C = 5, // K (-200 to 1300°C / -300 to 2300°F) + E_K_neg20_500C_1DP = 6, // K (-20.0 to 500.0°C / 0.0 to 900.0°F) + E_J_neg100_850C = 7, // J (-100 to 850°C / -100 to 1500°F) + E_J_neg20_400C_1DP = 8, // J (-20.0 to 400.0°C / 0.0 to 750.0°F) + E_T_neg200_400C = 9, // T (-200 to 400°C / -300 to 700°F) + E_T_neg199_400C_1DP = 10, // T (-199.9 to 400.0°C / -199.9 to 700.0°F) + E_E_neg200_600C = 11, // E (-200 to 600°C / -300 to 1100°F) + E_L_neg100_850C = 12, // L (-100 to 850°C / -100 to 1500°F) + E_U_neg200_400C = 13, // U (-200 to 400°C / -300 to 700°F) + E_U_neg199_400C_1DP = 14, // U (-199.9 to 400.0°C / -199.9 to 700.0°F) + E_N_neg200_1300C = 15, // N (-200 to 1300°C / -300 to 2300°F) + E_R_0_1700C = 16, // R (0 to 1700°C / 0 to 3000°F) + E_S_0_1700C = 17, // S (0 to 1700°C / 0 to 3000°F) + E_B_100_1800C = 18, // B (100 to 1800°C / 300 to 3200°F) + E_W_0_2300C = 19, // W (0 to 2,300°C / 0 to 3,200°F) + E_PLII_0_1300C = 20, // PLII (0 to 1,300°C / 0 to 2,300°F) + E_IR_K_140F_60C = 21, // Infrared temperature sensor (K 140°F/60°C) + E_IR_K_240F_120C = 22, // Infrared temperature sensor (K 240°F/120°C) + E_IR_K_280F_140C = 23, // Infrared temperature sensor (K 280°F/140°C) + E_IR_K_440F_220C = 24, // Infrared temperature sensor (K 440°F/220°C) + E_Analog_4_20MA = 25, // 4 to 20 mA + E_Analog_0_20MA = 26, // 0 to 20 mA + E_Analog_1_5V = 27, // 1 to 5 V + E_Analog_0_5V = 28, // 0 to 5 V + E_Analog_0_10V = 29, // 0 to 10 V + E_Analog_0_50MV = 30, // 0 to 50 mV (Only E5CC-U v2.2+ May 2014 or later) +}; + +// Parameters for E_TemperatureUnit (0x2C01) [Initial Setting Level] +enum class E5C_TemperatureUnit_Param : uint16_t +{ + E_Celsius = 0, // °C + E_Fahrenheit = 1, // °F +}; + +// Parameters for E_DecimalPoint (0x2C0C) [Advanced Function Setting Level] +enum class E5C_DecimalPoint_Param : uint16_t +{ + E_DP_0 = 0, // No decimal point (XXXX) + E_DP_1 = 1, // One decimal place (XXX.X) + E_DP_2 = 2, // Two decimal places (XX.XX) + E_DP_3 = 3, // Three decimal places (X.XXX) +}; + +// Parameters for E_PVDecimalPointDisplay (0x2C0F) [Advanced Function Setting Level] +enum class E5C_PVDecimalPointDisplay_Param : uint16_t +{ + E_PVDP_OFF = 0, // PV Decimal Point Display OFF + E_PVDP_ON = 1, // PV Decimal Point Display ON +}; + +// Parameters for E_ControlOutput1Signal (0x2D03) and E_ControlOutput2Signal (0x2D04) [Initial Setting Level] +// Applicable for models with Linear Current Output +enum class E5C_ControlOutputSignal_Param : uint16_t +{ + E_4_20MA = 0, // 4 to 20 mA + E_0_20MA = 1, // 0 to 20 mA + // Note: Check manual if voltage options exist for these registers on specific models +}; + +// Parameters for E_StandardOrHeatingCooling (0x2D11) [Initial Setting Level] +enum class E5C_ControlMode_Param : uint16_t +{ + E_Standard = 0, // Standard control (Heating OR Cooling, depending on wiring/config) + E_HeatingAndCooling = 1, // Heating and Cooling control +}; + +// Parameters for E_DirectReverseOperation (0x2D12) [Initial Setting Level] +enum class E5C_DirectReverseOperation_Param : uint16_t +{ + E_ReverseOperation = 0, // PID Reverse operation (e.g., heating - MV increases as PV decreases) + E_DirectOperation = 1, // PID Direct operation (e.g., cooling - MV increases as PV increases) +}; + +// Parameters for E_CloseFloating (0x2D13) [Initial Setting Level] +// Only for Position-proportional Models +enum class E5C_CloseFloating_Param : uint16_t +{ + E_Floating = 0, + E_Close = 1, +}; + +// Parameters for E_PidOnOff (0x2D14) [Initial Setting Level] +enum class E5C_PidOnOff_Param : uint16_t +{ + E_ONOFF_CONTROL = 0, // Use ON/OFF control + E_PID_CONTROL = 1, // Use 2-PID control (or standard PID if 2-PID not applicable) +}; + +// Parameters for E_ST_Setting (0x2D15) [Initial Setting Level] +enum class E5C_ST_Param : uint16_t +{ + E_Off = 0, // Self-Tuning OFF + E_On = 1, // Self-Tuning ON +}; + +// Parameters for E_ProgramPattern (0x2D16) [Initial Setting Level] +enum class E5C_ProgramPattern_Param : uint16_t +{ + E_Off = 0, // Program Pattern function OFF (normal control) + E_Stop = 1, // Program Pattern STOP (reset or initial state) + E_Cont = 2, // Program Pattern CONTINUE (running) +}; + +// Parameters for E_RemoteSPInputType (0x2D18) [Advanced Function Setting Level] +enum class E5C_RemoteSPInputType_Param : uint16_t +{ + E_4_20MA = 0, + E_0_20MA = 1, + E_1_5V = 2, + E_0_5V = 3, + E_0_10V = 4, +}; + +// Parameters for E_TransferOutputType (0x2E00) [Initial Setting Level] +enum class E5C_TransferOutputType_Param : uint16_t +{ + E_Off = 0, // Transfer Output OFF + E_SetPoint = 1, // Output Set Point value + E_SetPointRamp = 2, // Output Set Point during SP ramp + E_PV = 3, // Output Process Value + E_MV_Heating = 4, // Output Manipulated Value (Heating) + E_MV_Cooling = 5, // Output Manipulated Value (Cooling) + E_ValveOpening = 6, // Output Valve Opening (% - Only for Position-proportional Models) +}; + +// Parameters for E_TransferOutputSignal (0x2E01) [Initial Setting Level] +enum class E5C_TransferOutputSignal_Param : uint16_t +{ + E_4_20MA = 0, + E_1_5V = 1, +}; + +// Parameters for E_ControlOutput1Assignment (0x2E06) and E_ControlOutput2Assignment (0x2E07) +// Ref Manual Page 5-9. [Advanced Function Setting Level] +enum class E5C_ControlOutputAssignment_Param : int16_t // Use signed type for negative values +{ + E_ASSIGN_NotAssigned = 0, + E_ASSIGN_ControlOutputHeating = 1, + E_ASSIGN_ControlOutputCooling = 2, + E_ASSIGN_Alarm1 = 3, + E_ASSIGN_Alarm2 = 4, + E_ASSIGN_Alarm3 = 5, + E_ASSIGN_Alarm4 = 6, + E_ASSIGN_HeaterAlarm = 7, // General heater alarm? (Could be HB or HS depending on config) + E_ASSIGN_HB_Alarm = 8, // Heater Break alarm + E_ASSIGN_HS_Alarm = 9, // Heater Short alarm + E_ASSIGN_InputError = 10, // PV Input Error + E_ASSIGN_RSP_InputError = 11, // Remote SP input error + E_ASSIGN_ProgramEndOutput = 12, // Note *1: P.END can only be set if Program Pattern (0x2D16) is set to OFF + E_ASSIGN_RUN_Output = 13, // Indicates RUN state + E_ASSIGN_IntegratedAlarm = 14, // OR combination of selected alarms + E_ASSIGN_WorkBit1 = 15, + E_ASSIGN_WorkBit2 = 16, + E_ASSIGN_WorkBit3 = 17, + E_ASSIGN_WorkBit4 = 18, + E_ASSIGN_WorkBit5 = 19, + E_ASSIGN_WorkBit6 = 20, + E_ASSIGN_WorkBit7 = 21, + E_ASSIGN_WorkBit8 = 22, + + // Special values for Linear Current Output (Only for OUT1 on E5CC-U/E5GC May 2014+ / v2.2+ models, see Note *2) + E_ASSIGN_SimpleTransfer_MV_Cooling = -5, // (FFFF FFFB) Simple MV transfer (cooling) + E_ASSIGN_SimpleTransfer_MV_Heating = -4, // (FFFF FFFC) Simple MV transfer (heating) + E_ASSIGN_SimpleTransfer_PV = -3, // (FFFF FFFD) Simple PV transfer + E_ASSIGN_SimpleTransfer_Ramp_SP = -2, // (FFFF FFFE) Simple SP transfer (during ramp) + E_ASSIGN_SimpleTransfer_SP = -1 // (FFFF FFFF) Simple SP transfer + // Note: For OUT2assignment (0x2E07), only values 0-22 are typically valid. Check specific model manual. + // Note: For OUT2assignment linear current output, only values 0-2 may be valid (Not assigned, Heating Out, Cooling Out). Check manual. +}; + + +// --- Enums for Status Register Bits (Refer to Manual Section 5-2) --- +// These are *examples* and need to be carefully verified against the specific E5C model manual. +// Define these if you need to decode individual status bits from registers like E_Status1, E_Status2_LowerWord, etc. + +/* +// Example bits for E_Status1 (0x2001) / E_Status1_StatusArea (0x2406) +enum class E5C_Status1_Bits : uint16_t +{ + E_S1_Alarm1_Output = (1 << 0), // Bit 0: Alarm 1 Output Status (0: OFF, 1: ON) + E_S1_Alarm2_Output = (1 << 1), // Bit 1: Alarm 2 Output Status + E_S1_Alarm3_Output = (1 << 2), // Bit 2: Alarm 3 Output Status + E_S1_Alarm4_Output = (1 << 3), // Bit 3: Alarm 4 Output Status (?) + E_S1_HeaterBurnout1 = (1 << 4), // Bit 4: Heater Burnout 1 Status + E_S1_HeaterBurnout2 = (1 << 5), // Bit 5: Heater Burnout 2 Status + E_S1_RunMode = (1 << 8), // Bit 8: RUN/STOP Status (0: STOP, 1: RUN) + E_S1_AutoTuning = (1 << 9), // Bit 9: AT Execution Status (0: OFF, 1: ON) + E_S1_TaskOperating = (1 << 10), // Bit 10: Task Operating Status (Programs) + E_S1_CommWritingDisabled= (1 << 11), // Bit 11: Communications Writing Disabled Status + E_S1_ManualMode = (1 << 12), // Bit 12: Auto/Manual Mode Status (0: Auto, 1: Manual) + E_S1_RemoteSP_Mode = (1 << 13), // Bit 13: SP Mode (0: Local, 1: Remote) + // ... add other relevant bits based on manual section 5-2 +}; +*/ + +/* +// Example bits for E_Status2_LowerWord (0x2408) +enum class E5C_Status2Lower_Bits : uint16_t +{ + E_S2L_RAM_Error = (1 << 0), // Bit 0: RAM Error + E_S2L_MemoryError = (1 << 1), // Bit 1: Memory Error (Non-volatile) + E_S2L_ADC_Error = (1 << 2), // Bit 2: A/D Converter Error + E_S2L_InputTypeError = (1 << 3), // Bit 3: Input Type Error + E_S2L_WatchdogTimeout = (1 << 4), // Bit 4: Watchdog Timer Timeout + E_S2L_OverrunError = (1 << 5), // Bit 5: Overrun Error (Communications?) + E_S2L_FramingError = (1 << 6), // Bit 6: Framing Error (Communications?) + E_S2L_ParityError = (1 << 7), // Bit 7: Parity Error (Communications?) + E_S2L_CommsTimeoutError = (1 << 8), // Bit 8: Communications Timeout Error + E_S2L_CommsError = (1 << 9), // Bit 9: Communications Error (General?) + E_S2L_CommsBufferOverrun = (1 << 10),// Bit 10: Communications Buffer Overrun Error + E_S2L_PowerSupplyFreqError = (1 << 11),// Bit 11: Power Supply Frequency Error + // ... add other relevant bits based on manual section 5-2 +}; + */ + +/* +// Example bits for E_Status2_UpperWord (0x2409) - Note: Bit numbering starts from 16 conceptually +enum class E5C_Status2Upper_Bits : uint16_t +{ + E_S2U_PV_InputError = (1 << 0), // Bit 16 (0 in upper word): PV Input Error (Over/Under Range or Disconnect) + E_S2U_RemoteSPInputError = (1 << 1), // Bit 17 (1 in upper word): Remote SP Input Error (Over/Under Range) + E_S2U_MVOutputError = (1 << 2), // Bit 18 (2 in upper word): MV Output Error + E_S2U_ExternalDIError = (1 << 3), // Bit 19 (3 in upper word): Error via External DI (Digital Input) + E_S2U_HeaterShortAlarm1 = (1 << 4), // Bit 20 (4 in upper word): HS (Heater Short) Alarm 1 Status + E_S2U_HeaterShortAlarm2 = (1 << 5), // Bit 21 (5 in upper word): HS (Heater Short) Alarm 2 Status + // E_S2U_TempSensorDisconnected= (1 << 6), // Bit 22 (6 in upper word): (Not explicitly listed, PV Input Error likely covers this) + // ... add other relevant bits based on manual section 5-2 +}; +*/ + +#endif // E5C_MODBUS_REGISTERS_HPP + + +#ifndef E5C_MODBUS_REGISTERS_HPP +#define E5C_MODBUS_REGISTERS_HPP + +#include // Required for uint16_t and int16_t + +// --- E5C Modbus Command Codes --- +// Represents the Command Codes used for various operations on the E5C device. +// These codes are typically written to a specific command register (often 0x0000) via Modbus. +enum class E5C_CommandCode : uint16_t +{ + E_CommunicationsWriting = 0x00, // Controls Modbus communications writing (enable/disable) + E_RunStop = 0x01, // Starts or stops control operation + E_MultiSP = 0x02, // Selects the target Set Point (SP) number (0-7) + E_ATExecuteCancel = 0x03, // Executes or cancels Auto-Tuning (AT) + E_WriteMode = 0x04, // Selects the write mode (Backup or RAM only) + E_SaveRAMData = 0x05, // Saves data from RAM to non-volatile memory (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_SoftwareReset = 0x06, // Performs a software reset (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_MoveToSetupArea1 = 0x07, // Moves operation to Setup Area 1 (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_MoveToProtectLevel = 0x08, // Moves operation to the Protect Level (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_AutoManualSwitch = 0x09, // Switches between Automatic and Manual control mode + E_ParameterInitialization = 0x0B, // Initializes parameters to default values (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_AlarmLatchCancel = 0x0C, // Cancels specified latched alarms + E_SPMode = 0x0D, // Selects Set Point (SP) mode (Local or Remote) + E_InvertDirectReverse = 0x0E, // Selects direct or reverse operation (Invert/Not Invert) via Command + E_ProgramStart = 0x11, // Starts or resets a program pattern +}; + +// --- Parameter Enums for Specific Command Codes --- +// These enums define the valid "Related Information" values (data) sent with specific commands. + +// Parameters for E_CommunicationsWriting (0x00) +enum class E5C_CommWrite_Param : uint16_t +{ + E_OffDisabled = 0x00, + E_OnEnabled = 0x01, +}; + +// Parameters for E_RunStop (0x01) +enum class E5C_RunStop_Param : uint16_t +{ + E_Run = 0x00, + E_Stop = 0x01, +}; + +// Parameters for E_MultiSP (0x02) +enum class E5C_MultiSP_Param : uint16_t +{ + E_SetPoint0 = 0x00, + E_SetPoint1 = 0x01, + E_SetPoint2 = 0x02, + E_SetPoint3 = 0x03, + E_SetPoint4 = 0x04, + E_SetPoint5 = 0x05, + E_SetPoint6 = 0x06, + E_SetPoint7 = 0x07, +}; + +// Parameters for E_ATExecuteCancel (0x03) +enum class E5C_ATExecuteCancel_Param : uint16_t +{ + E_ATCancel = 0x00, // Cancel Auto-Tuning + E_ATExecute100Pct = 0x01, // Execute 100% Auto-Tuning + E_ATEexecute40Pct = 0x02, // Execute 40% Auto-Tuning +}; + +// Parameters for E_WriteMode (0x04) +enum class E5C_WriteMode_Param : uint16_t +{ + E_Backup = 0x00, // Writes are backed up to non-volatile memory + E_RAMWriteMode = 0x01, // Writes affect RAM only +}; + +// Parameters for E_AutoManualSwitch (0x09) +enum class E5C_AutoManualSwitch_Param : uint16_t +{ + E_AutomaticMode = 0x00, + E_ManualMode = 0x01, +}; + +// Parameters for E_AlarmLatchCancel (0x0C) +enum class E5C_AlarmLatchCancel_Param : uint16_t +{ + E_Alarm1LatchCancel = 0x00, + E_Alarm2LatchCancel = 0x01, + E_Alarm3LatchCancel = 0x02, + E_HBAlarmLatchCancel = 0x03, // Heater Break alarm latch cancel + E_HSAlarmLatchCancel = 0x04, // Heater Short alarm latch cancel (?) + E_Alarm4LatchCancel = 0x05, // Alarm 4 latch cancel (?) + E_AllAlarmLatchCancel = 0x0F, // Cancel all latched alarms +}; + +// Parameters for E_SPMode (0x0D) +enum class E5C_SPMode_Param : uint16_t +{ + E_LocalSPMode = 0x00, + E_RemoteSPMode = 0x01, +}; + +// Parameters for E_InvertDirectReverse (0x0E) - Command based +enum class E5C_InvertDirectReverseCmd_Param : uint16_t +{ + E_NotInvert = 0x00, // Direct operation (Command parameter) + E_Invert = 0x01, // Reverse operation (Command parameter) +}; + +// Parameters for E_ProgramStart (0x11) +enum class E5C_ProgramStart_Param : uint16_t +{ + E_Reset = 0x00, // Reset the program/pattern + E_Start = 0x01, // Start the program/pattern +}; + +// Constant for commands where the related information is always 0x0000 +constexpr uint16_t E5C_COMMAND_PARAM_DEFAULT = 0x0000; +// This value should be used as the data when issuing commands like: +// - E_SaveRAMData +// - E_SoftwareReset +// - E_MoveToSetupArea1 +// - E_MoveToProtectLevel (Command, not the register 0x2504) +// - E_ParameterInitialization + +// --- E5C Modbus Variable Area Registers (Holding Registers - Two-Byte Mode Addresses) --- +// Represents the addresses for reading/writing various parameters and status values. +// Based on the "Variable Area (Setting Range) List" sections of the Communications Manual (H175). +// Note: Addresses are based on the "Two-byte mode" column. +// Note: Ranges and accessibility levels (Operation, Adjustment, Initial, Advanced) are indicated where available. +enum class E5C_HoldingRegister : uint16_t +{ + // --- Operation Level Monitors (Addresses ~0x2000 - 0x20FF, Manual Page 5-1) --- + E_PV = 0x2000, // Process Value (Read-Only) + E_Status1 = 0x2001, // Status 1 (Bitfield, Read-Only, see manual section 5-2. Note *1, *2 apply) + E_InternalSetPoint = 0x2002, // Internal Set Point (Read-Only? Note *1 applies) + E_HeaterCurrent1Value = 0x2003, // Heater Current 1 Value Monitor (Read-Only, Range: 0.0 to 55.0 A) + E_MV_MonitorHeating = 0x2004, // Manipulated Value Monitor (Heating Output) (Read-Only, %: Range -5.0 to 105.0 or 0.0 to 105.0) + E_MV_MonitorCooling = 0x2005, // Manipulated Value Monitor (Cooling Output) (Read-Only, %: Range 0.0 to 105.0) + + // --- Primary Setting Parameters (Addresses ~0x2100 - 0x21FF, Manual Page 5-1) --- + E_SetPoint = 0x2103, // Set Point (SP) value (Writable & Readable, Primary SP setting, likely the *active* SP or SP0 in non-MultiSP mode) + E_AlarmValue1 = 0x2104, // Alarm Value 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueUpperLimit1 = 0x2105, // Alarm Value Upper Limit 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueLowerLimit1 = 0x2106, // Alarm Value Lower Limit 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValue2 = 0x2107, // Alarm Value 2 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueUpperLimit2 = 0x2108, // Alarm Value Upper Limit 2 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueLowerLimit2 = 0x2109, // Alarm Value Lower Limit 2 (Writable, Range: -1999 to 9999) [Main Setting] + // Add other registers from 0x21xx range if needed from other tables + + // --- Status/Monitor Parameters (Addresses ~0x2400 - 0x24FF, Manual Page 5-2) --- + E_PV_StatusArea = 0x2402, // Process Value (Read-Only status copy) + E_InternalSetPoint_StatusArea = 0x2403, // Internal Set Point (Read-Only status copy, Note *1) + E_MultiSP_NoMonitor = 0x2404, // Multi-SP No. Monitor (Which SP is currently active: 0 to 7, Read-Only) + E_Status1_StatusArea = 0x2406, // Status 1 (Read-Only status copy, Bitfield, Note *1, *2 apply) + E_StatusWord3_Leftmost = 0x2407, // Status Word 3 / Leftmost bits (Part of a larger status? Read-Only, Note *3 applies) + E_Status2_LowerWord = 0x2408, // Status 2 (Rightmost 16 bits / Lower Word. Read-Only, Bitfield, Note *1, *2 apply) + E_Status2_UpperWord = 0x2409, // Status 2 (Leftmost 16 bits / Upper Word. Read-Only, Bitfield, Note *1, *3 apply) + E_DecimalPointMonitor = 0x2410, // Decimal Point Monitor (Position for PV/SP display: 0 to 3, Read-Only) + // Add other registers from 0x24xx range if needed + + // --- Protect Level Parameters (Addresses ~0x2500 - 0x25FF, Ref Manual Page 5-3) --- + E_OperationAdjustmentProtect = 0x2500, // Sets Operation/Adjustment Protection Level (Writable, See E5C_OperationProtect_Param) + E_InitialSettingCommsProtect = 0x2501, // Sets Initial Setting/Communications Protection Level (Writable, See E5C_InitialProtect_Param) + E_SettingChangeProtect = 0x2502, // Enable/Disable Setting Change Protect via front panel (Writable, See E5C_SettingChangeProtect_Param) + E_PF_KeyProtect = 0x2503, // Enable/Disable PF Key Protect (Writable, See E5C_PFKeyProtect_Param) + E_MoveToProtectLevelSetting = 0x2504, // Sets the password value needed to move to protect level (Writable, Range: -1999 to 9999 or FFFF831 to 270F) + E_PasswordToMoveToProtectLevel = 0x2505, // Write the password here to attempt moving to the protect level (Write-Only? Monitor value always 0) + E_ParameterMaskEnable = 0x2506, // Enable/Disable Parameter Mask (Writable, See E5C_ParamMaskEnable_Param) (Monitor value always 0) + E_ChangedParametersOnly = 0x2507, // Control Change Parameters setting (Writable, See E5C_ChangedParamsOnly_Param) + + // --- Manual Control / Operation Level Parameters (Addresses ~0x2600 - 0x26FF, Ref Manual Page 5-3) --- + E_ManualMV = 0x2600, // Manual Manipulated Value (Writable in Manual Mode) (%: Ranges vary by model/setting) + E_SetPoint_OperationLevel = 0x2601, // Set Point visible/settable in Operation Level (Writable, Range: SP lower to SP upper limit) (Likely mirrors E_SetPoint=0x2103 but accessible differently) + E_RemoteSPMonitor = 0x2602, // Remote SP Monitor (Read-Only, Range: Remote SP lower limit -10% FS to Remote SP upper limit +10% FS) + E_HeaterCurrent1ValueMonitor_OpLevel = 0x2604, // Heater Current 1 Value Monitor (Read-Only, 0.0 to 55.0 A) (Likely same value as 0x2003) + E_MVMonitorHeating_OpLevel = 0x2605, // MV Monitor (Heating) (Read-Only, %: -5.0 to 105.0 or 0.0 to 105.0) (Likely same value as 0x2004) + E_MVMonitorCooling_OpLevel = 0x2606, // MV Monitor (Cooling) (Read-Only, %: 0.0 to 105.0) (Likely same value as 0x2005) + E_ValveOpeningMonitor = 0x2607, // Valve Opening Monitor (Read-Only, %: -10.0 to 110.0) + + // --- Adjustment Level Parameters (Addresses ~0x2700 - 0x27FF, Ref Manual Page 5-4/5-5) --- + E_ProportionalBandCooling = 0x2701, // Proportional Band (Cooling) (Writable, Range: 0.1 to 999.9) [Adjustment Level] + E_IntegralTimeCooling = 0x2702, // Integral Time (Cooling) (Writable, Range: 0 to 9999 s / 0.0 to 999.9 s depending on derivative unit) [Adjustment Level] + E_DerivativeTimeCooling = 0x2703, // Derivative Time (Cooling) (Writable, Same range as Integral) [Adjustment Level] + E_DeadBand = 0x2704, // Dead Band (Writable, Range: -199.9 to 999.9 for temp input / -19.99 to 99.99 for analog input) [Adjustment Level] + E_ManualResetValue = 0x2705, // Manual Reset Value (Writable, Range: 0.0 to 100.0 %) [Adjustment Level] + E_HysteresisHeating = 0x2706, // Hysteresis (Heating) (Writable, Range: 0.1 to 999.9 for temp input / 0.01 to 99.99 for analog input) [Adjustment Level] + E_HysteresisCooling = 0x2707, // Hysteresis (Cooling) (Writable, Same range as Heating) [Adjustment Level] + E_ControlPeriodHeating = 0x2708, // Control Period (Heating) (Writable, Special values or 1 to 99 s) [Initial Setting Level] (See E5C_ControlPeriod_SpecialVal) + E_ControlPeriodCooling = 0x2709, // Control Period (Cooling) (Writable, Special values or 1 to 99 s) [Initial Setting Level] (See E5C_ControlPeriod_SpecialVal) + E_PositionPropDeadBand = 0x270A, // Position Proportional Dead Band (Writable, Range: 0.1 to 10.0) [Adjustment Level] + E_OpenCloseHysteresis = 0x270B, // Open/Close Hysteresis (Writable, Range: 0.1 to 20.0) [Adjustment Level] + E_SPRampTimeUnit = 0x270C, // SP Ramp Time Unit (Writable) [Advanced Function Setting Level] (See E5C_SPRampTimeUnit_Param) + E_SPRampSetValue = 0x270D, // SP Ramp Set Value (Writable, 0=OFF or 1 to 9999 in units from 0x270C) [Adjustment Level] (See E5C_SPRampSetValue_SpecialVal) + E_SPRampFallValue = 0x270E, // SP Ramp Fall Value (Writable, -1=Same as Set, 0=OFF or 1 to 9999) [Adjustment Level] (See E5C_SPRampFallValue_SpecialVal) + E_MVAtStop = 0x270F, // MV (%) at Stop (Writable, Range: -5.0 to 105.0 / -105.0 to 105.0 varies) [Advanced Function Setting Level] + E_MVAtPVError = 0x2711, // MV (%) at PV Error (Writable, Range: -5.0 to 105.0 / -105.0 to 105.0 varies) [Advanced Function Setting Level] + E_MVChangeRateLimit = 0x2713, // MV Change Rate Limit (Writable, 0.0=OFF or 0.1 to 100.0 %/s) [Advanced Function Setting Level] + E_PVInputSlopeCoeff = 0x2718, // PV Input Slope Coefficient (Writable, Range: 0.001 to 9.999) [Advanced Function Setting Level] + E_HeaterCurrent1ValueMonitor_Adv = 0x271A, // Heater Current 1 Value Monitor (Read-Only, 0.0 to 55.0 A) [ Seems redundant, matches 0x2003/0x2604] + E_HeaterBurnoutDetection1 = 0x271B, // Heater Burnout Detection 1 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_LeakageCurrent1Monitor = 0x271C, // Leakage Current 1 Monitor (Read-Only, 0.0 to 55.0? Units not specified, likely mA) [Operation Level] + E_HSAlarm1 = 0x271D, // HS (Heater Short?) Alarm 1 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_ProcessValueInputShift = 0x2723, // Process Value Input Shift (Writable, Range: -1999 to 9999) [Adjustment Level] + E_HeaterCurrent2ValueMonitor = 0x2724, // Heater Current 2 Value Monitor (Read-Only, 0.0 to 55.0 A) [Operation Level] + E_HeaterBurnoutDetection2 = 0x2725, // Heater Burnout Detection 2 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_LeakageCurrent2Monitor = 0x2726, // Leakage Current 2 Monitor (Read-Only, 0.0 to 55.0 mA?) [Operation Level] + E_HSAlarm2 = 0x2727, // HS (Heater Short?) Alarm 2 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_SoakTimeRemain = 0x2728, // Soak Time Remain (Read-Only?, Range: 0 to 9999) [Operation Level] + E_SoakTime = 0x2729, // Soak Time (Writable, Range: 1 to 9999) [Adjustment Level] + E_WaitBand = 0x272A, // Wait Band (Writable, 0=OFF, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Adjustment Level] (See E5C_WaitBand_SpecialVal) + E_RemoteSPInputShift = 0x272B, // Remote SP Input Shift (Writable, Range: -1999 to 9999) [Advanced Function Setting Level] + E_RemoteSPInputSlopeCoeff = 0x272C, // Remote SP Input Slope Coefficient (Writable, Range: 0.001 to 9.999) [Advanced Function Setting Level] + + // --- Advanced Function Setting / Initial Setting Level Parameters (Addresses ~0x2800 - 0x2DFF, Ref Manual Page 5-5/5-6/5-7/5-8) --- + E_InputDigitalFilter = 0x2800, // Input Digital Filter (Writable, Range: 0.0 to 999.9) [Advanced Function Setting Level] + E_MovingAverageCount = 0x2804, // Moving Average Count (Writable) [Advanced Function Setting Level] (See E5C_MovingAverageCount_Param) + E_ExtractionOfSquareRootLowCutPoint = 0x2808, // Extraction of Square Root Low-cut Point (%) (Writable, Range: 0.0 to 100.0) [Adjustment Level] + + E_InputType = 0x2C00, // Input Type selection (Writable, See E5C_InputType_Param) [Initial Setting Level] + E_TemperatureUnit = 0x2C01, // Temperature Unit selection (Writable, See E5C_TemperatureUnit_Param) [Initial Setting Level] + E_ScalingLowerLimit = 0x2C09, // Scaling Lower Limit (Writable, Range: -1999 to Scaling Upper Limit - 1) [Advanced Function Setting Level] + E_ScalingUpperLimit = 0x2C0B, // Scaling Upper Limit (Writable, Range: Scaling Lower Limit + 1 to 9999) [Advanced Function Setting Level] + E_DecimalPoint = 0x2C0C, // Decimal Point position for PV/SP (Writable, 0-3) [Advanced Function Setting Level] (See E5C_DecimalPoint_Param) + E_RemoteSPUpperLimit = 0x2C0D, // Remote SP Upper Limit (Writable, Range depends on input type/scaling) [Advanced Function Setting Level] + E_RemoteSPLowerLimit = 0x2C0E, // Remote SP Lower Limit (Writable, Range depends on input type/scaling) [Advanced Function Setting Level] + E_PVDecimalPointDisplay = 0x2C0F, // PV Decimal Point Display ON/OFF (Writable, See E5C_PVDecimalPointDisplay_Param) [Advanced Function Setting Level] + + E_ControlOutput1Signal = 0x2D03, // Control Output 1 Signal Type (Writable, See E5C_ControlOutputSignal_Param) [Initial Setting Level] (Only for Linear Output Models) + E_ControlOutput2Signal = 0x2D04, // Control Output 2 Signal Type (Writable, See E5C_ControlOutputSignal_Param) [Initial Setting Level] (Only for Linear Output Models) + E_SPUpperLimit = 0x2D0F, // SP Upper Limit (Writable, Range depends on input type/scaling) [Initial Setting Level] + E_SPLowerLimit = 0x2D10, // SP Lower Limit (Writable, Range depends on input type/scaling) [Initial Setting Level] + E_StandardOrHeatingCooling= 0x2D11, // Control Mode: Standard or Heating/Cooling (Writable, See E5C_ControlMode_Param) [Initial Setting Level] + E_DirectReverseOperation = 0x2D12, // Direct/Reverse operation setting (Writable, See E5C_DirectReverseOperation_Param) [Initial Setting Level] (Different from Command 0x0E) + E_CloseFloating = 0x2D13, // Close/Floating (position-proportional control) (Writable, See E5C_CloseFloating_Param) [Initial Setting Level] (Only for Position-proportional Models) + E_PidOnOff = 0x2D14, // PID/ON-OFF Control Selection (Writable, See E5C_PidOnOff_Param) [Initial Setting Level] + E_ST_Setting = 0x2D15, // Self-Tuning ON/OFF (Writable, See E5C_ST_Param) [Initial Setting Level] + E_ProgramPattern = 0x2D16, // Program Pattern Execution State (Writable, See E5C_ProgramPattern_Param) [Initial Setting Level] + E_RemoteSPInputType = 0x2D18, // Remote SP Input range selection (Writable, See E5C_RemoteSPInputType_Param) [Advanced Function Setting Level] + E_MinimumOutputOnOffBand = 0x2D19, // Minimum Output ON/OFF Band (Writable, Range: 0.0 to 50.0 %) [Advanced Function Setting Level] + + E_TransferOutputType = 0x2E00, // Transfer Output Type (Writable, See E5C_TransferOutputType_Param) [Initial Setting Level] + E_TransferOutputSignal = 0x2E01, // Transfer Output Signal Range (Writable, See E5C_TransferOutputSignal_Param) [Initial Setting Level] + E_ControlOutput1Assignment = 0x2E06, // Assign function to Control Output 1 (Writable, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] (Ref Manual Page 5-9) + E_ControlOutput2Assignment = 0x2E07, // Assign function to Control Output 2 (Writable, See E5C_ControlOutputAssignment_Param, Note restrictions) [Advanced Function Setting] (Ref Manual Page 5-9) + E_EventInputAssignment1 = 0x2E0A, // Event Input Assignment 1 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] (Ref Manual Page 5-10) + E_EventInputAssignment2 = 0x2E0B, // Event Input Assignment 2 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] (Ref Manual Page 5-10) + E_EventInputAssignment3 = 0x2E0C, // Event Input Assignment 3 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] (Ref Manual Page 5-10) + E_EventInputAssignment4 = 0x2E0D, // Event Input Assignment 4 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] (Ref Manual Page 5-10) + E_EventInputAssignment5 = 0x2E0E, // Event Input Assignment 5 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] (Ref Manual Page 5-10) + E_EventInputAssignment6 = 0x2E0F, // Event Input Assignment 6 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] (Ref Manual Page 5-10) + E_AuxiliaryOutput1Assignment = 0x2E10, // Auxiliary Output 1 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] (Ref Manual Page 5-10) + E_AuxiliaryOutput2Assignment = 0x2E11, // Auxiliary Output 2 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] (Ref Manual Page 5-10) + E_AuxiliaryOutput3Assignment = 0x2E12, // Auxiliary Output 3 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] (Ref Manual Page 5-10) + E_AuxiliaryOutput4Assignment = 0x2E13, // Auxiliary Output 4 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] (Ref Manual Page 5-10) + E_TransferOutputUpperLimit = 0x2E14, // Transfer Output Upper Limit (Writable, Range -1999 to 9999) [Initial Setting Level] (Ref Manual Page 5-10) + E_TransferOutputLowerLimit = 0x2E15, // Transfer Output Lower Limit (Writable, Range -1999 to 9999) [Initial Setting Level] (Ref Manual Page 5-10) + + + // --- Operation Level Parameters (Duplicated Addresses? / Specific Uses) (Addresses ~0x2900 - 0x29FF, Ref Manual Page 5-6/5-7) --- + // These allow setting SPs and Alarm values within the Operation or Adjustment levels, potentially overriding the base settings (0x21xx) when active. + E_SP0_OperationLevel = 0x2900, // SP 0 Setting (Writable, Range: SP lower limit to SP upper limit) [Operation Level] (Likely same as E_SetPoint when SP 0 is selected) + E_AlarmValue1_OperationLevel = 0x2902, // Alarm Value 1 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValue1=0x2104 configuration) + E_AlarmValueUpperLimit1_OperationLevel = 0x2903, // Alarm Value Upper Limit 1 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValueUpperLimit1=0x2105) + E_AlarmValueLowerLimit1_OperationLevel = 0x2904, // Alarm Value Lower Limit 1 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValueLowerLimit1=0x2106) + E_AlarmValue2_OperationLevel = 0x2905, // Alarm Value 2 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValue2=0x2107) + E_AlarmValueUpperLimit2_OperationLevel = 0x2906, // Alarm Value Upper Limit 2 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValueUpperLimit2=0x2108) + E_AlarmValueLowerLimit2_OperationLevel = 0x2907, // Alarm Value Lower Limit 2 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValueLowerLimit2=0x2109) + E_AlarmValue3 = 0x2908, // Alarm Value 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueUpperLimit3 = 0x2909, // Alarm Value Upper Limit 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueLowerLimit3 = 0x290A, // Alarm Value Lower Limit 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValue4 = 0x290B, // Alarm Value 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueUpperLimit4 = 0x290C, // Alarm Value Upper Limit 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueLowerLimit4 = 0x290D, // Alarm Value Lower Limit 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_SP1_Setting = 0x290E, // SP 1 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 1) + E_SP2_Setting = 0x291C, // SP 2 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 2) + E_SP3_Setting = 0x292A, // SP 3 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 3) + E_SP4_Setting = 0x2938, // SP 4 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 4) + E_SP5_Setting = 0x2946, // SP 5 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 5) + E_SP6_Setting = 0x2954, // SP 6 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 6) + E_SP7_Setting = 0x2962, // SP 7 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 7) + + // --- Adjustment Level PID / MV Limits (Addresses ~0x2A00 - ..., Ref Manual Page 5-7) --- + E_ProportionalBand = 0x2A00, // Proportional Band (Heating, Standard, or Close Position Control) (Writable, Range: 0.1 to 999.9) [Adjustment Level] + E_IntegralTime = 0x2A01, // Integral Time (Heating, Standard, or Close Position Control) (Writable, Range depends on time unit setting) [Adjustment Level] + E_DerivativeTime = 0x2A02, // Derivative Time (Heating, Standard, or Close Position Control) (Writable, Range depends on time unit setting) [Adjustment Level] + E_MVUpperLimit = 0x2A05, // MV Upper Limit (%) (Writable, Range depends on control type, see manual) [Adjustment Level] + E_MVLowerLimit = 0x2A06, // MV Lower Limit (%) (Writable, Range depends on control type, see manual) [Adjustment Level] + + // NOTE on Status Registers (e.g., E_Status1, E_Status2_LowerWord, E_Status2_UpperWord): + // These are bitfields. Refer to the E5C Communications Manual Section 5-2 "Status" + // for details on individual bit meanings. Explicit enums for these bits can be added if needed (See examples below). + // Note *1: Not displayed on the Controller display. + // Note *2: In 2-byte mode, the rightmost 16 bits are usually read. + // Note *3: In 2-byte mode, the leftmost 16 bits are usually read. + // This suggests Status 2 (E_Status2_LowerWord/E_Status2_UpperWord) and potentially StatusWord3 (E_StatusWord3_Leftmost) + // might be parts of larger 32-bit status values if the controller supported 4-byte mode reads. +}; + +// --- Parameter Enums for Specific Holding Register Settings --- + +// Parameters for E_OperationAdjustmentProtect (0x2500) +enum class E5C_OperationProtect_Param : uint16_t +{ + E_NoRestrictions = 0x00, // No restrictions in operation and adjustment levels + E_AdjustLevelProhibited = 0x01, // Move to adjustment level is prohibited + E_DisplayChangePV_PVSP = 0x02, // Display and change of only "PV" and "PV/SP" allowed + E_DisplayOnlyPV_PVSP = 0x03, // Display of only "PV" and "PV/SP" allowed +}; + +// Parameters for E_InitialSettingCommsProtect (0x2501) +enum class E5C_InitialProtect_Param : uint16_t +{ + E_MoveToInitialAllowedAdvDisplayed = 0x00, // Move to initial/comms allowed. Adv func displayed. + E_MoveToInitialAllowedAdvNotDisplayed= 0x01, // Move to initial/comms allowed. Adv func not displayed. + E_MoveToInitialProhibited = 0x02, // Move to initial/comms prohibited. +}; + +// Parameters for E_SettingChangeProtect (0x2502) +enum class E5C_SettingChangeProtect_Param : uint16_t +{ + E_OffChangeAllowed = 0x00, // OFF (Changing settings via front panel allowed) + E_OnChangeProhibited = 0x01, // ON (Changing settings via front panel prohibited) +}; + +// Parameters for E_PF_KeyProtect (0x2503) +enum class E5C_PFKeyProtect_Param : uint16_t +{ + E_Off = 0x00, // PF Key Protection OFF + E_On = 0x01, // PF Key Protection ON +}; + +// Parameters for E_ParameterMaskEnable (0x2506) +enum class E5C_ParamMaskEnable_Param : uint16_t +{ + E_Off = 0x00, // Parameter Mask function OFF + E_On = 0x01, // Parameter Mask function ON +}; + +// Parameters for E_ChangedParametersOnly (0x2507) +enum class E5C_ChangedParamsOnly_Param : uint16_t +{ + E_Off = 0x00, // Display all parameters in adjustment level etc. + E_On = 0x01, // Display only parameters changed from default in adjustment level etc. +}; + + +// --- Special Values / Parameter Enums for specific registers --- + +// Special values for E_ControlPeriodHeating (0x2708) and E_ControlPeriodCooling (0x2709) +// Note: Positive values 1 to 99 represent seconds directly. Use raw integers for those. +enum class E5C_ControlPeriod_SpecialVal : int16_t // Use signed type for negative values +{ + E_Period_0_1_Sec = -2, // Represents 0.1 seconds + E_Period_0_2_Sec = -1, // Represents 0.2 seconds + E_Period_0_5_Sec = 0, // Represents 0.5 seconds + // Values 1..99 are direct seconds, do not add them here. Must be written as int16_t. +}; + +// Parameters for E_SPRampTimeUnit (0x270C) +enum class E5C_SPRampTimeUnit_Param : uint16_t +{ + E_EU_Per_Second = 0, // Unit is Engineering Unit / second + E_EU_Per_Minute = 1, // Unit is Engineering Unit / minute + E_EU_Per_Hour = 2, // Unit is Engineering Unit / hour +}; + +// Special value for E_SPRampSetValue (0x270D) +// Note: Positive values 1 to 9999 represent the rate directly. Use raw integers for those. +enum class E5C_SPRampSetValue_SpecialVal : uint16_t +{ + E_Off = 0, // SP Ramp Set is OFF + // Values 1..9999 are direct rates, do not add them here. Must be written as uint16_t. +}; + +// Special values for E_SPRampFallValue (0x270E) +// Note: Positive values 1 to 9999 represent the rate directly. Use raw integers for those. +enum class E5C_SPRampFallValue_SpecialVal : int16_t // Use signed type for negative value +{ + E_SameAsSet = -1, // Fall rate is same as Set rate (defined by 0x270D) + E_Off = 0, // SP Ramp Fall is OFF + // Values 1..9999 are direct rates, do not add them here. Must be written as int16_t. +}; + +// Special value for E_WaitBand (0x272A) +// Note: Positive values represent the band width directly (needs scaling based on Temp/Analog input). +// Use raw values for setting the width. +enum class E5C_WaitBand_SpecialVal : uint16_t +{ + E_Off = 0, // Wait Band function is OFF + // Other values represent the actual width. +}; + +// Parameters for E_MovingAverageCount (0x2804) +enum class E5C_MovingAverageCount_Param : uint16_t +{ + E_Off = 0, // Moving Average OFF + E_2_Times = 1, // Moving Average Count: 2 times + E_4_Times = 2, // Moving Average Count: 4 times + E_8_Times = 3, // Moving Average Count: 8 times + E_16_Times= 4, // Moving Average Count: 16 times + E_32_Times= 5, // Moving Average Count: 32 times +}; + +// Parameters for E_InputType (0x2C00) [Initial Setting Level] +enum class E5C_InputType_Param : uint16_t +{ + E_Pt_neg200_850C = 0, // Pt (-200 to 850°C / -300 to 1500°F) + E_Pt_neg199_500C_1DP = 1, // Pt (-199.9 to 500.0°C / -199.9 to 900.0°F) + E_Pt_0_100C_1DP = 2, // Pt (0.0 to 100.0°C / 0.0 to 210.0°F) + E_JPt_neg199_500C_1DP = 3, // JPt (-199.9 to 500.0°C / -199.9 to 900.0°F) + E_JPt_0_100C_1DP = 4, // JPt (0.0 to 100.0°C / 0.0 to 210.0°F) + E_K_neg200_1300C = 5, // K (-200 to 1300°C / -300 to 2300°F) + E_K_neg20_500C_1DP = 6, // K (-20.0 to 500.0°C / 0.0 to 900.0°F) + E_J_neg100_850C = 7, // J (-100 to 850°C / -100 to 1500°F) + E_J_neg20_400C_1DP = 8, // J (-20.0 to 400.0°C / 0.0 to 750.0°F) + E_T_neg200_400C = 9, // T (-200 to 400°C / -300 to 700°F) + E_T_neg199_400C_1DP = 10, // T (-199.9 to 400.0°C / -199.9 to 700.0°F) + E_E_neg200_600C = 11, // E (-200 to 600°C / -300 to 1100°F) + E_L_neg100_850C = 12, // L (-100 to 850°C / -100 to 1500°F) + E_U_neg200_400C = 13, // U (-200 to 400°C / -300 to 700°F) + E_U_neg199_400C_1DP = 14, // U (-199.9 to 400.0°C / -199.9 to 700.0°F) + E_N_neg200_1300C = 15, // N (-200 to 1300°C / -300 to 2300°F) + E_R_0_1700C = 16, // R (0 to 1700°C / 0 to 3000°F) + E_S_0_1700C = 17, // S (0 to 1700°C / 0 to 3000°F) + E_B_100_1800C = 18, // B (100 to 1800°C / 300 to 3200°F) + E_W_0_2300C = 19, // W (0 to 2,300°C / 0 to 3,200°F) + E_PLII_0_1300C = 20, // PLII (0 to 1,300°C / 0 to 2,300°F) + E_IR_K_140F_60C = 21, // Infrared temperature sensor (K 140°F/60°C) + E_IR_K_240F_120C = 22, // Infrared temperature sensor (K 240°F/120°C) + E_IR_K_280F_140C = 23, // Infrared temperature sensor (K 280°F/140°C) + E_IR_K_440F_220C = 24, // Infrared temperature sensor (K 440°F/220°C) + E_Analog_4_20MA = 25, // 4 to 20 mA + E_Analog_0_20MA = 26, // 0 to 20 mA + E_Analog_1_5V = 27, // 1 to 5 V + E_Analog_0_5V = 28, // 0 to 5 V + E_Analog_0_10V = 29, // 0 to 10 V + E_Analog_0_50MV = 30, // 0 to 50 mV (Only E5CC-U v2.2+ May 2014 or later) +}; + +// Parameters for E_TemperatureUnit (0x2C01) [Initial Setting Level] +enum class E5C_TemperatureUnit_Param : uint16_t +{ + E_Celsius = 0, // °C + E_Fahrenheit = 1, // °F +}; + +// Parameters for E_DecimalPoint (0x2C0C) [Advanced Function Setting Level] +enum class E5C_DecimalPoint_Param : uint16_t +{ + E_DP_0 = 0, // No decimal point (XXXX) + E_DP_1 = 1, // One decimal place (XXX.X) + E_DP_2 = 2, // Two decimal places (XX.XX) + E_DP_3 = 3, // Three decimal places (X.XXX) +}; + +// Parameters for E_PVDecimalPointDisplay (0x2C0F) [Advanced Function Setting Level] +enum class E5C_PVDecimalPointDisplay_Param : uint16_t +{ + E_PVDP_OFF = 0, // PV Decimal Point Display OFF + E_PVDP_ON = 1, // PV Decimal Point Display ON +}; + +// Parameters for E_ControlOutput1Signal (0x2D03) and E_ControlOutput2Signal (0x2D04) [Initial Setting Level] +// Applicable for models with Linear Current Output +enum class E5C_ControlOutputSignal_Param : uint16_t +{ + E_4_20MA = 0, // 4 to 20 mA + E_0_20MA = 1, // 0 to 20 mA + // Note: Check manual if voltage options exist for these registers on specific models +}; + +// Parameters for E_StandardOrHeatingCooling (0x2D11) [Initial Setting Level] +enum class E5C_ControlMode_Param : uint16_t +{ + E_Standard = 0, // Standard control (Heating OR Cooling, depending on wiring/config) + E_HeatingAndCooling = 1, // Heating and Cooling control +}; + +// Parameters for E_DirectReverseOperation (0x2D12) [Initial Setting Level] +enum class E5C_DirectReverseOperation_Param : uint16_t +{ + E_ReverseOperation = 0, // PID Reverse operation (e.g., heating - MV increases as PV decreases) + E_DirectOperation = 1, // PID Direct operation (e.g., cooling - MV increases as PV increases) +}; + +// Parameters for E_CloseFloating (0x2D13) [Initial Setting Level] +// Only for Position-proportional Models +enum class E5C_CloseFloating_Param : uint16_t +{ + E_Floating = 0, + E_Close = 1, +}; + +// Parameters for E_PidOnOff (0x2D14) [Initial Setting Level] +enum class E5C_PidOnOff_Param : uint16_t +{ + E_ONOFF_CONTROL = 0, // Use ON/OFF control + E_PID_CONTROL = 1, // Use 2-PID control (or standard PID if 2-PID not applicable) +}; + +// Parameters for E_ST_Setting (0x2D15) [Initial Setting Level] +enum class E5C_ST_Param : uint16_t +{ + E_Off = 0, // Self-Tuning OFF + E_On = 1, // Self-Tuning ON +}; + +// Parameters for E_ProgramPattern (0x2D16) [Initial Setting Level] +enum class E5C_ProgramPattern_Param : uint16_t +{ + E_Off = 0, // Program Pattern function OFF (normal control) + E_Stop = 1, // Program Pattern STOP (reset or initial state) + E_Cont = 2, // Program Pattern CONTINUE (running) +}; + +// Parameters for E_RemoteSPInputType (0x2D18) [Advanced Function Setting Level] +enum class E5C_RemoteSPInputType_Param : uint16_t +{ + E_4_20MA = 0, + E_0_20MA = 1, + E_1_5V = 2, + E_0_5V = 3, + E_0_10V = 4, +}; + +// Parameters for E_TransferOutputType (0x2E00) [Initial Setting Level] +enum class E5C_TransferOutputType_Param : uint16_t +{ + E_Off = 0, // Transfer Output OFF + E_SetPoint = 1, // Output Set Point value + E_SetPointRamp = 2, // Output Set Point during SP ramp + E_PV = 3, // Output Process Value + E_MV_Heating = 4, // Output Manipulated Value (Heating) + E_MV_Cooling = 5, // Output Manipulated Value (Cooling) + E_ValveOpening = 6, // Output Valve Opening (% - Only for Position-proportional Models) +}; + +// Parameters for E_TransferOutputSignal (0x2E01) [Initial Setting Level] +enum class E5C_TransferOutputSignal_Param : uint16_t +{ + E_4_20MA = 0, + E_1_5V = 1, +}; + +// Parameters for E_ControlOutput1Assignment (0x2E06), E_ControlOutput2Assignment (0x2E07) +// and Auxiliary Output Assignments (0x2E10 - 0x2E13) +// Ref Manual Page 5-9 and 5-10. [Advanced Function Setting Level] +enum class E5C_ControlOutputAssignment_Param : int16_t // Use signed type for negative values +{ + E_ASSIGN_NotAssigned = 0, + E_ASSIGN_ControlOutputHeating = 1, + E_ASSIGN_ControlOutputCooling = 2, + E_ASSIGN_Alarm1 = 3, + E_ASSIGN_Alarm2 = 4, + E_ASSIGN_Alarm3 = 5, + E_ASSIGN_Alarm4 = 6, + E_ASSIGN_HeaterAlarm = 7, // General heater alarm? (Could be HB or HS depending on config) + E_ASSIGN_HB_Alarm = 8, // Heater Break alarm + E_ASSIGN_HS_Alarm = 9, // Heater Short alarm + E_ASSIGN_InputError = 10, // PV Input Error + E_ASSIGN_RSP_InputError = 11, // Remote SP input error + E_ASSIGN_ProgramEndOutput = 12, // Note *1 from page 5-9: P.END can only be set if Program Pattern (0x2D16) is set to OFF + E_ASSIGN_RUN_Output = 13, // Indicates RUN state + E_ASSIGN_IntegratedAlarm = 14, // OR combination of selected alarms + E_ASSIGN_WorkBit1 = 15, + E_ASSIGN_WorkBit2 = 16, + E_ASSIGN_WorkBit3 = 17, + E_ASSIGN_WorkBit4 = 18, + E_ASSIGN_WorkBit5 = 19, + E_ASSIGN_WorkBit6 = 20, + E_ASSIGN_WorkBit7 = 21, + E_ASSIGN_WorkBit8 = 22, + + // Special values for Linear Current Output (Only for OUT1 on E5CC-U/E5GC May 2014+ / v2.2+ models, see Note *2 from page 5-9) + // Typically NOT applicable to Auxiliary Output Assignments (0x2E10-0x2E13) or OUT2 Assignment (0x2E07) + E_ASSIGN_SimpleTransfer_MV_Cooling = -5, // (FFFF FFFB) Simple MV transfer (cooling) + E_ASSIGN_SimpleTransfer_MV_Heating = -4, // (FFFF FFFC) Simple MV transfer (heating) + E_ASSIGN_SimpleTransfer_PV = -3, // (FFFF FFFD) Simple PV transfer + E_ASSIGN_SimpleTransfer_Ramp_SP = -2, // (FFFF FFFE) Simple SP transfer (during ramp) + E_ASSIGN_SimpleTransfer_SP = -1 // (FFFF FFFF) Simple SP transfer +}; + +// Parameters for Event Input Assignments (0x2E0A - 0x2E0F) [Initial Setting Level] +// Ref Manual Page 5-10 +enum class E5C_EventInputAssignment_Param : uint16_t +{ + E_EV_None = 0, // None + E_EV_RunStop = 1, // RUN/STOP + E_EV_AutoManualSwitch = 2, // Auto/Manual Switch + E_EV_ProgramStart = 3, // Program Start (Note *1 from pg 5-10: only if prog pattern is OFF) + E_EV_DirectReverseOperation = 4, // Direct/Reverse Operation switch + E_EV_SPModeSwitch = 5, // SP Mode Switch (Local/Remote) (Note *2 from pg 5-10: only if remote SP input) + E_EV_ATExecuteCancel_100 = 6, // 100% AT Execute/Cancel + E_EV_ATExecuteCancel_40 = 7, // 40% AT Execute/Cancel + E_EV_SettingChangeEnableDisable = 8, // Setting Change Enable/Disable + E_EV_CommsWritingEnableDisable = 9, // Communications Writing Enable/Disable (Note *3 from pg 5-10: only if external comms supported) + E_EV_AlarmLatchCancel = 10, // Alarm Latch Cancel + E_EV_MultiSP_Switch_Bit0 = 11, // Multi-SP No. Switch, Bit 0 + E_EV_MultiSP_Switch_Bit1 = 12, // Multi-SP No. Switch, Bit 1 + E_EV_MultiSP_Switch_Bit2 = 13, // Multi-SP No. Switch, Bit 2 +}; + + +// --- Enums for Status Register Bits (Refer to Manual Section 5-2) --- +// These are *examples* and need to be carefully verified against the specific E5C model manual. +// Define these if you need to decode individual status bits from registers like E_Status1, E_Status2_LowerWord, etc. + +/* +// Example bits for E_Status1 (0x2001) / E_Status1_StatusArea (0x2406) +enum class E5C_Status1_Bits : uint16_t +{ + E_S1_Alarm1_Output = (1 << 0), // Bit 0: Alarm 1 Output Status (0: OFF, 1: ON) + E_S1_Alarm2_Output = (1 << 1), // Bit 1: Alarm 2 Output Status + E_S1_Alarm3_Output = (1 << 2), // Bit 2: Alarm 3 Output Status + E_S1_Alarm4_Output = (1 << 3), // Bit 3: Alarm 4 Output Status (?) + E_S1_HeaterBurnout1 = (1 << 4), // Bit 4: Heater Burnout 1 Status + E_S1_HeaterBurnout2 = (1 << 5), // Bit 5: Heater Burnout 2 Status + E_S1_RunMode = (1 << 8), // Bit 8: RUN/STOP Status (0: STOP, 1: RUN) + E_S1_AutoTuning = (1 << 9), // Bit 9: AT Execution Status (0: OFF, 1: ON) + E_S1_TaskOperating = (1 << 10), // Bit 10: Task Operating Status (Programs) + E_S1_CommWritingDisabled= (1 << 11), // Bit 11: Communications Writing Disabled Status + E_S1_ManualMode = (1 << 12), // Bit 12: Auto/Manual Mode Status (0: Auto, 1: Manual) + E_S1_RemoteSP_Mode = (1 << 13), // Bit 13: SP Mode (0: Local, 1: Remote) + // ... add other relevant bits based on manual section 5-2 +}; +*/ + +/* +// Example bits for E_Status2_LowerWord (0x2408) +enum class E5C_Status2Lower_Bits : uint16_t +{ + E_S2L_RAM_Error = (1 << 0), // Bit 0: RAM Error + E_S2L_MemoryError = (1 << 1), // Bit 1: Memory Error (Non-volatile) + E_S2L_ADC_Error = (1 << 2), // Bit 2: A/D Converter Error + E_S2L_InputTypeError = (1 << 3), // Bit 3: Input Type Error + E_S2L_WatchdogTimeout = (1 << 4), // Bit 4: Watchdog Timer Timeout + E_S2L_OverrunError = (1 << 5), // Bit 5: Overrun Error (Communications?) + E_S2L_FramingError = (1 << 6), // Bit 6: Framing Error (Communications?) + E_S2L_ParityError = (1 << 7), // Bit 7: Parity Error (Communications?) + E_S2L_CommsTimeoutError = (1 << 8), // Bit 8: Communications Timeout Error + E_S2L_CommsError = (1 << 9), // Bit 9: Communications Error (General?) + E_S2L_CommsBufferOverrun = (1 << 10),// Bit 10: Communications Buffer Overrun Error + E_S2L_PowerSupplyFreqError = (1 << 11),// Bit 11: Power Supply Frequency Error + // ... add other relevant bits based on manual section 5-2 +}; + */ + +/* +// Example bits for E_Status2_UpperWord (0x2409) - Note: Bit numbering starts from 16 conceptually +enum class E5C_Status2Upper_Bits : uint16_t +{ + E_S2U_PV_InputError = (1 << 0), // Bit 16 (0 in upper word): PV Input Error (Over/Under Range or Disconnect) + E_S2U_RemoteSPInputError = (1 << 1), // Bit 17 (1 in upper word): Remote SP Input Error (Over/Under Range) + E_S2U_MVOutputError = (1 << 2), // Bit 18 (2 in upper word): MV Output Error + E_S2U_ExternalDIError = (1 << 3), // Bit 19 (3 in upper word): Error via External DI (Digital Input) + E_S2U_HeaterShortAlarm1 = (1 << 4), // Bit 20 (4 in upper word): HS (Heater Short) Alarm 1 Status + E_S2U_HeaterShortAlarm2 = (1 << 5), // Bit 21 (5 in upper word): HS (Heater Short) Alarm 2 Status + // E_S2U_TempSensorDisconnected= (1 << 6), // Bit 22 (6 in upper word): (Not explicitly listed, PV Input Error likely covers this) + // ... add other relevant bits based on manual section 5-2 +}; +*/ + +#endif // E5C_MODBUS_REGISTERS_HPP + + +#ifndef E5C_MODBUS_REGISTERS_HPP +#define E5C_MODBUS_REGISTERS_HPP + +#include // Required for uint16_t and int16_t + +// --- E5C Modbus Command Codes --- +// Represents the Command Codes used for various operations on the E5C device. +// These codes are typically written to a specific command register (often 0x0000) via Modbus. +enum class E5C_CommandCode : uint16_t +{ + E_CommunicationsWriting = 0x00, // Controls Modbus communications writing (enable/disable) + E_RunStop = 0x01, // Starts or stops control operation + E_MultiSP = 0x02, // Selects the target Set Point (SP) number (0-7) + E_ATExecuteCancel = 0x03, // Executes or cancels Auto-Tuning (AT) + E_WriteMode = 0x04, // Selects the write mode (Backup or RAM only) + E_SaveRAMData = 0x05, // Saves data from RAM to non-volatile memory (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_SoftwareReset = 0x06, // Performs a software reset (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_MoveToSetupArea1 = 0x07, // Moves operation to Setup Area 1 (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_MoveToProtectLevel = 0x08, // Moves operation to the Protect Level (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_AutoManualSwitch = 0x09, // Switches between Automatic and Manual control mode + E_ParameterInitialization = 0x0B, // Initializes parameters to default values (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_AlarmLatchCancel = 0x0C, // Cancels specified latched alarms + E_SPMode = 0x0D, // Selects Set Point (SP) mode (Local or Remote) + E_InvertDirectReverse = 0x0E, // Selects direct or reverse operation (Invert/Not Invert) via Command + E_ProgramStart = 0x11, // Starts or resets a program pattern +}; + +// --- Parameter Enums for Specific Command Codes --- +// These enums define the valid "Related Information" values (data) sent with specific commands. + +// Parameters for E_CommunicationsWriting (0x00) +enum class E5C_CommWrite_Param : uint16_t +{ + E_OffDisabled = 0x00, + E_OnEnabled = 0x01, +}; + +// Parameters for E_RunStop (0x01) +enum class E5C_RunStop_Param : uint16_t +{ + E_Run = 0x00, + E_Stop = 0x01, +}; + +// Parameters for E_MultiSP (0x02) +enum class E5C_MultiSP_Param : uint16_t +{ + E_SetPoint0 = 0x00, + E_SetPoint1 = 0x01, + E_SetPoint2 = 0x02, + E_SetPoint3 = 0x03, + E_SetPoint4 = 0x04, + E_SetPoint5 = 0x05, + E_SetPoint6 = 0x06, + E_SetPoint7 = 0x07, +}; + +// Parameters for E_ATExecuteCancel (0x03) +enum class E5C_ATExecuteCancel_Param : uint16_t +{ + E_ATCancel = 0x00, // Cancel Auto-Tuning + E_ATExecute100Pct = 0x01, // Execute 100% Auto-Tuning + E_ATEexecute40Pct = 0x02, // Execute 40% Auto-Tuning +}; + +// Parameters for E_WriteMode (0x04) +enum class E5C_WriteMode_Param : uint16_t +{ + E_Backup = 0x00, // Writes are backed up to non-volatile memory + E_RAMWriteMode = 0x01, // Writes affect RAM only +}; + +// Parameters for E_AutoManualSwitch (0x09) +enum class E5C_AutoManualSwitch_Param : uint16_t +{ + E_AutomaticMode = 0x00, + E_ManualMode = 0x01, +}; + +// Parameters for E_AlarmLatchCancel (0x0C) +enum class E5C_AlarmLatchCancel_Param : uint16_t +{ + E_Alarm1LatchCancel = 0x00, + E_Alarm2LatchCancel = 0x01, + E_Alarm3LatchCancel = 0x02, + E_HBAlarmLatchCancel = 0x03, // Heater Break alarm latch cancel + E_HSAlarmLatchCancel = 0x04, // Heater Short alarm latch cancel (?) + E_Alarm4LatchCancel = 0x05, // Alarm 4 latch cancel (?) + E_AllAlarmLatchCancel = 0x0F, // Cancel all latched alarms +}; + +// Parameters for E_SPMode (0x0D) +enum class E5C_SPMode_Param : uint16_t +{ + E_LocalSPMode = 0x00, + E_RemoteSPMode = 0x01, +}; + +// Parameters for E_InvertDirectReverse (0x0E) - Command based +enum class E5C_InvertDirectReverseCmd_Param : uint16_t +{ + E_NotInvert = 0x00, // Direct operation (Command parameter) + E_Invert = 0x01, // Reverse operation (Command parameter) +}; + +// Parameters for E_ProgramStart (0x11) +enum class E5C_ProgramStart_Param : uint16_t +{ + E_Reset = 0x00, // Reset the program/pattern + E_Start = 0x01, // Start the program/pattern +}; + +// Constant for commands where the related information is always 0x0000 +constexpr uint16_t E5C_COMMAND_PARAM_DEFAULT = 0x0000; +// This value should be used as the data when issuing commands like: +// - E_SaveRAMData +// - E_SoftwareReset +// - E_MoveToSetupArea1 +// - E_MoveToProtectLevel (Command, not the register 0x2504) +// - E_ParameterInitialization + +// --- E5C Modbus Variable Area Registers (Holding Registers - Two-Byte Mode Addresses) --- +// Represents the addresses for reading/writing various parameters and status values. +// Based on the "Variable Area (Setting Range) List" sections of the Communications Manual (H175). +// Note: Addresses are based on the "Two-byte mode" column. +// Note: Ranges and accessibility levels (Operation, Adjustment, Initial, Advanced) are indicated where available. +enum class E5C_HoldingRegister : uint16_t +{ + // --- Operation Level Monitors (Addresses ~0x2000 - 0x20FF, Manual Page 5-1) --- + E_PV = 0x2000, // Process Value (Read-Only) + E_Status1 = 0x2001, // Status 1 (Bitfield, Read-Only, see manual section 5-2. Note *1, *2 apply) + E_InternalSetPoint = 0x2002, // Internal Set Point (Read-Only? Note *1 applies) + E_HeaterCurrent1Value = 0x2003, // Heater Current 1 Value Monitor (Read-Only, Range: 0.0 to 55.0 A) + E_MV_MonitorHeating = 0x2004, // Manipulated Value Monitor (Heating Output) (Read-Only, %: Range -5.0 to 105.0 or 0.0 to 105.0) + E_MV_MonitorCooling = 0x2005, // Manipulated Value Monitor (Cooling Output) (Read-Only, %: Range 0.0 to 105.0) + + // --- Primary Setting Parameters (Addresses ~0x2100 - 0x21FF, Manual Page 5-1) --- + E_SetPoint = 0x2103, // Set Point (SP) value (Writable & Readable, Primary SP setting, likely the *active* SP or SP0 in non-MultiSP mode) + E_AlarmValue1 = 0x2104, // Alarm Value 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueUpperLimit1 = 0x2105, // Alarm Value Upper Limit 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueLowerLimit1 = 0x2106, // Alarm Value Lower Limit 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValue2 = 0x2107, // Alarm Value 2 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueUpperLimit2 = 0x2108, // Alarm Value Upper Limit 2 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueLowerLimit2 = 0x2109, // Alarm Value Lower Limit 2 (Writable, Range: -1999 to 9999) [Main Setting] + // Add other registers from 0x21xx range if needed from other tables + + // --- Status/Monitor Parameters (Addresses ~0x2400 - 0x24FF, Manual Page 5-2) --- + E_PV_StatusArea = 0x2402, // Process Value (Read-Only status copy) + E_InternalSetPoint_StatusArea = 0x2403, // Internal Set Point (Read-Only status copy, Note *1) + E_MultiSP_NoMonitor = 0x2404, // Multi-SP No. Monitor (Which SP is currently active: 0 to 7, Read-Only) + E_Status1_StatusArea = 0x2406, // Status 1 (Read-Only status copy, Bitfield, Note *1, *2 apply) + E_StatusWord3_Leftmost = 0x2407, // Status Word 3 / Leftmost bits (Part of a larger status? Read-Only, Note *3 applies) + E_Status2_LowerWord = 0x2408, // Status 2 (Rightmost 16 bits / Lower Word. Read-Only, Bitfield, Note *1, *2 apply) + E_Status2_UpperWord = 0x2409, // Status 2 (Leftmost 16 bits / Upper Word. Read-Only, Bitfield, Note *1, *3 apply) + E_DecimalPointMonitor = 0x2410, // Decimal Point Monitor (Position for PV/SP display: 0 to 3, Read-Only) + // Add other registers from 0x24xx range if needed + + // --- Protect Level Parameters (Addresses ~0x2500 - 0x25FF, Ref Manual Page 5-3) --- + E_OperationAdjustmentProtect = 0x2500, // Sets Operation/Adjustment Protection Level (Writable, See E5C_OperationProtect_Param) + E_InitialSettingCommsProtect = 0x2501, // Sets Initial Setting/Communications Protection Level (Writable, See E5C_InitialProtect_Param) + E_SettingChangeProtect = 0x2502, // Enable/Disable Setting Change Protect via front panel (Writable, See E5C_SettingChangeProtect_Param) + E_PF_KeyProtect = 0x2503, // Enable/Disable PF Key Protect (Writable, See E5C_PFKeyProtect_Param) + E_MoveToProtectLevelSetting = 0x2504, // Sets the password value needed to move to protect level (Writable, Range: -1999 to 9999 or FFFF831 to 270F) + E_PasswordToMoveToProtectLevel = 0x2505, // Write the password here to attempt moving to the protect level (Write-Only? Monitor value always 0) + E_ParameterMaskEnable = 0x2506, // Enable/Disable Parameter Mask (Writable, See E5C_ParamMaskEnable_Param) (Monitor value always 0) + E_ChangedParametersOnly = 0x2507, // Control Change Parameters setting (Writable, See E5C_ChangedParamsOnly_Param) + + // --- Manual Control / Operation Level Parameters (Addresses ~0x2600 - 0x26FF, Ref Manual Page 5-3) --- + E_ManualMV = 0x2600, // Manual Manipulated Value (Writable in Manual Mode) (%: Ranges vary by model/setting) + E_SetPoint_OperationLevel = 0x2601, // Set Point visible/settable in Operation Level (Writable, Range: SP lower to SP upper limit) (Likely mirrors E_SetPoint=0x2103 but accessible differently) + E_RemoteSPMonitor = 0x2602, // Remote SP Monitor (Read-Only, Range: Remote SP lower limit -10% FS to Remote SP upper limit +10% FS) + E_HeaterCurrent1ValueMonitor_OpLevel = 0x2604, // Heater Current 1 Value Monitor (Read-Only, 0.0 to 55.0 A) (Likely same value as 0x2003) + E_MVMonitorHeating_OpLevel = 0x2605, // MV Monitor (Heating) (Read-Only, %: -5.0 to 105.0 or 0.0 to 105.0) (Likely same value as 0x2004) + E_MVMonitorCooling_OpLevel = 0x2606, // MV Monitor (Cooling) (Read-Only, %: 0.0 to 105.0) (Likely same value as 0x2005) + E_ValveOpeningMonitor = 0x2607, // Valve Opening Monitor (Read-Only, %: -10.0 to 110.0) + + // --- Adjustment Level Parameters (Addresses ~0x2700 - 0x27FF, Ref Manual Page 5-4/5-5) --- + E_ProportionalBandCooling = 0x2701, // Proportional Band (Cooling) (Writable, Range: 0.1 to 999.9) [Adjustment Level] + E_IntegralTimeCooling = 0x2702, // Integral Time (Cooling) (Writable, Range: 0 to 9999 s / 0.0 to 999.9 s depending on derivative unit) [Adjustment Level] + E_DerivativeTimeCooling = 0x2703, // Derivative Time (Cooling) (Writable, Same range as Integral) [Adjustment Level] + E_DeadBand = 0x2704, // Dead Band (Writable, Range: -199.9 to 999.9 for temp input / -19.99 to 99.99 for analog input) [Adjustment Level] + E_ManualResetValue = 0x2705, // Manual Reset Value (Writable, Range: 0.0 to 100.0 %) [Adjustment Level] + E_HysteresisHeating = 0x2706, // Hysteresis (Heating) (Writable, Range: 0.1 to 999.9 for temp input / 0.01 to 99.99 for analog input) [Adjustment Level] + E_HysteresisCooling = 0x2707, // Hysteresis (Cooling) (Writable, Same range as Heating) [Adjustment Level] + E_ControlPeriodHeating = 0x2708, // Control Period (Heating) (Writable, Special values or 1 to 99 s) [Initial Setting Level] (See E5C_ControlPeriod_SpecialVal) + E_ControlPeriodCooling = 0x2709, // Control Period (Cooling) (Writable, Special values or 1 to 99 s) [Initial Setting Level] (See E5C_ControlPeriod_SpecialVal) + E_PositionPropDeadBand = 0x270A, // Position Proportional Dead Band (Writable, Range: 0.1 to 10.0) [Adjustment Level] + E_OpenCloseHysteresis = 0x270B, // Open/Close Hysteresis (Writable, Range: 0.1 to 20.0) [Adjustment Level] + E_SPRampTimeUnit = 0x270C, // SP Ramp Time Unit (Writable) [Advanced Function Setting Level] (See E5C_SPRampTimeUnit_Param) + E_SPRampSetValue = 0x270D, // SP Ramp Set Value (Writable, 0=OFF or 1 to 9999 in units from 0x270C) [Adjustment Level] (See E5C_SPRampSetValue_SpecialVal) + E_SPRampFallValue = 0x270E, // SP Ramp Fall Value (Writable, -1=Same as Set, 0=OFF or 1 to 9999) [Adjustment Level] (See E5C_SPRampFallValue_SpecialVal) + E_MVAtStop = 0x270F, // MV (%) at Stop (Writable, Range: -5.0 to 105.0 / -105.0 to 105.0 varies) [Advanced Function Setting Level] + E_MVAtPVError = 0x2711, // MV (%) at PV Error (Writable, Range: -5.0 to 105.0 / -105.0 to 105.0 varies) [Advanced Function Setting Level] + E_MVChangeRateLimit = 0x2713, // MV Change Rate Limit (Writable, 0.0=OFF or 0.1 to 100.0 %/s) [Advanced Function Setting Level] + E_PVInputSlopeCoeff = 0x2718, // PV Input Slope Coefficient (Writable, Range: 0.001 to 9.999) [Advanced Function Setting Level] + E_HeaterCurrent1ValueMonitor_Adv = 0x271A, // Heater Current 1 Value Monitor (Read-Only, 0.0 to 55.0 A) [ Seems redundant, matches 0x2003/0x2604] + E_HeaterBurnoutDetection1 = 0x271B, // Heater Burnout Detection 1 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_LeakageCurrent1Monitor = 0x271C, // Leakage Current 1 Monitor (Read-Only, 0.0 to 55.0? Units not specified, likely mA) [Operation Level] + E_HSAlarm1 = 0x271D, // HS (Heater Short?) Alarm 1 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_ProcessValueInputShift = 0x2723, // Process Value Input Shift (Writable, Range: -1999 to 9999) [Adjustment Level] + E_HeaterCurrent2ValueMonitor = 0x2724, // Heater Current 2 Value Monitor (Read-Only, 0.0 to 55.0 A) [Operation Level] + E_HeaterBurnoutDetection2 = 0x2725, // Heater Burnout Detection 2 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_LeakageCurrent2Monitor = 0x2726, // Leakage Current 2 Monitor (Read-Only, 0.0 to 55.0 mA?) [Operation Level] + E_HSAlarm2 = 0x2727, // HS (Heater Short?) Alarm 2 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_SoakTimeRemain = 0x2728, // Soak Time Remain (Read-Only?, Range: 0 to 9999) [Operation Level] + E_SoakTime = 0x2729, // Soak Time (Writable, Range: 1 to 9999) [Adjustment Level] + E_WaitBand = 0x272A, // Wait Band (Writable, 0=OFF, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Adjustment Level] (See E5C_WaitBand_SpecialVal) + E_RemoteSPInputShift = 0x272B, // Remote SP Input Shift (Writable, Range: -1999 to 9999) [Advanced Function Setting Level] + E_RemoteSPInputSlopeCoeff = 0x272C, // Remote SP Input Slope Coefficient (Writable, Range: 0.001 to 9.999) [Advanced Function Setting Level] + + // --- Advanced Function Setting / Initial Setting Level Parameters (Addresses ~0x2800 - 0x2DFF, Ref Manual Page 5-5/5-6/5-7/5-8) --- + E_InputDigitalFilter = 0x2800, // Input Digital Filter (Writable, Range: 0.0 to 999.9) [Advanced Function Setting Level] + E_MovingAverageCount = 0x2804, // Moving Average Count (Writable) [Advanced Function Setting Level] (See E5C_MovingAverageCount_Param) + E_ExtractionOfSquareRootLowCutPoint = 0x2808, // Extraction of Square Root Low-cut Point (%) (Writable, Range: 0.0 to 100.0) [Adjustment Level] + + E_InputType = 0x2C00, // Input Type selection (Writable, See E5C_InputType_Param) [Initial Setting Level] + E_TemperatureUnit = 0x2C01, // Temperature Unit selection (Writable, See E5C_TemperatureUnit_Param) [Initial Setting Level] + E_ScalingLowerLimit = 0x2C09, // Scaling Lower Limit (Writable, Range: -1999 to Scaling Upper Limit - 1) [Advanced Function Setting Level] + E_ScalingUpperLimit = 0x2C0B, // Scaling Upper Limit (Writable, Range: Scaling Lower Limit + 1 to 9999) [Advanced Function Setting Level] + E_DecimalPoint = 0x2C0C, // Decimal Point position for PV/SP (Writable, 0-3) [Advanced Function Setting Level] (See E5C_DecimalPoint_Param) + E_RemoteSPUpperLimit = 0x2C0D, // Remote SP Upper Limit (Writable, Range depends on input type/scaling) [Advanced Function Setting Level] + E_RemoteSPLowerLimit = 0x2C0E, // Remote SP Lower Limit (Writable, Range depends on input type/scaling) [Advanced Function Setting Level] + E_PVDecimalPointDisplay = 0x2C0F, // PV Decimal Point Display ON/OFF (Writable, See E5C_PVDecimalPointDisplay_Param) [Advanced Function Setting Level] + + E_ControlOutput1Signal = 0x2D03, // Control Output 1 Signal Type (Writable, See E5C_ControlOutputSignal_Param) [Initial Setting Level] (Only for Linear Output Models) + E_ControlOutput2Signal = 0x2D04, // Control Output 2 Signal Type (Writable, See E5C_ControlOutputSignal_Param) [Initial Setting Level] (Only for Linear Output Models) + E_SPUpperLimit = 0x2D0F, // SP Upper Limit (Writable, Range depends on input type/scaling) [Initial Setting Level] + E_SPLowerLimit = 0x2D10, // SP Lower Limit (Writable, Range depends on input type/scaling) [Initial Setting Level] + E_StandardOrHeatingCooling= 0x2D11, // Control Mode: Standard or Heating/Cooling (Writable, See E5C_ControlMode_Param) [Initial Setting Level] + E_DirectReverseOperation = 0x2D12, // Direct/Reverse operation setting (Writable, See E5C_DirectReverseOperation_Param) [Initial Setting Level] (Different from Command 0x0E) + E_CloseFloating = 0x2D13, // Close/Floating (position-proportional control) (Writable, See E5C_CloseFloating_Param) [Initial Setting Level] (Only for Position-proportional Models) + E_PidOnOff = 0x2D14, // PID/ON-OFF Control Selection (Writable, See E5C_PidOnOff_Param) [Initial Setting Level] + E_ST_Setting = 0x2D15, // Self-Tuning ON/OFF (Writable, See E5C_ST_Param) [Initial Setting Level] + E_ProgramPattern = 0x2D16, // Program Pattern Execution State (Writable, See E5C_ProgramPattern_Param) [Initial Setting Level] + E_RemoteSPInputType = 0x2D18, // Remote SP Input range selection (Writable, See E5C_RemoteSPInputType_Param) [Advanced Function Setting Level] + E_MinimumOutputOnOffBand = 0x2D19, // Minimum Output ON/OFF Band (Writable, Range: 0.0 to 50.0 %) [Advanced Function Setting Level] + + E_TransferOutputType = 0x2E00, // Transfer Output Type (Writable, See E5C_TransferOutputType_Param) [Initial Setting Level] + E_TransferOutputSignal = 0x2E01, // Transfer Output Signal Range (Writable, See E5C_TransferOutputSignal_Param) [Initial Setting Level] + E_ControlOutput1Assignment = 0x2E06, // Assign function to Control Output 1 (Writable, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] (Ref Manual Page 5-9) + E_ControlOutput2Assignment = 0x2E07, // Assign function to Control Output 2 (Writable, See E5C_ControlOutputAssignment_Param, Note restrictions) [Advanced Function Setting] (Ref Manual Page 5-9) + E_EventInputAssignment1 = 0x2E0A, // Event Input Assignment 1 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] (Ref Manual Page 5-10) + E_EventInputAssignment2 = 0x2E0B, // Event Input Assignment 2 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] (Ref Manual Page 5-10) + E_EventInputAssignment3 = 0x2E0C, // Event Input Assignment 3 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] (Ref Manual Page 5-10) + E_EventInputAssignment4 = 0x2E0D, // Event Input Assignment 4 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] (Ref Manual Page 5-10) + E_EventInputAssignment5 = 0x2E0E, // Event Input Assignment 5 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] (Ref Manual Page 5-10) + E_EventInputAssignment6 = 0x2E0F, // Event Input Assignment 6 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] (Ref Manual Page 5-10) + E_AuxiliaryOutput1Assignment = 0x2E10, // Auxiliary Output 1 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] (Ref Manual Page 5-10) + E_AuxiliaryOutput2Assignment = 0x2E11, // Auxiliary Output 2 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] (Ref Manual Page 5-10) + E_AuxiliaryOutput3Assignment = 0x2E12, // Auxiliary Output 3 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] (Ref Manual Page 5-10) + E_AuxiliaryOutput4Assignment = 0x2E13, // Auxiliary Output 4 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] (Ref Manual Page 5-10) + E_TRANSFER_OUTPUT_SCALED_UPPER_LIMIT = 0x2E14, // Transfer Output Scaled Upper Limit (for selected Transfer Output Type) (Writable, Range -1999 to 9999) [Initial Setting Level] (Ref Manual Page 5-10) + E_TRANSFER_OUTPUT_SCALED_LOWER_LIMIT = 0x2E15, // Transfer Output Scaled Lower Limit (for selected Transfer Output Type) (Writable, Range -1999 to 9999) [Initial Setting Level] (Ref Manual Page 5-10) + E_SIMPLE_TRANSFER_OUTPUT1_UPPER_LIMIT = 0x2E16, // Simple Transfer Output 1 Upper Limit (Writable, Range: -1999 to 9999) [Initial Setting Level] (Note *1: E5CC-U/E5GC linear current output only, v2.2+) + E_SIMPLE_TRANSFER_OUTPUT1_LOWER_LIMIT = 0x2E17, // Simple Transfer Output 1 Lower Limit (Writable, Range: -1999 to 9999) [Initial Setting Level] (Note *1: E5CC-U/E5GC linear current output only, v2.2+) + + + // --- Operation Level Parameters (Duplicated Addresses? / Specific Uses) (Addresses ~0x2900 - 0x29FF, Ref Manual Page 5-6/5-7) --- + // These allow setting SPs and Alarm values within the Operation or Adjustment levels, potentially overriding the base settings (0x21xx) when active. + E_SP0_OperationLevel = 0x2900, // SP 0 Setting (Writable, Range: SP lower limit to SP upper limit) [Operation Level] (Likely same as E_SetPoint when SP 0 is selected) + E_AlarmValue1_OperationLevel = 0x2902, // Alarm Value 1 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValue1=0x2104 configuration) + E_AlarmValueUpperLimit1_OperationLevel = 0x2903, // Alarm Value Upper Limit 1 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValueUpperLimit1=0x2105) + E_AlarmValueLowerLimit1_OperationLevel = 0x2904, // Alarm Value Lower Limit 1 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValueLowerLimit1=0x2106) + E_AlarmValue2_OperationLevel = 0x2905, // Alarm Value 2 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValue2=0x2107) + E_AlarmValueUpperLimit2_OperationLevel = 0x2906, // Alarm Value Upper Limit 2 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValueUpperLimit2=0x2108) + E_AlarmValueLowerLimit2_OperationLevel = 0x2907, // Alarm Value Lower Limit 2 (Writable, Range: -1999 to 9999) [Operation Level] (May modify E_AlarmValueLowerLimit2=0x2109) + E_AlarmValue3 = 0x2908, // Alarm Value 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueUpperLimit3 = 0x2909, // Alarm Value Upper Limit 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueLowerLimit3 = 0x290A, // Alarm Value Lower Limit 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValue4 = 0x290B, // Alarm Value 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueUpperLimit4 = 0x290C, // Alarm Value Upper Limit 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueLowerLimit4 = 0x290D, // Alarm Value Lower Limit 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_SP1_Setting = 0x290E, // SP 1 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 1) + E_SP2_Setting = 0x291C, // SP 2 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 2) + E_SP3_Setting = 0x292A, // SP 3 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 3) + E_SP4_Setting = 0x2938, // SP 4 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 4) + E_SP5_Setting = 0x2946, // SP 5 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 5) + E_SP6_Setting = 0x2954, // SP 6 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 6) + E_SP7_Setting = 0x2962, // SP 7 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 7) + + // --- Adjustment Level PID / MV Limits (Addresses ~0x2A00 - ..., Ref Manual Page 5-7) --- + E_ProportionalBand = 0x2A00, // Proportional Band (Heating, Standard, or Close Position Control) (Writable, Range: 0.1 to 999.9) [Adjustment Level] + E_IntegralTime = 0x2A01, // Integral Time (Heating, Standard, or Close Position Control) (Writable, Range depends on time unit setting) [Adjustment Level] + E_DerivativeTime = 0x2A02, // Derivative Time (Heating, Standard, or Close Position Control) (Writable, Range depends on time unit setting) [Adjustment Level] + E_MVUpperLimit = 0x2A05, // MV Upper Limit (%) (Writable, Range depends on control type, see manual) [Adjustment Level] + E_MVLowerLimit = 0x2A06, // MV Lower Limit (%) (Writable, Range depends on control type, see manual) [Adjustment Level] + + // NOTE on Status Registers (e.g., E_Status1, E_Status2_LowerWord, E_Status2_UpperWord): + // These are bitfields. Refer to the E5C Communications Manual Section 5-2 "Status" + // for details on individual bit meanings. Explicit enums for these bits can be added if needed (See examples below). + // Note *1: Not displayed on the Controller display. + // Note *2: In 2-byte mode, the rightmost 16 bits are usually read. + // Note *3: In 2-byte mode, the leftmost 16 bits are usually read. + // This suggests Status 2 (E_Status2_LowerWord/E_Status2_UpperWord) and potentially StatusWord3 (E_StatusWord3_Leftmost) + // might be parts of larger 32-bit status values if the controller supported 4-byte mode reads. +}; + +// --- Parameter Enums for Specific Holding Register Settings --- + +// Parameters for E_OperationAdjustmentProtect (0x2500) +enum class E5C_OperationProtect_Param : uint16_t +{ + E_NoRestrictions = 0x00, // No restrictions in operation and adjustment levels + E_AdjustLevelProhibited = 0x01, // Move to adjustment level is prohibited + E_DisplayChangePV_PVSP = 0x02, // Display and change of only "PV" and "PV/SP" allowed + E_DisplayOnlyPV_PVSP = 0x03, // Display of only "PV" and "PV/SP" allowed +}; + +// Parameters for E_InitialSettingCommsProtect (0x2501) +enum class E5C_InitialProtect_Param : uint16_t +{ + E_MoveToInitialAllowedAdvDisplayed = 0x00, // Move to initial/comms allowed. Adv func displayed. + E_MoveToInitialAllowedAdvNotDisplayed= 0x01, // Move to initial/comms allowed. Adv func not displayed. + E_MoveToInitialProhibited = 0x02, // Move to initial/comms prohibited. +}; + +// Parameters for E_SettingChangeProtect (0x2502) +enum class E5C_SettingChangeProtect_Param : uint16_t +{ + E_OffChangeAllowed = 0x00, // OFF (Changing settings via front panel allowed) + E_OnChangeProhibited = 0x01, // ON (Changing settings via front panel prohibited) +}; + +// Parameters for E_PF_KeyProtect (0x2503) +enum class E5C_PFKeyProtect_Param : uint16_t +{ + E_Off = 0x00, // PF Key Protection OFF + E_On = 0x01, // PF Key Protection ON +}; + +// Parameters for E_ParameterMaskEnable (0x2506) +enum class E5C_ParamMaskEnable_Param : uint16_t +{ + E_Off = 0x00, // Parameter Mask function OFF + E_On = 0x01, // Parameter Mask function ON +}; + +// Parameters for E_ChangedParametersOnly (0x2507) +enum class E5C_ChangedParamsOnly_Param : uint16_t +{ + E_Off = 0x00, // Display all parameters in adjustment level etc. + E_On = 0x01, // Display only parameters changed from default in adjustment level etc. +}; + + +// --- Special Values / Parameter Enums for specific registers --- + +// Special values for E_ControlPeriodHeating (0x2708) and E_ControlPeriodCooling (0x2709) +// Note: Positive values 1 to 99 represent seconds directly. Use raw integers for those. +enum class E5C_ControlPeriod_SpecialVal : int16_t // Use signed type for negative values +{ + E_Period_0_1_Sec = -2, // Represents 0.1 seconds + E_Period_0_2_Sec = -1, // Represents 0.2 seconds + E_Period_0_5_Sec = 0, // Represents 0.5 seconds + // Values 1..99 are direct seconds, do not add them here. Must be written as int16_t. +}; + +// Parameters for E_SPRampTimeUnit (0x270C) +enum class E5C_SPRampTimeUnit_Param : uint16_t +{ + E_EU_Per_Second = 0, // Unit is Engineering Unit / second + E_EU_Per_Minute = 1, // Unit is Engineering Unit / minute + E_EU_Per_Hour = 2, // Unit is Engineering Unit / hour +}; + +// Special value for E_SPRampSetValue (0x270D) +// Note: Positive values 1 to 9999 represent the rate directly. Use raw integers for those. +enum class E5C_SPRampSetValue_SpecialVal : uint16_t +{ + E_Off = 0, // SP Ramp Set is OFF + // Values 1..9999 are direct rates, do not add them here. Must be written as uint16_t. +}; + +// Special values for E_SPRampFallValue (0x270E) +// Note: Positive values 1 to 9999 represent the rate directly. Use raw integers for those. +enum class E5C_SPRampFallValue_SpecialVal : int16_t // Use signed type for negative value +{ + E_SameAsSet = -1, // Fall rate is same as Set rate (defined by 0x270D) + E_Off = 0, // SP Ramp Fall is OFF + // Values 1..9999 are direct rates, do not add them here. Must be written as int16_t. +}; + +// Special value for E_WaitBand (0x272A) +// Note: Positive values represent the band width directly (needs scaling based on Temp/Analog input). +// Use raw values for setting the width. +enum class E5C_WaitBand_SpecialVal : uint16_t +{ + E_Off = 0, // Wait Band function is OFF + // Other values represent the actual width. +}; + +// Parameters for E_MovingAverageCount (0x2804) +enum class E5C_MovingAverageCount_Param : uint16_t +{ + E_Off = 0, // Moving Average OFF + E_2_Times = 1, // Moving Average Count: 2 times + E_4_Times = 2, // Moving Average Count: 4 times + E_8_Times = 3, // Moving Average Count: 8 times + E_16_Times= 4, // Moving Average Count: 16 times + E_32_Times= 5, // Moving Average Count: 32 times +}; + +// Parameters for E_InputType (0x2C00) [Initial Setting Level] +enum class E5C_InputType_Param : uint16_t +{ + E_Pt_neg200_850C = 0, // Pt (-200 to 850°C / -300 to 1500°F) + E_Pt_neg199_500C_1DP = 1, // Pt (-199.9 to 500.0°C / -199.9 to 900.0°F) + E_Pt_0_100C_1DP = 2, // Pt (0.0 to 100.0°C / 0.0 to 210.0°F) + E_JPt_neg199_500C_1DP = 3, // JPt (-199.9 to 500.0°C / -199.9 to 900.0°F) + E_JPt_0_100C_1DP = 4, // JPt (0.0 to 100.0°C / 0.0 to 210.0°F) + E_K_neg200_1300C = 5, // K (-200 to 1300°C / -300 to 2300°F) + E_K_neg20_500C_1DP = 6, // K (-20.0 to 500.0°C / 0.0 to 900.0°F) + E_J_neg100_850C = 7, // J (-100 to 850°C / -100 to 1500°F) + E_J_neg20_400C_1DP = 8, // J (-20.0 to 400.0°C / 0.0 to 750.0°F) + E_T_neg200_400C = 9, // T (-200 to 400°C / -300 to 700°F) + E_T_neg199_400C_1DP = 10, // T (-199.9 to 400.0°C / -199.9 to 700.0°F) + E_E_neg200_600C = 11, // E (-200 to 600°C / -300 to 1100°F) + E_L_neg100_850C = 12, // L (-100 to 850°C / -100 to 1500°F) + E_U_neg200_400C = 13, // U (-200 to 400°C / -300 to 700°F) + E_U_neg199_400C_1DP = 14, // U (-199.9 to 400.0°C / -199.9 to 700.0°F) + E_N_neg200_1300C = 15, // N (-200 to 1300°C / -300 to 2300°F) + E_R_0_1700C = 16, // R (0 to 1700°C / 0 to 3000°F) + E_S_0_1700C = 17, // S (0 to 1700°C / 0 to 3000°F) + E_B_100_1800C = 18, // B (100 to 1800°C / 300 to 3200°F) + E_W_0_2300C = 19, // W (0 to 2,300°C / 0 to 3,200°F) + E_PLII_0_1300C = 20, // PLII (0 to 1,300°C / 0 to 2,300°F) + E_IR_K_140F_60C = 21, // Infrared temperature sensor (K 140°F/60°C) + E_IR_K_240F_120C = 22, // Infrared temperature sensor (K 240°F/120°C) + E_IR_K_280F_140C = 23, // Infrared temperature sensor (K 280°F/140°C) + E_IR_K_440F_220C = 24, // Infrared temperature sensor (K 440°F/220°C) + E_Analog_4_20MA = 25, // 4 to 20 mA + E_Analog_0_20MA = 26, // 0 to 20 mA + E_Analog_1_5V = 27, // 1 to 5 V + E_Analog_0_5V = 28, // 0 to 5 V + E_Analog_0_10V = 29, // 0 to 10 V + E_Analog_0_50MV = 30, // 0 to 50 mV (Only E5CC-U v2.2+ May 2014 or later) +}; + +// Parameters for E_TemperatureUnit (0x2C01) [Initial Setting Level] +enum class E5C_TemperatureUnit_Param : uint16_t +{ + E_Celsius = 0, // °C + E_Fahrenheit = 1, // °F +}; + +// Parameters for E_DecimalPoint (0x2C0C) [Advanced Function Setting Level] +enum class E5C_DecimalPoint_Param : uint16_t +{ + E_DP_0 = 0, // No decimal point (XXXX) + E_DP_1 = 1, // One decimal place (XXX.X) + E_DP_2 = 2, // Two decimal places (XX.XX) + E_DP_3 = 3, // Three decimal places (X.XXX) +}; + +// Parameters for E_PVDecimalPointDisplay (0x2C0F) [Advanced Function Setting Level] +enum class E5C_PVDecimalPointDisplay_Param : uint16_t +{ + E_PVDP_OFF = 0, // PV Decimal Point Display OFF + E_PVDP_ON = 1, // PV Decimal Point Display ON +}; + +// Parameters for E_ControlOutput1Signal (0x2D03) and E_ControlOutput2Signal (0x2D04) [Initial Setting Level] +// Applicable for models with Linear Current Output +enum class E5C_ControlOutputSignal_Param : uint16_t +{ + E_4_20MA = 0, // 4 to 20 mA + E_0_20MA = 1, // 0 to 20 mA + // Note: Check manual if voltage options exist for these registers on specific models +}; + +// Parameters for E_StandardOrHeatingCooling (0x2D11) [Initial Setting Level] +enum class E5C_ControlMode_Param : uint16_t +{ + E_Standard = 0, // Standard control (Heating OR Cooling, depending on wiring/config) + E_HeatingAndCooling = 1, // Heating and Cooling control +}; + +// Parameters for E_DirectReverseOperation (0x2D12) [Initial Setting Level] +enum class E5C_DirectReverseOperation_Param : uint16_t +{ + E_ReverseOperation = 0, // PID Reverse operation (e.g., heating - MV increases as PV decreases) + E_DirectOperation = 1, // PID Direct operation (e.g., cooling - MV increases as PV increases) +}; + +// Parameters for E_CloseFloating (0x2D13) [Initial Setting Level] +// Only for Position-proportional Models +enum class E5C_CloseFloating_Param : uint16_t +{ + E_Floating = 0, + E_Close = 1, +}; + +// Parameters for E_PidOnOff (0x2D14) [Initial Setting Level] +enum class E5C_PidOnOff_Param : uint16_t +{ + E_ONOFF_CONTROL = 0, // Use ON/OFF control + E_PID_CONTROL = 1, // Use 2-PID control (or standard PID if 2-PID not applicable) +}; + +// Parameters for E_ST_Setting (0x2D15) [Initial Setting Level] +enum class E5C_ST_Param : uint16_t +{ + E_Off = 0, // Self-Tuning OFF + E_On = 1, // Self-Tuning ON +}; + +// Parameters for E_ProgramPattern (0x2D16) [Initial Setting Level] +enum class E5C_ProgramPattern_Param : uint16_t +{ + E_Off = 0, // Program Pattern function OFF (normal control) + E_Stop = 1, // Program Pattern STOP (reset or initial state) + E_Cont = 2, // Program Pattern CONTINUE (running) +}; + +// Parameters for E_RemoteSPInputType (0x2D18) [Advanced Function Setting Level] +enum class E5C_RemoteSPInputType_Param : uint16_t +{ + E_4_20MA = 0, + E_0_20MA = 1, + E_1_5V = 2, + E_0_5V = 3, + E_0_10V = 4, +}; + +// Parameters for E_TransferOutputType (0x2E00) [Initial Setting Level] +enum class E5C_TransferOutputType_Param : uint16_t +{ + E_Off = 0, // Transfer Output OFF + E_SetPoint = 1, // Output Set Point value + E_SetPointRamp = 2, // Output Set Point during SP ramp + E_PV = 3, // Output Process Value + E_MV_Heating = 4, // Output Manipulated Value (Heating) + E_MV_Cooling = 5, // Output Manipulated Value (Cooling) + E_ValveOpening = 6, // Output Valve Opening (% - Only for Position-proportional Models) +}; + +// Parameters for E_TransferOutputSignal (0x2E01) [Initial Setting Level] +enum class E5C_TransferOutputSignal_Param : uint16_t +{ + E_4_20MA = 0, + E_1_5V = 1, +}; + +// Parameters for E_ControlOutput1Assignment (0x2E06), E_ControlOutput2Assignment (0x2E07) +// and Auxiliary Output Assignments (0x2E10 - 0x2E13) +// Ref Manual Page 5-9 and 5-10. [Advanced Function Setting Level] +enum class E5C_ControlOutputAssignment_Param : int16_t // Use signed type for negative values +{ + E_ASSIGN_NotAssigned = 0, + E_ASSIGN_ControlOutputHeating = 1, + E_ASSIGN_ControlOutputCooling = 2, + E_ASSIGN_Alarm1 = 3, + E_ASSIGN_Alarm2 = 4, + E_ASSIGN_Alarm3 = 5, + E_ASSIGN_Alarm4 = 6, + E_ASSIGN_HeaterAlarm = 7, // General heater alarm? (Could be HB or HS depending on config) + E_ASSIGN_HB_Alarm = 8, // Heater Break alarm + E_ASSIGN_HS_Alarm = 9, // Heater Short alarm + E_ASSIGN_InputError = 10, // PV Input Error + E_ASSIGN_RSP_InputError = 11, // Remote SP input error + E_ASSIGN_ProgramEndOutput = 12, // Note *1 from page 5-9: P.END can only be set if Program Pattern (0x2D16) is set to OFF + E_ASSIGN_RUN_Output = 13, // Indicates RUN state + E_ASSIGN_IntegratedAlarm = 14, // OR combination of selected alarms + E_ASSIGN_WorkBit1 = 15, + E_ASSIGN_WorkBit2 = 16, + E_ASSIGN_WorkBit3 = 17, + E_ASSIGN_WorkBit4 = 18, + E_ASSIGN_WorkBit5 = 19, + E_ASSIGN_WorkBit6 = 20, + E_ASSIGN_WorkBit7 = 21, + E_ASSIGN_WorkBit8 = 22, + + // Special values for Linear Current Output (Only for OUT1 on E5CC-U/E5GC May 2014+ / v2.2+ models, see Note *2 from page 5-9) + // Typically NOT applicable to Auxiliary Output Assignments (0x2E10-0x2E13) or OUT2 Assignment (0x2E07) + E_ASSIGN_SimpleTransfer_MV_Cooling = -5, // (FFFF FFFB) Simple MV transfer (cooling) + E_ASSIGN_SimpleTransfer_MV_Heating = -4, // (FFFF FFFC) Simple MV transfer (heating) + E_ASSIGN_SimpleTransfer_PV = -3, // (FFFF FFFD) Simple PV transfer + E_ASSIGN_SimpleTransfer_Ramp_SP = -2, // (FFFF FFFE) Simple SP transfer (during ramp) + E_ASSIGN_SimpleTransfer_SP = -1 // (FFFF FFFF) Simple SP transfer +}; + +// Parameters for Event Input Assignments (0x2E0A - 0x2E0F) [Initial Setting Level] +// Ref Manual Page 5-10 +enum class E5C_EventInputAssignment_Param : uint16_t +{ + E_EV_None = 0, // None + E_EV_RunStop = 1, // RUN/STOP + E_EV_AutoManualSwitch = 2, // Auto/Manual Switch + E_EV_ProgramStart = 3, // Program Start (Note *1 from pg 5-10: only if prog pattern is OFF) + E_EV_DirectReverseOperation = 4, // Direct/Reverse Operation switch + E_EV_SPModeSwitch = 5, // SP Mode Switch (Local/Remote) (Note *2 from pg 5-10: only if remote SP input) + E_EV_ATExecuteCancel_100 = 6, // 100% AT Execute/Cancel + E_EV_ATExecuteCancel_40 = 7, // 40% AT Execute/Cancel + E_EV_SettingChangeEnableDisable = 8, // Setting Change Enable/Disable + E_EV_CommsWritingEnableDisable = 9, // Communications Writing Enable/Disable (Note *3 from pg 5-10: only if external comms supported) + E_EV_AlarmLatchCancel = 10, // Alarm Latch Cancel + E_EV_MultiSP_Switch_Bit0 = 11, // Multi-SP No. Switch, Bit 0 + E_EV_MultiSP_Switch_Bit1 = 12, // Multi-SP No. Switch, Bit 1 + E_EV_MultiSP_Switch_Bit2 = 13, // Multi-SP No. Switch, Bit 2 +}; + + +// --- Enums for Status Register Bits (Refer to Manual Section 5-2) --- +// These are *examples* and need to be carefully verified against the specific E5C model manual. +// Define these if you need to decode individual status bits from registers like E_Status1, E_Status2_LowerWord, etc. + +/* +// Example bits for E_Status1 (0x2001) / E_Status1_StatusArea (0x2406) +enum class E5C_Status1_Bits : uint16_t +{ + E_S1_Alarm1_Output = (1 << 0), // Bit 0: Alarm 1 Output Status (0: OFF, 1: ON) + E_S1_Alarm2_Output = (1 << 1), // Bit 1: Alarm 2 Output Status + E_S1_Alarm3_Output = (1 << 2), // Bit 2: Alarm 3 Output Status + E_S1_Alarm4_Output = (1 << 3), // Bit 3: Alarm 4 Output Status (?) + E_S1_HeaterBurnout1 = (1 << 4), // Bit 4: Heater Burnout 1 Status + E_S1_HeaterBurnout2 = (1 << 5), // Bit 5: Heater Burnout 2 Status + E_S1_RunMode = (1 << 8), // Bit 8: RUN/STOP Status (0: STOP, 1: RUN) + E_S1_AutoTuning = (1 << 9), // Bit 9: AT Execution Status (0: OFF, 1: ON) + E_S1_TaskOperating = (1 << 10), // Bit 10: Task Operating Status (Programs) + E_S1_CommWritingDisabled= (1 << 11), // Bit 11: Communications Writing Disabled Status + E_S1_ManualMode = (1 << 12), // Bit 12: Auto/Manual Mode Status (0: Auto, 1: Manual) + E_S1_RemoteSP_Mode = (1 << 13), // Bit 13: SP Mode (0: Local, 1: Remote) + // ... add other relevant bits based on manual section 5-2 +}; +*/ + +/* +// Example bits for E_Status2_LowerWord (0x2408) +enum class E5C_Status2Lower_Bits : uint16_t +{ + E_S2L_RAM_Error = (1 << 0), // Bit 0: RAM Error + E_S2L_MemoryError = (1 << 1), // Bit 1: Memory Error (Non-volatile) + E_S2L_ADC_Error = (1 << 2), // Bit 2: A/D Converter Error + E_S2L_InputTypeError = (1 << 3), // Bit 3: Input Type Error + E_S2L_WatchdogTimeout = (1 << 4), // Bit 4: Watchdog Timer Timeout + E_S2L_OverrunError = (1 << 5), // Bit 5: Overrun Error (Communications?) + E_S2L_FramingError = (1 << 6), // Bit 6: Framing Error (Communications?) + E_S2L_ParityError = (1 << 7), // Bit 7: Parity Error (Communications?) + E_S2L_CommsTimeoutError = (1 << 8), // Bit 8: Communications Timeout Error + E_S2L_CommsError = (1 << 9), // Bit 9: Communications Error (General?) + E_S2L_CommsBufferOverrun = (1 << 10),// Bit 10: Communications Buffer Overrun Error + E_S2L_PowerSupplyFreqError = (1 << 11),// Bit 11: Power Supply Frequency Error + // ... add other relevant bits based on manual section 5-2 +}; + */ + +/* +// Example bits for E_Status2_UpperWord (0x2409) - Note: Bit numbering starts from 16 conceptually +enum class E5C_Status2Upper_Bits : uint16_t +{ + E_S2U_PV_InputError = (1 << 0), // Bit 16 (0 in upper word): PV Input Error (Over/Under Range or Disconnect) + E_S2U_RemoteSPInputError = (1 << 1), // Bit 17 (1 in upper word): Remote SP Input Error (Over/Under Range) + E_S2U_MVOutputError = (1 << 2), // Bit 18 (2 in upper word): MV Output Error + E_S2U_ExternalDIError = (1 << 3), // Bit 19 (3 in upper word): Error via External DI (Digital Input) + E_S2U_HeaterShortAlarm1 = (1 << 4), // Bit 20 (4 in upper word): HS (Heater Short) Alarm 1 Status + E_S2U_HeaterShortAlarm2 = (1 << 5), // Bit 21 (5 in upper word): HS (Heater Short) Alarm 2 Status + // E_S2U_TempSensorDisconnected= (1 << 6), // Bit 22 (6 in upper word): (Not explicitly listed, PV Input Error likely covers this) + // ... add other relevant bits based on manual section 5-2 +}; +*/ + +#endif // E5C_MODBUS_REGISTERS_HPP + + +#ifndef E5C_MODBUS_REGISTERS_HPP +#define E5C_MODBUS_REGISTERS_HPP + +#include // Required for uint16_t and int16_t + +// --- E5C Modbus Command Codes --- +// Represents the Command Codes used for various operations on the E5C device. +// These codes are typically written to a specific command register (often 0x0000) via Modbus. +enum class E5C_CommandCode : uint16_t +{ + E_CommunicationsWriting = 0x00, // Controls Modbus communications writing (enable/disable) + E_RunStop = 0x01, // Starts or stops control operation + E_MultiSP = 0x02, // Selects the target Set Point (SP) number (0-7) + E_ATExecuteCancel = 0x03, // Executes or cancels Auto-Tuning (AT) + E_WriteMode = 0x04, // Selects the write mode (Backup or RAM only) + E_SaveRAMData = 0x05, // Saves data from RAM to non-volatile memory (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_SoftwareReset = 0x06, // Performs a software reset (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_MoveToSetupArea1 = 0x07, // Moves operation to Setup Area 1 (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_MoveToProtectLevel = 0x08, // Moves operation to the Protect Level (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_AutoManualSwitch = 0x09, // Switches between Automatic and Manual control mode + E_ParameterInitialization = 0x0B, // Initializes parameters to default values (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_AlarmLatchCancel = 0x0C, // Cancels specified latched alarms + E_SPMode = 0x0D, // Selects Set Point (SP) mode (Local or Remote) + E_InvertDirectReverse = 0x0E, // Selects direct or reverse operation (Invert/Not Invert) via Command + E_ProgramStart = 0x11, // Starts or resets a program pattern +}; + +// --- Parameter Enums for Specific Command Codes --- +// These enums define the valid "Related Information" values (data) sent with specific commands. + +// Parameters for E_CommunicationsWriting (0x00) +enum class E5C_CommWrite_Param : uint16_t +{ + E_OffDisabled = 0x00, + E_OnEnabled = 0x01, +}; + +// Parameters for E_RunStop (0x01) +enum class E5C_RunStop_Param : uint16_t +{ + E_Run = 0x00, + E_Stop = 0x01, +}; + +// Parameters for E_MultiSP (0x02) +enum class E5C_MultiSP_Param : uint16_t +{ + E_SetPoint0 = 0x00, + E_SetPoint1 = 0x01, + E_SetPoint2 = 0x02, + E_SetPoint3 = 0x03, + E_SetPoint4 = 0x04, + E_SetPoint5 = 0x05, + E_SetPoint6 = 0x06, + E_SetPoint7 = 0x07, +}; + +// Parameters for E_ATExecuteCancel (0x03) +enum class E5C_ATExecuteCancel_Param : uint16_t +{ + E_ATCancel = 0x00, // Cancel Auto-Tuning + E_ATExecute100Pct = 0x01, // Execute 100% Auto-Tuning + E_ATEexecute40Pct = 0x02, // Execute 40% Auto-Tuning +}; + +// Parameters for E_WriteMode (0x04) +enum class E5C_WriteMode_Param : uint16_t +{ + E_Backup = 0x00, // Writes are backed up to non-volatile memory + E_RAMWriteMode = 0x01, // Writes affect RAM only +}; + +// Parameters for E_AutoManualSwitch (0x09) +enum class E5C_AutoManualSwitch_Param : uint16_t +{ + E_AutomaticMode = 0x00, + E_ManualMode = 0x01, +}; + +// Parameters for E_AlarmLatchCancel (0x0C) +enum class E5C_AlarmLatchCancel_Param : uint16_t +{ + E_Alarm1LatchCancel = 0x00, + E_Alarm2LatchCancel = 0x01, + E_Alarm3LatchCancel = 0x02, + E_HBAlarmLatchCancel = 0x03, // Heater Break alarm latch cancel + E_HSAlarmLatchCancel = 0x04, // Heater Short alarm latch cancel (?) + E_Alarm4LatchCancel = 0x05, // Alarm 4 latch cancel (?) + E_AllAlarmLatchCancel = 0x0F, // Cancel all latched alarms +}; + +// Parameters for E_SPMode (0x0D) +enum class E5C_SPMode_Param : uint16_t +{ + E_LocalSPMode = 0x00, + E_RemoteSPMode = 0x01, +}; + +// Parameters for E_InvertDirectReverse (0x0E) - Command based +enum class E5C_InvertDirectReverseCmd_Param : uint16_t +{ + E_NotInvert = 0x00, // Direct operation (Command parameter) + E_Invert = 0x01, // Reverse operation (Command parameter) +}; + +// Parameters for E_ProgramStart (0x11) +enum class E5C_ProgramStart_Param : uint16_t +{ + E_Reset = 0x00, // Reset the program/pattern + E_Start = 0x01, // Start the program/pattern +}; + +// Constant for commands where the related information is always 0x0000 +constexpr uint16_t E5C_COMMAND_PARAM_DEFAULT = 0x0000; +// This value should be used as the data when issuing commands like: +// - E_SaveRAMData +// - E_SoftwareReset +// - E_MoveToSetupArea1 +// - E_MoveToProtectLevel (Command, not the register 0x2504) +// - E_ParameterInitialization + +// --- E5C Modbus Variable Area Registers (Holding Registers - Two-Byte Mode Addresses) --- +// Represents the addresses for reading/writing various parameters and status values. +// Based on the "Variable Area (Setting Range) List" sections of the Communications Manual (H175). +// Note: Addresses are based on the "Two-byte mode" column. +// Note: Ranges and accessibility levels (Operation, Adjustment, Initial, Advanced) are indicated where available. +enum class E5C_HoldingRegister : uint16_t +{ + // --- Operation Level Monitors (Addresses ~0x2000 - 0x20FF, Manual Page 5-1) --- + E_PV = 0x2000, // Process Value (Read-Only) + E_Status1 = 0x2001, // Status 1 (Bitfield, Read-Only, see manual section 5-2. Note *1, *2 apply) + E_InternalSetPoint = 0x2002, // Internal Set Point (Read-Only? Note *1 applies) + E_HeaterCurrent1Value = 0x2003, // Heater Current 1 Value Monitor (Read-Only, Range: 0.0 to 55.0 A) + E_MV_MonitorHeating = 0x2004, // Manipulated Value Monitor (Heating Output) (Read-Only, %: Range -5.0 to 105.0 or 0.0 to 105.0) + E_MV_MonitorCooling = 0x2005, // Manipulated Value Monitor (Cooling Output) (Read-Only, %: Range 0.0 to 105.0) + + // --- Primary Setting Parameters (Addresses ~0x2100 - 0x21FF, Manual Page 5-1) --- + E_SetPoint = 0x2103, // Set Point (SP) value (Writable & Readable, Primary SP setting, likely the *active* SP or SP0 in non-MultiSP mode) + E_AlarmValue1 = 0x2104, // Alarm Value 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueUpperLimit1 = 0x2105, // Alarm Value Upper Limit 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueLowerLimit1 = 0x2106, // Alarm Value Lower Limit 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValue2 = 0x2107, // Alarm Value 2 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueUpperLimit2 = 0x2108, // Alarm Value Upper Limit 2 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueLowerLimit2 = 0x2109, // Alarm Value Lower Limit 2 (Writable, Range: -1999 to 9999) [Main Setting] + // Add other registers from 0x21xx range if needed from other tables + + // --- Status/Monitor Parameters (Addresses ~0x2400 - 0x24FF, Manual Page 5-2) --- + E_PV_StatusArea = 0x2402, // Process Value (Read-Only status copy) + E_InternalSetPoint_StatusArea = 0x2403, // Internal Set Point (Read-Only status copy, Note *1) + E_MultiSP_NoMonitor = 0x2404, // Multi-SP No. Monitor (Which SP is currently active: 0 to 7, Read-Only) + E_Status1_StatusArea = 0x2406, // Status 1 (Read-Only status copy, Bitfield, Note *1, *2 apply) + E_StatusWord3_Leftmost = 0x2407, // Status Word 3 / Leftmost bits (Part of a larger status? Read-Only, Note *3 applies) + E_Status2_LowerWord = 0x2408, // Status 2 (Rightmost 16 bits / Lower Word. Read-Only, Bitfield, Note *1, *2 apply) + E_Status2_UpperWord = 0x2409, // Status 2 (Leftmost 16 bits / Upper Word. Read-Only, Bitfield, Note *1, *3 apply) + E_DecimalPointMonitor = 0x2410, // Decimal Point Monitor (Position for PV/SP display: 0 to 3, Read-Only) + // Add other registers from 0x24xx range if needed + + // --- Protect Level Parameters (Addresses ~0x2500 - 0x25FF, Ref Manual Page 5-3) --- + E_OperationAdjustmentProtect = 0x2500, // Sets Operation/Adjustment Protection Level (Writable, See E5C_OperationProtect_Param) + E_InitialSettingCommsProtect = 0x2501, // Sets Initial Setting/Communications Protection Level (Writable, See E5C_InitialProtect_Param) + E_SettingChangeProtect = 0x2502, // Enable/Disable Setting Change Protect via front panel (Writable, See E5C_SettingChangeProtect_Param) + E_PF_KeyProtect = 0x2503, // Enable/Disable PF Key Protect (Writable, See E5C_PFKeyProtect_Param) + E_MoveToProtectLevelSetting = 0x2504, // Sets the password value needed to move to protect level (Writable, Range: -1999 to 9999 or FFFF831 to 270F) + E_PasswordToMoveToProtectLevel = 0x2505, // Write the password here to attempt moving to the protect level (Write-Only? Monitor value always 0) + E_ParameterMaskEnable = 0x2506, // Enable/Disable Parameter Mask (Writable, See E5C_ParamMaskEnable_Param) (Monitor value always 0) + E_ChangedParametersOnly = 0x2507, // Control Change Parameters setting (Writable, See E5C_ChangedParamsOnly_Param) + + // --- Manual Control / Operation Level Parameters (Addresses ~0x2600 - 0x26FF, Ref Manual Page 5-3) --- + E_ManualMV = 0x2600, // Manual Manipulated Value (Writable in Manual Mode) (%: Ranges vary by model/setting) + E_SetPoint_OperationLevel = 0x2601, // Set Point visible/settable in Operation Level (Writable, Range: SP lower to SP upper limit) (Likely mirrors E_SetPoint=0x2103 but accessible differently) + E_RemoteSPMonitor = 0x2602, // Remote SP Monitor (Read-Only, Range: Remote SP lower limit -10% FS to Remote SP upper limit +10% FS) + E_HeaterCurrent1ValueMonitor_OpLevel = 0x2604, // Heater Current 1 Value Monitor (Read-Only, 0.0 to 55.0 A) (Likely same value as 0x2003) + E_MVMonitorHeating_OpLevel = 0x2605, // MV Monitor (Heating) (Read-Only, %: -5.0 to 105.0 or 0.0 to 105.0) (Likely same value as 0x2004) + E_MVMonitorCooling_OpLevel = 0x2606, // MV Monitor (Cooling) (Read-Only, %: 0.0 to 105.0) (Likely same value as 0x2005) + E_ValveOpeningMonitor = 0x2607, // Valve Opening Monitor (Read-Only, %: -10.0 to 110.0) + + // --- Adjustment Level Parameters (Addresses ~0x2700 - 0x27FF, Ref Manual Page 5-4/5-5) --- + E_ProportionalBandCooling = 0x2701, // Proportional Band (Cooling) (Writable, Range: 0.1 to 999.9) [Adjustment Level] + E_IntegralTimeCooling = 0x2702, // Integral Time (Cooling) (Writable, Range: 0 to 9999 s / 0.0 to 999.9 s depending on derivative unit) [Adjustment Level] + E_DerivativeTimeCooling = 0x2703, // Derivative Time (Cooling) (Writable, Same range as Integral) [Adjustment Level] + E_DeadBand = 0x2704, // Dead Band (Writable, Range: -199.9 to 999.9 for temp input / -19.99 to 99.99 for analog input) [Adjustment Level] + E_ManualResetValue = 0x2705, // Manual Reset Value (Writable, Range: 0.0 to 100.0 %) [Adjustment Level] + E_HysteresisHeating = 0x2706, // Hysteresis (Heating) (Writable, Range: 0.1 to 999.9 for temp input / 0.01 to 99.99 for analog input) [Adjustment Level] + E_HysteresisCooling = 0x2707, // Hysteresis (Cooling) (Writable, Same range as Heating) [Adjustment Level] + E_ControlPeriodHeating = 0x2708, // Control Period (Heating) (Writable, Special values or 1 to 99 s) [Initial Setting Level] (See E5C_ControlPeriod_SpecialVal) + E_ControlPeriodCooling = 0x2709, // Control Period (Cooling) (Writable, Special values or 1 to 99 s) [Initial Setting Level] (See E5C_ControlPeriod_SpecialVal) + E_PositionPropDeadBand = 0x270A, // Position Proportional Dead Band (Writable, Range: 0.1 to 10.0) [Adjustment Level] + E_OpenCloseHysteresis = 0x270B, // Open/Close Hysteresis (Writable, Range: 0.1 to 20.0) [Adjustment Level] + E_SPRampTimeUnit = 0x270C, // SP Ramp Time Unit (Writable) [Advanced Function Setting Level] (See E5C_SPRampTimeUnit_Param) + E_SPRampSetValue = 0x270D, // SP Ramp Set Value (Writable, 0=OFF or 1 to 9999 in units from 0x270C) [Adjustment Level] (See E5C_SPRampSetValue_SpecialVal) + E_SPRampFallValue = 0x270E, // SP Ramp Fall Value (Writable, -1=Same as Set, 0=OFF or 1 to 9999) [Adjustment Level] (See E5C_SPRampFallValue_SpecialVal) + E_MVAtStop = 0x270F, // MV (%) at Stop (Writable, Range: -5.0 to 105.0 / -105.0 to 105.0 varies) [Advanced Function Setting Level] + E_MVAtPVError = 0x2711, // MV (%) at PV Error (Writable, Range: -5.0 to 105.0 / -105.0 to 105.0 varies) [Advanced Function Setting Level] + E_MVChangeRateLimit = 0x2713, // MV Change Rate Limit (Writable, 0.0=OFF or 0.1 to 100.0 %/s) [Advanced Function Setting Level] + E_PVInputSlopeCoeff = 0x2718, // PV Input Slope Coefficient (Writable, Range: 0.001 to 9.999) [Advanced Function Setting Level] + E_HeaterCurrent1ValueMonitor_Adv = 0x271A, // Heater Current 1 Value Monitor (Read-Only, 0.0 to 55.0 A) [ Seems redundant, matches 0x2003/0x2604] + E_HeaterBurnoutDetection1 = 0x271B, // Heater Burnout Detection 1 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_LeakageCurrent1Monitor = 0x271C, // Leakage Current 1 Monitor (Read-Only, 0.0 to 55.0? Units not specified, likely mA) [Operation Level] + E_HSAlarm1 = 0x271D, // HS (Heater Short?) Alarm 1 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_ProcessValueInputShift = 0x2723, // Process Value Input Shift (Writable, Range: -1999 to 9999) [Adjustment Level] + E_HeaterCurrent2ValueMonitor = 0x2724, // Heater Current 2 Value Monitor (Read-Only, 0.0 to 55.0 A) [Operation Level] + E_HeaterBurnoutDetection2 = 0x2725, // Heater Burnout Detection 2 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_LeakageCurrent2Monitor = 0x2726, // Leakage Current 2 Monitor (Read-Only, 0.0 to 55.0 mA?) [Operation Level] + E_HSAlarm2 = 0x2727, // HS (Heater Short?) Alarm 2 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_SoakTimeRemain = 0x2728, // Soak Time Remain (Read-Only?, Range: 0 to 9999) [Operation Level] + E_SoakTime = 0x2729, // Soak Time (Writable, Range: 1 to 9999) [Adjustment Level] + E_WaitBand = 0x272A, // Wait Band (Writable, 0=OFF, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Adjustment Level] (See E5C_WaitBand_SpecialVal) + E_RemoteSPInputShift = 0x272B, // Remote SP Input Shift (Writable, Range: -1999 to 9999) [Advanced Function Setting Level] + E_RemoteSPInputSlopeCoeff = 0x272C, // Remote SP Input Slope Coefficient (Writable, Range: 0.001 to 9.999) [Advanced Function Setting Level] + + // --- Advanced Function Setting / Initial Setting Level Parameters (Addresses ~0x2800 - 0x2DFF, Ref Manual Page 5-5/5-6/5-7/5-8) --- + E_InputDigitalFilter = 0x2800, // Input Digital Filter (Writable, Range: 0.0 to 999.9) [Advanced Function Setting Level] + E_MovingAverageCount = 0x2804, // Moving Average Count (Writable) [Advanced Function Setting Level] (See E5C_MovingAverageCount_Param) + E_ExtractionOfSquareRootLowCutPoint = 0x2808, // Extraction of Square Root Low-cut Point (%) (Writable, Range: 0.0 to 100.0) [Adjustment Level] + + E_InputType = 0x2C00, // Input Type selection (Writable, See E5C_InputType_Param) [Initial Setting Level] + E_TemperatureUnit = 0x2C01, // Temperature Unit selection (Writable, See E5C_TemperatureUnit_Param) [Initial Setting Level] + E_ScalingLowerLimit = 0x2C09, // Scaling Lower Limit (Writable, Range: -1999 to Scaling Upper Limit - 1) [Advanced Function Setting Level] + E_ScalingUpperLimit = 0x2C0B, // Scaling Upper Limit (Writable, Range: Scaling Lower Limit + 1 to 9999) [Advanced Function Setting Level] + E_DecimalPoint = 0x2C0C, // Decimal Point position for PV/SP (Writable, 0-3) [Advanced Function Setting Level] (See E5C_DecimalPoint_Param) + E_RemoteSPUpperLimit = 0x2C0D, // Remote SP Upper Limit (Writable, Range depends on input type/scaling) [Advanced Function Setting Level] + E_RemoteSPLowerLimit = 0x2C0E, // Remote SP Lower Limit (Writable, Range depends on input type/scaling) [Advanced Function Setting Level] + E_PVDecimalPointDisplay = 0x2C0F, // PV Decimal Point Display ON/OFF (Writable, See E5C_PVDecimalPointDisplay_Param) [Advanced Function Setting Level] + + E_ControlOutput1Signal = 0x2D03, // Control Output 1 Signal Type (Writable, See E5C_ControlOutputSignal_Param) [Initial Setting Level] (Only for Linear Output Models) + E_ControlOutput2Signal = 0x2D04, // Control Output 2 Signal Type (Writable, See E5C_ControlOutputSignal_Param) [Initial Setting Level] (Only for Linear Output Models) + E_SPUpperLimit = 0x2D0F, // SP Upper Limit (Writable, Range depends on input type/scaling) [Initial Setting Level] + E_SPLowerLimit = 0x2D10, // SP Lower Limit (Writable, Range depends on input type/scaling) [Initial Setting Level] + E_StandardOrHeatingCooling= 0x2D11, // Control Mode: Standard or Heating/Cooling (Writable, See E5C_ControlMode_Param) [Initial Setting Level] + E_DirectReverseOperation = 0x2D12, // Direct/Reverse operation setting (Writable, See E5C_DirectReverseOperation_Param) [Initial Setting Level] (Different from Command 0x0E) + E_CloseFloating = 0x2D13, // Close/Floating (position-proportional control) (Writable, See E5C_CloseFloating_Param) [Initial Setting Level] (Only for Position-proportional Models) + E_PidOnOff = 0x2D14, // PID/ON-OFF Control Selection (Writable, See E5C_PidOnOff_Param) [Initial Setting Level] + E_ST_Setting = 0x2D15, // Self-Tuning ON/OFF (Writable, See E5C_ST_Param) [Initial Setting Level] + E_ProgramPattern = 0x2D16, // Program Pattern Execution State (Writable, See E5C_ProgramPattern_Param) [Initial Setting Level] + E_RemoteSPInputType = 0x2D18, // Remote SP Input range selection (Writable, See E5C_RemoteSPInputType_Param) [Advanced Function Setting Level] + E_MinimumOutputOnOffBand = 0x2D19, // Minimum Output ON/OFF Band (Writable, Range: 0.0 to 50.0 %) [Advanced Function Setting Level] + + // --- Advanced Function Setting / Initial Setting Level Parameters Continued (Addresses ~0x2E00 - ..., Ref Manual Page 5-8 to 5-12) --- + E_TransferOutputType = 0x2E00, // Transfer Output Type (Writable, See E5C_TransferOutputType_Param) [Initial Setting Level] + E_TransferOutputSignal = 0x2E01, // Transfer Output Signal Range (Writable, See E5C_TransferOutputSignal_Param) [Initial Setting Level] + E_ExtractionSquareRootEnable = 0x2E24, // Extraction of Square Root Enable (Writable, Use E5C_OnOff_Param) [Initial Setting] + E_TRAVEL_TIME = 0x2E30, // Travel Time (Position-proportional models?) (Writable, Range: 1 to 999) + E_ControlOutput1Assignment = 0x2E06, // Assign function to Control Output 1 (Writable, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] (Ref Manual Page 5-9) + E_ControlOutput2Assignment = 0x2E07, // Assign function to Control Output 2 (Writable, See E5C_ControlOutputAssignment_Param, Note restrictions) [Advanced Function Setting] (Ref Manual Page 5-9) + E_EventInputAssignment1 = 0x2E0A, // Event Input Assignment 1 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] (Ref Manual Page 5-10) + E_EventInputAssignment2 = 0x2E0B, // Event Input Assignment 2 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] (Ref Manual Page 5-10) + E_EventInputAssignment3 = 0x2E0C, // Event Input Assignment 3 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] (Ref Manual Page 5-10) + E_EventInputAssignment4 = 0x2E0D, // Event Input Assignment 4 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] (Ref Manual Page 5-10) + E_EventInputAssignment5 = 0x2E0E, // Event Input Assignment 5 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] (Ref Manual Page 5-10) + E_EventInputAssignment6 = 0x2E0F, // Event Input Assignment 6 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] (Ref Manual Page 5-10) + E_AuxiliaryOutput1Assignment = 0x2E10, // Auxiliary Output 1 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] (Ref Manual Page 5-10) + E_AuxiliaryOutput2Assignment = 0x2E11, // Auxiliary Output 2 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] (Ref Manual Page 5-10) + E_AuxiliaryOutput3Assignment = 0x2E12, // Auxiliary Output 3 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] (Ref Manual Page 5-10) + E_AuxiliaryOutput4Assignment = 0x2E13, // Auxiliary Output 4 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] (Ref Manual Page 5-10) + E_TransferOutputUpperLimit = 0x2E14, // Transfer Output Upper Limit (for selected Transfer Output Type) (Writable, Range -1999 to 9999) [Initial Setting Level] (Ref Manual Page 5-10) + E_TransferOutputLowerLimit = 0x2E15, // Transfer Output Lower Limit (for selected Transfer Output Type) (Writable, Range -1999 to 9999) [Initial Setting Level] (Ref Manual Page 5-10) + E_SimpleTransferOutput1UpperLimit = 0x2E16, // Simple Transfer Output 1 Upper Limit (Writable, Range: -1999 to 9999) [Initial Setting Level] (Note *1: E5CC-U/E5GC linear current output only, v2.2+) + E_SimpleTransferOutput1LowerLimit = 0x2E17, // Simple Transfer Output 1 Lower Limit (Writable, Range: -1999 to 9999) [Initial Setting Level] (Note *1: E5CC-U/E5GC linear current output only, v2.2+) + + // --- Alarm Setup Parameters (Addresses ~0x2F00 - 0x2FFF, Ref Manual Page 5-12) --- + E_ALARM_1_TYPE = 0x2F00, // Alarm 1 Type (Writable, See E5C_AlarmType_Param) + E_ALARM_1_LATCH = 0x2F01, // Alarm 1 Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ALARM_1_HYSTERESIS = 0x2F02, // Alarm 1 Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Initial Setting] + E_ALARM_2_TYPE = 0x2F03, // Alarm 2 Type (Writable, See E5C_AlarmType_Param, Note: LBA_12 cannot be set) + E_ALARM_2_LATCH = 0x2F04, // Alarm 2 Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ALARM_2_HYSTERESIS = 0x2F05, // Alarm 2 Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Initial Setting] + E_ALARM_3_TYPE = 0x2F06, // Alarm 3 Type (Writable, See E5C_AlarmType_Param, Note: LBA_12 cannot be set) + E_ALARM_3_LATCH = 0x2F07, // Alarm 3 Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ALARM_3_HYSTERESIS = 0x2F08, // Alarm 3 Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Initial Setting] + E_ALARM_4_TYPE = 0x2F09, // Alarm 4 Type (Writable, See E5C_AlarmType_Param, Note: LBA_12 cannot be set) + E_ALARM_4_LATCH = 0x2F0A, // Alarm 4 Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ALARM_4_HYSTERESIS = 0x2F0B, // Alarm 4 Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Initial Setting] + E_STANDBY_SEQUENCE_RESET = 0x2F0C, // Standby Sequence Reset Condition (Writable, See E5C_StandbySequenceReset_Param) [Advanced Function Setting] + E_AUXILIARY_OUTPUT_1_OPEN_IN_ALARM = 0x2F0D, // Auxiliary Output 1 Behaviour (Open/Close) if assigned to an Alarm (Writable, See E5C_AuxOutputOpenInAlarm_Param) [Advanced Function Setting] + + // --- Operation Level Parameters (Duplicated Addresses? / Specific Uses) (Addresses ~0x2900 - 0x29FF, Ref Manual Page 5-6/5-7) --- + // These allow setting SPs and Alarm values within the Operation or Adjustment levels, potentially overriding the base settings (0x21xx) when active. + E_SP0_OperationLevel = 0x2900, // SP 0 Setting (Writable, Range: SP lower limit to SP upper limit) [Operation Level] (Likely same as E_SetPoint when SP 0 is selected) + E_AlarmValue1_OperationLevel = 0x2902, // Alarm Value 1 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValue1=0x2104) + E_AlarmValueUpperLimit1_OperationLevel = 0x2903, // Alarm Value Upper Limit 1 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValueUpperLimit1=0x2105) + E_AlarmValueLowerLimit1_OperationLevel = 0x2904, // Alarm Value Lower Limit 1 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValueLowerLimit1=0x2106) + E_AlarmValue2_OperationLevel = 0x2905, // Alarm Value 2 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValue2=0x2107) + E_AlarmValueUpperLimit2_OperationLevel = 0x2906, // Alarm Value Upper Limit 2 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValueUpperLimit2=0x2108) + E_AlarmValueLowerLimit2_OperationLevel = 0x2907, // Alarm Value Lower Limit 2 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValueLowerLimit2=0x2109) + E_AlarmValue3 = 0x2908, // Alarm Value 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueUpperLimit3 = 0x2909, // Alarm Value Upper Limit 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueLowerLimit3 = 0x290A, // Alarm Value Lower Limit 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValue4 = 0x290B, // Alarm Value 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueUpperLimit4 = 0x290C, // Alarm Value Upper Limit 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueLowerLimit4 = 0x290D, // Alarm Value Lower Limit 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_SP1_Setting = 0x290E, // SP 1 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 1) + E_SP2_Setting = 0x291C, // SP 2 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 2) + E_SP3_Setting = 0x292A, // SP 3 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 3) + E_SP4_Setting = 0x2938, // SP 4 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 4) + E_SP5_Setting = 0x2946, // SP 5 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 5) + E_SP6_Setting = 0x2954, // SP 6 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 6) + E_SP7_Setting = 0x2962, // SP 7 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 7) + + // --- Adjustment Level PID / MV Limits (Addresses ~0x2A00 - ..., Ref Manual Page 5-7) --- + E_ProportionalBand = 0x2A00, // Proportional Band (Heating, Standard, or Close Position Control) (Writable, Range: 0.1 to 999.9) [Adjustment Level] + E_IntegralTime = 0x2A01, // Integral Time (Heating, Standard, or Close Position Control) (Writable, Range depends on time unit setting) [Adjustment Level] + E_DerivativeTime = 0x2A02, // Derivative Time (Heating, Standard, or Close Position Control) (Writable, Range depends on time unit setting) [Adjustment Level] + E_MVUpperLimit = 0x2A05, // MV Upper Limit (%) (Writable, Range depends on control type, see manual) [Adjustment Level] + E_MVLowerLimit = 0x2A06, // MV Lower Limit (%) (Writable, Range depends on control type, see manual) [Adjustment Level] + + // NOTE on Status Registers (e.g., E_Status1, E_Status2_LowerWord, E_Status2_UpperWord): + // These are bitfields. Refer to the E5C Communications Manual Section 5-2 "Status" + // for details on individual bit meanings. Explicit enums for these bits can be added if needed (See examples below). + // Note *1: Not displayed on the Controller display. + // Note *2: In 2-byte mode, the rightmost 16 bits are usually read. + // Note *3: In 2-byte mode, the leftmost 16 bits are usually read. + // This suggests Status 2 (E_Status2_LowerWord/E_Status2_UpperWord) and potentially StatusWord3 (E_StatusWord3_Leftmost) + // might be parts of larger 32-bit status values if the controller supported 4-byte mode reads. +}; + +// --- Parameter Enums for Specific Holding Register Settings --- + +// Generic ON/OFF Parameter (Used by multiple registers) +enum class E5C_OnOff_Param : uint16_t +{ + E_Off = 0x00, + E_On = 0x01, +}; + +// Parameters for E_OperationAdjustmentProtect (0x2500) +enum class E5C_OperationProtect_Param : uint16_t +{ + E_NoRestrictions = 0x00, // No restrictions in operation and adjustment levels + E_AdjustLevelProhibited = 0x01, // Move to adjustment level is prohibited + E_DisplayChangePV_PVSP = 0x02, // Display and change of only "PV" and "PV/SP" allowed + E_DisplayOnlyPV_PVSP = 0x03, // Display of only "PV" and "PV/SP" allowed +}; + +// Parameters for E_InitialSettingCommsProtect (0x2501) +enum class E5C_InitialProtect_Param : uint16_t +{ + E_MoveToInitialAllowedAdvDisplayed = 0x00, // Move to initial/comms allowed. Adv func displayed. + E_MoveToInitialAllowedAdvNotDisplayed= 0x01, // Move to initial/comms allowed. Adv func not displayed. + E_MoveToInitialProhibited = 0x02, // Move to initial/comms prohibited. +}; + +// Parameters for E_SettingChangeProtect (0x2502) +enum class E5C_SettingChangeProtect_Param : uint16_t +{ + E_OffChangeAllowed = 0x00, // OFF (Changing settings via front panel allowed) + E_OnChangeProhibited = 0x01, // ON (Changing settings via front panel prohibited) +}; + +// Parameters for E_PF_KeyProtect (0x2503) +enum class E5C_PFKeyProtect_Param : uint16_t +{ + E_Off = 0x00, // PF Key Protection OFF + E_On = 0x01, // PF Key Protection ON +}; + +// Parameters for E_ParameterMaskEnable (0x2506) +enum class E5C_ParamMaskEnable_Param : uint16_t +{ + E_Off = 0x00, // Parameter Mask function OFF + E_On = 0x01, // Parameter Mask function ON +}; + +// Parameters for E_ChangedParametersOnly (0x2507) +enum class E5C_ChangedParamsOnly_Param : uint16_t +{ + E_Off = 0x00, // Display all parameters in adjustment level etc. + E_On = 0x01, // Display only parameters changed from default in adjustment level etc. +}; + + +// --- Special Values / Parameter Enums for specific registers --- + +// Special values for E_ControlPeriodHeating (0x2708) and E_ControlPeriodCooling (0x2709) +// Note: Positive values 1 to 99 represent seconds directly. Use raw integers for those. +enum class E5C_ControlPeriod_SpecialVal : int16_t // Use signed type for negative values +{ + E_Period_0_1_Sec = -2, // Represents 0.1 seconds + E_Period_0_2_Sec = -1, // Represents 0.2 seconds + E_Period_0_5_Sec = 0, // Represents 0.5 seconds + // Values 1..99 are direct seconds, do not add them here. Must be written as int16_t. +}; + +// Parameters for E_SPRampTimeUnit (0x270C) +enum class E5C_SPRampTimeUnit_Param : uint16_t +{ + E_EU_Per_Second = 0, // Unit is Engineering Unit / second + E_EU_Per_Minute = 1, // Unit is Engineering Unit / minute + E_EU_Per_Hour = 2, // Unit is Engineering Unit / hour +}; + +// Special value for E_SPRampSetValue (0x270D) +// Note: Positive values 1 to 9999 represent the rate directly. Use raw integers for those. +enum class E5C_SPRampSetValue_SpecialVal : uint16_t +{ + E_Off = 0, // SP Ramp Set is OFF + // Values 1..9999 are direct rates, do not add them here. Must be written as uint16_t. +}; + +// Special values for E_SPRampFallValue (0x270E) +// Note: Positive values 1 to 9999 represent the rate directly. Use raw integers for those. +enum class E5C_SPRampFallValue_SpecialVal : int16_t // Use signed type for negative value +{ + E_SameAsSet = -1, // Fall rate is same as Set rate (defined by 0x270D) + E_Off = 0, // SP Ramp Fall is OFF + // Values 1..9999 are direct rates, do not add them here. Must be written as int16_t. +}; + +// Special value for E_WaitBand (0x272A) +// Note: Positive values represent the band width directly (needs scaling based on Temp/Analog input). +// Use raw values for setting the width. +enum class E5C_WaitBand_SpecialVal : uint16_t +{ + E_Off = 0, // Wait Band function is OFF + // Other values represent the actual width. +}; + +// Parameters for E_MovingAverageCount (0x2804) +enum class E5C_MovingAverageCount_Param : uint16_t +{ + E_Off = 0, // Moving Average OFF + E_2_Times = 1, // Moving Average Count: 2 times + E_4_Times = 2, // Moving Average Count: 4 times + E_8_Times = 3, // Moving Average Count: 8 times + E_16_Times= 4, // Moving Average Count: 16 times + E_32_Times= 5, // Moving Average Count: 32 times +}; + +// Parameters for E_InputType (0x2C00) [Initial Setting Level] +enum class E5C_InputType_Param : uint16_t +{ + E_Pt_neg200_850C = 0, // Pt (-200 to 850°C / -300 to 1500°F) + E_Pt_neg199_500C_1DP = 1, // Pt (-199.9 to 500.0°C / -199.9 to 900.0°F) + E_Pt_0_100C_1DP = 2, // Pt (0.0 to 100.0°C / 0.0 to 210.0°F) + E_JPt_neg199_500C_1DP = 3, // JPt (-199.9 to 500.0°C / -199.9 to 900.0°F) + E_JPt_0_100C_1DP = 4, // JPt (0.0 to 100.0°C / 0.0 to 210.0°F) + E_K_neg200_1300C = 5, // K (-200 to 1300°C / -300 to 2300°F) + E_K_neg20_500C_1DP = 6, // K (-20.0 to 500.0°C / 0.0 to 900.0°F) + E_J_neg100_850C = 7, // J (-100 to 850°C / -100 to 1500°F) + E_J_neg20_400C_1DP = 8, // J (-20.0 to 400.0°C / 0.0 to 750.0°F) + E_T_neg200_400C = 9, // T (-200 to 400°C / -300 to 700°F) + E_T_neg199_400C_1DP = 10, // T (-199.9 to 400.0°C / -199.9 to 700.0°F) + E_E_neg200_600C = 11, // E (-200 to 600°C / -300 to 1100°F) + E_L_neg100_850C = 12, // L (-100 to 850°C / -100 to 1500°F) + E_U_neg200_400C = 13, // U (-200 to 400°C / -300 to 700°F) + E_U_neg199_400C_1DP = 14, // U (-199.9 to 400.0°C / -199.9 to 700.0°F) + E_N_neg200_1300C = 15, // N (-200 to 1300°C / -300 to 2300°F) + E_R_0_1700C = 16, // R (0 to 1700°C / 0 to 3000°F) + E_S_0_1700C = 17, // S (0 to 1700°C / 0 to 3000°F) + E_B_100_1800C = 18, // B (100 to 1800°C / 300 to 3200°F) + E_W_0_2300C = 19, // W (0 to 2,300°C / 0 to 3,200°F) + E_PLII_0_1300C = 20, // PLII (0 to 1,300°C / 0 to 2,300°F) + E_IR_K_140F_60C = 21, // Infrared temperature sensor (K 140°F/60°C) + E_IR_K_240F_120C = 22, // Infrared temperature sensor (K 240°F/120°C) + E_IR_K_280F_140C = 23, // Infrared temperature sensor (K 280°F/140°C) + E_IR_K_440F_220C = 24, // Infrared temperature sensor (K 440°F/220°C) + E_Analog_4_20MA = 25, // 4 to 20 mA + E_Analog_0_20MA = 26, // 0 to 20 mA + E_Analog_1_5V = 27, // 1 to 5 V + E_Analog_0_5V = 28, // 0 to 5 V + E_Analog_0_10V = 29, // 0 to 10 V + E_Analog_0_50MV = 30, // 0 to 50 mV (Only E5CC-U v2.2+ May 2014 or later) +}; + +// Parameters for E_TemperatureUnit (0x2C01) [Initial Setting Level] +enum class E5C_TemperatureUnit_Param : uint16_t +{ + E_Celsius = 0, // °C + E_Fahrenheit = 1, // °F +}; + +// Parameters for E_DecimalPoint (0x2C0C) [Advanced Function Setting Level] +enum class E5C_DecimalPoint_Param : uint16_t +{ + E_DP_0 = 0, // No decimal point (XXXX) + E_DP_1 = 1, // One decimal place (XXX.X) + E_DP_2 = 2, // Two decimal places (XX.XX) + E_DP_3 = 3, // Three decimal places (X.XXX) +}; + +// Parameters for E_PVDecimalPointDisplay (0x2C0F) [Advanced Function Setting Level] +enum class E5C_PVDecimalPointDisplay_Param : uint16_t +{ + E_PVDP_OFF = 0, // PV Decimal Point Display OFF + E_PVDP_ON = 1, // PV Decimal Point Display ON +}; + +// Parameters for E_ControlOutput1Signal (0x2D03) and E_ControlOutput2Signal (0x2D04) [Initial Setting Level] +// Applicable for models with Linear Current Output +enum class E5C_ControlOutputSignal_Param : uint16_t +{ + E_4_20MA = 0, // 4 to 20 mA + E_0_20MA = 1, // 0 to 20 mA + // Note: Check manual if voltage options exist for these registers on specific models +}; + +// Parameters for E_StandardOrHeatingCooling (0x2D11) [Initial Setting Level] +enum class E5C_ControlMode_Param : uint16_t +{ + E_Standard = 0, // Standard control (Heating OR Cooling, depending on wiring/config) + E_HeatingAndCooling = 1, // Heating and Cooling control +}; + +// Parameters for E_DirectReverseOperation (0x2D12) [Initial Setting Level] +enum class E5C_DirectReverseOperation_Param : uint16_t +{ + E_ReverseOperation = 0, // PID Reverse operation (e.g., heating - MV increases as PV decreases) + E_DirectOperation = 1, // PID Direct operation (e.g., cooling - MV increases as PV increases) +}; + +// Parameters for E_CloseFloating (0x2D13) [Initial Setting Level] +// Only for Position-proportional Models +enum class E5C_CloseFloating_Param : uint16_t +{ + E_Floating = 0, + E_Close = 1, +}; + +// Parameters for E_PidOnOff (0x2D14) [Initial Setting Level] +enum class E5C_PidOnOff_Param : uint16_t +{ + E_ONOFF_CONTROL = 0, // Use ON/OFF control + E_PID_CONTROL = 1, // Use 2-PID control (or standard PID if 2-PID not applicable) +}; + +// Parameters for E_ST_Setting (0x2D15) [Initial Setting Level] +enum class E5C_ST_Param : uint16_t +{ + E_Off = 0, // Self-Tuning OFF + E_On = 1, // Self-Tuning ON +}; + +// Parameters for E_ProgramPattern (0x2D16) [Initial Setting Level] +enum class E5C_ProgramPattern_Param : uint16_t +{ + E_Off = 0, // Program Pattern function OFF (normal control) + E_Stop = 1, // Program Pattern STOP (reset or initial state) + E_Cont = 2, // Program Pattern CONTINUE (running) +}; + +// Parameters for E_RemoteSPInputType (0x2D18) [Advanced Function Setting Level] +enum class E5C_RemoteSPInputType_Param : uint16_t +{ + E_4_20MA = 0, + E_0_20MA = 1, + E_1_5V = 2, + E_0_5V = 3, + E_0_10V = 4, +}; + +// Parameters for E_TransferOutputType (0x2E00) [Initial Setting Level] +enum class E5C_TransferOutputType_Param : uint16_t +{ + E_Off = 0, // Transfer Output OFF + E_SetPoint = 1, // Output Set Point value + E_SetPointRamp = 2, // Output Set Point during SP ramp + E_PV = 3, // Output Process Value + E_MV_Heating = 4, // Output Manipulated Value (Heating) + E_MV_Cooling = 5, // Output Manipulated Value (Cooling) + E_ValveOpening = 6, // Output Valve Opening (% - Only for Position-proportional Models) +}; + +// Parameters for E_TransferOutputSignal (0x2E01) [Initial Setting Level] +enum class E5C_TransferOutputSignal_Param : uint16_t +{ + E_4_20MA = 0, + E_1_5V = 1, +}; + +// Parameters for E_ControlOutput1Assignment (0x2E06), E_ControlOutput2Assignment (0x2E07) +// and Auxiliary Output Assignments (0x2E10 - 0x2E13) +// Ref Manual Page 5-9 and 5-10. [Advanced Function Setting Level] +enum class E5C_ControlOutputAssignment_Param : int16_t // Use signed type for negative values +{ + E_ASSIGN_NotAssigned = 0, + E_ASSIGN_ControlOutputHeating = 1, + E_ASSIGN_ControlOutputCooling = 2, + E_ASSIGN_Alarm1 = 3, + E_ASSIGN_Alarm2 = 4, + E_ASSIGN_Alarm3 = 5, + E_ASSIGN_Alarm4 = 6, + E_ASSIGN_HeaterAlarm = 7, // General heater alarm? (Could be HB or HS depending on config) + E_ASSIGN_HB_Alarm = 8, // Heater Break alarm + E_ASSIGN_HS_Alarm = 9, // Heater Short alarm + E_ASSIGN_InputError = 10, // PV Input Error + E_ASSIGN_RSP_InputError = 11, // Remote SP input error + E_ASSIGN_ProgramEndOutput = 12, // Note *1 from page 5-9: P.END can only be set if Program Pattern (0x2D16) is set to OFF + E_ASSIGN_RUN_Output = 13, // Indicates RUN state + E_ASSIGN_IntegratedAlarm = 14, // OR combination of selected alarms + E_ASSIGN_WorkBit1 = 15, + E_ASSIGN_WorkBit2 = 16, + E_ASSIGN_WorkBit3 = 17, + E_ASSIGN_WorkBit4 = 18, + E_ASSIGN_WorkBit5 = 19, + E_ASSIGN_WorkBit6 = 20, + E_ASSIGN_WorkBit7 = 21, + E_ASSIGN_WorkBit8 = 22, + + // Special values for Linear Current Output (Only for OUT1 on E5CC-U/E5GC May 2014+ / v2.2+ models, see Note *2 from page 5-9) + // Typically NOT applicable to Auxiliary Output Assignments (0x2E10-0x2E13) or OUT2 Assignment (0x2E07) + E_ASSIGN_SimpleTransfer_MV_Cooling = -5, // (FFFF FFFB) Simple MV transfer (cooling) + E_ASSIGN_SimpleTransfer_MV_Heating = -4, // (FFFF FFFC) Simple MV transfer (heating) + E_ASSIGN_SimpleTransfer_PV = -3, // (FFFF FFFD) Simple PV transfer + E_ASSIGN_SimpleTransfer_Ramp_SP = -2, // (FFFF FFFE) Simple SP transfer (during ramp) + E_ASSIGN_SimpleTransfer_SP = -1 // (FFFF FFFF) Simple SP transfer +}; + +// Parameters for Event Input Assignments (0x2E0A - 0x2E0F) [Initial Setting Level] +// Ref Manual Page 5-10 +enum class E5C_EventInputAssignment_Param : uint16_t +{ + E_EV_None = 0, // None + E_EV_RunStop = 1, // RUN/STOP + E_EV_AutoManualSwitch = 2, // Auto/Manual Switch + E_EV_ProgramStart = 3, // Program Start (Note *1 from pg 5-10: only if prog pattern is OFF) + E_EV_DirectReverseOperation = 4, // Direct/Reverse Operation switch + E_EV_SPModeSwitch = 5, // SP Mode Switch (Local/Remote) (Note *2 from pg 5-10: only if remote SP input) + E_EV_ATExecuteCancel_100 = 6, // 100% AT Execute/Cancel + E_EV_ATExecuteCancel_40 = 7, // 40% AT Execute/Cancel + E_EV_SettingChangeEnableDisable = 8, // Setting Change Enable/Disable + E_EV_CommsWritingEnableDisable = 9, // Communications Writing Enable/Disable (Note *3 from pg 5-10: only if external comms supported) + E_EV_AlarmLatchCancel = 10, // Alarm Latch Cancel + E_EV_MultiSP_Switch_Bit0 = 11, // Multi-SP No. Switch, Bit 0 + E_EV_MultiSP_Switch_Bit1 = 12, // Multi-SP No. Switch, Bit 1 + E_EV_MultiSP_Switch_Bit2 = 13, // Multi-SP No. Switch, Bit 2 +}; + +// Parameters for Alarm Types (0x2F00, 0x2F03, 0x2F06, 0x2F09) +enum class E5C_AlarmType_Param : uint16_t +{ + E_AlarmFunctionOff = 0, // Alarm function OFF + E_UpperLowerLimit = 1, // Upper and lower-limit alarm + E_UpperLimit = 2, // Upper-limit alarm + E_LowerLimit = 3, // Lower-limit alarm + E_UpperLowerRange = 4, // Upper and lower-limit range alarm + E_UpperLowerLimitStandby = 5, // Upper and lower-limit alarm with standby sequence + E_UpperLimitStandby = 6, // Upper-limit alarm with standby sequence + E_LowerLimitStandby = 7, // Lower-limit alarm with standby sequence + E_AbsoluteUpperLimit = 8, // Absolute-value upper-limit alarm + E_AbsoluteLowerLimit = 9, // Absolute-value lower-limit alarm + E_AbsoluteUpperLimitStandby = 10, // Absolute-value upper-limit alarm with standby sequence + E_AbsoluteLowerLimitStandby = 11, // Absolute-value lower-limit alarm with standby sequence + E_LBA = 12, // LBA (Loop Burnout Alarm) (Not settable for Alarms 2, 3, 4) + E_PVChangeRate = 13, // PV change rate alarm + E_SPAbsoluteUpperLimit = 14, // SP absolute-value upper-limit alarm + E_SPAbsoluteLowerLimit = 15, // SP absolute-value lower-limit alarm + E_MVAbsoluteUpperLimit = 16, // MV absolute-value upper-limit alarm + E_MVAbsoluteLowerLimit = 17, // MV absolute-value lower-limit alarm + E_RSPAbsoluteUpperLimit = 18, // RSP absolute-value upper-limit alarm (Only with remote SP input) + E_RSPAbsoluteLowerLimit = 19, // RSP absolute-value lower-limit alarm (Only with remote SP input) +}; + +// Parameters for Standby Sequence Reset (0x2F0C) [Advanced Function Setting] +enum class E5C_StandbySequenceReset_Param : uint16_t +{ + E_ConditionA = 0, // Condition A (See manual for details) + E_ConditionB = 1, // Condition B (See manual for details) +}; + +// Parameters for Auxiliary Output Open/Close in Alarm (0x2F0D) [Advanced Function Setting] +enum class E5C_AuxOutputOpenInAlarm_Param : uint16_t +{ + E_CloseInAlarm = 0, // Output closes when the assigned alarm is ON + E_OpenInAlarm = 1, // Output opens when the assigned alarm is ON +}; + + +// --- Enums for Status Register Bits (Refer to Manual Section 5-2) --- +// These are *examples* and need to be carefully verified against the specific E5C model manual. +// Define these if you need to decode individual status bits from registers like E_Status1, E_Status2_LowerWord, etc. + +/* +// Example bits for E_Status1 (0x2001) / E_Status1_StatusArea (0x2406) +enum class E5C_Status1_Bits : uint16_t +{ + E_S1_Alarm1_Output = (1 << 0), // Bit 0: Alarm 1 Output Status (0: OFF, 1: ON) + E_S1_Alarm2_Output = (1 << 1), // Bit 1: Alarm 2 Output Status + E_S1_Alarm3_Output = (1 << 2), // Bit 2: Alarm 3 Output Status + E_S1_Alarm4_Output = (1 << 3), // Bit 3: Alarm 4 Output Status (?) + E_S1_HeaterBurnout1 = (1 << 4), // Bit 4: Heater Burnout 1 Status + E_S1_HeaterBurnout2 = (1 << 5), // Bit 5: Heater Burnout 2 Status + E_S1_RunMode = (1 << 8), // Bit 8: RUN/STOP Status (0: STOP, 1: RUN) + E_S1_AutoTuning = (1 << 9), // Bit 9: AT Execution Status (0: OFF, 1: ON) + E_S1_TaskOperating = (1 << 10), // Bit 10: Task Operating Status (Programs) + E_S1_CommWritingDisabled= (1 << 11), // Bit 11: Communications Writing Disabled Status + E_S1_ManualMode = (1 << 12), // Bit 12: Auto/Manual Mode Status (0: Auto, 1: Manual) + E_S1_RemoteSP_Mode = (1 << 13), // Bit 13: SP Mode (0: Local, 1: Remote) + // ... add other relevant bits based on manual section 5-2 +}; +*/ + +/* +// Example bits for E_Status2_LowerWord (0x2408) +enum class E5C_Status2Lower_Bits : uint16_t +{ + E_S2L_RAM_Error = (1 << 0), // Bit 0: RAM Error + E_S2L_MemoryError = (1 << 1), // Bit 1: Memory Error (Non-volatile) + E_S2L_ADC_Error = (1 << 2), // Bit 2: A/D Converter Error + E_S2L_InputTypeError = (1 << 3), // Bit 3: Input Type Error + E_S2L_WatchdogTimeout = (1 << 4), // Bit 4: Watchdog Timer Timeout + E_S2L_OverrunError = (1 << 5), // Bit 5: Overrun Error (Communications?) + E_S2L_FramingError = (1 << 6), // Bit 6: Framing Error (Communications?) + E_S2L_ParityError = (1 << 7), // Bit 7: Parity Error (Communications?) + E_S2L_CommsTimeoutError = (1 << 8), // Bit 8: Communications Timeout Error + E_S2L_CommsError = (1 << 9), // Bit 9: Communications Error (General?) + E_S2L_CommsBufferOverrun = (1 << 10),// Bit 10: Communications Buffer Overrun Error + E_S2L_PowerSupplyFreqError = (1 << 11),// Bit 11: Power Supply Frequency Error + // ... add other relevant bits based on manual section 5-2 +}; + */ + +/* +// Example bits for E_Status2_UpperWord (0x2409) - Note: Bit numbering starts from 16 conceptually +enum class E5C_Status2Upper_Bits : uint16_t +{ + E_S2U_PV_InputError = (1 << 0), // Bit 16 (0 in upper word): PV Input Error (Over/Under Range or Disconnect) + E_S2U_RemoteSPInputError = (1 << 1), // Bit 17 (1 in upper word): Remote SP Input Error (Over/Under Range) + E_S2U_MVOutputError = (1 << 2), // Bit 18 (2 in upper word): MV Output Error + E_S2U_ExternalDIError = (1 << 3), // Bit 19 (3 in upper word): Error via External DI (Digital Input) + E_S2U_HeaterShortAlarm1 = (1 << 4), // Bit 20 (4 in upper word): HS (Heater Short) Alarm 1 Status + E_S2U_HeaterShortAlarm2 = (1 << 5), // Bit 21 (5 in upper word): HS (Heater Short) Alarm 2 Status + // E_S2U_TempSensorDisconnected= (1 << 6), // Bit 22 (6 in upper word): (Not explicitly listed, PV Input Error likely covers this) + // ... add other relevant bits based on manual section 5-2 +}; +*/ + +#endif // E5C_MODBUS_REGISTERS_HPP + + +#ifndef E5C_MODBUS_REGISTERS_HPP +#define E5C_MODBUS_REGISTERS_HPP + +#include // Required for uint16_t and int16_t + +// --- E5C Modbus Command Codes --- +// Represents the Command Codes used for various operations on the E5C device. +// These codes are typically written to a specific command register (often 0x0000) via Modbus. +enum class E5C_CommandCode : uint16_t +{ + E_CommunicationsWriting = 0x00, // Controls Modbus communications writing (enable/disable) + E_RunStop = 0x01, // Starts or stops control operation + E_MultiSP = 0x02, // Selects the target Set Point (SP) number (0-7) + E_ATExecuteCancel = 0x03, // Executes or cancels Auto-Tuning (AT) + E_WriteMode = 0x04, // Selects the write mode (Backup or RAM only) + E_SaveRAMData = 0x05, // Saves data from RAM to non-volatile memory (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_SoftwareReset = 0x06, // Performs a software reset (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_MoveToSetupArea1 = 0x07, // Moves operation to Setup Area 1 (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_MoveToProtectLevel = 0x08, // Moves operation to the Protect Level (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_AutoManualSwitch = 0x09, // Switches between Automatic and Manual control mode + E_ParameterInitialization = 0x0B, // Initializes parameters to default values (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_AlarmLatchCancel = 0x0C, // Cancels specified latched alarms + E_SPMode = 0x0D, // Selects Set Point (SP) mode (Local or Remote) + E_InvertDirectReverse = 0x0E, // Selects direct or reverse operation (Invert/Not Invert) via Command + E_ProgramStart = 0x11, // Starts or resets a program pattern +}; + +// --- Parameter Enums for Specific Command Codes --- +// These enums define the valid "Related Information" values (data) sent with specific commands. + +// Parameters for E_CommunicationsWriting (0x00) +enum class E5C_CommWrite_Param : uint16_t +{ + E_OffDisabled = 0x00, + E_OnEnabled = 0x01, +}; + +// Parameters for E_RunStop (0x01) +enum class E5C_RunStop_Param : uint16_t +{ + E_Run = 0x00, + E_Stop = 0x01, +}; + +// Parameters for E_MultiSP (0x02) +enum class E5C_MultiSP_Param : uint16_t +{ + E_SetPoint0 = 0x00, + E_SetPoint1 = 0x01, + E_SetPoint2 = 0x02, + E_SetPoint3 = 0x03, + E_SetPoint4 = 0x04, + E_SetPoint5 = 0x05, + E_SetPoint6 = 0x06, + E_SetPoint7 = 0x07, +}; + +// Parameters for E_ATExecuteCancel (0x03) +enum class E5C_ATExecuteCancel_Param : uint16_t +{ + E_ATCancel = 0x00, // Cancel Auto-Tuning + E_ATExecute100Pct = 0x01, // Execute 100% Auto-Tuning + E_ATEexecute40Pct = 0x02, // Execute 40% Auto-Tuning +}; + +// Parameters for E_WriteMode (0x04) +enum class E5C_WriteMode_Param : uint16_t +{ + E_Backup = 0x00, // Writes are backed up to non-volatile memory + E_RAMWriteMode = 0x01, // Writes affect RAM only +}; + +// Parameters for E_AutoManualSwitch (0x09) +enum class E5C_AutoManualSwitch_Param : uint16_t +{ + E_AutomaticMode = 0x00, + E_ManualMode = 0x01, +}; + +// Parameters for E_AlarmLatchCancel (0x0C) +enum class E5C_AlarmLatchCancel_Param : uint16_t +{ + E_Alarm1LatchCancel = 0x00, + E_Alarm2LatchCancel = 0x01, + E_Alarm3LatchCancel = 0x02, + E_HBAlarmLatchCancel = 0x03, // Heater Break alarm latch cancel + E_HSAlarmLatchCancel = 0x04, // Heater Short alarm latch cancel (?) + E_Alarm4LatchCancel = 0x05, // Alarm 4 latch cancel (?) + E_AllAlarmLatchCancel = 0x0F, // Cancel all latched alarms +}; + +// Parameters for E_SPMode (0x0D) +enum class E5C_SPMode_Param : uint16_t +{ + E_LocalSPMode = 0x00, + E_RemoteSPMode = 0x01, +}; + +// Parameters for E_InvertDirectReverse (0x0E) - Command based +enum class E5C_InvertDirectReverseCmd_Param : uint16_t +{ + E_NotInvert = 0x00, // Direct operation (Command parameter) + E_Invert = 0x01, // Reverse operation (Command parameter) +}; + +// Parameters for E_ProgramStart (0x11) +enum class E5C_ProgramStart_Param : uint16_t +{ + E_Reset = 0x00, // Reset the program/pattern + E_Start = 0x01, // Start the program/pattern +}; + +// Constant for commands where the related information is always 0x0000 +constexpr uint16_t E5C_COMMAND_PARAM_DEFAULT = 0x0000; +// This value should be used as the data when issuing commands like: +// - E_SaveRAMData +// - E_SoftwareReset +// - E_MoveToSetupArea1 +// - E_MoveToProtectLevel (Command, not the register 0x2504) +// - E_ParameterInitialization + + +// --- Generic Parameter Enums --- + +// Generic ON/OFF Parameter (Used by multiple registers) +enum class E5C_OnOff_Param : uint16_t +{ + E_Off = 0x00, + E_On = 0x01, +}; + + +// --- E5C Modbus Variable Area Registers (Holding Registers - Two-Byte Mode Addresses) --- +// Represents the addresses for reading/writing various parameters and status values. +// Based on the "Variable Area (Setting Range) List" sections of the Communications Manual (H175). +// Note: Addresses are based on the "Two-byte mode" column. +// Note: Ranges and accessibility levels (Operation, Adjustment, Initial, Advanced) are indicated where available. +enum class E5C_HoldingRegister : uint16_t +{ + // --- Operation Level Monitors (Addresses ~0x2000 - 0x20FF, Manual Page 5-1) --- + E_PV = 0x2000, // Process Value (Read-Only) + E_Status1 = 0x2001, // Status 1 (Bitfield, Read-Only, see manual section 5-2. Note *1, *2 apply) + E_InternalSetPoint = 0x2002, // Internal Set Point (Read-Only? Note *1 applies) + E_HeaterCurrent1Value = 0x2003, // Heater Current 1 Value Monitor (Read-Only, Range: 0.0 to 55.0 A) + E_MV_MonitorHeating = 0x2004, // Manipulated Value Monitor (Heating Output) (Read-Only, %: Range -5.0 to 105.0 or 0.0 to 105.0) + E_MV_MonitorCooling = 0x2005, // Manipulated Value Monitor (Cooling Output) (Read-Only, %: Range 0.0 to 105.0) + + // --- Primary Setting Parameters (Addresses ~0x2100 - 0x21FF, Manual Page 5-1) --- + E_SetPoint = 0x2103, // Set Point (SP) value (Writable & Readable, Primary SP setting, likely the *active* SP or SP0 in non-MultiSP mode) + E_AlarmValue1 = 0x2104, // Alarm Value 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueUpperLimit1 = 0x2105, // Alarm Value Upper Limit 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueLowerLimit1 = 0x2106, // Alarm Value Lower Limit 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValue2 = 0x2107, // Alarm Value 2 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueUpperLimit2 = 0x2108, // Alarm Value Upper Limit 2 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueLowerLimit2 = 0x2109, // Alarm Value Lower Limit 2 (Writable, Range: -1999 to 9999) [Main Setting] + // Add other registers from 0x21xx range if needed from other tables + + // --- Status/Monitor Parameters (Addresses ~0x2400 - 0x24FF, Manual Page 5-2) --- + E_PV_StatusArea = 0x2402, // Process Value (Read-Only status copy) + E_InternalSetPoint_StatusArea = 0x2403, // Internal Set Point (Read-Only status copy, Note *1) + E_MultiSP_NoMonitor = 0x2404, // Multi-SP No. Monitor (Which SP is currently active: 0 to 7, Read-Only) + E_Status1_StatusArea = 0x2406, // Status 1 (Read-Only status copy, Bitfield, Note *1, *2 apply) + E_StatusWord3_Leftmost = 0x2407, // Status Word 3 / Leftmost bits (Part of a larger status? Read-Only, Note *3 applies) + E_Status2_LowerWord = 0x2408, // Status 2 (Rightmost 16 bits / Lower Word. Read-Only, Bitfield, Note *1, *2 apply) + E_Status2_UpperWord = 0x2409, // Status 2 (Leftmost 16 bits / Upper Word. Read-Only, Bitfield, Note *1, *3 apply) + E_DecimalPointMonitor = 0x2410, // Decimal Point Monitor (Position for PV/SP display: 0 to 3, Read-Only) + // Add other registers from 0x24xx range if needed + + // --- Protect Level Parameters (Addresses ~0x2500 - 0x25FF, Ref Manual Page 5-3) --- + E_OperationAdjustmentProtect = 0x2500, // Sets Operation/Adjustment Protection Level (Writable, See E5C_OperationProtect_Param) + E_InitialSettingCommsProtect = 0x2501, // Sets Initial Setting/Communications Protection Level (Writable, See E5C_InitialProtect_Param) + E_SettingChangeProtect = 0x2502, // Enable/Disable Setting Change Protect via front panel (Writable, See E5C_SettingChangeProtect_Param) + E_PF_KeyProtect = 0x2503, // Enable/Disable PF Key Protect (Writable, See E5C_PFKeyProtect_Param) + E_MoveToProtectLevelSetting = 0x2504, // Sets the password value needed to move to protect level (Writable, Range: -1999 to 9999 or FFFF831 to 270F) + E_PasswordToMoveToProtectLevel = 0x2505, // Write the password here to attempt moving to the protect level (Write-Only? Monitor value always 0) + E_ParameterMaskEnable = 0x2506, // Enable/Disable Parameter Mask (Writable, See E5C_ParamMaskEnable_Param) (Monitor value always 0) + E_ChangedParametersOnly = 0x2507, // Control Change Parameters setting (Writable, See E5C_ChangedParamsOnly_Param) + + // --- Manual Control / Operation Level Parameters (Addresses ~0x2600 - 0x26FF, Ref Manual Page 5-3) --- + E_ManualMV = 0x2600, // Manual Manipulated Value (Writable in Manual Mode) (%: Ranges vary by model/setting) + E_SetPoint_OperationLevel = 0x2601, // Set Point visible/settable in Operation Level (Writable, Range: SP lower to SP upper limit) (Likely mirrors E_SetPoint=0x2103 but accessible differently) + E_RemoteSPMonitor = 0x2602, // Remote SP Monitor (Read-Only, Range: Remote SP lower limit -10% FS to Remote SP upper limit +10% FS) + E_HeaterCurrent1ValueMonitor_OpLevel = 0x2604, // Heater Current 1 Value Monitor (Read-Only, 0.0 to 55.0 A) (Likely same value as 0x2003) + E_MVMonitorHeating_OpLevel = 0x2605, // MV Monitor (Heating) (Read-Only, %: -5.0 to 105.0 or 0.0 to 105.0) (Likely same value as 0x2004) + E_MVMonitorCooling_OpLevel = 0x2606, // MV Monitor (Cooling) (Read-Only, %: 0.0 to 105.0) (Likely same value as 0x2005) + E_ValveOpeningMonitor = 0x2607, // Valve Opening Monitor (Read-Only, %: -10.0 to 110.0) + + // --- Adjustment Level Parameters (Addresses ~0x2700 - 0x27FF, Ref Manual Page 5-4/5-5) --- + E_ProportionalBandCooling = 0x2701, // Proportional Band (Cooling) (Writable, Range: 0.1 to 999.9) [Adjustment Level] + E_IntegralTimeCooling = 0x2702, // Integral Time (Cooling) (Writable, Range: 0 to 9999 s / 0.0 to 999.9 s depending on derivative unit) [Adjustment Level] + E_DerivativeTimeCooling = 0x2703, // Derivative Time (Cooling) (Writable, Same range as Integral) [Adjustment Level] + E_DeadBand = 0x2704, // Dead Band (Writable, Range: -199.9 to 999.9 for temp input / -19.99 to 99.99 for analog input) [Adjustment Level] + E_ManualResetValue = 0x2705, // Manual Reset Value (Writable, Range: 0.0 to 100.0 %) [Adjustment Level] + E_HysteresisHeating = 0x2706, // Hysteresis (Heating) (Writable, Range: 0.1 to 999.9 for temp input / 0.01 to 99.99 for analog input) [Adjustment Level] + E_HysteresisCooling = 0x2707, // Hysteresis (Cooling) (Writable, Same range as Heating) [Adjustment Level] + E_ControlPeriodHeating = 0x2708, // Control Period (Heating) (Writable, Special values or 1 to 99 s) [Initial Setting Level] (See E5C_ControlPeriod_SpecialVal) + E_ControlPeriodCooling = 0x2709, // Control Period (Cooling) (Writable, Special values or 1 to 99 s) [Initial Setting Level] (See E5C_ControlPeriod_SpecialVal) + E_PositionPropDeadBand = 0x270A, // Position Proportional Dead Band (Writable, Range: 0.1 to 10.0) [Adjustment Level] + E_OpenCloseHysteresis = 0x270B, // Open/Close Hysteresis (Writable, Range: 0.1 to 20.0) [Adjustment Level] + E_SPRampTimeUnit = 0x270C, // SP Ramp Time Unit (Writable) [Advanced Function Setting Level] (See E5C_SPRampTimeUnit_Param) + E_SPRampSetValue = 0x270D, // SP Ramp Set Value (Writable, 0=OFF or 1 to 9999 in units from 0x270C) [Adjustment Level] (See E5C_SPRampSetValue_SpecialVal) + E_SPRampFallValue = 0x270E, // SP Ramp Fall Value (Writable, -1=Same as Set, 0=OFF or 1 to 9999) [Adjustment Level] (See E5C_SPRampFallValue_SpecialVal) + E_MVAtStop = 0x270F, // MV (%) at Stop (Writable, Range: -5.0 to 105.0 / -105.0 to 105.0 varies) [Advanced Function Setting Level] + E_MVAtPVError = 0x2711, // MV (%) at PV Error (Writable, Range: -5.0 to 105.0 / -105.0 to 105.0 varies) [Advanced Function Setting Level] + E_MVChangeRateLimit = 0x2713, // MV Change Rate Limit (Writable, 0.0=OFF or 0.1 to 100.0 %/s) [Advanced Function Setting Level] + E_PVInputSlopeCoeff = 0x2718, // PV Input Slope Coefficient (Writable, Range: 0.001 to 9.999) [Advanced Function Setting Level] + E_HeaterCurrent1ValueMonitor_Adv = 0x271A, // Heater Current 1 Value Monitor (Read-Only, 0.0 to 55.0 A) [ Seems redundant, matches 0x2003/0x2604] + E_HeaterBurnoutDetection1 = 0x271B, // Heater Burnout Detection 1 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_LeakageCurrent1Monitor = 0x271C, // Leakage Current 1 Monitor (Read-Only, 0.0 to 55.0? Units not specified, likely mA) [Operation Level] + E_HSAlarm1 = 0x271D, // HS (Heater Short?) Alarm 1 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_ProcessValueInputShift = 0x2723, // Process Value Input Shift (Writable, Range: -1999 to 9999) [Adjustment Level] + E_HeaterCurrent2ValueMonitor = 0x2724, // Heater Current 2 Value Monitor (Read-Only, 0.0 to 55.0 A) [Operation Level] + E_HeaterBurnoutDetection2 = 0x2725, // Heater Burnout Detection 2 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_LeakageCurrent2Monitor = 0x2726, // Leakage Current 2 Monitor (Read-Only, 0.0 to 55.0 mA?) [Operation Level] + E_HSAlarm2 = 0x2727, // HS (Heater Short?) Alarm 2 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_SoakTimeRemain = 0x2728, // Soak Time Remain (Read-Only?, Range: 0 to 9999) [Operation Level] + E_SoakTime = 0x2729, // Soak Time (Writable, Range: 1 to 9999) [Adjustment Level] + E_WaitBand = 0x272A, // Wait Band (Writable, 0=OFF, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Adjustment Level] (See E5C_WaitBand_SpecialVal) + E_RemoteSPInputShift = 0x272B, // Remote SP Input Shift (Writable, Range: -1999 to 9999) [Advanced Function Setting Level] + E_RemoteSPInputSlopeCoeff = 0x272C, // Remote SP Input Slope Coefficient (Writable, Range: 0.001 to 9.999) [Advanced Function Setting Level] + + // --- Advanced Function Setting / Initial Setting Level Parameters (Addresses ~0x2800 - 0x2FFF, Ref Manual Page 5-5 to 5-13) --- + E_InputDigitalFilter = 0x2800, // Input Digital Filter (Writable, Range: 0.0 to 999.9) [Advanced Function Setting Level] + E_MovingAverageCount = 0x2804, // Moving Average Count (Writable) [Advanced Function Setting Level] (See E5C_MovingAverageCount_Param) + E_ExtractionOfSquareRootLowCutPoint = 0x2808, // Extraction of Square Root Low-cut Point (%) (Writable, Range: 0.0 to 100.0) [Adjustment Level] + + E_InputType = 0x2C00, // Input Type selection (Writable, See E5C_InputType_Param) [Initial Setting Level] + E_TemperatureUnit = 0x2C01, // Temperature Unit selection (Writable, See E5C_TemperatureUnit_Param) [Initial Setting Level] + E_ScalingLowerLimit = 0x2C09, // Scaling Lower Limit (Writable, Range: -1999 to Scaling Upper Limit - 1) [Advanced Function Setting Level] + E_ScalingUpperLimit = 0x2C0B, // Scaling Upper Limit (Writable, Range: Scaling Lower Limit + 1 to 9999) [Advanced Function Setting Level] + E_DecimalPoint = 0x2C0C, // Decimal Point position for PV/SP (Writable, 0-3) [Advanced Function Setting Level] (See E5C_DecimalPoint_Param) + E_RemoteSPUpperLimit = 0x2C0D, // Remote SP Upper Limit (Writable, Range depends on input type/scaling) [Advanced Function Setting Level] + E_RemoteSPLowerLimit = 0x2C0E, // Remote SP Lower Limit (Writable, Range depends on input type/scaling) [Advanced Function Setting Level] + E_PVDecimalPointDisplay = 0x2C0F, // PV Decimal Point Display ON/OFF (Writable, See E5C_PVDecimalPointDisplay_Param) [Advanced Function Setting Level] + + E_ControlOutput1Signal = 0x2D03, // Control Output 1 Signal Type (Writable, See E5C_ControlOutputSignal_Param) [Initial Setting Level] (Only for Linear Output Models) + E_ControlOutput2Signal = 0x2D04, // Control Output 2 Signal Type (Writable, See E5C_ControlOutputSignal_Param) [Initial Setting Level] (Only for Linear Output Models) + E_SPUpperLimit = 0x2D0F, // SP Upper Limit (Writable, Range depends on input type/scaling) [Initial Setting Level] + E_SPLowerLimit = 0x2D10, // SP Lower Limit (Writable, Range depends on input type/scaling) [Initial Setting Level] + E_StandardOrHeatingCooling= 0x2D11, // Control Mode: Standard or Heating/Cooling (Writable, See E5C_ControlMode_Param) [Initial Setting Level] + E_DirectReverseOperation = 0x2D12, // Direct/Reverse operation setting (Writable, See E5C_DirectReverseOperation_Param) [Initial Setting Level] (Different from Command 0x0E) + E_CloseFloating = 0x2D13, // Close/Floating (position-proportional control) (Writable, See E5C_CloseFloating_Param) [Initial Setting Level] (Only for Position-proportional Models) + E_PidOnOff = 0x2D14, // PID/ON-OFF Control Selection (Writable, See E5C_PidOnOff_Param) [Initial Setting Level] + E_ST_Setting = 0x2D15, // Self-Tuning ON/OFF (Writable, See E5C_ST_Param) [Initial Setting Level] + E_ProgramPattern = 0x2D16, // Program Pattern Execution State (Writable, See E5C_ProgramPattern_Param) [Initial Setting Level] + E_RemoteSPInputType = 0x2D18, // Remote SP Input range selection (Writable, See E5C_RemoteSPInputType_Param) [Advanced Function Setting Level] + E_MinimumOutputOnOffBand = 0x2D19, // Minimum Output ON/OFF Band (Writable, Range: 0.0 to 50.0 %) [Advanced Function Setting Level] + + E_TransferOutputType = 0x2E00, // Transfer Output Type (Writable, See E5C_TransferOutputType_Param) [Initial Setting Level] + E_TransferOutputSignal = 0x2E01, // Transfer Output Signal Range (Writable, See E5C_TransferOutputSignal_Param) [Initial Setting Level] + E_ExtractionSquareRootEnable = 0x2E24, // Extraction of Square Root Enable (Writable, Use E5C_OnOff_Param) [Initial Setting] + E_TRAVEL_TIME = 0x2E30, // Travel Time (Position-proportional models?) (Writable, Range: 1 to 999 s) [Initial Setting] + E_ControlOutput1Assignment = 0x2E06, // Assign function to Control Output 1 (Writable, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] + E_ControlOutput2Assignment = 0x2E07, // Assign function to Control Output 2 (Writable, See E5C_ControlOutputAssignment_Param, Note restrictions) [Advanced Function Setting] + E_EventInputAssignment1 = 0x2E0A, // Event Input Assignment 1 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_EventInputAssignment2 = 0x2E0B, // Event Input Assignment 2 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_EventInputAssignment3 = 0x2E0C, // Event Input Assignment 3 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_EventInputAssignment4 = 0x2E0D, // Event Input Assignment 4 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_EventInputAssignment5 = 0x2E0E, // Event Input Assignment 5 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_EventInputAssignment6 = 0x2E0F, // Event Input Assignment 6 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_AuxiliaryOutput1Assignment = 0x2E10, // Auxiliary Output 1 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] + E_AuxiliaryOutput2Assignment = 0x2E11, // Auxiliary Output 2 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] + E_AuxiliaryOutput3Assignment = 0x2E12, // Auxiliary Output 3 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] + E_AuxiliaryOutput4Assignment = 0x2E13, // Auxiliary Output 4 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] + E_TransferOutputUpperLimit = 0x2E14, // Transfer Output Upper Limit (for selected Transfer Output Type) (Writable, Range -1999 to 9999) [Initial Setting Level] + E_TransferOutputLowerLimit = 0x2E15, // Transfer Output Lower Limit (for selected Transfer Output Type) (Writable, Range -1999 to 9999) [Initial Setting Level] + E_SimpleTransferOutput1UpperLimit = 0x2E16, // Simple Transfer Output 1 Upper Limit (Writable, Range: -1999 to 9999) [Initial Setting Level] (Note *1: E5CC-U/E5GC linear current output only, v2.2+) + E_SimpleTransferOutput1LowerLimit = 0x2E17, // Simple Transfer Output 1 Lower Limit (Writable, Range: -1999 to 9999) [Initial Setting Level] (Note *1: E5CC-U/E5GC linear current output only, v2.2+) + + E_ALARM_1_TYPE = 0x2F00, // Alarm 1 Type (Writable, See E5C_AlarmType_Param) [Initial Setting] + E_ALARM_1_LATCH = 0x2F01, // Alarm 1 Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ALARM_1_HYSTERESIS = 0x2F02, // Alarm 1 Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Initial Setting] + E_ALARM_2_TYPE = 0x2F03, // Alarm 2 Type (Writable, See E5C_AlarmType_Param, Note: LBA_12 cannot be set) [Initial Setting] + E_ALARM_2_LATCH = 0x2F04, // Alarm 2 Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ALARM_2_HYSTERESIS = 0x2F05, // Alarm 2 Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Initial Setting] + E_ALARM_3_TYPE = 0x2F06, // Alarm 3 Type (Writable, See E5C_AlarmType_Param, Note: LBA_12 cannot be set) [Initial Setting] + E_ALARM_3_LATCH = 0x2F07, // Alarm 3 Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ALARM_3_HYSTERESIS = 0x2F08, // Alarm 3 Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Initial Setting] + E_ALARM_4_TYPE = 0x2F09, // Alarm 4 Type (Writable, See E5C_AlarmType_Param, Note: LBA_12 cannot be set) [Initial Setting] + E_ALARM_4_LATCH = 0x2F0A, // Alarm 4 Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ALARM_4_HYSTERESIS = 0x2F0B, // Alarm 4 Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Initial Setting] + E_STANDBY_SEQUENCE_RESET = 0x2F0C, // Standby Sequence Reset Condition (Writable, See E5C_StandbySequenceReset_Param) [Advanced Function Setting] + E_AUXILIARY_OUTPUT_1_OPEN_IN_ALARM = 0x2F0D, // Auxiliary Output 1 Behaviour in Alarm (Writable, See E5C_AuxOutputOpenInAlarm_Param) [Advanced Function Setting] + E_AUXILIARY_OUTPUT_2_OPEN_IN_ALARM = 0x2F0E, // Auxiliary Output 2 Behaviour in Alarm (Writable, See E5C_AuxOutputOpenInAlarm_Param) [Advanced Function Setting] + E_AUXILIARY_OUTPUT_3_OPEN_IN_ALARM = 0x2F0F, // Auxiliary Output 3 Behaviour in Alarm (Writable, See E5C_AuxOutputOpenInAlarm_Param) [Advanced Function Setting] + E_AUXILIARY_OUTPUT_4_OPEN_IN_ALARM = 0x2F10, // Auxiliary Output 4 Behaviour in Alarm (Writable, See E5C_AuxOutputOpenInAlarm_Param) [Advanced Function Setting] + E_ALARM_1_ON_DELAY = 0x2F11, // Alarm 1 ON delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_2_ON_DELAY = 0x2F12, // Alarm 2 ON delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_3_ON_DELAY = 0x2F13, // Alarm 3 ON delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_4_ON_DELAY = 0x2F14, // Alarm 4 ON delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_1_OFF_DELAY = 0x2F15, // Alarm 1 OFF delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_2_OFF_DELAY = 0x2F16, // Alarm 2 OFF delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_3_OFF_DELAY = 0x2F17, // Alarm 3 OFF delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_4_OFF_DELAY = 0x2F18, // Alarm 4 OFF delay (Writable, Range: 0 to 999 s) [Initial Setting] + + // --- Display/Misc Settings (Addresses ~0x3000 - ..., Ref Manual Page 5-13) --- + E_PV_SP_NO1_DISPLAY_SELECTION = 0x3000, // PV/SP No. 1 Display Selection (Writable, See E5C_PVSP_DisplaySelection_Param) [Initial Setting] + E_MV_DISPLAY_SELECTION = 0x3001, // MV Display Selection (Writable, See E5C_MV_DisplaySelection_Param) [Initial Setting] + E_AUTO_DISPLAY_RETURN_TIME= 0x3003, // Automatic Display Return Time (Writable, Range 0=OFF, 1-99s) [Initial Setting] (See E5C_AutoDisplayReturnTime_SpecialVal) + E_DISPLAY_REFRESH_PERIOD = 0x3004, // Display Refresh Period (Writable, See E5C_DisplayRefreshPeriod_Param) [Initial Setting] + E_PV_SP_NO2_DISPLAY_SELECTION = 0x3008, // PV/SP No. 2 Display Selection (Writable, Range 0-8, See E5C_PVSP_DisplaySelection_Param) [Initial Setting] + E_DISPLAY_BRIGHTNESS = 0x300A, // Display Brightness (Writable, Range 1-3) [Initial Setting] + E_MV_DISPLAY = 0x300B, // MV Display ON/OFF (Writable, Use E5C_OnOff_Param) [Initial Setting] + E_MOVE_TO_PROTECT_LEVEL_TIME = 0x300C, // Move to Protect Level Time (Writable, Range 1-30 s) [Initial Setting] + E_AUTO_MANUAL_SELECT_ADDITION = 0x300F, // Auto/Manual Select Addition (Writable, Use E5C_OnOff_Param) [Initial Setting] + E_PV_STATUS_DISPLAY_FUNCTION = 0x3011, // PV Status Display Function (Writable, See E5C_PV_StatusDisplayFunction_Param) [Initial Setting] + E_SV_STATUS_DISPLAY_FUNCTION = 0x3012, // SV Status Display Function (Writable, Range 0-9, See E5C_PV_StatusDisplayFunction_Param) [Initial Setting] + + // --- Operation Level Parameters (Duplicated Addresses? / Specific Uses) (Addresses ~0x2900 - 0x29FF, Ref Manual Page 5-6/5-7) --- + // These allow setting SPs and Alarm values within the Operation or Adjustment levels, potentially overriding the base settings (0x21xx) when active. + E_SP0_OperationLevel = 0x2900, // SP 0 Setting (Writable, Range: SP lower limit to SP upper limit) [Operation Level] (Likely same as E_SetPoint when SP 0 is selected) + E_AlarmValue1_OperationLevel = 0x2902, // Alarm Value 1 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValue1=0x2104) + E_AlarmValueUpperLimit1_OperationLevel = 0x2903, // Alarm Value Upper Limit 1 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValueUpperLimit1=0x2105) + E_AlarmValueLowerLimit1_OperationLevel = 0x2904, // Alarm Value Lower Limit 1 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValueLowerLimit1=0x2106) + E_AlarmValue2_OperationLevel = 0x2905, // Alarm Value 2 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValue2=0x2107) + E_AlarmValueUpperLimit2_OperationLevel = 0x2906, // Alarm Value Upper Limit 2 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValueUpperLimit2=0x2108) + E_AlarmValueLowerLimit2_OperationLevel = 0x2907, // Alarm Value Lower Limit 2 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValueLowerLimit2=0x2109) + E_AlarmValue3 = 0x2908, // Alarm Value 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueUpperLimit3 = 0x2909, // Alarm Value Upper Limit 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueLowerLimit3 = 0x290A, // Alarm Value Lower Limit 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValue4 = 0x290B, // Alarm Value 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueUpperLimit4 = 0x290C, // Alarm Value Upper Limit 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueLowerLimit4 = 0x290D, // Alarm Value Lower Limit 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_SP1_Setting = 0x290E, // SP 1 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 1) + E_SP2_Setting = 0x291C, // SP 2 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 2) + E_SP3_Setting = 0x292A, // SP 3 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 3) + E_SP4_Setting = 0x2938, // SP 4 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 4) + E_SP5_Setting = 0x2946, // SP 5 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 5) + E_SP6_Setting = 0x2954, // SP 6 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 6) + E_SP7_Setting = 0x2962, // SP 7 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 7) + + // --- Adjustment Level PID / MV Limits (Addresses ~0x2A00 - ..., Ref Manual Page 5-7) --- + E_ProportionalBand = 0x2A00, // Proportional Band (Heating, Standard, or Close Position Control) (Writable, Range: 0.1 to 999.9) [Adjustment Level] + E_IntegralTime = 0x2A01, // Integral Time (Heating, Standard, or Close Position Control) (Writable, Range depends on time unit setting) [Adjustment Level] + E_DerivativeTime = 0x2A02, // Derivative Time (Heating, Standard, or Close Position Control) (Writable, Range depends on time unit setting) [Adjustment Level] + E_MVUpperLimit = 0x2A05, // MV Upper Limit (%) (Writable, Range depends on control type, see manual) [Adjustment Level] + E_MVLowerLimit = 0x2A06, // MV Lower Limit (%) (Writable, Range depends on control type, see manual) [Adjustment Level] + + // NOTE on Status Registers (e.g., E_Status1, E_Status2_LowerWord, E_Status2_UpperWord): + // These are bitfields. Refer to the E5C Communications Manual Section 5-2 "Status" + // for details on individual bit meanings. Explicit enums for these bits can be added if needed (See examples below). + // Note *1: Not displayed on the Controller display. + // Note *2: In 2-byte mode, the rightmost 16 bits are usually read. + // Note *3: In 2-byte mode, the leftmost 16 bits are usually read. + // This suggests Status 2 (E_Status2_LowerWord/E_Status2_UpperWord) and potentially StatusWord3 (E_StatusWord3_Leftmost) + // might be parts of larger 32-bit status values if the controller supported 4-byte mode reads. +}; + +// --- Parameter Enums for Specific Holding Register Settings --- + +// Parameters for E_OperationAdjustmentProtect (0x2500) +enum class E5C_OperationProtect_Param : uint16_t +{ + E_NoRestrictions = 0x00, // No restrictions in operation and adjustment levels + E_AdjustLevelProhibited = 0x01, // Move to adjustment level is prohibited + E_DisplayChangePV_PVSP = 0x02, // Display and change of only "PV" and "PV/SP" allowed + E_DisplayOnlyPV_PVSP = 0x03, // Display of only "PV" and "PV/SP" allowed +}; + +// Parameters for E_InitialSettingCommsProtect (0x2501) +enum class E5C_InitialProtect_Param : uint16_t +{ + E_MoveToInitialAllowedAdvDisplayed = 0x00, // Move to initial/comms allowed. Adv func displayed. + E_MoveToInitialAllowedAdvNotDisplayed= 0x01, // Move to initial/comms allowed. Adv func not displayed. + E_MoveToInitialProhibited = 0x02, // Move to initial/comms prohibited. +}; + +// Parameters for E_SettingChangeProtect (0x2502) +enum class E5C_SettingChangeProtect_Param : uint16_t +{ + E_OffChangeAllowed = 0x00, // OFF (Changing settings via front panel allowed) + E_OnChangeProhibited = 0x01, // ON (Changing settings via front panel prohibited) +}; + +// Parameters for E_PF_KeyProtect (0x2503) - Reuse E5C_OnOff_Param +// enum class E5C_PFKeyProtect_Param : uint16_t { E_Off = 0x00, E_On = 0x01, }; // PF Key Protection + +// Parameters for E_ParameterMaskEnable (0x2506) - Reuse E5C_OnOff_Param +// enum class E5C_ParamMaskEnable_Param : uint16_t { E_Off = 0x00, E_On = 0x01, }; // Parameter Mask function + +// Parameters for E_ChangedParametersOnly (0x2507) - Reuse E5C_OnOff_Param +// enum class E5C_ChangedParamsOnly_Param : uint16_t { E_Off = 0x00, E_On = 0x01, }; // Display all/changed parameters + +// --- Special Values / Parameter Enums for specific registers --- + +// Special values for E_ControlPeriodHeating (0x2708) and E_ControlPeriodCooling (0x2709) +// Note: Positive values 1 to 99 represent seconds directly. Use raw integers for those. +enum class E5C_ControlPeriod_SpecialVal : int16_t // Use signed type for negative values +{ + E_Period_0_1_Sec = -2, // Represents 0.1 seconds + E_Period_0_2_Sec = -1, // Represents 0.2 seconds + E_Period_0_5_Sec = 0, // Represents 0.5 seconds + // Values 1..99 are direct seconds, do not add them here. Must be written as int16_t. +}; + +// Parameters for E_SPRampTimeUnit (0x270C) +enum class E5C_SPRampTimeUnit_Param : uint16_t +{ + E_EU_Per_Second = 0, // Unit is Engineering Unit / second + E_EU_Per_Minute = 1, // Unit is Engineering Unit / minute + E_EU_Per_Hour = 2, // Unit is Engineering Unit / hour +}; + +// Special value for E_SPRampSetValue (0x270D) +// Note: Positive values 1 to 9999 represent the rate directly. Use raw integers for those. +enum class E5C_SPRampSetValue_SpecialVal : uint16_t +{ + E_Off = 0, // SP Ramp Set is OFF + // Values 1..9999 are direct rates, do not add them here. Must be written as uint16_t. +}; + +// Special values for E_SPRampFallValue (0x270E) +// Note: Positive values 1 to 9999 represent the rate directly. Use raw integers for those. +enum class E5C_SPRampFallValue_SpecialVal : int16_t // Use signed type for negative value +{ + E_SameAsSet = -1, // Fall rate is same as Set rate (defined by 0x270D) + E_Off = 0, // SP Ramp Fall is OFF + // Values 1..9999 are direct rates, do not add them here. Must be written as int16_t. +}; + +// Special value for E_WaitBand (0x272A) +// Note: Positive values represent the band width directly (needs scaling based on Temp/Analog input). +// Use raw values for setting the width. +enum class E5C_WaitBand_SpecialVal : uint16_t +{ + E_Off = 0, // Wait Band function is OFF + // Other values represent the actual width. +}; + +// Parameters for E_MovingAverageCount (0x2804) +enum class E5C_MovingAverageCount_Param : uint16_t +{ + E_Off = 0, // Moving Average OFF + E_2_Times = 1, // Moving Average Count: 2 times + E_4_Times = 2, // Moving Average Count: 4 times + E_8_Times = 3, // Moving Average Count: 8 times + E_16_Times= 4, // Moving Average Count: 16 times + E_32_Times= 5, // Moving Average Count: 32 times +}; + +// Parameters for E_InputType (0x2C00) [Initial Setting Level] +enum class E5C_InputType_Param : uint16_t +{ + E_Pt_neg200_850C = 0, // Pt (-200 to 850°C / -300 to 1500°F) + E_Pt_neg199_500C_1DP = 1, // Pt (-199.9 to 500.0°C / -199.9 to 900.0°F) + E_Pt_0_100C_1DP = 2, // Pt (0.0 to 100.0°C / 0.0 to 210.0°F) + E_JPt_neg199_500C_1DP = 3, // JPt (-199.9 to 500.0°C / -199.9 to 900.0°F) + E_JPt_0_100C_1DP = 4, // JPt (0.0 to 100.0°C / 0.0 to 210.0°F) + E_K_neg200_1300C = 5, // K (-200 to 1300°C / -300 to 2300°F) + E_K_neg20_500C_1DP = 6, // K (-20.0 to 500.0°C / 0.0 to 900.0°F) + E_J_neg100_850C = 7, // J (-100 to 850°C / -100 to 1500°F) + E_J_neg20_400C_1DP = 8, // J (-20.0 to 400.0°C / 0.0 to 750.0°F) + E_T_neg200_400C = 9, // T (-200 to 400°C / -300 to 700°F) + E_T_neg199_400C_1DP = 10, // T (-199.9 to 400.0°C / -199.9 to 700.0°F) + E_E_neg200_600C = 11, // E (-200 to 600°C / -300 to 1100°F) + E_L_neg100_850C = 12, // L (-100 to 850°C / -100 to 1500°F) + E_U_neg200_400C = 13, // U (-200 to 400°C / -300 to 700°F) + E_U_neg199_400C_1DP = 14, // U (-199.9 to 400.0°C / -199.9 to 700.0°F) + E_N_neg200_1300C = 15, // N (-200 to 1300°C / -300 to 2300°F) + E_R_0_1700C = 16, // R (0 to 1700°C / 0 to 3000°F) + E_S_0_1700C = 17, // S (0 to 1700°C / 0 to 3000°F) + E_B_100_1800C = 18, // B (100 to 1800°C / 300 to 3200°F) + E_W_0_2300C = 19, // W (0 to 2,300°C / 0 to 3,200°F) + E_PLII_0_1300C = 20, // PLII (0 to 1,300°C / 0 to 2,300°F) + E_IR_K_140F_60C = 21, // Infrared temperature sensor (K 140°F/60°C) + E_IR_K_240F_120C = 22, // Infrared temperature sensor (K 240°F/120°C) + E_IR_K_280F_140C = 23, // Infrared temperature sensor (K 280°F/140°C) + E_IR_K_440F_220C = 24, // Infrared temperature sensor (K 440°F/220°C) + E_Analog_4_20MA = 25, // 4 to 20 mA + E_Analog_0_20MA = 26, // 0 to 20 mA + E_Analog_1_5V = 27, // 1 to 5 V + E_Analog_0_5V = 28, // 0 to 5 V + E_Analog_0_10V = 29, // 0 to 10 V + E_Analog_0_50MV = 30, // 0 to 50 mV (Only E5CC-U v2.2+ May 2014 or later) +}; + +// Parameters for E_TemperatureUnit (0x2C01) [Initial Setting Level] +enum class E5C_TemperatureUnit_Param : uint16_t +{ + E_Celsius = 0, // °C + E_Fahrenheit = 1, // °F +}; + +// Parameters for E_DecimalPoint (0x2C0C) [Advanced Function Setting Level] +enum class E5C_DecimalPoint_Param : uint16_t +{ + E_DP_0 = 0, // No decimal point (XXXX) + E_DP_1 = 1, // One decimal place (XXX.X) + E_DP_2 = 2, // Two decimal places (XX.XX) + E_DP_3 = 3, // Three decimal places (X.XXX) +}; + +// Parameters for E_PVDecimalPointDisplay (0x2C0F) [Advanced Function Setting Level] - Reuse E5C_OnOff_Param +// enum class E5C_PVDecimalPointDisplay_Param : uint16_t { E_Off = 0, E_On = 1, }; // PV Decimal Point Display + +// Parameters for E_ControlOutput1Signal (0x2D03) and E_ControlOutput2Signal (0x2D04) [Initial Setting Level] +// Applicable for models with Linear Current Output +enum class E5C_ControlOutputSignal_Param : uint16_t +{ + E_4_20MA = 0, // 4 to 20 mA + E_0_20MA = 1, // 0 to 20 mA + // Note: Check manual if voltage options exist for these registers on specific models +}; + +// Parameters for E_StandardOrHeatingCooling (0x2D11) [Initial Setting Level] +enum class E5C_ControlMode_Param : uint16_t +{ + E_Standard = 0, // Standard control (Heating OR Cooling, depending on wiring/config) + E_HeatingAndCooling = 1, // Heating and Cooling control +}; + +// Parameters for E_DirectReverseOperation (0x2D12) [Initial Setting Level] +enum class E5C_DirectReverseOperation_Param : uint16_t +{ + E_ReverseOperation = 0, // PID Reverse operation (e.g., heating - MV increases as PV decreases) + E_DirectOperation = 1, // PID Direct operation (e.g., cooling - MV increases as PV increases) +}; + +// Parameters for E_CloseFloating (0x2D13) [Initial Setting Level] +// Only for Position-proportional Models +enum class E5C_CloseFloating_Param : uint16_t +{ + E_Floating = 0, + E_Close = 1, +}; + +// Parameters for E_PidOnOff (0x2D14) [Initial Setting Level] +enum class E5C_PidOnOff_Param : uint16_t +{ + E_ONOFF_CONTROL = 0, // Use ON/OFF control + E_PID_CONTROL = 1, // Use 2-PID control (or standard PID if 2-PID not applicable) +}; + +// Parameters for E_ST_Setting (0x2D15) [Initial Setting Level] - Reuse E5C_OnOff_Param +// enum class E5C_ST_Param : uint16_t { E_Off = 0, E_On = 1, }; // Self-Tuning + +// Parameters for E_ProgramPattern (0x2D16) [Initial Setting Level] +enum class E5C_ProgramPattern_Param : uint16_t +{ + E_Off = 0, // Program Pattern function OFF (normal control) + E_Stop = 1, // Program Pattern STOP (reset or initial state) + E_Cont = 2, // Program Pattern CONTINUE (running) +}; + +// Parameters for E_RemoteSPInputType (0x2D18) [Advanced Function Setting Level] +enum class E5C_RemoteSPInputType_Param : uint16_t +{ + E_4_20MA = 0, + E_0_20MA = 1, + E_1_5V = 2, + E_0_5V = 3, + E_0_10V = 4, +}; + +// Parameters for E_TransferOutputType (0x2E00) [Initial Setting Level] +enum class E5C_TransferOutputType_Param : uint16_t +{ + E_Off = 0, // Transfer Output OFF + E_SetPoint = 1, // Output Set Point value + E_SetPointRamp = 2, // Output Set Point during SP ramp + E_PV = 3, // Output Process Value + E_MV_Heating = 4, // Output Manipulated Value (Heating) + E_MV_Cooling = 5, // Output Manipulated Value (Cooling) + E_ValveOpening = 6, // Output Valve Opening (% - Only for Position-proportional Models) +}; + +// Parameters for E_TransferOutputSignal (0x2E01) [Initial Setting Level] +enum class E5C_TransferOutputSignal_Param : uint16_t +{ + E_4_20MA = 0, + E_1_5V = 1, +}; + +// Parameters for E_ControlOutput1Assignment (0x2E06), E_ControlOutput2Assignment (0x2E07) +// and Auxiliary Output Assignments (0x2E10 - 0x2E13) +// Ref Manual Page 5-9 and 5-10. [Advanced Function Setting Level] +enum class E5C_ControlOutputAssignment_Param : int16_t // Use signed type for negative values +{ + E_ASSIGN_NotAssigned = 0, + E_ASSIGN_ControlOutputHeating = 1, + E_ASSIGN_ControlOutputCooling = 2, + E_ASSIGN_Alarm1 = 3, + E_ASSIGN_Alarm2 = 4, + E_ASSIGN_Alarm3 = 5, + E_ASSIGN_Alarm4 = 6, + E_ASSIGN_HeaterAlarm = 7, // General heater alarm? (Could be HB or HS depending on config) + E_ASSIGN_HB_Alarm = 8, // Heater Break alarm + E_ASSIGN_HS_Alarm = 9, // Heater Short alarm + E_ASSIGN_InputError = 10, // PV Input Error + E_ASSIGN_RSP_InputError = 11, // Remote SP input error + E_ASSIGN_ProgramEndOutput = 12, // Note *1 from page 5-9: P.END can only be set if Program Pattern (0x2D16) is set to OFF + E_ASSIGN_RUN_Output = 13, // Indicates RUN state + E_ASSIGN_IntegratedAlarm = 14, // OR combination of selected alarms + E_ASSIGN_WorkBit1 = 15, + E_ASSIGN_WorkBit2 = 16, + E_ASSIGN_WorkBit3 = 17, + E_ASSIGN_WorkBit4 = 18, + E_ASSIGN_WorkBit5 = 19, + E_ASSIGN_WorkBit6 = 20, + E_ASSIGN_WorkBit7 = 21, + E_ASSIGN_WorkBit8 = 22, + + // Special values for Linear Current Output (Only for OUT1 on E5CC-U/E5GC May 2014+ / v2.2+ models, see Note *2 from page 5-9) + // Typically NOT applicable to Auxiliary Output Assignments (0x2E10-0x2E13) or OUT2 Assignment (0x2E07) + E_ASSIGN_SimpleTransfer_MV_Cooling = -5, // (FFFF FFFB) Simple MV transfer (cooling) + E_ASSIGN_SimpleTransfer_MV_Heating = -4, // (FFFF FFFC) Simple MV transfer (heating) + E_ASSIGN_SimpleTransfer_PV = -3, // (FFFF FFFD) Simple PV transfer + E_ASSIGN_SimpleTransfer_Ramp_SP = -2, // (FFFF FFFE) Simple SP transfer (during ramp) + E_ASSIGN_SimpleTransfer_SP = -1 // (FFFF FFFF) Simple SP transfer +}; + +// Parameters for Event Input Assignments (0x2E0A - 0x2E0F) [Initial Setting Level] +// Ref Manual Page 5-10 +enum class E5C_EventInputAssignment_Param : uint16_t +{ + E_EV_None = 0, // None + E_EV_RunStop = 1, // RUN/STOP + E_EV_AutoManualSwitch = 2, // Auto/Manual Switch + E_EV_ProgramStart = 3, // Program Start (Note *1 from pg 5-10: only if prog pattern is OFF) + E_EV_DirectReverseOperation = 4, // Direct/Reverse Operation switch + E_EV_SPModeSwitch = 5, // SP Mode Switch (Local/Remote) (Note *2 from pg 5-10: only if remote SP input) + E_EV_ATExecuteCancel_100 = 6, // 100% AT Execute/Cancel + E_EV_ATExecuteCancel_40 = 7, // 40% AT Execute/Cancel + E_EV_SettingChangeEnableDisable = 8, // Setting Change Enable/Disable + E_EV_CommsWritingEnableDisable = 9, // Communications Writing Enable/Disable (Note *3 from pg 5-10: only if external comms supported) + E_EV_AlarmLatchCancel = 10, // Alarm Latch Cancel + E_EV_MultiSP_Switch_Bit0 = 11, // Multi-SP No. Switch, Bit 0 + E_EV_MultiSP_Switch_Bit1 = 12, // Multi-SP No. Switch, Bit 1 + E_EV_MultiSP_Switch_Bit2 = 13, // Multi-SP No. Switch, Bit 2 +}; + +// Parameters for Alarm latch (0x2F01, 0x2F04, 0x2F07, 0x2F0A) - Use E5C_OnOff_Param + +// Parameters for Alarm Types (0x2F00, 0x2F03, 0x2F06, 0x2F09) +enum class E5C_AlarmType_Param : uint16_t +{ + E_AlarmFunctionOff = 0, // Alarm function OFF + E_UpperLowerLimit = 1, // Upper and lower-limit alarm + E_UpperLimit = 2, // Upper-limit alarm + E_LowerLimit = 3, // Lower-limit alarm + E_UpperLowerRange = 4, // Upper and lower-limit range alarm + E_UpperLowerLimitStandby = 5, // Upper and lower-limit alarm with standby sequence + E_UpperLimitStandby = 6, // Upper-limit alarm with standby sequence + E_LowerLimitStandby = 7, // Lower-limit alarm with standby sequence + E_AbsoluteUpperLimit = 8, // Absolute-value upper-limit alarm + E_AbsoluteLowerLimit = 9, // Absolute-value lower-limit alarm + E_AbsoluteUpperLimitStandby = 10, // Absolute-value upper-limit alarm with standby sequence + E_AbsoluteLowerLimitStandby = 11, // Absolute-value lower-limit alarm with standby sequence + E_LBA = 12, // LBA (Loop Burnout Alarm) (Not settable for Alarms 2, 3, 4) + E_PVChangeRate = 13, // PV change rate alarm + E_SPAbsoluteUpperLimit = 14, // SP absolute-value upper-limit alarm + E_SPAbsoluteLowerLimit = 15, // SP absolute-value lower-limit alarm + E_MVAbsoluteUpperLimit = 16, // MV absolute-value upper-limit alarm + E_MVAbsoluteLowerLimit = 17, // MV absolute-value lower-limit alarm + E_RSPAbsoluteUpperLimit = 18, // RSP absolute-value upper-limit alarm (Only with remote SP input) + E_RSPAbsoluteLowerLimit = 19, // RSP absolute-value lower-limit alarm (Only with remote SP input) +}; + +// Parameters for Standby Sequence Reset (0x2F0C) [Advanced Function Setting] +enum class E5C_StandbySequenceReset_Param : uint16_t +{ + E_ConditionA = 0, // Condition A (Reset when deviation enters non-alarm range OR power ON/Run mode start) + E_ConditionB = 1, // Condition B (Reset only when deviation enters non-alarm range) +}; + +// Parameters for Auxiliary Output Open/Close in Alarm (0x2F0D - 0x2F10) [Advanced Function Setting] +enum class E5C_AuxOutputOpenInAlarm_Param : uint16_t +{ + E_CloseInAlarm = 0, // Output CLOSES (becomes energized/active low depending on hardware) when the assigned alarm is ON + E_OpenInAlarm = 1, // Output OPENS (becomes de-energized/active high depending on hardware) when the assigned alarm is ON +}; + +// Parameters for PV/SP No. 1/2 Display Selection (0x3000, 0x3008) +enum class E5C_PVSP_DisplaySelection_Param : uint16_t +{ + E_NothingDisplayed = 0, + E_PV_SP = 1, // PV/SP (Normal display) + E_PV = 2, // PV Only + E_PV_SP_Char = 3, // PV/SP (Character display) + E_PV_SP_MV = 4, // PV/SP/Manipulated Value + E_PV_SP_MultiSP_No = 5, // PV/SP/Multi-SP No. + E_PV_SP_SoakTimeRemain = 6, // PV/SP/Soak time remain + E_PV_SP_RampSP = 7, // PV/SP/Ramp SP + E_PV_SP_AlarmValue1 = 8, // PV/SP/Alarm Value 1 +}; + +// Parameters for MV Display Selection (0x3001) +enum class E5C_MV_DisplaySelection_Param : uint16_t +{ + E_MV_Heating = 0, + E_MV_Cooling = 1, +}; + +// Special value for Auto Display Return Time (0x3003) +enum class E5C_AutoDisplayReturnTime_SpecialVal : uint16_t +{ + E_Off = 0, + // Values 1-99 represent seconds directly +}; + +// Parameters for Display Refresh Period (0x3004) +enum class E5C_DisplayRefreshPeriod_Param : uint16_t +{ + E_Off = 0, // No Refresh (?) - Check Manual for exact meaning + E_0_25s = 1, // 0.25 seconds + E_0_5s = 2, // 0.5 seconds + E_1_0s = 3, // 1.0 second +}; + +// Parameters for MV Display (0x300B) - Reuse E5C_OnOff_Param +// Parameters for Auto/Manual Select Addition (0x300F) - Reuse E5C_OnOff_Param + +// Parameters for PV/SV Status Display Function (0x3011, 0x3012) +enum class E5C_PV_StatusDisplayFunction_Param : uint16_t +{ + E_Off = 0, + E_Manual = 1, // Manual mode status + E_Stop = 2, // Stop status + E_Alarm1 = 3, // Alarm 1 status + E_Alarm2 = 4, // Alarm 2 status + E_Alarm3 = 5, // Alarm 3 status + E_Alarm4 = 6, // Alarm 4 status + E_Alarm1To4_OR_Status = 7, // OR of Alarm 1-4 status + E_HeaterAlarm = 8, // Heater alarm status (HB or HS) + E_StatusDisplayMsg = 9, // Status display message (E5GC only) +}; + + +// --- Enums for Status Register Bits (Refer to Manual Section 5-2) --- +// These are *examples* and need to be carefully verified against the specific E5C model manual. +// Define these if you need to decode individual status bits from registers like E_Status1, E_Status2_LowerWord, etc. + +/* +// Example bits for E_Status1 (0x2001) / E_Status1_StatusArea (0x2406) +enum class E5C_Status1_Bits : uint16_t +{ + E_S1_Alarm1_Output = (1 << 0), // Bit 0: Alarm 1 Output Status (0: OFF, 1: ON) + E_S1_Alarm2_Output = (1 << 1), // Bit 1: Alarm 2 Output Status + E_S1_Alarm3_Output = (1 << 2), // Bit 2: Alarm 3 Output Status + E_S1_Alarm4_Output = (1 << 3), // Bit 3: Alarm 4 Output Status (?) + E_S1_HeaterBurnout1 = (1 << 4), // Bit 4: Heater Burnout 1 Status + E_S1_HeaterBurnout2 = (1 << 5), // Bit 5: Heater Burnout 2 Status + E_S1_RunMode = (1 << 8), // Bit 8: RUN/STOP Status (0: STOP, 1: RUN) + E_S1_AutoTuning = (1 << 9), // Bit 9: AT Execution Status (0: OFF, 1: ON) + E_S1_TaskOperating = (1 << 10), // Bit 10: Task Operating Status (Programs) + E_S1_CommWritingDisabled= (1 << 11), // Bit 11: Communications Writing Disabled Status + E_S1_ManualMode = (1 << 12), // Bit 12: Auto/Manual Mode Status (0: Auto, 1: Manual) + E_S1_RemoteSP_Mode = (1 << 13), // Bit 13: SP Mode (0: Local, 1: Remote) + // ... add other relevant bits based on manual section 5-2 +}; +*/ + +/* +// Example bits for E_Status2_LowerWord (0x2408) +enum class E5C_Status2Lower_Bits : uint16_t +{ + E_S2L_RAM_Error = (1 << 0), // Bit 0: RAM Error + E_S2L_MemoryError = (1 << 1), // Bit 1: Memory Error (Non-volatile) + E_S2L_ADC_Error = (1 << 2), // Bit 2: A/D Converter Error + E_S2L_InputTypeError = (1 << 3), // Bit 3: Input Type Error + E_S2L_WatchdogTimeout = (1 << 4), // Bit 4: Watchdog Timer Timeout + E_S2L_OverrunError = (1 << 5), // Bit 5: Overrun Error (Communications?) + E_S2L_FramingError = (1 << 6), // Bit 6: Framing Error (Communications?) + E_S2L_ParityError = (1 << 7), // Bit 7: Parity Error (Communications?) + E_S2L_CommsTimeoutError = (1 << 8), // Bit 8: Communications Timeout Error + E_S2L_CommsError = (1 << 9), // Bit 9: Communications Error (General?) + E_S2L_CommsBufferOverrun = (1 << 10),// Bit 10: Communications Buffer Overrun Error + E_S2L_PowerSupplyFreqError = (1 << 11),// Bit 11: Power Supply Frequency Error + // ... add other relevant bits based on manual section 5-2 +}; + */ + +/* +// Example bits for E_Status2_UpperWord (0x2409) - Note: Bit numbering starts from 16 conceptually +enum class E5C_Status2Upper_Bits : uint16_t +{ + E_S2U_PV_InputError = (1 << 0), // Bit 16 (0 in upper word): PV Input Error (Over/Under Range or Disconnect) + E_S2U_RemoteSPInputError = (1 << 1), // Bit 17 (1 in upper word): Remote SP Input Error (Over/Under Range) + E_S2U_MVOutputError = (1 << 2), // Bit 18 (2 in upper word): MV Output Error + E_S2U_ExternalDIError = (1 << 3), // Bit 19 (3 in upper word): Error via External DI (Digital Input) + E_S2U_HeaterShortAlarm1 = (1 << 4), // Bit 20 (4 in upper word): HS (Heater Short) Alarm 1 Status + E_S2U_HeaterShortAlarm2 = (1 << 5), // Bit 21 (5 in upper word): HS (Heater Short) Alarm 2 Status + // E_S2U_TempSensorDisconnected= (1 << 6), // Bit 22 (6 in upper word): (Not explicitly listed, PV Input Error likely covers this) + // ... add other relevant bits based on manual section 5-2 +}; +*/ + +#endif // E5C_MODBUS_REGISTERS_HPP + + +#ifndef E5C_MODBUS_REGISTERS_HPP +#define E5C_MODBUS_REGISTERS_HPP + +#include // Required for uint16_t and int16_t + +// --- E5C Modbus Command Codes --- +// Represents the Command Codes used for various operations on the E5C device. +// These codes are typically written to a specific command register (often 0x0000) via Modbus. +enum class E5C_CommandCode : uint16_t +{ + E_CommunicationsWriting = 0x00, // Controls Modbus communications writing (enable/disable) + E_RunStop = 0x01, // Starts or stops control operation + E_MultiSP = 0x02, // Selects the target Set Point (SP) number (0-7) + E_ATExecuteCancel = 0x03, // Executes or cancels Auto-Tuning (AT) + E_WriteMode = 0x04, // Selects the write mode (Backup or RAM only) + E_SaveRAMData = 0x05, // Saves data from RAM to non-volatile memory (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_SoftwareReset = 0x06, // Performs a software reset (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_MoveToSetupArea1 = 0x07, // Moves operation to Setup Area 1 (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_MoveToProtectLevel = 0x08, // Moves operation to the Protect Level (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_AutoManualSwitch = 0x09, // Switches between Automatic and Manual control mode + E_ParameterInitialization = 0x0B, // Initializes parameters to default values (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_AlarmLatchCancel = 0x0C, // Cancels specified latched alarms + E_SPMode = 0x0D, // Selects Set Point (SP) mode (Local or Remote) + E_InvertDirectReverse = 0x0E, // Selects direct or reverse operation (Invert/Not Invert) via Command + E_ProgramStart = 0x11, // Starts or resets a program pattern +}; + +// --- Parameter Enums for Specific Command Codes --- +// These enums define the valid "Related Information" values (data) sent with specific commands. + +// Parameters for E_CommunicationsWriting (0x00) +enum class E5C_CommWrite_Param : uint16_t +{ + E_OffDisabled = 0x00, + E_OnEnabled = 0x01, +}; + +// Parameters for E_RunStop (0x01) +enum class E5C_RunStop_Param : uint16_t +{ + E_Run = 0x00, + E_Stop = 0x01, +}; + +// Parameters for E_MultiSP (0x02) +enum class E5C_MultiSP_Param : uint16_t +{ + E_SetPoint0 = 0x00, + E_SetPoint1 = 0x01, + E_SetPoint2 = 0x02, + E_SetPoint3 = 0x03, + E_SetPoint4 = 0x04, + E_SetPoint5 = 0x05, + E_SetPoint6 = 0x06, + E_SetPoint7 = 0x07, +}; + +// Parameters for E_ATExecuteCancel (0x03) +enum class E5C_ATExecuteCancel_Param : uint16_t +{ + E_ATCancel = 0x00, // Cancel Auto-Tuning + E_ATExecute100Pct = 0x01, // Execute 100% Auto-Tuning + E_ATEexecute40Pct = 0x02, // Execute 40% Auto-Tuning +}; + +// Parameters for E_WriteMode (0x04) +enum class E5C_WriteMode_Param : uint16_t +{ + E_Backup = 0x00, // Writes are backed up to non-volatile memory + E_RAMWriteMode = 0x01, // Writes affect RAM only +}; + +// Parameters for E_AutoManualSwitch (0x09) +enum class E5C_AutoManualSwitch_Param : uint16_t +{ + E_AutomaticMode = 0x00, + E_ManualMode = 0x01, +}; + +// Parameters for E_AlarmLatchCancel (0x0C) +enum class E5C_AlarmLatchCancel_Param : uint16_t +{ + E_Alarm1LatchCancel = 0x00, + E_Alarm2LatchCancel = 0x01, + E_Alarm3LatchCancel = 0x02, + E_HBAlarmLatchCancel = 0x03, // Heater Break alarm latch cancel + E_HSAlarmLatchCancel = 0x04, // Heater Short alarm latch cancel (?) + E_Alarm4LatchCancel = 0x05, // Alarm 4 latch cancel (?) + E_AllAlarmLatchCancel = 0x0F, // Cancel all latched alarms +}; + +// Parameters for E_SPMode (0x0D) +enum class E5C_SPMode_Param : uint16_t +{ + E_LocalSPMode = 0x00, + E_RemoteSPMode = 0x01, +}; + +// Parameters for E_InvertDirectReverse (0x0E) - Command based +enum class E5C_InvertDirectReverseCmd_Param : uint16_t +{ + E_NotInvert = 0x00, // Direct operation (Command parameter) + E_Invert = 0x01, // Reverse operation (Command parameter) +}; + +// Parameters for E_ProgramStart (0x11) +enum class E5C_ProgramStart_Param : uint16_t +{ + E_Reset = 0x00, // Reset the program/pattern + E_Start = 0x01, // Start the program/pattern +}; + +// Constant for commands where the related information is always 0x0000 +constexpr uint16_t E5C_COMMAND_PARAM_DEFAULT = 0x0000; +// This value should be used as the data when issuing commands like: +// - E_SaveRAMData +// - E_SoftwareReset +// - E_MoveToSetupArea1 +// - E_MoveToProtectLevel (Command, not the register 0x2504) +// - E_ParameterInitialization + + +// --- Generic Parameter Enums --- + +// Generic ON/OFF Parameter (Used by multiple registers) +enum class E5C_OnOff_Param : uint16_t +{ + E_Off = 0x00, + E_On = 0x01, +}; + + +// --- E5C Modbus Variable Area Registers (Holding Registers - Two-Byte Mode Addresses) --- +// Represents the addresses for reading/writing various parameters and status values. +// Based on the "Variable Area (Setting Range) List" sections of the Communications Manual (H175). +// Note: Addresses are based on the "Two-byte mode" column. +// Note: Ranges and accessibility levels (Operation, Adjustment, Initial, Advanced) are indicated where available. +enum class E5C_HoldingRegister : uint16_t +{ + // --- Operation Level Monitors (Addresses ~0x2000 - 0x20FF, Manual Page 5-1) --- + E_PV = 0x2000, // Process Value (Read-Only) + E_Status1 = 0x2001, // Status 1 (Bitfield, Read-Only, see manual section 5-2. Note *1, *2 apply) + E_InternalSetPoint = 0x2002, // Internal Set Point (Read-Only? Note *1 applies) + E_HeaterCurrent1Value = 0x2003, // Heater Current 1 Value Monitor (Read-Only, Range: 0.0 to 55.0 A) + E_MV_MonitorHeating = 0x2004, // Manipulated Value Monitor (Heating Output) (Read-Only, %: Range -5.0 to 105.0 or 0.0 to 105.0) + E_MV_MonitorCooling = 0x2005, // Manipulated Value Monitor (Cooling Output) (Read-Only, %: Range 0.0 to 105.0) + + // --- Primary Setting Parameters (Addresses ~0x2100 - 0x21FF, Manual Page 5-1) --- + E_SetPoint = 0x2103, // Set Point (SP) value (Writable & Readable, Primary SP setting, likely the *active* SP or SP0 in non-MultiSP mode) + E_AlarmValue1 = 0x2104, // Alarm Value 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueUpperLimit1 = 0x2105, // Alarm Value Upper Limit 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueLowerLimit1 = 0x2106, // Alarm Value Lower Limit 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValue2 = 0x2107, // Alarm Value 2 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueUpperLimit2 = 0x2108, // Alarm Value Upper Limit 2 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueLowerLimit2 = 0x2109, // Alarm Value Lower Limit 2 (Writable, Range: -1999 to 9999) [Main Setting] + // Add other registers from 0x21xx range if needed from other tables + + // --- Status/Monitor Parameters (Addresses ~0x2400 - 0x24FF, Manual Page 5-2) --- + E_PV_StatusArea = 0x2402, // Process Value (Read-Only status copy) + E_InternalSetPoint_StatusArea = 0x2403, // Internal Set Point (Read-Only status copy, Note *1) + E_MultiSP_NoMonitor = 0x2404, // Multi-SP No. Monitor (Which SP is currently active: 0 to 7, Read-Only) + E_Status1_StatusArea = 0x2406, // Status 1 (Read-Only status copy, Bitfield, Note *1, *2 apply) + E_StatusWord3_Leftmost = 0x2407, // Status Word 3 / Leftmost bits (Part of a larger status? Read-Only, Note *3 applies) + E_Status2_LowerWord = 0x2408, // Status 2 (Rightmost 16 bits / Lower Word. Read-Only, Bitfield, Note *1, *2 apply) + E_Status2_UpperWord = 0x2409, // Status 2 (Leftmost 16 bits / Upper Word. Read-Only, Bitfield, Note *1, *3 apply) + E_DecimalPointMonitor = 0x2410, // Decimal Point Monitor (Position for PV/SP display: 0 to 3, Read-Only) + // Add other registers from 0x24xx range if needed + + // --- Protect Level Parameters (Addresses ~0x2500 - 0x25FF, Ref Manual Page 5-3) --- + E_OperationAdjustmentProtect = 0x2500, // Sets Operation/Adjustment Protection Level (Writable, See E5C_OperationProtect_Param) + E_InitialSettingCommsProtect = 0x2501, // Sets Initial Setting/Communications Protection Level (Writable, See E5C_InitialProtect_Param) + E_SettingChangeProtect = 0x2502, // Enable/Disable Setting Change Protect via front panel (Writable, See E5C_SettingChangeProtect_Param) + E_PF_KeyProtect = 0x2503, // Enable/Disable PF Key Protect (Writable, Use E5C_OnOff_Param) + E_MoveToProtectLevelSetting = 0x2504, // Sets the password value needed to move to protect level (Writable, Range: -1999 to 9999 or FFFF831 to 270F) + E_PasswordToMoveToProtectLevel = 0x2505, // Write the password here to attempt moving to the protect level (Write-Only? Monitor value always 0) + E_ParameterMaskEnable = 0x2506, // Enable/Disable Parameter Mask (Writable, Use E5C_OnOff_Param) (Monitor value always 0) + E_ChangedParametersOnly = 0x2507, // Control Change Parameters setting (Writable, Use E5C_OnOff_Param) + + // --- Manual Control / Operation Level Parameters (Addresses ~0x2600 - 0x26FF, Ref Manual Page 5-3) --- + E_ManualMV = 0x2600, // Manual Manipulated Value (Writable in Manual Mode) (%: Ranges vary by model/setting) + E_SetPoint_OperationLevel = 0x2601, // Set Point visible/settable in Operation Level (Writable, Range: SP lower to SP upper limit) (Likely mirrors E_SetPoint=0x2103 but accessible differently) + E_RemoteSPMonitor = 0x2602, // Remote SP Monitor (Read-Only, Range: Remote SP lower limit -10% FS to Remote SP upper limit +10% FS) + E_HeaterCurrent1ValueMonitor_OpLevel = 0x2604, // Heater Current 1 Value Monitor (Read-Only, 0.0 to 55.0 A) (Likely same value as 0x2003) + E_MVMonitorHeating_OpLevel = 0x2605, // MV Monitor (Heating) (Read-Only, %: -5.0 to 105.0 or 0.0 to 105.0) (Likely same value as 0x2004) + E_MVMonitorCooling_OpLevel = 0x2606, // MV Monitor (Cooling) (Read-Only, %: 0.0 to 105.0) (Likely same value as 0x2005) + E_ValveOpeningMonitor = 0x2607, // Valve Opening Monitor (Read-Only, %: -10.0 to 110.0) + + // --- Adjustment Level Parameters (Addresses ~0x2700 - 0x27FF, Ref Manual Page 5-4/5-5) --- + E_ProportionalBandCooling = 0x2701, // Proportional Band (Cooling) (Writable, Range: 0.1 to 999.9) [Adjustment Level] + E_IntegralTimeCooling = 0x2702, // Integral Time (Cooling) (Writable, Range: 0 to 9999 s / 0.0 to 999.9 s depending on derivative unit) [Adjustment Level] + E_DerivativeTimeCooling = 0x2703, // Derivative Time (Cooling) (Writable, Same range as Integral) [Adjustment Level] + E_DeadBand = 0x2704, // Dead Band (Writable, Range: -199.9 to 999.9 for temp input / -19.99 to 99.99 for analog input) [Adjustment Level] + E_ManualResetValue = 0x2705, // Manual Reset Value (Writable, Range: 0.0 to 100.0 %) [Adjustment Level] + E_HysteresisHeating = 0x2706, // Hysteresis (Heating) (Writable, Range: 0.1 to 999.9 for temp input / 0.01 to 99.99 for analog input) [Adjustment Level] + E_HysteresisCooling = 0x2707, // Hysteresis (Cooling) (Writable, Same range as Heating) [Adjustment Level] + E_ControlPeriodHeating = 0x2708, // Control Period (Heating) (Writable, Special values or 1 to 99 s) [Initial Setting Level] (See E5C_ControlPeriod_SpecialVal) + E_ControlPeriodCooling = 0x2709, // Control Period (Cooling) (Writable, Special values or 1 to 99 s) [Initial Setting Level] (See E5C_ControlPeriod_SpecialVal) + E_PositionPropDeadBand = 0x270A, // Position Proportional Dead Band (Writable, Range: 0.1 to 10.0) [Adjustment Level] + E_OpenCloseHysteresis = 0x270B, // Open/Close Hysteresis (Writable, Range: 0.1 to 20.0) [Adjustment Level] + E_SPRampTimeUnit = 0x270C, // SP Ramp Time Unit (Writable) [Advanced Function Setting Level] (See E5C_SPRampTimeUnit_Param) + E_SPRampSetValue = 0x270D, // SP Ramp Set Value (Writable, 0=OFF or 1 to 9999 in units from 0x270C) [Adjustment Level] (See E5C_SPRampSetValue_SpecialVal) + E_SPRampFallValue = 0x270E, // SP Ramp Fall Value (Writable, -1=Same as Set, 0=OFF or 1 to 9999) [Adjustment Level] (See E5C_SPRampFallValue_SpecialVal) + E_MVAtStop = 0x270F, // MV (%) at Stop (Writable, Range: -5.0 to 105.0 / -105.0 to 105.0 varies) [Advanced Function Setting Level] + E_MVAtPVError = 0x2711, // MV (%) at PV Error (Writable, Range: -5.0 to 105.0 / -105.0 to 105.0 varies) [Advanced Function Setting Level] + E_MVChangeRateLimit = 0x2713, // MV Change Rate Limit (Writable, 0.0=OFF or 0.1 to 100.0 %/s) [Advanced Function Setting Level] + E_PVInputSlopeCoeff = 0x2718, // PV Input Slope Coefficient (Writable, Range: 0.001 to 9.999) [Advanced Function Setting Level] + E_HeaterCurrent1ValueMonitor_Adv = 0x271A, // Heater Current 1 Value Monitor (Read-Only, 0.0 to 55.0 A) [ Seems redundant, matches 0x2003/0x2604] + E_HeaterBurnoutDetection1 = 0x271B, // Heater Burnout Detection 1 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_LeakageCurrent1Monitor = 0x271C, // Leakage Current 1 Monitor (Read-Only, 0.0 to 55.0? Units not specified, likely mA) [Operation Level] + E_HSAlarm1 = 0x271D, // HS (Heater Short?) Alarm 1 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_ProcessValueInputShift = 0x2723, // Process Value Input Shift (Writable, Range: -1999 to 9999) [Adjustment Level] + E_HeaterCurrent2ValueMonitor = 0x2724, // Heater Current 2 Value Monitor (Read-Only, 0.0 to 55.0 A) [Operation Level] + E_HeaterBurnoutDetection2 = 0x2725, // Heater Burnout Detection 2 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_LeakageCurrent2Monitor = 0x2726, // Leakage Current 2 Monitor (Read-Only, 0.0 to 55.0 mA?) [Operation Level] + E_HSAlarm2 = 0x2727, // HS (Heater Short?) Alarm 2 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_SoakTimeRemain = 0x2728, // Soak Time Remain (Read-Only?, Range: 0 to 9999) [Operation Level] + E_SoakTime = 0x2729, // Soak Time (Writable, Range: 1 to 9999) [Adjustment Level] + E_WaitBand = 0x272A, // Wait Band (Writable, 0=OFF, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Adjustment Level] (See E5C_WaitBand_SpecialVal) + E_RemoteSPInputShift = 0x272B, // Remote SP Input Shift (Writable, Range: -1999 to 9999) [Advanced Function Setting Level] + E_RemoteSPInputSlopeCoeff = 0x272C, // Remote SP Input Slope Coefficient (Writable, Range: 0.001 to 9.999) [Advanced Function Setting Level] + + // --- Advanced Function Setting / Initial Setting Level Parameters (Addresses ~0x2800 - 0x2FFF, Ref Manual Page 5-5 to 5-13) --- + E_InputDigitalFilter = 0x2800, // Input Digital Filter (Writable, Range: 0.0 to 999.9) [Advanced Function Setting Level] + E_MovingAverageCount = 0x2804, // Moving Average Count (Writable) [Advanced Function Setting Level] (See E5C_MovingAverageCount_Param) + E_ExtractionOfSquareRootLowCutPoint = 0x2808, // Extraction of Square Root Low-cut Point (%) (Writable, Range: 0.0 to 100.0) [Adjustment Level] + + E_InputType = 0x2C00, // Input Type selection (Writable, See E5C_InputType_Param) [Initial Setting Level] + E_TemperatureUnit = 0x2C01, // Temperature Unit selection (Writable, See E5C_TemperatureUnit_Param) [Initial Setting Level] + E_ScalingLowerLimit = 0x2C09, // Scaling Lower Limit (Writable, Range: -1999 to Scaling Upper Limit - 1) [Advanced Function Setting Level] + E_ScalingUpperLimit = 0x2C0B, // Scaling Upper Limit (Writable, Range: Scaling Lower Limit + 1 to 9999) [Advanced Function Setting Level] + E_DecimalPoint = 0x2C0C, // Decimal Point position for PV/SP (Writable, 0-3) [Advanced Function Setting Level] (See E5C_DecimalPoint_Param) + E_RemoteSPUpperLimit = 0x2C0D, // Remote SP Upper Limit (Writable, Range depends on input type/scaling) [Advanced Function Setting Level] + E_RemoteSPLowerLimit = 0x2C0E, // Remote SP Lower Limit (Writable, Range depends on input type/scaling) [Advanced Function Setting Level] + E_PVDecimalPointDisplay = 0x2C0F, // PV Decimal Point Display ON/OFF (Writable, Use E5C_OnOff_Param) [Advanced Function Setting Level] + + E_ControlOutput1Signal = 0x2D03, // Control Output 1 Signal Type (Writable, See E5C_ControlOutputSignal_Param) [Initial Setting Level] (Only for Linear Output Models) + E_ControlOutput2Signal = 0x2D04, // Control Output 2 Signal Type (Writable, See E5C_ControlOutputSignal_Param) [Initial Setting Level] (Only for Linear Output Models) + E_SPUpperLimit = 0x2D0F, // SP Upper Limit (Writable, Range depends on input type/scaling) [Initial Setting Level] + E_SPLowerLimit = 0x2D10, // SP Lower Limit (Writable, Range depends on input type/scaling) [Initial Setting Level] + E_StandardOrHeatingCooling= 0x2D11, // Control Mode: Standard or Heating/Cooling (Writable, See E5C_ControlMode_Param) [Initial Setting Level] + E_DirectReverseOperation = 0x2D12, // Direct/Reverse operation setting (Writable, See E5C_DirectReverseOperation_Param) [Initial Setting Level] (Different from Command 0x0E) + E_CloseFloating = 0x2D13, // Close/Floating (position-proportional control) (Writable, See E5C_CloseFloating_Param) [Initial Setting Level] (Only for Position-proportional Models) + E_PidOnOff = 0x2D14, // PID/ON-OFF Control Selection (Writable, See E5C_PidOnOff_Param) [Initial Setting Level] + E_ST_Setting = 0x2D15, // Self-Tuning ON/OFF (Writable, Use E5C_OnOff_Param) [Initial Setting Level] + E_ProgramPattern = 0x2D16, // Program Pattern Execution State (Writable, See E5C_ProgramPattern_Param) [Initial Setting Level] + E_RemoteSPInputType = 0x2D18, // Remote SP Input range selection (Writable, See E5C_RemoteSPInputType_Param) [Advanced Function Setting Level] + E_MinimumOutputOnOffBand = 0x2D19, // Minimum Output ON/OFF Band (Writable, Range: 0.0 to 50.0 %) [Advanced Function Setting Level] + + E_TransferOutputType = 0x2E00, // Transfer Output Type (Writable, See E5C_TransferOutputType_Param) [Initial Setting Level] + E_TransferOutputSignal = 0x2E01, // Transfer Output Signal Range (Writable, See E5C_TransferOutputSignal_Param) [Initial Setting Level] + E_ExtractionSquareRootEnable = 0x2E24, // Extraction of Square Root Enable (Writable, Use E5C_OnOff_Param) [Initial Setting] + E_TRAVEL_TIME = 0x2E30, // Travel Time (Position-proportional models?) (Writable, Range: 1 to 999 s) [Initial Setting] + E_ControlOutput1Assignment = 0x2E06, // Assign function to Control Output 1 (Writable, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] + E_ControlOutput2Assignment = 0x2E07, // Assign function to Control Output 2 (Writable, See E5C_ControlOutputAssignment_Param, Note restrictions) [Advanced Function Setting] + E_EventInputAssignment1 = 0x2E0A, // Event Input Assignment 1 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_EventInputAssignment2 = 0x2E0B, // Event Input Assignment 2 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_EventInputAssignment3 = 0x2E0C, // Event Input Assignment 3 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_EventInputAssignment4 = 0x2E0D, // Event Input Assignment 4 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_EventInputAssignment5 = 0x2E0E, // Event Input Assignment 5 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_EventInputAssignment6 = 0x2E0F, // Event Input Assignment 6 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_AuxiliaryOutput1Assignment = 0x2E10, // Auxiliary Output 1 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] + E_AuxiliaryOutput2Assignment = 0x2E11, // Auxiliary Output 2 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] + E_AuxiliaryOutput3Assignment = 0x2E12, // Auxiliary Output 3 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] + E_AuxiliaryOutput4Assignment = 0x2E13, // Auxiliary Output 4 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] + E_TransferOutputScaledUpperLimit = 0x2E14, // Transfer Output Scaled Upper Limit (for selected Transfer Output Type) (Writable, Range -1999 to 9999) [Initial Setting Level] + E_TransferOutputScaledLowerLimit = 0x2E15, // Transfer Output Scaled Lower Limit (for selected Transfer Output Type) (Writable, Range -1999 to 9999) [Initial Setting Level] + E_SimpleTransferOutput1UpperLimit = 0x2E16, // Simple Transfer Output 1 Upper Limit (Writable, Range: -1999 to 9999) [Initial Setting Level] (Note *1: E5CC-U/E5GC linear current output only, v2.2+) + E_SimpleTransferOutput1LowerLimit = 0x2E17, // Simple Transfer Output 1 Lower Limit (Writable, Range: -1999 to 9999) [Initial Setting Level] (Note *1: E5CC-U/E5GC linear current output only, v2.2+) + + E_ALARM_1_TYPE = 0x2F00, // Alarm 1 Type (Writable, See E5C_AlarmType_Param) [Initial Setting] + E_ALARM_1_LATCH = 0x2F01, // Alarm 1 Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ALARM_1_HYSTERESIS = 0x2F02, // Alarm 1 Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Initial Setting] + E_ALARM_2_TYPE = 0x2F03, // Alarm 2 Type (Writable, See E5C_AlarmType_Param, Note: LBA_12 cannot be set) [Initial Setting] + E_ALARM_2_LATCH = 0x2F04, // Alarm 2 Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ALARM_2_HYSTERESIS = 0x2F05, // Alarm 2 Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Initial Setting] + E_ALARM_3_TYPE = 0x2F06, // Alarm 3 Type (Writable, See E5C_AlarmType_Param, Note: LBA_12 cannot be set) [Initial Setting] + E_ALARM_3_LATCH = 0x2F07, // Alarm 3 Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ALARM_3_HYSTERESIS = 0x2F08, // Alarm 3 Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Initial Setting] + E_ALARM_4_TYPE = 0x2F09, // Alarm 4 Type (Writable, See E5C_AlarmType_Param, Note: LBA_12 cannot be set) [Initial Setting] + E_ALARM_4_LATCH = 0x2F0A, // Alarm 4 Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ALARM_4_HYSTERESIS = 0x2F0B, // Alarm 4 Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Initial Setting] + E_STANDBY_SEQUENCE_RESET = 0x2F0C, // Standby Sequence Reset Condition (Writable, See E5C_StandbySequenceReset_Param) [Advanced Function Setting] + E_AUXILIARY_OUTPUT_1_OPEN_IN_ALARM = 0x2F0D, // Auxiliary Output 1 Behaviour in Alarm (Writable, See E5C_AuxOutputOpenInAlarm_Param) [Advanced Function Setting] + E_AUXILIARY_OUTPUT_2_OPEN_IN_ALARM = 0x2F0E, // Auxiliary Output 2 Behaviour in Alarm (Writable, See E5C_AuxOutputOpenInAlarm_Param) [Advanced Function Setting] + E_AUXILIARY_OUTPUT_3_OPEN_IN_ALARM = 0x2F0F, // Auxiliary Output 3 Behaviour in Alarm (Writable, See E5C_AuxOutputOpenInAlarm_Param) [Advanced Function Setting] + E_AUXILIARY_OUTPUT_4_OPEN_IN_ALARM = 0x2F10, // Auxiliary Output 4 Behaviour in Alarm (Writable, See E5C_AuxOutputOpenInAlarm_Param) [Advanced Function Setting] + E_ALARM_1_ON_DELAY = 0x2F11, // Alarm 1 ON delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_2_ON_DELAY = 0x2F12, // Alarm 2 ON delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_3_ON_DELAY = 0x2F13, // Alarm 3 ON delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_4_ON_DELAY = 0x2F14, // Alarm 4 ON delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_1_OFF_DELAY = 0x2F15, // Alarm 1 OFF delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_2_OFF_DELAY = 0x2F16, // Alarm 2 OFF delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_3_OFF_DELAY = 0x2F17, // Alarm 3 OFF delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_4_OFF_DELAY = 0x2F18, // Alarm 4 OFF delay (Writable, Range: 0 to 999 s) [Initial Setting] + + // --- Communications Settings / Display/Misc Settings (Addresses ~0x3000 - ..., Ref Manual Page 5-13/5-14) --- + E_PV_SP_NO1_DISPLAY_SELECTION = 0x3000, // PV/SP No. 1 Display Selection (Writable, See E5C_PVSP_DisplaySelection_Param) [Initial Setting] + E_MV_DISPLAY_SELECTION = 0x3001, // MV Display Selection (Writable, See E5C_MV_DisplaySelection_Param) [Initial Setting] + E_AUTO_DISPLAY_RETURN_TIME= 0x3003, // Automatic Display Return Time (Writable, Range 0=OFF, 1-99s) [Initial Setting] (See E5C_AutoDisplayReturnTime_SpecialVal) + E_DISPLAY_REFRESH_PERIOD = 0x3004, // Display Refresh Period (Writable, See E5C_DisplayRefreshPeriod_Param) [Initial Setting] + E_PV_SP_NO2_DISPLAY_SELECTION = 0x3008, // PV/SP No. 2 Display Selection (Writable, Range 0-8, See E5C_PVSP_DisplaySelection_Param) [Initial Setting] + E_DISPLAY_BRIGHTNESS = 0x300A, // Display Brightness (Writable, Range 1-3) [Initial Setting] + E_MV_DISPLAY = 0x300B, // MV Display ON/OFF (Writable, Use E5C_OnOff_Param) [Initial Setting] + E_MOVE_TO_PROTECT_LEVEL_TIME = 0x300C, // Move to Protect Level Time (Writable, Range 1-30 s) [Initial Setting] + E_AUTO_MANUAL_SELECT_ADDITION = 0x300F, // Auto/Manual Select Addition (Writable, Use E5C_OnOff_Param) [Initial Setting] + E_PV_STATUS_DISPLAY_FUNCTION = 0x3011, // PV Status Display Function (Writable, See E5C_PV_StatusDisplayFunction_Param) [Initial Setting] + E_SV_STATUS_DISPLAY_FUNCTION = 0x3012, // SV Status Display Function (Writable, Range 0-9, See E5C_PV_StatusDisplayFunction_Param) [Initial Setting] + + E_PROTOCOL_SETTING = 0x3100, // Protocol Setting (Writable, See E5C_ProtocolSetting_Param) [Communications Setting] + E_COMMUNICATIONS_UNIT_NO = 0x3101, // Communications Unit No. (Writable, Range 0-99) [Communications Setting] + E_COMMUNICATIONS_BAUD_RATE= 0x3102, // Communications Baud Rate (Writable, See E5C_BaudRate_Param) [Communications Setting] + E_COMMUNICATIONS_DATA_LENGTH = 0x3103, // Communications Data Length (Writable, See E5C_DataLength_Param) [Communications Setting] + E_COMMUNICATIONS_STOP_BITS= 0x3104, // Communications Stop Bits (Writable, See E5C_StopBits_Param) [Communications Setting] + E_COMMUNICATIONS_PARITY = 0x3105, // Communications Parity (Writable, See E5C_Parity_Param) [Communications Setting] + E_SEND_DATA_WAIT_TIME = 0x3106, // Send Data Wait Time (Writable, Range 0-99 ms?) [Communications Setting] + + // --- PF Key / Advanced Function Settings (Addresses ~0x3200 - ..., Ref Manual Page 5-14) --- + E_PF_SETTING = 0x3200, // PF Setting Assignment (Writable, See E5C_PF_Setting_Param) [Advanced Function Setting] + E_MONITOR_SETTING_ITEM_1 = 0x3202, // Monitor/Setting Item 1 (for PF Setting = 8) (Writable, Range 0-23, See E5C_MonitorSettingItem_Param) [Advanced Function Setting] + E_MONITOR_SETTING_ITEM_2 = 0x3203, // Monitor/Setting Item 2 (for PF Setting = 8) (Writable, Range 0-23, See E5C_MonitorSettingItem_Param) [Advanced Function Setting] + E_MONITOR_SETTING_ITEM_3 = 0x3204, // Monitor/Setting Item 3 (for PF Setting = 8) (Writable, Range 0-23, See E5C_MonitorSettingItem_Param) [Advanced Function Setting] + E_MONITOR_SETTING_ITEM_4 = 0x3205, // Monitor/Setting Item 4 (for PF Setting = 8) (Writable, Range 0-23, See E5C_MonitorSettingItem_Param) [Advanced Function Setting] + E_MONITOR_SETTING_ITEM_5 = 0x3206, // Monitor/Setting Item 5 (for PF Setting = 8) (Writable, Range 0-23, See E5C_MonitorSettingItem_Param) [Advanced Function Setting] + + // --- Operation Level Parameters (Duplicated Addresses? / Specific Uses) (Addresses ~0x2900 - 0x29FF, Ref Manual Page 5-6/5-7) --- + // These allow setting SPs and Alarm values within the Operation or Adjustment levels, potentially overriding the base settings (0x21xx) when active. + E_SP0_OperationLevel = 0x2900, // SP 0 Setting (Writable, Range: SP lower limit to SP upper limit) [Operation Level] (Likely same as E_SetPoint when SP 0 is selected) + E_AlarmValue1_OperationLevel = 0x2902, // Alarm Value 1 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValue1=0x2104) + E_AlarmValueUpperLimit1_OperationLevel = 0x2903, // Alarm Value Upper Limit 1 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValueUpperLimit1=0x2105) + E_AlarmValueLowerLimit1_OperationLevel = 0x2904, // Alarm Value Lower Limit 1 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValueLowerLimit1=0x2106) + E_AlarmValue2_OperationLevel = 0x2905, // Alarm Value 2 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValue2=0x2107) + E_AlarmValueUpperLimit2_OperationLevel = 0x2906, // Alarm Value Upper Limit 2 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValueUpperLimit2=0x2108) + E_AlarmValueLowerLimit2_OperationLevel = 0x2907, // Alarm Value Lower Limit 2 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValueLowerLimit2=0x2109) + E_AlarmValue3 = 0x2908, // Alarm Value 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueUpperLimit3 = 0x2909, // Alarm Value Upper Limit 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueLowerLimit3 = 0x290A, // Alarm Value Lower Limit 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValue4 = 0x290B, // Alarm Value 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueUpperLimit4 = 0x290C, // Alarm Value Upper Limit 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueLowerLimit4 = 0x290D, // Alarm Value Lower Limit 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_SP1_Setting = 0x290E, // SP 1 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 1) + E_SP2_Setting = 0x291C, // SP 2 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 2) + E_SP3_Setting = 0x292A, // SP 3 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 3) + E_SP4_Setting = 0x2938, // SP 4 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 4) + E_SP5_Setting = 0x2946, // SP 5 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 5) + E_SP6_Setting = 0x2954, // SP 6 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 6) + E_SP7_Setting = 0x2962, // SP 7 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 7) + + // --- Adjustment Level PID / MV Limits (Addresses ~0x2A00 - ..., Ref Manual Page 5-7) --- + E_ProportionalBand = 0x2A00, // Proportional Band (Heating, Standard, or Close Position Control) (Writable, Range: 0.1 to 999.9) [Adjustment Level] + E_IntegralTime = 0x2A01, // Integral Time (Heating, Standard, or Close Position Control) (Writable, Range depends on time unit setting) [Adjustment Level] + E_DerivativeTime = 0x2A02, // Derivative Time (Heating, Standard, or Close Position Control) (Writable, Range depends on time unit setting) [Adjustment Level] + E_MVUpperLimit = 0x2A05, // MV Upper Limit (%) (Writable, Range depends on control type, see manual) [Adjustment Level] + E_MVLowerLimit = 0x2A06, // MV Lower Limit (%) (Writable, Range depends on control type, see manual) [Adjustment Level] + + // NOTE on Status Registers (e.g., E_Status1, E_Status2_LowerWord, E_Status2_UpperWord): + // These are bitfields. Refer to the E5C Communications Manual Section 5-2 "Status" + // for details on individual bit meanings. Explicit enums for these bits can be added if needed (See examples below). + // Note *1: Not displayed on the Controller display. + // Note *2: In 2-byte mode, the rightmost 16 bits are usually read. + // Note *3: In 2-byte mode, the leftmost 16 bits are usually read. + // This suggests Status 2 (E_Status2_LowerWord/E_Status2_UpperWord) and potentially StatusWord3 (E_StatusWord3_Leftmost) + // might be parts of larger 32-bit status values if the controller supported 4-byte mode reads. +}; + +// --- Parameter Enums for Specific Holding Register Settings --- + +// Parameters for E_OperationAdjustmentProtect (0x2500) +enum class E5C_OperationProtect_Param : uint16_t +{ + E_NoRestrictions = 0x00, // No restrictions in operation and adjustment levels + E_AdjustLevelProhibited = 0x01, // Move to adjustment level is prohibited + E_DisplayChangePV_PVSP = 0x02, // Display and change of only "PV" and "PV/SP" allowed + E_DisplayOnlyPV_PVSP = 0x03, // Display of only "PV" and "PV/SP" allowed +}; + +// Parameters for E_InitialSettingCommsProtect (0x2501) +enum class E5C_InitialProtect_Param : uint16_t +{ + E_MoveToInitialAllowedAdvDisplayed = 0x00, // Move to initial/comms allowed. Adv func displayed. + E_MoveToInitialAllowedAdvNotDisplayed= 0x01, // Move to initial/comms allowed. Adv func not displayed. + E_MoveToInitialProhibited = 0x02, // Move to initial/comms prohibited. +}; + +// Parameters for E_SettingChangeProtect (0x2502) +enum class E5C_SettingChangeProtect_Param : uint16_t +{ + E_OffChangeAllowed = 0x00, // OFF (Changing settings via front panel allowed) + E_OnChangeProhibited = 0x01, // ON (Changing settings via front panel prohibited) +}; + +// Parameters for E_PF_KeyProtect (0x2503) - Reuse E5C_OnOff_Param +// Parameters for E_ParameterMaskEnable (0x2506) - Reuse E5C_OnOff_Param +// Parameters for E_ChangedParametersOnly (0x2507) - Reuse E5C_OnOff_Param + +// --- Special Values / Parameter Enums for specific registers --- + +// Special values for E_ControlPeriodHeating (0x2708) and E_ControlPeriodCooling (0x2709) +// Note: Positive values 1 to 99 represent seconds directly. Use raw integers for those. +enum class E5C_ControlPeriod_SpecialVal : int16_t // Use signed type for negative values +{ + E_Period_0_1_Sec = -2, // Represents 0.1 seconds + E_Period_0_2_Sec = -1, // Represents 0.2 seconds + E_Period_0_5_Sec = 0, // Represents 0.5 seconds + // Values 1..99 are direct seconds, do not add them here. Must be written as int16_t. +}; + +// Parameters for E_SPRampTimeUnit (0x270C) +enum class E5C_SPRampTimeUnit_Param : uint16_t +{ + E_EU_Per_Second = 0, // Unit is Engineering Unit / second + E_EU_Per_Minute = 1, // Unit is Engineering Unit / minute + E_EU_Per_Hour = 2, // Unit is Engineering Unit / hour +}; + +// Special value for E_SPRampSetValue (0x270D) +// Note: Positive values 1 to 9999 represent the rate directly. Use raw integers for those. +enum class E5C_SPRampSetValue_SpecialVal : uint16_t +{ + E_Off = 0, // SP Ramp Set is OFF + // Values 1..9999 are direct rates, do not add them here. Must be written as uint16_t. +}; + +// Special values for E_SPRampFallValue (0x270E) +// Note: Positive values 1 to 9999 represent the rate directly. Use raw integers for those. +enum class E5C_SPRampFallValue_SpecialVal : int16_t // Use signed type for negative value +{ + E_SameAsSet = -1, // Fall rate is same as Set rate (defined by 0x270D) + E_Off = 0, // SP Ramp Fall is OFF + // Values 1..9999 are direct rates, do not add them here. Must be written as int16_t. +}; + +// Special value for E_WaitBand (0x272A) +// Note: Positive values represent the band width directly (needs scaling based on Temp/Analog input). +// Use raw values for setting the width. +enum class E5C_WaitBand_SpecialVal : uint16_t +{ + E_Off = 0, // Wait Band function is OFF + // Other values represent the actual width. +}; + +// Parameters for E_MovingAverageCount (0x2804) +enum class E5C_MovingAverageCount_Param : uint16_t +{ + E_Off = 0, // Moving Average OFF + E_2_Times = 1, // Moving Average Count: 2 times + E_4_Times = 2, // Moving Average Count: 4 times + E_8_Times = 3, // Moving Average Count: 8 times + E_16_Times= 4, // Moving Average Count: 16 times + E_32_Times= 5, // Moving Average Count: 32 times +}; + +// Parameters for E_InputType (0x2C00) [Initial Setting Level] +enum class E5C_InputType_Param : uint16_t +{ + E_Pt_neg200_850C = 0, // Pt (-200 to 850°C / -300 to 1500°F) + E_Pt_neg199_500C_1DP = 1, // Pt (-199.9 to 500.0°C / -199.9 to 900.0°F) + E_Pt_0_100C_1DP = 2, // Pt (0.0 to 100.0°C / 0.0 to 210.0°F) + E_JPt_neg199_500C_1DP = 3, // JPt (-199.9 to 500.0°C / -199.9 to 900.0°F) + E_JPt_0_100C_1DP = 4, // JPt (0.0 to 100.0°C / 0.0 to 210.0°F) + E_K_neg200_1300C = 5, // K (-200 to 1300°C / -300 to 2300°F) + E_K_neg20_500C_1DP = 6, // K (-20.0 to 500.0°C / 0.0 to 900.0°F) + E_J_neg100_850C = 7, // J (-100 to 850°C / -100 to 1500°F) + E_J_neg20_400C_1DP = 8, // J (-20.0 to 400.0°C / 0.0 to 750.0°F) + E_T_neg200_400C = 9, // T (-200 to 400°C / -300 to 700°F) + E_T_neg199_400C_1DP = 10, // T (-199.9 to 400.0°C / -199.9 to 700.0°F) + E_E_neg200_600C = 11, // E (-200 to 600°C / -300 to 1100°F) + E_L_neg100_850C = 12, // L (-100 to 850°C / -100 to 1500°F) + E_U_neg200_400C = 13, // U (-200 to 400°C / -300 to 700°F) + E_U_neg199_400C_1DP = 14, // U (-199.9 to 400.0°C / -199.9 to 700.0°F) + E_N_neg200_1300C = 15, // N (-200 to 1300°C / -300 to 2300°F) + E_R_0_1700C = 16, // R (0 to 1700°C / 0 to 3000°F) + E_S_0_1700C = 17, // S (0 to 1700°C / 0 to 3000°F) + E_B_100_1800C = 18, // B (100 to 1800°C / 300 to 3200°F) + E_W_0_2300C = 19, // W (0 to 2,300°C / 0 to 3,200°F) + E_PLII_0_1300C = 20, // PLII (0 to 1,300°C / 0 to 2,300°F) + E_IR_K_140F_60C = 21, // Infrared temperature sensor (K 140°F/60°C) + E_IR_K_240F_120C = 22, // Infrared temperature sensor (K 240°F/120°C) + E_IR_K_280F_140C = 23, // Infrared temperature sensor (K 280°F/140°C) + E_IR_K_440F_220C = 24, // Infrared temperature sensor (K 440°F/220°C) + E_Analog_4_20MA = 25, // 4 to 20 mA + E_Analog_0_20MA = 26, // 0 to 20 mA + E_Analog_1_5V = 27, // 1 to 5 V + E_Analog_0_5V = 28, // 0 to 5 V + E_Analog_0_10V = 29, // 0 to 10 V + E_Analog_0_50MV = 30, // 0 to 50 mV (Only E5CC-U v2.2+ May 2014 or later) +}; + +// Parameters for E_TemperatureUnit (0x2C01) [Initial Setting Level] +enum class E5C_TemperatureUnit_Param : uint16_t +{ + E_Celsius = 0, // °C + E_Fahrenheit = 1, // °F +}; + +// Parameters for E_DecimalPoint (0x2C0C) [Advanced Function Setting Level] +enum class E5C_DecimalPoint_Param : uint16_t +{ + E_DP_0 = 0, // No decimal point (XXXX) + E_DP_1 = 1, // One decimal place (XXX.X) + E_DP_2 = 2, // Two decimal places (XX.XX) + E_DP_3 = 3, // Three decimal places (X.XXX) +}; + +// Parameters for E_PVDecimalPointDisplay (0x2C0F) - Reuse E5C_OnOff_Param + +// Parameters for E_ControlOutput1Signal (0x2D03) and E_ControlOutput2Signal (0x2D04) [Initial Setting Level] +// Applicable for models with Linear Current Output +enum class E5C_ControlOutputSignal_Param : uint16_t +{ + E_4_20MA = 0, // 4 to 20 mA + E_0_20MA = 1, // 0 to 20 mA + // Note: Check manual if voltage options exist for these registers on specific models +}; + +// Parameters for E_StandardOrHeatingCooling (0x2D11) [Initial Setting Level] +enum class E5C_ControlMode_Param : uint16_t +{ + E_Standard = 0, // Standard control (Heating OR Cooling, depending on wiring/config) + E_HeatingAndCooling = 1, // Heating and Cooling control +}; + +// Parameters for E_DirectReverseOperation (0x2D12) [Initial Setting Level] +enum class E5C_DirectReverseOperation_Param : uint16_t +{ + E_ReverseOperation = 0, // PID Reverse operation (e.g., heating - MV increases as PV decreases) + E_DirectOperation = 1, // PID Direct operation (e.g., cooling - MV increases as PV increases) +}; + +// Parameters for E_CloseFloating (0x2D13) [Initial Setting Level] +// Only for Position-proportional Models +enum class E5C_CloseFloating_Param : uint16_t +{ + E_Floating = 0, + E_Close = 1, +}; + +// Parameters for E_PidOnOff (0x2D14) [Initial Setting Level] +enum class E5C_PidOnOff_Param : uint16_t +{ + E_ONOFF_CONTROL = 0, // Use ON/OFF control + E_PID_CONTROL = 1, // Use 2-PID control (or standard PID if 2-PID not applicable) +}; + +// Parameters for E_ST_Setting (0x2D15) - Reuse E5C_OnOff_Param + +// Parameters for E_ProgramPattern (0x2D16) [Initial Setting Level] +enum class E5C_ProgramPattern_Param : uint16_t +{ + E_Off = 0, // Program Pattern function OFF (normal control) + E_Stop = 1, // Program Pattern STOP (reset or initial state) + E_Cont = 2, // Program Pattern CONTINUE (running) +}; + +// Parameters for E_RemoteSPInputType (0x2D18) [Advanced Function Setting Level] +enum class E5C_RemoteSPInputType_Param : uint16_t +{ + E_4_20MA = 0, + E_0_20MA = 1, + E_1_5V = 2, + E_0_5V = 3, + E_0_10V = 4, +}; + +// Parameters for E_TransferOutputType (0x2E00) [Initial Setting Level] +enum class E5C_TransferOutputType_Param : uint16_t +{ + E_Off = 0, // Transfer Output OFF + E_SetPoint = 1, // Output Set Point value + E_SetPointRamp = 2, // Output Set Point during SP ramp + E_PV = 3, // Output Process Value + E_MV_Heating = 4, // Output Manipulated Value (Heating) + E_MV_Cooling = 5, // Output Manipulated Value (Cooling) + E_ValveOpening = 6, // Output Valve Opening (% - Only for Position-proportional Models) +}; + +// Parameters for E_TransferOutputSignal (0x2E01) [Initial Setting Level] +enum class E5C_TransferOutputSignal_Param : uint16_t +{ + E_4_20MA = 0, + E_1_5V = 1, +}; + +// Parameters for E_ControlOutput1Assignment (0x2E06), E_ControlOutput2Assignment (0x2E07) +// and Auxiliary Output Assignments (0x2E10 - 0x2E13) +// Ref Manual Page 5-9 and 5-10. [Advanced Function Setting Level] +enum class E5C_ControlOutputAssignment_Param : int16_t // Use signed type for negative values +{ + E_ASSIGN_NotAssigned = 0, + E_ASSIGN_ControlOutputHeating = 1, + E_ASSIGN_ControlOutputCooling = 2, + E_ASSIGN_Alarm1 = 3, + E_ASSIGN_Alarm2 = 4, + E_ASSIGN_Alarm3 = 5, + E_ASSIGN_Alarm4 = 6, + E_ASSIGN_HeaterAlarm = 7, // General heater alarm? (Could be HB or HS depending on config) + E_ASSIGN_HB_Alarm = 8, // Heater Break alarm + E_ASSIGN_HS_Alarm = 9, // Heater Short alarm + E_ASSIGN_InputError = 10, // PV Input Error + E_ASSIGN_RSP_InputError = 11, // Remote SP input error + E_ASSIGN_ProgramEndOutput = 12, // Note *1 from page 5-9: P.END can only be set if Program Pattern (0x2D16) is set to OFF + E_ASSIGN_RUN_Output = 13, // Indicates RUN state + E_ASSIGN_IntegratedAlarm = 14, // OR combination of selected alarms + E_ASSIGN_WorkBit1 = 15, + E_ASSIGN_WorkBit2 = 16, + E_ASSIGN_WorkBit3 = 17, + E_ASSIGN_WorkBit4 = 18, + E_ASSIGN_WorkBit5 = 19, + E_ASSIGN_WorkBit6 = 20, + E_ASSIGN_WorkBit7 = 21, + E_ASSIGN_WorkBit8 = 22, + + // Special values for Linear Current Output (Only for OUT1 on E5CC-U/E5GC May 2014+ / v2.2+ models, see Note *2 from page 5-9) + // Typically NOT applicable to Auxiliary Output Assignments (0x2E10-0x2E13) or OUT2 Assignment (0x2E07) + E_ASSIGN_SimpleTransfer_MV_Cooling = -5, // (FFFF FFFB) Simple MV transfer (cooling) + E_ASSIGN_SimpleTransfer_MV_Heating = -4, // (FFFF FFFC) Simple MV transfer (heating) + E_ASSIGN_SimpleTransfer_PV = -3, // (FFFF FFFD) Simple PV transfer + E_ASSIGN_SimpleTransfer_Ramp_SP = -2, // (FFFF FFFE) Simple SP transfer (during ramp) + E_ASSIGN_SimpleTransfer_SP = -1 // (FFFF FFFF) Simple SP transfer +}; + +// Parameters for Event Input Assignments (0x2E0A - 0x2E0F) [Initial Setting Level] +// Ref Manual Page 5-10 +enum class E5C_EventInputAssignment_Param : uint16_t +{ + E_EV_None = 0, // None + E_EV_RunStop = 1, // RUN/STOP + E_EV_AutoManualSwitch = 2, // Auto/Manual Switch + E_EV_ProgramStart = 3, // Program Start (Note *1 from pg 5-10: only if prog pattern is OFF) + E_EV_DirectReverseOperation = 4, // Direct/Reverse Operation switch + E_EV_SPModeSwitch = 5, // SP Mode Switch (Local/Remote) (Note *2 from pg 5-10: only if remote SP input) + E_EV_ATExecuteCancel_100 = 6, // 100% AT Execute/Cancel + E_EV_ATExecuteCancel_40 = 7, // 40% AT Execute/Cancel + E_EV_SettingChangeEnableDisable = 8, // Setting Change Enable/Disable + E_EV_CommsWritingEnableDisable = 9, // Communications Writing Enable/Disable (Note *3 from pg 5-10: only if external comms supported) + E_EV_AlarmLatchCancel = 10, // Alarm Latch Cancel + E_EV_MultiSP_Switch_Bit0 = 11, // Multi-SP No. Switch, Bit 0 + E_EV_MultiSP_Switch_Bit1 = 12, // Multi-SP No. Switch, Bit 1 + E_EV_MultiSP_Switch_Bit2 = 13, // Multi-SP No. Switch, Bit 2 +}; + +// Parameters for Alarm Latch (0x2F01, 0x2F04, 0x2F07, 0x2F0A) - Reuse E5C_OnOff_Param + +// Parameters for Alarm Types (0x2F00, 0x2F03, 0x2F06, 0x2F09) +enum class E5C_AlarmType_Param : uint16_t +{ + E_AlarmFunctionOff = 0, // Alarm function OFF + E_UpperLowerLimit = 1, // Upper and lower-limit alarm + E_UpperLimit = 2, // Upper-limit alarm + E_LowerLimit = 3, // Lower-limit alarm + E_UpperLowerRange = 4, // Upper and lower-limit range alarm + E_UpperLowerLimitStandby = 5, // Upper and lower-limit alarm with standby sequence + E_UpperLimitStandby = 6, // Upper-limit alarm with standby sequence + E_LowerLimitStandby = 7, // Lower-limit alarm with standby sequence + E_AbsoluteUpperLimit = 8, // Absolute-value upper-limit alarm + E_AbsoluteLowerLimit = 9, // Absolute-value lower-limit alarm + E_AbsoluteUpperLimitStandby = 10, // Absolute-value upper-limit alarm with standby sequence + E_AbsoluteLowerLimitStandby = 11, // Absolute-value lower-limit alarm with standby sequence + E_LBA = 12, // LBA (Loop Burnout Alarm) (Not settable for Alarms 2, 3, 4) + E_PVChangeRate = 13, // PV change rate alarm + E_SPAbsoluteUpperLimit = 14, // SP absolute-value upper-limit alarm + E_SPAbsoluteLowerLimit = 15, // SP absolute-value lower-limit alarm + E_MVAbsoluteUpperLimit = 16, // MV absolute-value upper-limit alarm + E_MVAbsoluteLowerLimit = 17, // MV absolute-value lower-limit alarm + E_RSPAbsoluteUpperLimit = 18, // RSP absolute-value upper-limit alarm (Only with remote SP input) + E_RSPAbsoluteLowerLimit = 19, // RSP absolute-value lower-limit alarm (Only with remote SP input) +}; + +// Parameters for Standby Sequence Reset (0x2F0C) [Advanced Function Setting] +enum class E5C_StandbySequenceReset_Param : uint16_t +{ + E_ConditionA = 0, // Condition A (Reset when deviation enters non-alarm range OR power ON/Run mode start) + E_ConditionB = 1, // Condition B (Reset only when deviation enters non-alarm range) +}; + +// Parameters for Auxiliary Output Open/Close in Alarm (0x2F0D - 0x2F10) [Advanced Function Setting] +enum class E5C_AuxOutputOpenInAlarm_Param : uint16_t +{ + E_CloseInAlarm = 0, // Output CLOSES (becomes energized/active low depending on hardware) when the assigned alarm is ON + E_OpenInAlarm = 1, // Output OPENS (becomes de-energized/active high depending on hardware) when the assigned alarm is ON +}; + +// Parameters for PV/SP No. 1/2 Display Selection (0x3000, 0x3008) +enum class E5C_PVSP_DisplaySelection_Param : uint16_t +{ + E_NothingDisplayed = 0, + E_PV_SP = 1, // PV/SP (Normal display) + E_PV = 2, // PV Only + E_PV_SP_Char = 3, // PV/SP (Character display) + E_PV_SP_MV = 4, // PV/SP/Manipulated Value + E_PV_SP_MultiSP_No = 5, // PV/SP/Multi-SP No. + E_PV_SP_SoakTimeRemain = 6, // PV/SP/Soak time remain + E_PV_SP_RampSP = 7, // PV/SP/Ramp SP + E_PV_SP_AlarmValue1 = 8, // PV/SP/Alarm Value 1 +}; + +// Parameters for MV Display Selection (0x3001) +enum class E5C_MV_DisplaySelection_Param : uint16_t +{ + E_MV_Heating = 0, + E_MV_Cooling = 1, +}; + +// Special value for Auto Display Return Time (0x3003) +enum class E5C_AutoDisplayReturnTime_SpecialVal : uint16_t +{ + E_Off = 0, + // Values 1-99 represent seconds directly +}; + +// Parameters for Display Refresh Period (0x3004) +enum class E5C_DisplayRefreshPeriod_Param : uint16_t +{ + E_Off = 0, // No Refresh (?) - Check Manual for exact meaning + E_0_25s = 1, // 0.25 seconds + E_0_5s = 2, // 0.5 seconds + E_1_0s = 3, // 1.0 second +}; + +// Parameters for MV Display (0x300B) - Reuse E5C_OnOff_Param +// Parameters for Auto/Manual Select Addition (0x300F) - Reuse E5C_OnOff_Param + +// Parameters for PV/SV Status Display Function (0x3011, 0x3012) +enum class E5C_PV_StatusDisplayFunction_Param : uint16_t +{ + E_Off = 0, + E_Manual = 1, // Manual mode status + E_Stop = 2, // Stop status + E_Alarm1 = 3, // Alarm 1 status + E_Alarm2 = 4, // Alarm 2 status + E_Alarm3 = 5, // Alarm 3 status + E_Alarm4 = 6, // Alarm 4 status + E_Alarm1To4_OR_Status = 7, // OR of Alarm 1-4 status + E_HeaterAlarm = 8, // Heater alarm status (HB or HS) + E_StatusDisplayMsg = 9, // Status display message (E5GC only) +}; + + +// --- Communication Setting Parameters (from page 5-14) --- + +// Parameters for E_PROTOCOL_SETTING (0x3100) +enum class E5C_ProtocolSetting_Param : uint16_t +{ + E_CompoWayF = 0, + E_Modbus = 1, +}; + +// Parameters for E_COMMUNICATIONS_BAUD_RATE (0x3102) +enum class E5C_BaudRate_Param : uint16_t +{ + E_BR_9600 = 3, + E_BR_19200 = 4, + E_BR_38400 = 5, + E_BR_57600 = 6, +}; + +// Parameters for E_COMMUNICATIONS_DATA_LENGTH (0x3103) +enum class E5C_DataLength_Param : uint16_t +{ + E_DL_7_BITS = 7, + E_DL_8_BITS = 8, +}; + +// Parameters for E_COMMUNICATIONS_STOP_BITS (0x3104) +enum class E5C_StopBits_Param : uint16_t +{ + E_SB_1 = 1, + E_SB_2 = 2, +}; + +// Parameters for E_COMMUNICATIONS_PARITY (0x3105) +enum class E5C_Parity_Param : uint16_t +{ + E_None = 0, + E_Even = 1, + E_Odd = 2, +}; + +// Parameters for E_PF_SETTING (0x3200) [Advanced Function Setting] +enum class E5C_PF_Setting_Param : uint16_t +{ + E_Disabled = 0, // PF key function disabled + E_Run = 1, // RUN + E_Stop = 2, // STOP + E_RunStop = 3, // RUN/STOP toggle + E_ATExecuteCancel100 = 4, // Execute/cancel 100% AT + E_ATExecuteCancel40 = 5, // Execute/cancel 40% AT + E_AlarmLatchCancel = 6, // Cancel alarm latch + E_AutoManualSwitch = 7, // Auto/Manual switch + E_MonitorSettingItem = 8, // Switch Monitor/Setting Item + E_DigitShiftKey = 9, // Digit shift key +}; + +// Parameters for Monitor/Setting Items (0x3202 - 0x3206) [Advanced Function Setting] +// Used when E_PF_SETTING = E_MonitorSettingItem (8) +enum class E5C_MonitorSettingItem_Param : uint16_t +{ + E_ITEM_Disabled = 0, + E_ITEM_PV_SP_MultiSP = 1, + E_ITEM_PV_SP_MV = 2, + E_ITEM_PV_SP_SoakTimeRemain = 3, + E_ITEM_ProportionalBand = 4, + E_ITEM_IntegralTime = 5, + E_ITEM_DerivativeTime = 6, + E_ITEM_AlarmValue1 = 7, + E_ITEM_AlarmValueUpperLimit1 = 8, + E_ITEM_AlarmValueLowerLimit1 = 9, + E_ITEM_AlarmValue2 = 10, + E_ITEM_AlarmValueUpperLimit2 = 11, + E_ITEM_AlarmValueLowerLimit2 = 12, + E_ITEM_AlarmValue3 = 13, + E_ITEM_AlarmValueUpperLimit3 = 14, + E_ITEM_AlarmValueLowerLimit3 = 15, + E_ITEM_AlarmValue4 = 16, + E_ITEM_AlarmValueUpperLimit4 = 17, + E_ITEM_AlarmValueLowerLimit4 = 18, + E_ITEM_PV_SP_InternalSetPoint = 19, + E_ITEM_PV_SP_AlarmValue1_Alt = 20, // Different display? Name matches item 7 + E_ITEM_ProportionalBand_Cooling = 21, + E_ITEM_IntegralTime_Cooling = 22, + E_ITEM_DerivativeTime_Cooling = 23, +}; + + + +// --- Enums for Status Register Bits (Refer to Manual Section 5-2) --- +// These are *examples* and need to be carefully verified against the specific E5C model manual. +// Define these if you need to decode individual status bits from registers like E_Status1, E_Status2_LowerWord, etc. + +/* +// Example bits for E_Status1 (0x2001) / E_Status1_StatusArea (0x2406) +enum class E5C_Status1_Bits : uint16_t +{ + E_S1_Alarm1_Output = (1 << 0), // Bit 0: Alarm 1 Output Status (0: OFF, 1: ON) + E_S1_Alarm2_Output = (1 << 1), // Bit 1: Alarm 2 Output Status + E_S1_Alarm3_Output = (1 << 2), // Bit 2: Alarm 3 Output Status + E_S1_Alarm4_Output = (1 << 3), // Bit 3: Alarm 4 Output Status (?) + E_S1_HeaterBurnout1 = (1 << 4), // Bit 4: Heater Burnout 1 Status + E_S1_HeaterBurnout2 = (1 << 5), // Bit 5: Heater Burnout 2 Status + E_S1_RunMode = (1 << 8), // Bit 8: RUN/STOP Status (0: STOP, 1: RUN) + E_S1_AutoTuning = (1 << 9), // Bit 9: AT Execution Status (0: OFF, 1: ON) + E_S1_TaskOperating = (1 << 10), // Bit 10: Task Operating Status (Programs) + E_S1_CommWritingDisabled= (1 << 11), // Bit 11: Communications Writing Disabled Status + E_S1_ManualMode = (1 << 12), // Bit 12: Auto/Manual Mode Status (0: Auto, 1: Manual) + E_S1_RemoteSP_Mode = (1 << 13), // Bit 13: SP Mode (0: Local, 1: Remote) + // ... add other relevant bits based on manual section 5-2 +}; +*/ + +/* +// Example bits for E_Status2_LowerWord (0x2408) +enum class E5C_Status2Lower_Bits : uint16_t +{ + E_S2L_RAM_Error = (1 << 0), // Bit 0: RAM Error + E_S2L_MemoryError = (1 << 1), // Bit 1: Memory Error (Non-volatile) + E_S2L_ADC_Error = (1 << 2), // Bit 2: A/D Converter Error + E_S2L_InputTypeError = (1 << 3), // Bit 3: Input Type Error + E_S2L_WatchdogTimeout = (1 << 4), // Bit 4: Watchdog Timer Timeout + E_S2L_OverrunError = (1 << 5), // Bit 5: Overrun Error (Communications?) + E_S2L_FramingError = (1 << 6), // Bit 6: Framing Error (Communications?) + E_S2L_ParityError = (1 << 7), // Bit 7: Parity Error (Communications?) + E_S2L_CommsTimeoutError = (1 << 8), // Bit 8: Communications Timeout Error + E_S2L_CommsError = (1 << 9), // Bit 9: Communications Error (General?) + E_S2L_CommsBufferOverrun = (1 << 10),// Bit 10: Communications Buffer Overrun Error + E_S2L_PowerSupplyFreqError = (1 << 11),// Bit 11: Power Supply Frequency Error + // ... add other relevant bits based on manual section 5-2 +}; + */ + +/* +// Example bits for E_Status2_UpperWord (0x2409) - Note: Bit numbering starts from 16 conceptually +enum class E5C_Status2Upper_Bits : uint16_t +{ + E_S2U_PV_InputError = (1 << 0), // Bit 16 (0 in upper word): PV Input Error (Over/Under Range or Disconnect) + E_S2U_RemoteSPInputError = (1 << 1), // Bit 17 (1 in upper word): Remote SP Input Error (Over/Under Range) + E_S2U_MVOutputError = (1 << 2), // Bit 18 (2 in upper word): MV Output Error + E_S2U_ExternalDIError = (1 << 3), // Bit 19 (3 in upper word): Error via External DI (Digital Input) + E_S2U_HeaterShortAlarm1 = (1 << 4), // Bit 20 (4 in upper word): HS (Heater Short) Alarm 1 Status + E_S2U_HeaterShortAlarm2 = (1 << 5), // Bit 21 (5 in upper word): HS (Heater Short) Alarm 2 Status + // E_S2U_TempSensorDisconnected= (1 << 6), // Bit 22 (6 in upper word): (Not explicitly listed, PV Input Error likely covers this) + // ... add other relevant bits based on manual section 5-2 +}; +*/ + +#endif // E5C_MODBUS_REGISTERS_HPP + + +#ifndef E5C_MODBUS_REGISTERS_HPP +#define E5C_MODBUS_REGISTERS_HPP + +#include // Required for uint16_t and int16_t + +// --- E5C Modbus Command Codes --- +// Represents the Command Codes used for various operations on the E5C device. +// These codes are typically written to a specific command register (often 0x0000) via Modbus. +enum class E5C_CommandCode : uint16_t +{ + E_CommunicationsWriting = 0x00, // Controls Modbus communications writing (enable/disable) + E_RunStop = 0x01, // Starts or stops control operation + E_MultiSP = 0x02, // Selects the target Set Point (SP) number (0-7) + E_ATExecuteCancel = 0x03, // Executes or cancels Auto-Tuning (AT) + E_WriteMode = 0x04, // Selects the write mode (Backup or RAM only) + E_SaveRAMData = 0x05, // Saves data from RAM to non-volatile memory (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_SoftwareReset = 0x06, // Performs a software reset (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_MoveToSetupArea1 = 0x07, // Moves operation to Setup Area 1 (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_MoveToProtectLevel = 0x08, // Moves operation to the Protect Level (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_AutoManualSwitch = 0x09, // Switches between Automatic and Manual control mode + E_ParameterInitialization = 0x0B, // Initializes parameters to default values (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_AlarmLatchCancel = 0x0C, // Cancels specified latched alarms + E_SPMode = 0x0D, // Selects Set Point (SP) mode (Local or Remote) + E_InvertDirectReverse = 0x0E, // Selects direct or reverse operation (Invert/Not Invert) via Command + E_ProgramStart = 0x11, // Starts or resets a program pattern +}; + +// --- Parameter Enums for Specific Command Codes --- +// These enums define the valid "Related Information" values (data) sent with specific commands. + +// Parameters for E_CommunicationsWriting (0x00) +enum class E5C_CommWrite_Param : uint16_t +{ + E_OffDisabled = 0x00, + E_OnEnabled = 0x01, +}; + +// Parameters for E_RunStop (0x01) +enum class E5C_RunStop_Param : uint16_t +{ + E_Run = 0x00, + E_Stop = 0x01, +}; + +// Parameters for E_MultiSP (0x02) +enum class E5C_MultiSP_Param : uint16_t +{ + E_SetPoint0 = 0x00, + E_SetPoint1 = 0x01, + E_SetPoint2 = 0x02, + E_SetPoint3 = 0x03, + E_SetPoint4 = 0x04, + E_SetPoint5 = 0x05, + E_SetPoint6 = 0x06, + E_SetPoint7 = 0x07, +}; + +// Parameters for E_ATExecuteCancel (0x03) +enum class E5C_ATExecuteCancel_Param : uint16_t +{ + E_ATCancel = 0x00, // Cancel Auto-Tuning + E_ATExecute100Pct = 0x01, // Execute 100% Auto-Tuning + E_ATEexecute40Pct = 0x02, // Execute 40% Auto-Tuning +}; + +// Parameters for E_WriteMode (0x04) +enum class E5C_WriteMode_Param : uint16_t +{ + E_Backup = 0x00, // Writes are backed up to non-volatile memory + E_RAMWriteMode = 0x01, // Writes affect RAM only +}; + +// Parameters for E_AutoManualSwitch (0x09) +enum class E5C_AutoManualSwitch_Param : uint16_t +{ + E_AutomaticMode = 0x00, + E_ManualMode = 0x01, +}; + +// Parameters for E_AlarmLatchCancel (0x0C) +enum class E5C_AlarmLatchCancel_Param : uint16_t +{ + E_Alarm1LatchCancel = 0x00, + E_Alarm2LatchCancel = 0x01, + E_Alarm3LatchCancel = 0x02, + E_HBAlarmLatchCancel = 0x03, // Heater Break alarm latch cancel + E_HSAlarmLatchCancel = 0x04, // Heater Short alarm latch cancel (?) + E_Alarm4LatchCancel = 0x05, // Alarm 4 latch cancel (?) + E_AllAlarmLatchCancel = 0x0F, // Cancel all latched alarms +}; + +// Parameters for E_SPMode (0x0D) +enum class E5C_SPMode_Param : uint16_t +{ + E_LocalSPMode = 0x00, + E_RemoteSPMode = 0x01, +}; + +// Parameters for E_InvertDirectReverse (0x0E) - Command based +enum class E5C_InvertDirectReverseCmd_Param : uint16_t +{ + E_NotInvert = 0x00, // Direct operation (Command parameter) + E_Invert = 0x01, // Reverse operation (Command parameter) +}; + +// Parameters for E_ProgramStart (0x11) +enum class E5C_ProgramStart_Param : uint16_t +{ + E_Reset = 0x00, // Reset the program/pattern + E_Start = 0x01, // Start the program/pattern +}; + +// Constant for commands where the related information is always 0x0000 +constexpr uint16_t E5C_COMMAND_PARAM_DEFAULT = 0x0000; +// This value should be used as the data when issuing commands like: +// - E_SaveRAMData +// - E_SoftwareReset +// - E_MoveToSetupArea1 +// - E_MoveToProtectLevel (Command, not the register 0x2504) +// - E_ParameterInitialization + + +// --- Generic Parameter Enums --- + +// Generic ON/OFF Parameter (Used by multiple registers) +enum class E5C_OnOff_Param : uint16_t +{ + E_Off = 0x00, + E_On = 0x01, +}; + + +// --- E5C Modbus Variable Area Registers (Holding Registers - Two-Byte Mode Addresses) --- +// Represents the addresses for reading/writing various parameters and status values. +// Based on the "Variable Area (Setting Range) List" sections of the Communications Manual (H175). +// Note: Addresses are based on the "Two-byte mode" column. +// Note: Ranges and accessibility levels (Operation, Adjustment, Initial, Advanced) are indicated where available. +enum class E5C_HoldingRegister : uint16_t +{ + // --- Operation Level Monitors (Addresses ~0x2000 - 0x20FF, Manual Page 5-1) --- + E_PV = 0x2000, // Process Value (Read-Only) + E_Status1 = 0x2001, // Status 1 (Bitfield, Read-Only, see manual section 5-2. Note *1, *2 apply) + E_InternalSetPoint = 0x2002, // Internal Set Point (Read-Only? Note *1 applies) + E_HeaterCurrent1Value = 0x2003, // Heater Current 1 Value Monitor (Read-Only, Range: 0.0 to 55.0 A) + E_MV_MonitorHeating = 0x2004, // Manipulated Value Monitor (Heating Output) (Read-Only, %: Range -5.0 to 105.0 or 0.0 to 105.0) + E_MV_MonitorCooling = 0x2005, // Manipulated Value Monitor (Cooling Output) (Read-Only, %: Range 0.0 to 105.0) + + // --- Primary Setting Parameters (Addresses ~0x2100 - 0x21FF, Manual Page 5-1) --- + E_SetPoint = 0x2103, // Set Point (SP) value (Writable & Readable, Primary SP setting, likely the *active* SP or SP0 in non-MultiSP mode) + E_AlarmValue1 = 0x2104, // Alarm Value 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueUpperLimit1 = 0x2105, // Alarm Value Upper Limit 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueLowerLimit1 = 0x2106, // Alarm Value Lower Limit 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValue2 = 0x2107, // Alarm Value 2 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueUpperLimit2 = 0x2108, // Alarm Value Upper Limit 2 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueLowerLimit2 = 0x2109, // Alarm Value Lower Limit 2 (Writable, Range: -1999 to 9999) [Main Setting] + // Add other registers from 0x21xx range if needed from other tables + + // --- Status/Monitor Parameters (Addresses ~0x2400 - 0x24FF, Manual Page 5-2) --- + E_PV_StatusArea = 0x2402, // Process Value (Read-Only status copy) + E_InternalSetPoint_StatusArea = 0x2403, // Internal Set Point (Read-Only status copy, Note *1) + E_MultiSP_NoMonitor = 0x2404, // Multi-SP No. Monitor (Which SP is currently active: 0 to 7, Read-Only) + E_Status1_StatusArea = 0x2406, // Status 1 (Read-Only status copy, Bitfield, Note *1, *2 apply) + E_StatusWord3_Leftmost = 0x2407, // Status Word 3 / Leftmost bits (Part of a larger status? Read-Only, Note *3 applies) + E_Status2_LowerWord = 0x2408, // Status 2 (Rightmost 16 bits / Lower Word. Read-Only, Bitfield, Note *1, *2 apply) + E_Status2_UpperWord = 0x2409, // Status 2 (Leftmost 16 bits / Upper Word. Read-Only, Bitfield, Note *1, *3 apply) + E_DecimalPointMonitor = 0x2410, // Decimal Point Monitor (Position for PV/SP display: 0 to 3, Read-Only) + // Add other registers from 0x24xx range if needed + + // --- Protect Level Parameters (Addresses ~0x2500 - 0x25FF, Ref Manual Page 5-3) --- + E_OperationAdjustmentProtect = 0x2500, // Sets Operation/Adjustment Protection Level (Writable, See E5C_OperationProtect_Param) + E_InitialSettingCommsProtect = 0x2501, // Sets Initial Setting/Communications Protection Level (Writable, See E5C_InitialProtect_Param) + E_SettingChangeProtect = 0x2502, // Enable/Disable Setting Change Protect via front panel (Writable, See E5C_SettingChangeProtect_Param) + E_PF_KeyProtect = 0x2503, // Enable/Disable PF Key Protect (Writable, Use E5C_OnOff_Param) + E_MoveToProtectLevelSetting = 0x2504, // Sets the password value needed to move to protect level (Writable, Range: -1999 to 9999 or FFFF831 to 270F) + E_PasswordToMoveToProtectLevel = 0x2505, // Write the password here to attempt moving to the protect level (Write-Only? Monitor value always 0) + E_ParameterMaskEnable = 0x2506, // Enable/Disable Parameter Mask (Writable, Use E5C_OnOff_Param) (Monitor value always 0) + E_ChangedParametersOnly = 0x2507, // Control Change Parameters setting (Writable, Use E5C_OnOff_Param) + + // --- Manual Control / Operation Level Parameters (Addresses ~0x2600 - 0x26FF, Ref Manual Page 5-3) --- + E_ManualMV = 0x2600, // Manual Manipulated Value (Writable in Manual Mode) (%: Ranges vary by model/setting) + E_SetPoint_OperationLevel = 0x2601, // Set Point visible/settable in Operation Level (Writable, Range: SP lower to SP upper limit) (Likely mirrors E_SetPoint=0x2103 but accessible differently) + E_RemoteSPMonitor = 0x2602, // Remote SP Monitor (Read-Only, Range: Remote SP lower limit -10% FS to Remote SP upper limit +10% FS) + E_HeaterCurrent1ValueMonitor_OpLevel = 0x2604, // Heater Current 1 Value Monitor (Read-Only, 0.0 to 55.0 A) (Likely same value as 0x2003) + E_MVMonitorHeating_OpLevel = 0x2605, // MV Monitor (Heating) (Read-Only, %: -5.0 to 105.0 or 0.0 to 105.0) (Likely same value as 0x2004) + E_MVMonitorCooling_OpLevel = 0x2606, // MV Monitor (Cooling) (Read-Only, %: 0.0 to 105.0) (Likely same value as 0x2005) + E_ValveOpeningMonitor = 0x2607, // Valve Opening Monitor (Read-Only, %: -10.0 to 110.0) + + // --- Adjustment Level Parameters (Addresses ~0x2700 - 0x27FF, Ref Manual Page 5-4/5-5) --- + E_ProportionalBandCooling = 0x2701, // Proportional Band (Cooling) (Writable, Range: 0.1 to 999.9) [Adjustment Level] + E_IntegralTimeCooling = 0x2702, // Integral Time (Cooling) (Writable, Range: 0 to 9999 s / 0.0 to 999.9 s depending on derivative unit) [Adjustment Level] + E_DerivativeTimeCooling = 0x2703, // Derivative Time (Cooling) (Writable, Same range as Integral) [Adjustment Level] + E_DeadBand = 0x2704, // Dead Band (Writable, Range: -199.9 to 999.9 for temp input / -19.99 to 99.99 for analog input) [Adjustment Level] + E_ManualResetValue = 0x2705, // Manual Reset Value (Writable, Range: 0.0 to 100.0 %) [Adjustment Level] + E_HysteresisHeating = 0x2706, // Hysteresis (Heating) (Writable, Range: 0.1 to 999.9 for temp input / 0.01 to 99.99 for analog input) [Adjustment Level] + E_HysteresisCooling = 0x2707, // Hysteresis (Cooling) (Writable, Same range as Heating) [Adjustment Level] + E_ControlPeriodHeating = 0x2708, // Control Period (Heating) (Writable, Special values or 1 to 99 s) [Initial Setting Level] (See E5C_ControlPeriod_SpecialVal) + E_ControlPeriodCooling = 0x2709, // Control Period (Cooling) (Writable, Special values or 1 to 99 s) [Initial Setting Level] (See E5C_ControlPeriod_SpecialVal) + E_PositionPropDeadBand = 0x270A, // Position Proportional Dead Band (Writable, Range: 0.1 to 10.0) [Adjustment Level] + E_OpenCloseHysteresis = 0x270B, // Open/Close Hysteresis (Writable, Range: 0.1 to 20.0) [Adjustment Level] + E_SPRampTimeUnit = 0x270C, // SP Ramp Time Unit (Writable) [Advanced Function Setting Level] (See E5C_SPRampTimeUnit_Param) + E_SPRampSetValue = 0x270D, // SP Ramp Set Value (Writable, 0=OFF or 1 to 9999 in units from 0x270C) [Adjustment Level] (See E5C_SPRampSetValue_SpecialVal) + E_SPRampFallValue = 0x270E, // SP Ramp Fall Value (Writable, -1=Same as Set, 0=OFF or 1 to 9999) [Adjustment Level] (See E5C_SPRampFallValue_SpecialVal) + E_MVAtStop = 0x270F, // MV (%) at Stop (Writable, Range: -5.0 to 105.0 / -105.0 to 105.0 varies) [Advanced Function Setting Level] + E_MVAtPVError = 0x2711, // MV (%) at PV Error (Writable, Range: -5.0 to 105.0 / -105.0 to 105.0 varies) [Advanced Function Setting Level] + E_MVChangeRateLimit = 0x2713, // MV Change Rate Limit (Writable, 0.0=OFF or 0.1 to 100.0 %/s) [Advanced Function Setting Level] + E_PVInputSlopeCoeff = 0x2718, // PV Input Slope Coefficient (Writable, Range: 0.001 to 9.999) [Advanced Function Setting Level] + E_HeaterCurrent1ValueMonitor_Adv = 0x271A, // Heater Current 1 Value Monitor (Read-Only, 0.0 to 55.0 A) [ Seems redundant, matches 0x2003/0x2604] + E_HeaterBurnoutDetection1 = 0x271B, // Heater Burnout Detection 1 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_LeakageCurrent1Monitor = 0x271C, // Leakage Current 1 Monitor (Read-Only, 0.0 to 55.0? Units not specified, likely mA) [Operation Level] + E_HSAlarm1 = 0x271D, // HS (Heater Short?) Alarm 1 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_ProcessValueInputShift = 0x2723, // Process Value Input Shift (Writable, Range: -1999 to 9999) [Adjustment Level] + E_HeaterCurrent2ValueMonitor = 0x2724, // Heater Current 2 Value Monitor (Read-Only, 0.0 to 55.0 A) [Operation Level] + E_HeaterBurnoutDetection2 = 0x2725, // Heater Burnout Detection 2 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_LeakageCurrent2Monitor = 0x2726, // Leakage Current 2 Monitor (Read-Only, 0.0 to 55.0 mA?) [Operation Level] + E_HSAlarm2 = 0x2727, // HS (Heater Short?) Alarm 2 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_SoakTimeRemain = 0x2728, // Soak Time Remain (Read-Only?, Range: 0 to 9999) [Operation Level] + E_SoakTime = 0x2729, // Soak Time (Writable, Range: 1 to 9999) [Adjustment Level] + E_WaitBand = 0x272A, // Wait Band (Writable, 0=OFF, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Adjustment Level] (See E5C_WaitBand_SpecialVal) + E_RemoteSPInputShift = 0x272B, // Remote SP Input Shift (Writable, Range: -1999 to 9999) [Advanced Function Setting Level] + E_RemoteSPInputSlopeCoeff = 0x272C, // Remote SP Input Slope Coefficient (Writable, Range: 0.001 to 9.999) [Advanced Function Setting Level] + + // --- Advanced Function Setting / Initial Setting Level Parameters (Addresses ~0x2800 - 0x2FFF, Ref Manual Page 5-5 to 5-13) --- + E_InputDigitalFilter = 0x2800, // Input Digital Filter (Writable, Range: 0.0 to 999.9) [Advanced Function Setting Level] + E_MovingAverageCount = 0x2804, // Moving Average Count (Writable) [Advanced Function Setting Level] (See E5C_MovingAverageCount_Param) + E_ExtractionOfSquareRootLowCutPoint = 0x2808, // Extraction of Square Root Low-cut Point (%) (Writable, Range: 0.0 to 100.0) [Adjustment Level] + + E_InputType = 0x2C00, // Input Type selection (Writable, See E5C_InputType_Param) [Initial Setting Level] + E_TemperatureUnit = 0x2C01, // Temperature Unit selection (Writable, See E5C_TemperatureUnit_Param) [Initial Setting Level] + E_ScalingLowerLimit = 0x2C09, // Scaling Lower Limit (Writable, Range: -1999 to Scaling Upper Limit - 1) [Advanced Function Setting Level] + E_ScalingUpperLimit = 0x2C0B, // Scaling Upper Limit (Writable, Range: Scaling Lower Limit + 1 to 9999) [Advanced Function Setting Level] + E_DecimalPoint = 0x2C0C, // Decimal Point position for PV/SP (Writable, 0-3) [Advanced Function Setting Level] (See E5C_DecimalPoint_Param) + E_RemoteSPUpperLimit = 0x2C0D, // Remote SP Upper Limit (Writable, Range depends on input type/scaling) [Advanced Function Setting Level] + E_RemoteSPLowerLimit = 0x2C0E, // Remote SP Lower Limit (Writable, Range depends on input type/scaling) [Advanced Function Setting Level] + E_PVDecimalPointDisplay = 0x2C0F, // PV Decimal Point Display ON/OFF (Writable, Use E5C_OnOff_Param) [Advanced Function Setting Level] + + E_ControlOutput1Signal = 0x2D03, // Control Output 1 Signal Type (Writable, See E5C_ControlOutputSignal_Param) [Initial Setting Level] (Only for Linear Output Models) + E_ControlOutput2Signal = 0x2D04, // Control Output 2 Signal Type (Writable, See E5C_ControlOutputSignal_Param) [Initial Setting Level] (Only for Linear Output Models) + E_SPUpperLimit = 0x2D0F, // SP Upper Limit (Writable, Range depends on input type/scaling) [Initial Setting Level] + E_SPLowerLimit = 0x2D10, // SP Lower Limit (Writable, Range depends on input type/scaling) [Initial Setting Level] + E_StandardOrHeatingCooling= 0x2D11, // Control Mode: Standard or Heating/Cooling (Writable, See E5C_ControlMode_Param) [Initial Setting Level] + E_DirectReverseOperation = 0x2D12, // Direct/Reverse operation setting (Writable, See E5C_DirectReverseOperation_Param) [Initial Setting Level] (Different from Command 0x0E) + E_CloseFloating = 0x2D13, // Close/Floating (position-proportional control) (Writable, See E5C_CloseFloating_Param) [Initial Setting Level] (Only for Position-proportional Models) + E_PidOnOff = 0x2D14, // PID/ON-OFF Control Selection (Writable, See E5C_PidOnOff_Param) [Initial Setting Level] + E_ST_Setting = 0x2D15, // Self-Tuning ON/OFF (Writable, Use E5C_OnOff_Param) [Initial Setting Level] + E_ProgramPattern = 0x2D16, // Program Pattern Execution State (Writable, See E5C_ProgramPattern_Param) [Initial Setting Level] + E_RemoteSPInputType = 0x2D18, // Remote SP Input range selection (Writable, See E5C_RemoteSPInputType_Param) [Advanced Function Setting Level] + E_MinimumOutputOnOffBand = 0x2D19, // Minimum Output ON/OFF Band (Writable, Range: 0.0 to 50.0 %) [Advanced Function Setting Level] + + E_TransferOutputType = 0x2E00, // Transfer Output Type (Writable, See E5C_TransferOutputType_Param) [Initial Setting Level] + E_TransferOutputSignal = 0x2E01, // Transfer Output Signal Range (Writable, See E5C_TransferOutputSignal_Param) [Initial Setting Level] + E_ExtractionSquareRootEnable = 0x2E24, // Extraction of Square Root Enable (Writable, Use E5C_OnOff_Param) [Initial Setting] + E_TRAVEL_TIME = 0x2E30, // Travel Time (Position-proportional models?) (Writable, Range: 1 to 999 s) [Initial Setting] + E_ControlOutput1Assignment = 0x2E06, // Assign function to Control Output 1 (Writable, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] + E_ControlOutput2Assignment = 0x2E07, // Assign function to Control Output 2 (Writable, See E5C_ControlOutputAssignment_Param, Note restrictions) [Advanced Function Setting] + E_EventInputAssignment1 = 0x2E0A, // Event Input Assignment 1 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_EventInputAssignment2 = 0x2E0B, // Event Input Assignment 2 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_EventInputAssignment3 = 0x2E0C, // Event Input Assignment 3 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_EventInputAssignment4 = 0x2E0D, // Event Input Assignment 4 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_EventInputAssignment5 = 0x2E0E, // Event Input Assignment 5 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_EventInputAssignment6 = 0x2E0F, // Event Input Assignment 6 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_AuxiliaryOutput1Assignment = 0x2E10, // Auxiliary Output 1 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] + E_AuxiliaryOutput2Assignment = 0x2E11, // Auxiliary Output 2 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] + E_AuxiliaryOutput3Assignment = 0x2E12, // Auxiliary Output 3 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] + E_AuxiliaryOutput4Assignment = 0x2E13, // Auxiliary Output 4 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] + E_TransferOutputScaledUpperLimit = 0x2E14, // Transfer Output Scaled Upper Limit (for selected Transfer Output Type) (Writable, Range -1999 to 9999) [Initial Setting Level] + E_TransferOutputScaledLowerLimit = 0x2E15, // Transfer Output Scaled Lower Limit (for selected Transfer Output Type) (Writable, Range -1999 to 9999) [Initial Setting Level] + E_SimpleTransferOutput1UpperLimit = 0x2E16, // Simple Transfer Output 1 Upper Limit (Writable, Range: -1999 to 9999) [Initial Setting Level] (Note *1: E5CC-U/E5GC linear current output only, v2.2+) + E_SimpleTransferOutput1LowerLimit = 0x2E17, // Simple Transfer Output 1 Lower Limit (Writable, Range: -1999 to 9999) [Initial Setting Level] (Note *1: E5CC-U/E5GC linear current output only, v2.2+) + + E_ALARM_1_TYPE = 0x2F00, // Alarm 1 Type (Writable, See E5C_AlarmType_Param) [Initial Setting] + E_ALARM_1_LATCH = 0x2F01, // Alarm 1 Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ALARM_1_HYSTERESIS = 0x2F02, // Alarm 1 Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Initial Setting] + E_ALARM_2_TYPE = 0x2F03, // Alarm 2 Type (Writable, See E5C_AlarmType_Param, Note: LBA_12 cannot be set) [Initial Setting] + E_ALARM_2_LATCH = 0x2F04, // Alarm 2 Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ALARM_2_HYSTERESIS = 0x2F05, // Alarm 2 Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Initial Setting] + E_ALARM_3_TYPE = 0x2F06, // Alarm 3 Type (Writable, See E5C_AlarmType_Param, Note: LBA_12 cannot be set) [Initial Setting] + E_ALARM_3_LATCH = 0x2F07, // Alarm 3 Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ALARM_3_HYSTERESIS = 0x2F08, // Alarm 3 Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Initial Setting] + E_ALARM_4_TYPE = 0x2F09, // Alarm 4 Type (Writable, See E5C_AlarmType_Param, Note: LBA_12 cannot be set) [Initial Setting] + E_ALARM_4_LATCH = 0x2F0A, // Alarm 4 Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ALARM_4_HYSTERESIS = 0x2F0B, // Alarm 4 Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Initial Setting] + E_STANDBY_SEQUENCE_RESET = 0x2F0C, // Standby Sequence Reset Condition (Writable, See E5C_StandbySequenceReset_Param) [Advanced Function Setting] + E_AUXILIARY_OUTPUT_1_OPEN_IN_ALARM = 0x2F0D, // Auxiliary Output 1 Behaviour in Alarm (Writable, See E5C_AuxOutputOpenInAlarm_Param) [Advanced Function Setting] + E_AUXILIARY_OUTPUT_2_OPEN_IN_ALARM = 0x2F0E, // Auxiliary Output 2 Behaviour in Alarm (Writable, See E5C_AuxOutputOpenInAlarm_Param) [Advanced Function Setting] + E_AUXILIARY_OUTPUT_3_OPEN_IN_ALARM = 0x2F0F, // Auxiliary Output 3 Behaviour in Alarm (Writable, See E5C_AuxOutputOpenInAlarm_Param) [Advanced Function Setting] + E_AUXILIARY_OUTPUT_4_OPEN_IN_ALARM = 0x2F10, // Auxiliary Output 4 Behaviour in Alarm (Writable, See E5C_AuxOutputOpenInAlarm_Param) [Advanced Function Setting] + E_ALARM_1_ON_DELAY = 0x2F11, // Alarm 1 ON delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_2_ON_DELAY = 0x2F12, // Alarm 2 ON delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_3_ON_DELAY = 0x2F13, // Alarm 3 ON delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_4_ON_DELAY = 0x2F14, // Alarm 4 ON delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_1_OFF_DELAY = 0x2F15, // Alarm 1 OFF delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_2_OFF_DELAY = 0x2F16, // Alarm 2 OFF delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_3_OFF_DELAY = 0x2F17, // Alarm 3 OFF delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_4_OFF_DELAY = 0x2F18, // Alarm 4 OFF delay (Writable, Range: 0 to 999 s) [Initial Setting] + + // --- Communications Settings / Display/Misc Settings (Addresses ~0x3000 - ..., Ref Manual Page 5-13/5-14) --- + E_PV_SP_NO1_DISPLAY_SELECTION = 0x3000, // PV/SP No. 1 Display Selection (Writable, See E5C_PVSP_DisplaySelection_Param) [Initial Setting] + E_MV_DISPLAY_SELECTION = 0x3001, // MV Display Selection (Writable, See E5C_MV_DisplaySelection_Param) [Initial Setting] + E_AUTO_DISPLAY_RETURN_TIME= 0x3003, // Automatic Display Return Time (Writable, Range 0=OFF, 1-99s) [Initial Setting] (See E5C_AutoDisplayReturnTime_SpecialVal) + E_DISPLAY_REFRESH_PERIOD = 0x3004, // Display Refresh Period (Writable, See E5C_DisplayRefreshPeriod_Param) [Initial Setting] + E_PV_SP_NO2_DISPLAY_SELECTION = 0x3008, // PV/SP No. 2 Display Selection (Writable, Range 0-8, See E5C_PVSP_DisplaySelection_Param) [Initial Setting] + E_DISPLAY_BRIGHTNESS = 0x300A, // Display Brightness (Writable, Range 1-3) [Initial Setting] + E_MV_DISPLAY = 0x300B, // MV Display ON/OFF (Writable, Use E5C_OnOff_Param) [Initial Setting] + E_MOVE_TO_PROTECT_LEVEL_TIME = 0x300C, // Move to Protect Level Time (Writable, Range 1-30 s) [Initial Setting] + E_AUTO_MANUAL_SELECT_ADDITION = 0x300F, // Auto/Manual Select Addition (Writable, Use E5C_OnOff_Param) [Initial Setting] + E_PV_STATUS_DISPLAY_FUNCTION = 0x3011, // PV Status Display Function (Writable, See E5C_PV_StatusDisplayFunction_Param) [Initial Setting] + E_SV_STATUS_DISPLAY_FUNCTION = 0x3012, // SV Status Display Function (Writable, Range 0-9, See E5C_PV_StatusDisplayFunction_Param) [Initial Setting] + + E_PROTOCOL_SETTING = 0x3100, // Protocol Setting (Writable, See E5C_ProtocolSetting_Param) [Communications Setting] + E_COMMUNICATIONS_UNIT_NO = 0x3101, // Communications Unit No. (Writable, Range 0-99) [Communications Setting] + E_COMMUNICATIONS_BAUD_RATE= 0x3102, // Communications Baud Rate (Writable, See E5C_BaudRate_Param) [Communications Setting] + E_COMMUNICATIONS_DATA_LENGTH = 0x3103, // Communications Data Length (Writable, See E5C_DataLength_Param) [Communications Setting] + E_COMMUNICATIONS_STOP_BITS= 0x3104, // Communications Stop Bits (Writable, See E5C_StopBits_Param) [Communications Setting] + E_COMMUNICATIONS_PARITY = 0x3105, // Communications Parity (Writable, See E5C_Parity_Param) [Communications Setting] + E_SEND_DATA_WAIT_TIME = 0x3106, // Send Data Wait Time (Writable, Range 0-99 ms) [Communications Setting] + + // --- PF Key / Advanced Function Settings (Addresses ~0x3200 - ..., Ref Manual Page 5-14) --- + E_PF_SETTING = 0x3200, // PF Setting Assignment (Writable, See E5C_PF_Setting_Param) [Advanced Function Setting] + E_MONITOR_SETTING_ITEM_1 = 0x3202, // Monitor/Setting Item 1 (for PF Setting = 8) (Writable, Range 0-23, See E5C_MonitorSettingItem_Param) [Advanced Function Setting] + E_MONITOR_SETTING_ITEM_2 = 0x3203, // Monitor/Setting Item 2 (for PF Setting = 8) (Writable, Range 0-23, See E5C_MonitorSettingItem_Param) [Advanced Function Setting] + E_MONITOR_SETTING_ITEM_3 = 0x3204, // Monitor/Setting Item 3 (for PF Setting = 8) (Writable, Range 0-23, See E5C_MonitorSettingItem_Param) [Advanced Function Setting] + E_MONITOR_SETTING_ITEM_4 = 0x3205, // Monitor/Setting Item 4 (for PF Setting = 8) (Writable, Range 0-23, See E5C_MonitorSettingItem_Param) [Advanced Function Setting] + E_MONITOR_SETTING_ITEM_5 = 0x3206, // Monitor/Setting Item 5 (for PF Setting = 8) (Writable, Range 0-23, See E5C_MonitorSettingItem_Param) [Advanced Function Setting] + + // --- Advanced Function Settings Continued (Addresses ~0x3300 - ..., Ref Manual Page 5-15) --- + E_SP_TRACKING = 0x3301, // SP Tracking (Writeable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_PV_DEAD_BAND = 0x3304, // PV Dead Band (Writeable, Range: H'0000 to H'270F or 0 to 9999) [Advanced Function Setting] + E_COLD_JUNCTION_COMPENSATION = 0x3305, // Cold Junction Compensation Method (Writeable, Use E5C_OnOff_Param. Note: Setting to OFF may require specific conditions) [Advanced Function Setting] + E_INTEGRAL_DERIVATIVE_TIME_UNIT = 0x3309, // Integral/Derivative Time Unit (Writeable, See E5C_IntegralDerivativeTimeUnit_Param) [Advanced Function Setting] + E_ALPHA = 0x330A, // Alpha (α) parameter (Writeable, Range: H'0000 to H'0064 or 0.00 to 1.00) [Advanced Function Setting] + E_MANUAL_OUTPUT_METHOD = 0x330C, // Manual Output Method (Writeable, See E5C_ManualOutputMethod_Param) [Advanced Function Setting] + E_MANUAL_MV_INITIAL_VALUE = 0x330D, // Manual MV Initial Value (Writeable, Range: -5.0 to 105.0 or -105.0 to 105.0, depends on control type) [Advanced Function Setting] + E_AT_CALCULATED_GAIN = 0x330F, // AT Calculated Gain value (Writeable, Range: H'0001 to H'0064 or 0.1 to 10.0) [Advanced Function Setting] + E_AT_HYSTERESIS = 0x3310, // AT Hysteresis (Writeable, Range: 0.1 to 999.9 Temp / 0.01 to 9.99 Analog) [Advanced Function Setting] + E_LIMIT_CYCLE_MV_AMPLITUDE= 0x3311, // Limit Cycle MV Amplitude (Writeable, Range: H'0032 to H'01F4 or 5.0 to 50.0) [Advanced Function Setting] + E_HEATER_BURNOUT_LATCH = 0x3314, // Heater Burnout Latch (Writeable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_HEATER_BURNOUT_HYSTERESIS = 0x3315, // Heater Burnout Hysteresis (Writeable, Range: H'0001 to H'01F4 or 0.1 to 50.0 A) [Advanced Function Setting] + E_HS_ALARM_LATCH = 0x3316, // HS Alarm Latch (Writeable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_HS_ALARM_HYSTERESIS = 0x3317, // HS Alarm Hysteresis (Writeable, Range: H'0001 to H'01F4 or 0.1 to 50.0 A) [Advanced Function Setting] + E_NUMBER_OF_MULTI_SP_POINTS = 0x331B, // Number of Multi-SP Points (Writeable, See E5C_NumberOfMultiSP_Param) [Advanced Function Setting] + E_HB_ON_OFF = 0x331C, // HB (Heater Break?) ON/OFF (Writeable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_INTEGRATED_ALARM_ASSIGNMENT = 0x331E, // Integrated Alarm Assignment (Bitmask) (Writeable, Range: H'0000 to H'00FF or 0 to 255) [Advanced Function Setting] + E_MV_AT_STOP_AND_ERROR_ADDITION = 0x3320, // MV at Stop and Error Addition (Writeable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ST_STABLE_RANGE = 0x3321, // ST Stable Range (Writeable, Range: H'0001 to H'270F or 0.1 to 999.9) [Advanced Function Setting] + E_RT_FLAG = 0x3322, // RT Flag ( unclear meaning, from "RT" ) (Writeable, Use E5C_OnOff_Param. Note: Valid only with temp input) [Advanced Function Setting] + E_HS_ALARM_USE = 0x3323, // HS Alarm Use (Writeable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_LBA_DETECTION_TIME = 0x3324, // LBA Detection Time (Writeable, Range: H'0000 to H'270F or 0 to 9999 s?) [Advanced Function Setting] + E_LBA_LEVEL = 0x3325, // LBA Level (Writeable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Advanced Function Setting] + E_LBA_BAND = 0x3326, // LBA Band (Writeable, Range: 0.0 to 999.9 Temp / 0.00 to 99.99 Analog) [Advanced Function Setting] + E_SOAK_TIME_UNIT = 0x3327, // Soak Time Unit (Writeable, See E5C_SoakTimeUnit_Param) [Advanced Function Setting] + E_ALARM_SP_SELECTION = 0x3328, // Alarm SP Selection (Writeable, See E5C_AlarmSPSelection_Param) [Advanced Function Setting] + E_REMOTE_SP_ENABLE = 0x3329, // Remote SP Enable (Writeable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_MANUAL_MV_LIMIT_ENABLE = 0x332B, // Manual MV Limit Enable (Writeable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_DIRECT_SETTING_POS_PROP_MV = 0x332C, // Direct Setting of Position Proportional MV (Writeable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_PV_RATE_OF_CHANGE_CALC_PERIOD = 0x332D, // PV Rate of Change Calculation Period (Writeable, Range: H'0001 to H'03E7 or 1 to 999) [Advanced Function Setting] + + // --- Operation Level Parameters (Duplicated Addresses? / Specific Uses) (Addresses ~0x2900 - 0x29FF, Ref Manual Page 5-6/5-7) --- + // These allow setting SPs and Alarm values within the Operation or Adjustment levels, potentially overriding the base settings (0x21xx) when active. + E_SP0_OperationLevel = 0x2900, // SP 0 Setting (Writable, Range: SP lower limit to SP upper limit) [Operation Level] (Likely same as E_SetPoint when SP 0 is selected) + E_AlarmValue1_OperationLevel = 0x2902, // Alarm Value 1 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValue1=0x2104) + E_AlarmValueUpperLimit1_OperationLevel = 0x2903, // Alarm Value Upper Limit 1 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValueUpperLimit1=0x2105) + E_AlarmValueLowerLimit1_OperationLevel = 0x2904, // Alarm Value Lower Limit 1 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValueLowerLimit1=0x2106) + E_AlarmValue2_OperationLevel = 0x2905, // Alarm Value 2 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValue2=0x2107) + E_AlarmValueUpperLimit2_OperationLevel = 0x2906, // Alarm Value Upper Limit 2 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValueUpperLimit2=0x2108) + E_AlarmValueLowerLimit2_OperationLevel = 0x2907, // Alarm Value Lower Limit 2 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValueLowerLimit2=0x2109) + E_AlarmValue3 = 0x2908, // Alarm Value 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueUpperLimit3 = 0x2909, // Alarm Value Upper Limit 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueLowerLimit3 = 0x290A, // Alarm Value Lower Limit 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValue4 = 0x290B, // Alarm Value 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueUpperLimit4 = 0x290C, // Alarm Value Upper Limit 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueLowerLimit4 = 0x290D, // Alarm Value Lower Limit 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_SP1_Setting = 0x290E, // SP 1 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 1) + E_SP2_Setting = 0x291C, // SP 2 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 2) + E_SP3_Setting = 0x292A, // SP 3 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 3) + E_SP4_Setting = 0x2938, // SP 4 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 4) + E_SP5_Setting = 0x2946, // SP 5 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 5) + E_SP6_Setting = 0x2954, // SP 6 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 6) + E_SP7_Setting = 0x2962, // SP 7 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 7) + + // --- Adjustment Level PID / MV Limits (Addresses ~0x2A00 - ..., Ref Manual Page 5-7) --- + E_ProportionalBand = 0x2A00, // Proportional Band (Heating, Standard, or Close Position Control) (Writable, Range: 0.1 to 999.9) [Adjustment Level] + E_IntegralTime = 0x2A01, // Integral Time (Heating, Standard, or Close Position Control) (Writable, Range depends on time unit setting) [Adjustment Level] + E_DerivativeTime = 0x2A02, // Derivative Time (Heating, Standard, or Close Position Control) (Writable, Range depends on time unit setting) [Adjustment Level] + E_MVUpperLimit = 0x2A05, // MV Upper Limit (%) (Writable, Range depends on control type, see manual) [Adjustment Level] + E_MVLowerLimit = 0x2A06, // MV Lower Limit (%) (Writable, Range depends on control type, see manual) [Adjustment Level] + + // NOTE on Status Registers (e.g., E_Status1, E_Status2_LowerWord, E_Status2_UpperWord): + // These are bitfields. Refer to the E5C Communications Manual Section 5-2 "Status" + // for details on individual bit meanings. Explicit enums for these bits can be added if needed (See examples below). + // Note *1: Not displayed on the Controller display. + // Note *2: In 2-byte mode, the rightmost 16 bits are usually read. + // Note *3: In 2-byte mode, the leftmost 16 bits are usually read. + // This suggests Status 2 (E_Status2_LowerWord/E_Status2_UpperWord) and potentially StatusWord3 (E_StatusWord3_Leftmost) + // might be parts of larger 32-bit status values if the controller supported 4-byte mode reads. +}; + +// --- Parameter Enums for Specific Holding Register Settings --- + +// Parameters for E_OperationAdjustmentProtect (0x2500) +enum class E5C_OperationProtect_Param : uint16_t +{ + E_NoRestrictions = 0x00, // No restrictions in operation and adjustment levels + E_AdjustLevelProhibited = 0x01, // Move to adjustment level is prohibited + E_DisplayChangePV_PVSP = 0x02, // Display and change of only "PV" and "PV/SP" allowed + E_DisplayOnlyPV_PVSP = 0x03, // Display of only "PV" and "PV/SP" allowed +}; + +// Parameters for E_InitialSettingCommsProtect (0x2501) +enum class E5C_InitialProtect_Param : uint16_t +{ + E_MoveToInitialAllowedAdvDisplayed = 0x00, // Move to initial/comms allowed. Adv func displayed. + E_MoveToInitialAllowedAdvNotDisplayed= 0x01, // Move to initial/comms allowed. Adv func not displayed. + E_MoveToInitialProhibited = 0x02, // Move to initial/comms prohibited. +}; + +// Parameters for E_SettingChangeProtect (0x2502) +enum class E5C_SettingChangeProtect_Param : uint16_t +{ + E_OffChangeAllowed = 0x00, // OFF (Changing settings via front panel allowed) + E_OnChangeProhibited = 0x01, // ON (Changing settings via front panel prohibited) +}; + +// Parameters for E_PF_KeyProtect (0x2503) - Reuse E5C_OnOff_Param +// Parameters for E_ParameterMaskEnable (0x2506) - Reuse E5C_OnOff_Param +// Parameters for E_ChangedParametersOnly (0x2507) - Reuse E5C_OnOff_Param + +// --- Special Values / Parameter Enums for specific registers --- + +// Special values for E_ControlPeriodHeating (0x2708) and E_ControlPeriodCooling (0x2709) +// Note: Positive values 1 to 99 represent seconds directly. Use raw integers for those. +enum class E5C_ControlPeriod_SpecialVal : int16_t // Use signed type for negative values +{ + E_Period_0_1_Sec = -2, // Represents 0.1 seconds + E_Period_0_2_Sec = -1, // Represents 0.2 seconds + E_Period_0_5_Sec = 0, // Represents 0.5 seconds + // Values 1..99 are direct seconds, do not add them here. Must be written as int16_t. +}; + +// Parameters for E_SPRampTimeUnit (0x270C) +enum class E5C_SPRampTimeUnit_Param : uint16_t +{ + E_EU_Per_Second = 0, // Unit is Engineering Unit / second + E_EU_Per_Minute = 1, // Unit is Engineering Unit / minute + E_EU_Per_Hour = 2, // Unit is Engineering Unit / hour +}; + +// Special value for E_SPRampSetValue (0x270D) +// Note: Positive values 1 to 9999 represent the rate directly. Use raw integers for those. +enum class E5C_SPRampSetValue_SpecialVal : uint16_t +{ + E_Off = 0, // SP Ramp Set is OFF + // Values 1..9999 are direct rates, do not add them here. Must be written as uint16_t. +}; + +// Special values for E_SPRampFallValue (0x270E) +// Note: Positive values 1 to 9999 represent the rate directly. Use raw integers for those. +enum class E5C_SPRampFallValue_SpecialVal : int16_t // Use signed type for negative value +{ + E_SameAsSet = -1, // Fall rate is same as Set rate (defined by 0x270D) + E_Off = 0, // SP Ramp Fall is OFF + // Values 1..9999 are direct rates, do not add them here. Must be written as int16_t. +}; + +// Special value for E_WaitBand (0x272A) +// Note: Positive values represent the band width directly (needs scaling based on Temp/Analog input). +// Use raw values for setting the width. +enum class E5C_WaitBand_SpecialVal : uint16_t +{ + E_Off = 0, // Wait Band function is OFF + // Other values represent the actual width. +}; + +// Parameters for E_MovingAverageCount (0x2804) +enum class E5C_MovingAverageCount_Param : uint16_t +{ + E_Off = 0, // Moving Average OFF + E_2_Times = 1, // Moving Average Count: 2 times + E_4_Times = 2, // Moving Average Count: 4 times + E_8_Times = 3, // Moving Average Count: 8 times + E_16_Times= 4, // Moving Average Count: 16 times + E_32_Times= 5, // Moving Average Count: 32 times +}; + +// Parameters for E_InputType (0x2C00) [Initial Setting Level] +enum class E5C_InputType_Param : uint16_t +{ + E_Pt_neg200_850C = 0, // Pt (-200 to 850°C / -300 to 1500°F) + E_Pt_neg199_500C_1DP = 1, // Pt (-199.9 to 500.0°C / -199.9 to 900.0°F) + E_Pt_0_100C_1DP = 2, // Pt (0.0 to 100.0°C / 0.0 to 210.0°F) + E_JPt_neg199_500C_1DP = 3, // JPt (-199.9 to 500.0°C / -199.9 to 900.0°F) + E_JPt_0_100C_1DP = 4, // JPt (0.0 to 100.0°C / 0.0 to 210.0°F) + E_K_neg200_1300C = 5, // K (-200 to 1300°C / -300 to 2300°F) + E_K_neg20_500C_1DP = 6, // K (-20.0 to 500.0°C / 0.0 to 900.0°F) + E_J_neg100_850C = 7, // J (-100 to 850°C / -100 to 1500°F) + E_J_neg20_400C_1DP = 8, // J (-20.0 to 400.0°C / 0.0 to 750.0°F) + E_T_neg200_400C = 9, // T (-200 to 400°C / -300 to 700°F) + E_T_neg199_400C_1DP = 10, // T (-199.9 to 400.0°C / -199.9 to 700.0°F) + E_E_neg200_600C = 11, // E (-200 to 600°C / -300 to 1100°F) + E_L_neg100_850C = 12, // L (-100 to 850°C / -100 to 1500°F) + E_U_neg200_400C = 13, // U (-200 to 400°C / -300 to 700°F) + E_U_neg199_400C_1DP = 14, // U (-199.9 to 400.0°C / -199.9 to 700.0°F) + E_N_neg200_1300C = 15, // N (-200 to 1300°C / -300 to 2300°F) + E_R_0_1700C = 16, // R (0 to 1700°C / 0 to 3000°F) + E_S_0_1700C = 17, // S (0 to 1700°C / 0 to 3000°F) + E_B_100_1800C = 18, // B (100 to 1800°C / 300 to 3200°F) + E_W_0_2300C = 19, // W (0 to 2,300°C / 0 to 3,200°F) + E_PLII_0_1300C = 20, // PLII (0 to 1,300°C / 0 to 2,300°F) + E_IR_K_140F_60C = 21, // Infrared temperature sensor (K 140°F/60°C) + E_IR_K_240F_120C = 22, // Infrared temperature sensor (K 240°F/120°C) + E_IR_K_280F_140C = 23, // Infrared temperature sensor (K 280°F/140°C) + E_IR_K_440F_220C = 24, // Infrared temperature sensor (K 440°F/220°C) + E_Analog_4_20MA = 25, // 4 to 20 mA + E_Analog_0_20MA = 26, // 0 to 20 mA + E_Analog_1_5V = 27, // 1 to 5 V + E_Analog_0_5V = 28, // 0 to 5 V + E_Analog_0_10V = 29, // 0 to 10 V + E_Analog_0_50MV = 30, // 0 to 50 mV (Only E5CC-U v2.2+ May 2014 or later) +}; + +// Parameters for E_TemperatureUnit (0x2C01) [Initial Setting Level] +enum class E5C_TemperatureUnit_Param : uint16_t +{ + E_Celsius = 0, // °C + E_Fahrenheit = 1, // °F +}; + +// Parameters for E_DecimalPoint (0x2C0C) [Advanced Function Setting Level] +enum class E5C_DecimalPoint_Param : uint16_t +{ + E_DP_0 = 0, // No decimal point (XXXX) + E_DP_1 = 1, // One decimal place (XXX.X) + E_DP_2 = 2, // Two decimal places (XX.XX) + E_DP_3 = 3, // Three decimal places (X.XXX) +}; + +// Parameters for E_PVDecimalPointDisplay (0x2C0F) - Reuse E5C_OnOff_Param + +// Parameters for E_ControlOutput1Signal (0x2D03) and E_ControlOutput2Signal (0x2D04) [Initial Setting Level] +// Applicable for models with Linear Current Output +enum class E5C_ControlOutputSignal_Param : uint16_t +{ + E_4_20MA = 0, // 4 to 20 mA + E_0_20MA = 1, // 0 to 20 mA + // Note: Check manual if voltage options exist for these registers on specific models +}; + +// Parameters for E_StandardOrHeatingCooling (0x2D11) [Initial Setting Level] +enum class E5C_ControlMode_Param : uint16_t +{ + E_Standard = 0, // Standard control (Heating OR Cooling, depending on wiring/config) + E_HeatingAndCooling = 1, // Heating and Cooling control +}; + +// Parameters for E_DirectReverseOperation (0x2D12) [Initial Setting Level] +enum class E5C_DirectReverseOperation_Param : uint16_t +{ + E_ReverseOperation = 0, // PID Reverse operation (e.g., heating - MV increases as PV decreases) + E_DirectOperation = 1, // PID Direct operation (e.g., cooling - MV increases as PV increases) +}; + +// Parameters for E_CloseFloating (0x2D13) [Initial Setting Level] +// Only for Position-proportional Models +enum class E5C_CloseFloating_Param : uint16_t +{ + E_Floating = 0, + E_Close = 1, +}; + +// Parameters for E_PidOnOff (0x2D14) [Initial Setting Level] +enum class E5C_PidOnOff_Param : uint16_t +{ + E_ONOFF_CONTROL = 0, // Use ON/OFF control + E_PID_CONTROL = 1, // Use 2-PID control (or standard PID if 2-PID not applicable) +}; + +// Parameters for E_ST_Setting (0x2D15) - Reuse E5C_OnOff_Param + +// Parameters for E_ProgramPattern (0x2D16) [Initial Setting Level] +enum class E5C_ProgramPattern_Param : uint16_t +{ + E_Off = 0, // Program Pattern function OFF (normal control) + E_Stop = 1, // Program Pattern STOP (reset or initial state) + E_Cont = 2, // Program Pattern CONTINUE (running) +}; + +// Parameters for E_RemoteSPInputType (0x2D18) [Advanced Function Setting Level] +enum class E5C_RemoteSPInputType_Param : uint16_t +{ + E_4_20MA = 0, + E_0_20MA = 1, + E_1_5V = 2, + E_0_5V = 3, + E_0_10V = 4, +}; + +// Parameters for E_TransferOutputType (0x2E00) [Initial Setting Level] +enum class E5C_TransferOutputType_Param : uint16_t +{ + E_Off = 0, // Transfer Output OFF + E_SetPoint = 1, // Output Set Point value + E_SetPointRamp = 2, // Output Set Point during SP ramp + E_PV = 3, // Output Process Value + E_MV_Heating = 4, // Output Manipulated Value (Heating) + E_MV_Cooling = 5, // Output Manipulated Value (Cooling) + E_ValveOpening = 6, // Output Valve Opening (% - Only for Position-proportional Models) +}; + +// Parameters for E_TransferOutputSignal (0x2E01) [Initial Setting Level] +enum class E5C_TransferOutputSignal_Param : uint16_t +{ + E_4_20MA = 0, + E_1_5V = 1, +}; + +// Parameters for E_ControlOutput1Assignment (0x2E06), E_ControlOutput2Assignment (0x2E07) +// and Auxiliary Output Assignments (0x2E10 - 0x2E13) +// Ref Manual Page 5-9 and 5-10. [Advanced Function Setting Level] +enum class E5C_ControlOutputAssignment_Param : int16_t // Use signed type for negative values +{ + E_ASSIGN_NotAssigned = 0, + E_ASSIGN_ControlOutputHeating = 1, + E_ASSIGN_ControlOutputCooling = 2, + E_ASSIGN_Alarm1 = 3, + E_ASSIGN_Alarm2 = 4, + E_ASSIGN_Alarm3 = 5, + E_ASSIGN_Alarm4 = 6, + E_ASSIGN_HeaterAlarm = 7, // General heater alarm? (Could be HB or HS depending on config) + E_ASSIGN_HB_Alarm = 8, // Heater Break alarm + E_ASSIGN_HS_Alarm = 9, // Heater Short alarm + E_ASSIGN_InputError = 10, // PV Input Error + E_ASSIGN_RSP_InputError = 11, // Remote SP input error + E_ASSIGN_ProgramEndOutput = 12, // Note *1 from page 5-9: P.END can only be set if Program Pattern (0x2D16) is set to OFF + E_ASSIGN_RUN_Output = 13, // Indicates RUN state + E_ASSIGN_IntegratedAlarm = 14, // OR combination of selected alarms + E_ASSIGN_WorkBit1 = 15, + E_ASSIGN_WorkBit2 = 16, + E_ASSIGN_WorkBit3 = 17, + E_ASSIGN_WorkBit4 = 18, + E_ASSIGN_WorkBit5 = 19, + E_ASSIGN_WorkBit6 = 20, + E_ASSIGN_WorkBit7 = 21, + E_ASSIGN_WorkBit8 = 22, + + // Special values for Linear Current Output (Only for OUT1 on E5CC-U/E5GC May 2014+ / v2.2+ models, see Note *2 from page 5-9) + // Typically NOT applicable to Auxiliary Output Assignments (0x2E10-0x2E13) or OUT2 Assignment (0x2E07) + E_ASSIGN_SimpleTransfer_MV_Cooling = -5, // (FFFF FFFB) Simple MV transfer (cooling) + E_ASSIGN_SimpleTransfer_MV_Heating = -4, // (FFFF FFFC) Simple MV transfer (heating) + E_ASSIGN_SimpleTransfer_PV = -3, // (FFFF FFFD) Simple PV transfer + E_ASSIGN_SimpleTransfer_Ramp_SP = -2, // (FFFF FFFE) Simple SP transfer (during ramp) + E_ASSIGN_SimpleTransfer_SP = -1 // (FFFF FFFF) Simple SP transfer +}; + +// Parameters for Event Input Assignments (0x2E0A - 0x2E0F) [Initial Setting Level] +// Ref Manual Page 5-10 +enum class E5C_EventInputAssignment_Param : uint16_t +{ + E_EV_None = 0, // None + E_EV_RunStop = 1, // RUN/STOP + E_EV_AutoManualSwitch = 2, // Auto/Manual Switch + E_EV_ProgramStart = 3, // Program Start (Note *1 from pg 5-10: only if prog pattern is OFF) + E_EV_DirectReverseOperation = 4, // Direct/Reverse Operation switch + E_EV_SPModeSwitch = 5, // SP Mode Switch (Local/Remote) (Note *2 from pg 5-10: only if remote SP input) + E_EV_ATExecuteCancel_100 = 6, // 100% AT Execute/Cancel + E_EV_ATExecuteCancel_40 = 7, // 40% AT Execute/Cancel + E_EV_SettingChangeEnableDisable = 8, // Setting Change Enable/Disable + E_EV_CommsWritingEnableDisable = 9, // Communications Writing Enable/Disable (Note *3 from pg 5-10: only if external comms supported) + E_EV_AlarmLatchCancel = 10, // Alarm Latch Cancel + E_EV_MultiSP_Switch_Bit0 = 11, // Multi-SP No. Switch, Bit 0 + E_EV_MultiSP_Switch_Bit1 = 12, // Multi-SP No. Switch, Bit 1 + E_EV_MultiSP_Switch_Bit2 = 13, // Multi-SP No. Switch, Bit 2 +}; + +// Parameters for Alarm Latch (0x2F01, 0x2F04, 0x2F07, 0x2F0A) - Use E5C_OnOff_Param + +// Parameters for Alarm Types (0x2F00, 0x2F03, 0x2F06, 0x2F09) +enum class E5C_AlarmType_Param : uint16_t +{ + E_AlarmFunctionOff = 0, // Alarm function OFF + E_UpperLowerLimit = 1, // Upper and lower-limit alarm + E_UpperLimit = 2, // Upper-limit alarm + E_LowerLimit = 3, // Lower-limit alarm + E_UpperLowerRange = 4, // Upper and lower-limit range alarm + E_UpperLowerLimitStandby = 5, // Upper and lower-limit alarm with standby sequence + E_UpperLimitStandby = 6, // Upper-limit alarm with standby sequence + E_LowerLimitStandby = 7, // Lower-limit alarm with standby sequence + E_AbsoluteUpperLimit = 8, // Absolute-value upper-limit alarm + E_AbsoluteLowerLimit = 9, // Absolute-value lower-limit alarm + E_AbsoluteUpperLimitStandby = 10, // Absolute-value upper-limit alarm with standby sequence + E_AbsoluteLowerLimitStandby = 11, // Absolute-value lower-limit alarm with standby sequence + E_LBA = 12, // LBA (Loop Burnout Alarm) (Not settable for Alarms 2, 3, 4) + E_PVChangeRate = 13, // PV change rate alarm + E_SPAbsoluteUpperLimit = 14, // SP absolute-value upper-limit alarm + E_SPAbsoluteLowerLimit = 15, // SP absolute-value lower-limit alarm + E_MVAbsoluteUpperLimit = 16, // MV absolute-value upper-limit alarm + E_MVAbsoluteLowerLimit = 17, // MV absolute-value lower-limit alarm + E_RSPAbsoluteUpperLimit = 18, // RSP absolute-value upper-limit alarm (Only with remote SP input) + E_RSPAbsoluteLowerLimit = 19, // RSP absolute-value lower-limit alarm (Only with remote SP input) +}; + +// Parameters for Standby Sequence Reset (0x2F0C) [Advanced Function Setting] +enum class E5C_StandbySequenceReset_Param : uint16_t +{ + E_ConditionA = 0, // Condition A (Reset when deviation enters non-alarm range OR power ON/Run mode start) + E_ConditionB = 1, // Condition B (Reset only when deviation enters non-alarm range) +}; + +// Parameters for Auxiliary Output Open/Close in Alarm (0x2F0D - 0x2F10) [Advanced Function Setting] +enum class E5C_AuxOutputOpenInAlarm_Param : uint16_t +{ + E_CloseInAlarm = 0, // Output CLOSES (becomes energized/active low depending on hardware) when the assigned alarm is ON + E_OpenInAlarm = 1, // Output OPENS (becomes de-energized/active high depending on hardware) when the assigned alarm is ON +}; + +// Parameters for PV/SP No. 1/2 Display Selection (0x3000, 0x3008) +enum class E5C_PVSP_DisplaySelection_Param : uint16_t +{ + E_NothingDisplayed = 0, + E_PV_SP = 1, // PV/SP (Normal display) + E_PV = 2, // PV Only + E_PV_SP_Char = 3, // PV/SP (Character display) + E_PV_SP_MV = 4, // PV/SP/Manipulated Value + E_PV_SP_MultiSP_No = 5, // PV/SP/Multi-SP No. + E_PV_SP_SoakTimeRemain = 6, // PV/SP/Soak time remain + E_PV_SP_RampSP = 7, // PV/SP/Ramp SP + E_PV_SP_AlarmValue1 = 8, // PV/SP/Alarm Value 1 +}; + +// Parameters for MV Display Selection (0x3001) +enum class E5C_MV_DisplaySelection_Param : uint16_t +{ + E_MV_Heating = 0, + E_MV_Cooling = 1, +}; + +// Special value for Auto Display Return Time (0x3003) +enum class E5C_AutoDisplayReturnTime_SpecialVal : uint16_t +{ + E_Off = 0, + // Values 1-99 represent seconds directly +}; + +// Parameters for Display Refresh Period (0x3004) +enum class E5C_DisplayRefreshPeriod_Param : uint16_t +{ + E_Off = 0, // No Refresh (?) - Check Manual for exact meaning + E_0_25s = 1, // 0.25 seconds + E_0_5s = 2, // 0.5 seconds + E_1_0s = 3, // 1.0 second +}; + +// Parameters for MV Display (0x300B) - Reuse E5C_OnOff_Param +// Parameters for Auto/Manual Select Addition (0x300F) - Reuse E5C_OnOff_Param + +// Parameters for PV/SV Status Display Function (0x3011, 0x3012) +enum class E5C_PV_StatusDisplayFunction_Param : uint16_t +{ + E_Off = 0, + E_Manual = 1, // Manual mode status + E_Stop = 2, // Stop status + E_Alarm1 = 3, // Alarm 1 status + E_Alarm2 = 4, // Alarm 2 status + E_Alarm3 = 5, // Alarm 3 status + E_Alarm4 = 6, // Alarm 4 status + E_Alarm1To4_OR_Status = 7, // OR of Alarm 1-4 status + E_HeaterAlarm = 8, // Heater alarm status (HB or HS) + E_StatusDisplayMsg = 9, // Status display message (E5GC only) +}; + + +// --- Communication Setting Parameters (from page 5-14) --- + +// Parameters for E_PROTOCOL_SETTING (0x3100) +enum class E5C_ProtocolSetting_Param : uint16_t +{ + E_CompoWayF = 0, + E_Modbus = 1, +}; + +// Parameters for E_COMMUNICATIONS_BAUD_RATE (0x3102) +enum class E5C_BaudRate_Param : uint16_t +{ + E_BR_9600 = 3, + E_BR_19200 = 4, + E_BR_38400 = 5, + E_BR_57600 = 6, +}; + +// Parameters for E_COMMUNICATIONS_DATA_LENGTH (0x3103) +enum class E5C_DataLength_Param : uint16_t +{ + E_DL_7_BITS = 7, + E_DL_8_BITS = 8, +}; + +// Parameters for E_COMMUNICATIONS_STOP_BITS (0x3104) +enum class E5C_StopBits_Param : uint16_t +{ + E_SB_1 = 1, + E_SB_2 = 2, +}; + +// Parameters for E_COMMUNICATIONS_PARITY (0x3105) +enum class E5C_Parity_Param : uint16_t +{ + E_None = 0, + E_Even = 1, + E_Odd = 2, +}; + +// Parameters for E_PF_SETTING (0x3200) [Advanced Function Setting] +enum class E5C_PF_Setting_Param : uint16_t +{ + E_Disabled = 0, // PF key function disabled + E_Run = 1, // RUN + E_Stop = 2, // STOP + E_RunStop = 3, // RUN/STOP toggle + E_ATExecuteCancel100 = 4, // Execute/cancel 100% AT + E_ATExecuteCancel40 = 5, // Execute/cancel 40% AT + E_AlarmLatchCancel = 6, // Cancel alarm latch + E_AutoManualSwitch = 7, // Auto/Manual switch + E_MonitorSettingItem = 8, // Switch Monitor/Setting Item + E_DigitShiftKey = 9, // Digit shift key +}; + +// Parameters for Monitor/Setting Items (0x3202 - 0x3206) [Advanced Function Setting] +// Used when E_PF_SETTING = E_MonitorSettingItem (8) +enum class E5C_MonitorSettingItem_Param : uint16_t +{ + E_ITEM_Disabled = 0, + E_ITEM_PV_SP_MultiSP = 1, + E_ITEM_PV_SP_MV = 2, + E_ITEM_PV_SP_SoakTimeRemain = 3, + E_ITEM_ProportionalBand = 4, + E_ITEM_IntegralTime = 5, + E_ITEM_DerivativeTime = 6, + E_ITEM_AlarmValue1 = 7, + E_ITEM_AlarmValueUpperLimit1 = 8, + E_ITEM_AlarmValueLowerLimit1 = 9, + E_ITEM_AlarmValue2 = 10, + E_ITEM_AlarmValueUpperLimit2 = 11, + E_ITEM_AlarmValueLowerLimit2 = 12, + E_ITEM_AlarmValue3 = 13, + E_ITEM_AlarmValueUpperLimit3 = 14, + E_ITEM_AlarmValueLowerLimit3 = 15, + E_ITEM_AlarmValue4 = 16, + E_ITEM_AlarmValueUpperLimit4 = 17, + E_ITEM_AlarmValueLowerLimit4 = 18, + E_ITEM_PV_SP_InternalSetPoint = 19, + E_ITEM_PV_SP_AlarmValue1_Alt = 20, // Different display? Name matches item 7 + E_ITEM_ProportionalBand_Cooling = 21, + E_ITEM_IntegralTime_Cooling = 22, + E_ITEM_DerivativeTime_Cooling = 23, +}; + + +// --- Parameter Enums Added from Page 5-15 --- + +// Parameters for E_INTEGRAL_DERIVATIVE_TIME_UNIT (0x3309) +enum class E5C_IntegralDerivativeTimeUnit_Param : uint16_t +{ + E_Unit_1_Sec = 0, + E_Unit_0_1_Sec = 1, +}; + +// Parameters for E_MANUAL_OUTPUT_METHOD (0x330C) +enum class E5C_ManualOutputMethod_Param : uint16_t +{ + E_Hold = 0, // Hold last value + E_Init = 1, // Use Manual MV Initial Value (0x330D) +}; + +// Parameters for E_NUMBER_OF_MULTI_SP_POINTS (0x331B) +enum class E5C_NumberOfMultiSP_Param : uint16_t +{ + E_MultiSP_Off = 1, // Multi-SP function disabled + E_MultiSP_2 = 2, // 2 SPs enabled (SP0, SP1) + E_MultiSP_3 = 3, // 3 SPs enabled (SP0-SP2) + E_MultiSP_4 = 4, // 4 SPs enabled (SP0-SP3) + E_MultiSP_5 = 5, // 5 SPs enabled (SP0-SP4) + E_MultiSP_6 = 6, // 6 SPs enabled (SP0-SP5) + E_MultiSP_7 = 7, // 7 SPs enabled (SP0-SP6) + E_MultiSP_8 = 8, // 8 SPs enabled (SP0-SP7) +}; + +// Parameters for E_SOAK_TIME_UNIT (0x3327) +enum class E5C_SoakTimeUnit_Param : uint16_t +{ + E_Minutes = 0, + E_Hours = 1, + E_Seconds = 2, // Note: E5GC only +}; + +// Parameters for E_ALARM_SP_SELECTION (0x3328) +enum class E5C_AlarmSPSelection_Param : uint16_t +{ + E_SetPointDuringSPRamp = 0, + E_SetPoint = 1, +}; + + +// --- Enums for Status Register Bits (Refer to Manual Section 5-2) --- +// These are *examples* and need to be carefully verified against the specific E5C model manual. +// Define these if you need to decode individual status bits from registers like E_Status1, E_Status2_LowerWord, etc. + +/* +// Example bits for E_Status1 (0x2001) / E_Status1_StatusArea (0x2406) +enum class E5C_Status1_Bits : uint16_t +{ + E_S1_Alarm1_Output = (1 << 0), // Bit 0: Alarm 1 Output Status (0: OFF, 1: ON) + E_S1_Alarm2_Output = (1 << 1), // Bit 1: Alarm 2 Output Status + E_S1_Alarm3_Output = (1 << 2), // Bit 2: Alarm 3 Output Status + E_S1_Alarm4_Output = (1 << 3), // Bit 3: Alarm 4 Output Status (?) + E_S1_HeaterBurnout1 = (1 << 4), // Bit 4: Heater Burnout 1 Status + E_S1_HeaterBurnout2 = (1 << 5), // Bit 5: Heater Burnout 2 Status + E_S1_RunMode = (1 << 8), // Bit 8: RUN/STOP Status (0: STOP, 1: RUN) + E_S1_AutoTuning = (1 << 9), // Bit 9: AT Execution Status (0: OFF, 1: ON) + E_S1_TaskOperating = (1 << 10), // Bit 10: Task Operating Status (Programs) + E_S1_CommWritingDisabled= (1 << 11), // Bit 11: Communications Writing Disabled Status + E_S1_ManualMode = (1 << 12), // Bit 12: Auto/Manual Mode Status (0: Auto, 1: Manual) + E_S1_RemoteSP_Mode = (1 << 13), // Bit 13: SP Mode (0: Local, 1: Remote) + // ... add other relevant bits based on manual section 5-2 +}; +*/ + +/* +// Example bits for E_Status2_LowerWord (0x2408) +enum class E5C_Status2Lower_Bits : uint16_t +{ + E_S2L_RAM_Error = (1 << 0), // Bit 0: RAM Error + E_S2L_MemoryError = (1 << 1), // Bit 1: Memory Error (Non-volatile) + E_S2L_ADC_Error = (1 << 2), // Bit 2: A/D Converter Error + E_S2L_InputTypeError = (1 << 3), // Bit 3: Input Type Error + E_S2L_WatchdogTimeout = (1 << 4), // Bit 4: Watchdog Timer Timeout + E_S2L_OverrunError = (1 << 5), // Bit 5: Overrun Error (Communications?) + E_S2L_FramingError = (1 << 6), // Bit 6: Framing Error (Communications?) + E_S2L_ParityError = (1 << 7), // Bit 7: Parity Error (Communications?) + E_S2L_CommsTimeoutError = (1 << 8), // Bit 8: Communications Timeout Error + E_S2L_CommsError = (1 << 9), // Bit 9: Communications Error (General?) + E_S2L_CommsBufferOverrun = (1 << 10),// Bit 10: Communications Buffer Overrun Error + E_S2L_PowerSupplyFreqError = (1 << 11),// Bit 11: Power Supply Frequency Error + // ... add other relevant bits based on manual section 5-2 +}; + */ + +/* +// Example bits for E_Status2_UpperWord (0x2409) - Note: Bit numbering starts from 16 conceptually +enum class E5C_Status2Upper_Bits : uint16_t +{ + E_S2U_PV_InputError = (1 << 0), // Bit 16 (0 in upper word): PV Input Error (Over/Under Range or Disconnect) + E_S2U_RemoteSPInputError = (1 << 1), // Bit 17 (1 in upper word): Remote SP Input Error (Over/Under Range) + E_S2U_MVOutputError = (1 << 2), // Bit 18 (2 in upper word): MV Output Error + E_S2U_ExternalDIError = (1 << 3), // Bit 19 (3 in upper word): Error via External DI (Digital Input) + E_S2U_HeaterShortAlarm1 = (1 << 4), // Bit 20 (4 in upper word): HS (Heater Short) Alarm 1 Status + E_S2U_HeaterShortAlarm2 = (1 << 5), // Bit 21 (5 in upper word): HS (Heater Short) Alarm 2 Status + // E_S2U_TempSensorDisconnected= (1 << 6), // Bit 22 (6 in upper word): (Not explicitly listed, PV Input Error likely covers this) + // ... add other relevant bits based on manual section 5-2 +}; +*/ + +#endif // E5C_MODBUS_REGISTERS_HPP + + +#ifndef E5C_MODBUS_REGISTERS_HPP +#define E5C_MODBUS_REGISTERS_HPP + +#include // Required for uint16_t and int16_t + +// --- E5C Modbus Command Codes --- +// Represents the Command Codes used for various operations on the E5C device. +// These codes are typically written to a specific command register (often 0x0000) via Modbus. +enum class E5C_CommandCode : uint16_t +{ + E_CommunicationsWriting = 0x00, // Controls Modbus communications writing (enable/disable) + E_RunStop = 0x01, // Starts or stops control operation + E_MultiSP = 0x02, // Selects the target Set Point (SP) number (0-7) + E_ATExecuteCancel = 0x03, // Executes or cancels Auto-Tuning (AT) + E_WriteMode = 0x04, // Selects the write mode (Backup or RAM only) + E_SaveRAMData = 0x05, // Saves data from RAM to non-volatile memory (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_SoftwareReset = 0x06, // Performs a software reset (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_MoveToSetupArea1 = 0x07, // Moves operation to Setup Area 1 (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_MoveToProtectLevel = 0x08, // Moves operation to the Protect Level (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_AutoManualSwitch = 0x09, // Switches between Automatic and Manual control mode + E_ParameterInitialization = 0x0B, // Initializes parameters to default values (Related Info: E5C_COMMAND_PARAM_DEFAULT) + E_AlarmLatchCancel = 0x0C, // Cancels specified latched alarms + E_SPMode = 0x0D, // Selects Set Point (SP) mode (Local or Remote) + E_InvertDirectReverse = 0x0E, // Selects direct or reverse operation (Invert/Not Invert) via Command + E_ProgramStart = 0x11, // Starts or resets a program pattern +}; + +// --- Parameter Enums for Specific Command Codes --- +// These enums define the valid "Related Information" values (data) sent with specific commands. + +// Parameters for E_CommunicationsWriting (0x00) +enum class E5C_CommWrite_Param : uint16_t +{ + E_OffDisabled = 0x00, + E_OnEnabled = 0x01, +}; + +// Parameters for E_RunStop (0x01) +enum class E5C_RunStop_Param : uint16_t +{ + E_Run = 0x00, + E_Stop = 0x01, +}; + +// Parameters for E_MultiSP (0x02) +enum class E5C_MultiSP_Param : uint16_t +{ + E_SetPoint0 = 0x00, + E_SetPoint1 = 0x01, + E_SetPoint2 = 0x02, + E_SetPoint3 = 0x03, + E_SetPoint4 = 0x04, + E_SetPoint5 = 0x05, + E_SetPoint6 = 0x06, + E_SetPoint7 = 0x07, +}; + +// Parameters for E_ATExecuteCancel (0x03) +enum class E5C_ATExecuteCancel_Param : uint16_t +{ + E_ATCancel = 0x00, // Cancel Auto-Tuning + E_ATExecute100Pct = 0x01, // Execute 100% Auto-Tuning + E_ATEexecute40Pct = 0x02, // Execute 40% Auto-Tuning +}; + +// Parameters for E_WriteMode (0x04) +enum class E5C_WriteMode_Param : uint16_t +{ + E_Backup = 0x00, // Writes are backed up to non-volatile memory + E_RAMWriteMode = 0x01, // Writes affect RAM only +}; + +// Parameters for E_AutoManualSwitch (0x09) +enum class E5C_AutoManualSwitch_Param : uint16_t +{ + E_AutomaticMode = 0x00, + E_ManualMode = 0x01, +}; + +// Parameters for E_AlarmLatchCancel (0x0C) +enum class E5C_AlarmLatchCancel_Param : uint16_t +{ + E_Alarm1LatchCancel = 0x00, + E_Alarm2LatchCancel = 0x01, + E_Alarm3LatchCancel = 0x02, + E_HBAlarmLatchCancel = 0x03, // Heater Break alarm latch cancel + E_HSAlarmLatchCancel = 0x04, // Heater Short alarm latch cancel (?) + E_Alarm4LatchCancel = 0x05, // Alarm 4 latch cancel (?) + E_AllAlarmLatchCancel = 0x0F, // Cancel all latched alarms +}; + +// Parameters for E_SPMode (0x0D) +enum class E5C_SPMode_Param : uint16_t +{ + E_LocalSPMode = 0x00, + E_RemoteSPMode = 0x01, +}; + +// Parameters for E_InvertDirectReverse (0x0E) - Command based +enum class E5C_InvertDirectReverseCmd_Param : uint16_t +{ + E_NotInvert = 0x00, // Direct operation (Command parameter) + E_Invert = 0x01, // Reverse operation (Command parameter) +}; + +// Parameters for E_ProgramStart (0x11) +enum class E5C_ProgramStart_Param : uint16_t +{ + E_Reset = 0x00, // Reset the program/pattern + E_Start = 0x01, // Start the program/pattern +}; + +// Constant for commands where the related information is always 0x0000 +constexpr uint16_t E5C_COMMAND_PARAM_DEFAULT = 0x0000; +// This value should be used as the data when issuing commands like: +// - E_SaveRAMData +// - E_SoftwareReset +// - E_MoveToSetupArea1 +// - E_MoveToProtectLevel (Command, not the register 0x2504) +// - E_ParameterInitialization + + +// --- Generic Parameter Enums --- + +// Generic ON/OFF Parameter (Used by multiple registers) +enum class E5C_OnOff_Param : uint16_t +{ + E_Off = 0x00, + E_On = 0x01, +}; + + +// --- E5C Modbus Variable Area Registers (Holding Registers - Two-Byte Mode Addresses) --- +// Represents the addresses for reading/writing various parameters and status values. +// Based on the "Variable Area (Setting Range) List" sections of the Communications Manual (H175). +// Note: Addresses are based on the "Two-byte mode" column. +// Note: Ranges and accessibility levels (Operation, Adjustment, Initial, Advanced) are indicated where available. +enum class E5C_HoldingRegister : uint16_t +{ + // --- Operation Level Monitors (Addresses ~0x2000 - 0x20FF, Manual Page 5-1) --- + E_PV = 0x2000, // Process Value (Read-Only) + E_Status1 = 0x2001, // Status 1 (Bitfield, Read-Only, see manual section 5-2. Note *1, *2 apply) + E_InternalSetPoint = 0x2002, // Internal Set Point (Read-Only? Note *1 applies) + E_HeaterCurrent1Value = 0x2003, // Heater Current 1 Value Monitor (Read-Only, Range: 0.0 to 55.0 A) + E_MV_MonitorHeating = 0x2004, // Manipulated Value Monitor (Heating Output) (Read-Only, %: Range -5.0 to 105.0 or 0.0 to 105.0) + E_MV_MonitorCooling = 0x2005, // Manipulated Value Monitor (Cooling Output) (Read-Only, %: Range 0.0 to 105.0) + + // --- Primary Setting Parameters (Addresses ~0x2100 - 0x21FF, Manual Page 5-1) --- + E_SetPoint = 0x2103, // Set Point (SP) value (Writable & Readable, Primary SP setting, likely the *active* SP or SP0 in non-MultiSP mode) + E_AlarmValue1 = 0x2104, // Alarm Value 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueUpperLimit1 = 0x2105, // Alarm Value Upper Limit 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueLowerLimit1 = 0x2106, // Alarm Value Lower Limit 1 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValue2 = 0x2107, // Alarm Value 2 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueUpperLimit2 = 0x2108, // Alarm Value Upper Limit 2 (Writable, Range: -1999 to 9999) [Main Setting] + E_AlarmValueLowerLimit2 = 0x2109, // Alarm Value Lower Limit 2 (Writable, Range: -1999 to 9999) [Main Setting] + // Add other registers from 0x21xx range if needed from other tables + + // --- Status/Monitor Parameters (Addresses ~0x2400 - 0x24FF, Manual Page 5-2) --- + E_PV_StatusArea = 0x2402, // Process Value (Read-Only status copy) + E_InternalSetPoint_StatusArea = 0x2403, // Internal Set Point (Read-Only status copy, Note *1) + E_MultiSP_NoMonitor = 0x2404, // Multi-SP No. Monitor (Which SP is currently active: 0 to 7, Read-Only) + E_Status1_StatusArea = 0x2406, // Status 1 (Read-Only status copy, Bitfield, Note *1, *2 apply) + E_StatusWord3_Leftmost = 0x2407, // Status Word 3 / Leftmost bits (Part of a larger status? Read-Only, Note *3 applies) + E_Status2_LowerWord = 0x2408, // Status 2 (Rightmost 16 bits / Lower Word. Read-Only, Bitfield, Note *1, *2 apply) + E_Status2_UpperWord = 0x2409, // Status 2 (Leftmost 16 bits / Upper Word. Read-Only, Bitfield, Note *1, *3 apply) + E_DecimalPointMonitor = 0x2410, // Decimal Point Monitor (Position for PV/SP display: 0 to 3, Read-Only) + // Add other registers from 0x24xx range if needed + + // --- Protect Level Parameters (Addresses ~0x2500 - 0x25FF, Ref Manual Page 5-3) --- + E_OperationAdjustmentProtect = 0x2500, // Sets Operation/Adjustment Protection Level (Writable, See E5C_OperationProtect_Param) + E_InitialSettingCommsProtect = 0x2501, // Sets Initial Setting/Communications Protection Level (Writable, See E5C_InitialProtect_Param) + E_SettingChangeProtect = 0x2502, // Enable/Disable Setting Change Protect via front panel (Writable, See E5C_SettingChangeProtect_Param) + E_PF_KeyProtect = 0x2503, // Enable/Disable PF Key Protect (Writable, Use E5C_OnOff_Param) + E_MoveToProtectLevelSetting = 0x2504, // Sets the password value needed to move to protect level (Writable, Range: -1999 to 9999 or FFFF831 to 270F) + E_PasswordToMoveToProtectLevel = 0x2505, // Write the password here to attempt moving to the protect level (Write-Only? Monitor value always 0) + E_ParameterMaskEnable = 0x2506, // Enable/Disable Parameter Mask (Writable, Use E5C_OnOff_Param) (Monitor value always 0) + E_ChangedParametersOnly = 0x2507, // Control Change Parameters setting (Writable, Use E5C_OnOff_Param) + + // --- Manual Control / Operation Level Parameters (Addresses ~0x2600 - 0x26FF, Ref Manual Page 5-3) --- + E_ManualMV = 0x2600, // Manual Manipulated Value (Writable in Manual Mode) (%: Ranges vary by model/setting) + E_SetPoint_OperationLevel = 0x2601, // Set Point visible/settable in Operation Level (Writable, Range: SP lower to SP upper limit) (Likely mirrors E_SetPoint=0x2103 but accessible differently) + E_RemoteSPMonitor = 0x2602, // Remote SP Monitor (Read-Only, Range: Remote SP lower limit -10% FS to Remote SP upper limit +10% FS) + E_HeaterCurrent1ValueMonitor_OpLevel = 0x2604, // Heater Current 1 Value Monitor (Read-Only, 0.0 to 55.0 A) (Likely same value as 0x2003) + E_MVMonitorHeating_OpLevel = 0x2605, // MV Monitor (Heating) (Read-Only, %: -5.0 to 105.0 or 0.0 to 105.0) (Likely same value as 0x2004) + E_MVMonitorCooling_OpLevel = 0x2606, // MV Monitor (Cooling) (Read-Only, %: 0.0 to 105.0) (Likely same value as 0x2005) + E_ValveOpeningMonitor = 0x2607, // Valve Opening Monitor (Read-Only, %: -10.0 to 110.0) + + // --- Adjustment Level Parameters (Addresses ~0x2700 - 0x27FF, Ref Manual Page 5-4/5-5) --- + E_ProportionalBandCooling = 0x2701, // Proportional Band (Cooling) (Writable, Range: 0.1 to 999.9) [Adjustment Level] + E_IntegralTimeCooling = 0x2702, // Integral Time (Cooling) (Writable, Range: 0 to 9999 s / 0.0 to 999.9 s depending on derivative unit) [Adjustment Level] + E_DerivativeTimeCooling = 0x2703, // Derivative Time (Cooling) (Writable, Same range as Integral) [Adjustment Level] + E_DeadBand = 0x2704, // Dead Band (Writable, Range: -199.9 to 999.9 for temp input / -19.99 to 99.99 for analog input) [Adjustment Level] + E_ManualResetValue = 0x2705, // Manual Reset Value (Writable, Range: 0.0 to 100.0 %) [Adjustment Level] + E_HysteresisHeating = 0x2706, // Hysteresis (Heating) (Writable, Range: 0.1 to 999.9 for temp input / 0.01 to 99.99 for analog input) [Adjustment Level] + E_HysteresisCooling = 0x2707, // Hysteresis (Cooling) (Writable, Same range as Heating) [Adjustment Level] + E_ControlPeriodHeating = 0x2708, // Control Period (Heating) (Writable, Special values or 1 to 99 s) [Initial Setting Level] (See E5C_ControlPeriod_SpecialVal) + E_ControlPeriodCooling = 0x2709, // Control Period (Cooling) (Writable, Special values or 1 to 99 s) [Initial Setting Level] (See E5C_ControlPeriod_SpecialVal) + E_PositionPropDeadBand = 0x270A, // Position Proportional Dead Band (Writable, Range: 0.1 to 10.0) [Adjustment Level] + E_OpenCloseHysteresis = 0x270B, // Open/Close Hysteresis (Writable, Range: 0.1 to 20.0) [Adjustment Level] + E_SPRampTimeUnit = 0x270C, // SP Ramp Time Unit (Writable) [Advanced Function Setting Level] (See E5C_SPRampTimeUnit_Param) + E_SPRampSetValue = 0x270D, // SP Ramp Set Value (Writable, 0=OFF or 1 to 9999 in units from 0x270C) [Adjustment Level] (See E5C_SPRampSetValue_SpecialVal) + E_SPRampFallValue = 0x270E, // SP Ramp Fall Value (Writable, -1=Same as Set, 0=OFF or 1 to 9999) [Adjustment Level] (See E5C_SPRampFallValue_SpecialVal) + E_MVAtStop = 0x270F, // MV (%) at Stop (Writable, Range: -5.0 to 105.0 / -105.0 to 105.0 varies) [Advanced Function Setting Level] + E_MVAtPVError = 0x2711, // MV (%) at PV Error (Writable, Range: -5.0 to 105.0 / -105.0 to 105.0 varies) [Advanced Function Setting Level] + E_MVChangeRateLimit = 0x2713, // MV Change Rate Limit (Writable, 0.0=OFF or 0.1 to 100.0 %/s) [Advanced Function Setting Level] + E_PVInputSlopeCoeff = 0x2718, // PV Input Slope Coefficient (Writable, Range: 0.001 to 9.999) [Advanced Function Setting Level] + E_HeaterCurrent1ValueMonitor_Adv = 0x271A, // Heater Current 1 Value Monitor (Read-Only, 0.0 to 55.0 A) [ Seems redundant, matches 0x2003/0x2604] + E_HeaterBurnoutDetection1 = 0x271B, // Heater Burnout Detection 1 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_LeakageCurrent1Monitor = 0x271C, // Leakage Current 1 Monitor (Read-Only, 0.0 to 55.0? Units not specified, likely mA) [Operation Level] + E_HSAlarm1 = 0x271D, // HS (Heater Short?) Alarm 1 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_ProcessValueInputShift = 0x2723, // Process Value Input Shift (Writable, Range: -1999 to 9999) [Adjustment Level] + E_HeaterCurrent2ValueMonitor = 0x2724, // Heater Current 2 Value Monitor (Read-Only, 0.0 to 55.0 A) [Operation Level] + E_HeaterBurnoutDetection2 = 0x2725, // Heater Burnout Detection 2 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_LeakageCurrent2Monitor = 0x2726, // Leakage Current 2 Monitor (Read-Only, 0.0 to 55.0 mA?) [Operation Level] + E_HSAlarm2 = 0x2727, // HS (Heater Short?) Alarm 2 Setting (Writable, 0.0=OFF or 0.1 to 50.0 A) [Adjustment Level] + E_SoakTimeRemain = 0x2728, // Soak Time Remain (Read-Only?, Range: 0 to 9999) [Operation Level] + E_SoakTime = 0x2729, // Soak Time (Writable, Range: 1 to 9999) [Adjustment Level] + E_WaitBand = 0x272A, // Wait Band (Writable, 0=OFF, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Adjustment Level] (See E5C_WaitBand_SpecialVal) + E_RemoteSPInputShift = 0x272B, // Remote SP Input Shift (Writable, Range: -1999 to 9999) [Advanced Function Setting Level] + E_RemoteSPInputSlopeCoeff = 0x272C, // Remote SP Input Slope Coefficient (Writable, Range: 0.001 to 9.999) [Advanced Function Setting Level] + + // --- Advanced Function Setting / Initial Setting Level Parameters (Addresses ~0x2800 - 0x2FFF, Ref Manual Page 5-5 to 5-13) --- + E_InputDigitalFilter = 0x2800, // Input Digital Filter (Writable, Range: 0.0 to 999.9) [Advanced Function Setting Level] + E_MovingAverageCount = 0x2804, // Moving Average Count (Writable) [Advanced Function Setting Level] (See E5C_MovingAverageCount_Param) + E_ExtractionOfSquareRootLowCutPoint = 0x2808, // Extraction of Square Root Low-cut Point (%) (Writable, Range: 0.0 to 100.0) [Adjustment Level] + + E_InputType = 0x2C00, // Input Type selection (Writable, See E5C_InputType_Param) [Initial Setting Level] + E_TemperatureUnit = 0x2C01, // Temperature Unit selection (Writable, See E5C_TemperatureUnit_Param) [Initial Setting Level] + E_ScalingLowerLimit = 0x2C09, // Scaling Lower Limit (Writable, Range: -1999 to Scaling Upper Limit - 1) [Advanced Function Setting Level] + E_ScalingUpperLimit = 0x2C0B, // Scaling Upper Limit (Writable, Range: Scaling Lower Limit + 1 to 9999) [Advanced Function Setting Level] + E_DecimalPoint = 0x2C0C, // Decimal Point position for PV/SP (Writable, 0-3) [Advanced Function Setting Level] (See E5C_DecimalPoint_Param) + E_RemoteSPUpperLimit = 0x2C0D, // Remote SP Upper Limit (Writable, Range depends on input type/scaling) [Advanced Function Setting Level] + E_RemoteSPLowerLimit = 0x2C0E, // Remote SP Lower Limit (Writable, Range depends on input type/scaling) [Advanced Function Setting Level] + E_PVDecimalPointDisplay = 0x2C0F, // PV Decimal Point Display ON/OFF (Writable, Use E5C_OnOff_Param) [Advanced Function Setting Level] + + E_ControlOutput1Signal = 0x2D03, // Control Output 1 Signal Type (Writable, See E5C_ControlOutputSignal_Param) [Initial Setting Level] (Only for Linear Output Models) + E_ControlOutput2Signal = 0x2D04, // Control Output 2 Signal Type (Writable, See E5C_ControlOutputSignal_Param) [Initial Setting Level] (Only for Linear Output Models) + E_SPUpperLimit = 0x2D0F, // SP Upper Limit (Writable, Range depends on input type/scaling) [Initial Setting Level] + E_SPLowerLimit = 0x2D10, // SP Lower Limit (Writable, Range depends on input type/scaling) [Initial Setting Level] + E_StandardOrHeatingCooling= 0x2D11, // Control Mode: Standard or Heating/Cooling (Writable, See E5C_ControlMode_Param) [Initial Setting Level] + E_DirectReverseOperation = 0x2D12, // Direct/Reverse operation setting (Writable, See E5C_DirectReverseOperation_Param) [Initial Setting Level] (Different from Command 0x0E) + E_CloseFloating = 0x2D13, // Close/Floating (position-proportional control) (Writable, See E5C_CloseFloating_Param) [Initial Setting Level] (Only for Position-proportional Models) + E_PidOnOff = 0x2D14, // PID/ON-OFF Control Selection (Writable, See E5C_PidOnOff_Param) [Initial Setting Level] + E_ST_Setting = 0x2D15, // Self-Tuning ON/OFF (Writable, Use E5C_OnOff_Param) [Initial Setting Level] + E_ProgramPattern = 0x2D16, // Program Pattern Execution State (Writable, See E5C_ProgramPattern_Param) [Initial Setting Level] + E_RemoteSPInputType = 0x2D18, // Remote SP Input range selection (Writable, See E5C_RemoteSPInputType_Param) [Advanced Function Setting Level] + E_MinimumOutputOnOffBand = 0x2D19, // Minimum Output ON/OFF Band (Writable, Range: 0.0 to 50.0 %) [Advanced Function Setting Level] + + E_TransferOutputType = 0x2E00, // Transfer Output Type (Writable, See E5C_TransferOutputType_Param) [Initial Setting Level] + E_TransferOutputSignal = 0x2E01, // Transfer Output Signal Range (Writable, See E5C_TransferOutputSignal_Param) [Initial Setting Level] + E_ExtractionSquareRootEnable = 0x2E24, // Extraction of Square Root Enable (Writable, Use E5C_OnOff_Param) [Initial Setting] + E_TRAVEL_TIME = 0x2E30, // Travel Time (Position-proportional models?) (Writable, Range: 1 to 999 s) [Initial Setting] + E_ControlOutput1Assignment = 0x2E06, // Assign function to Control Output 1 (Writable, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] + E_ControlOutput2Assignment = 0x2E07, // Assign function to Control Output 2 (Writable, See E5C_ControlOutputAssignment_Param, Note restrictions) [Advanced Function Setting] + E_EventInputAssignment1 = 0x2E0A, // Event Input Assignment 1 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_EventInputAssignment2 = 0x2E0B, // Event Input Assignment 2 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_EventInputAssignment3 = 0x2E0C, // Event Input Assignment 3 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_EventInputAssignment4 = 0x2E0D, // Event Input Assignment 4 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_EventInputAssignment5 = 0x2E0E, // Event Input Assignment 5 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_EventInputAssignment6 = 0x2E0F, // Event Input Assignment 6 (Writable, See E5C_EventInputAssignment_Param) [Initial Setting Level] + E_AuxiliaryOutput1Assignment = 0x2E10, // Auxiliary Output 1 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] + E_AuxiliaryOutput2Assignment = 0x2E11, // Auxiliary Output 2 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] + E_AuxiliaryOutput3Assignment = 0x2E12, // Auxiliary Output 3 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] + E_AuxiliaryOutput4Assignment = 0x2E13, // Auxiliary Output 4 Assignment (Writable, Range 0-22, See E5C_ControlOutputAssignment_Param) [Advanced Function Setting] + E_TransferOutputScaledUpperLimit = 0x2E14, // Transfer Output Scaled Upper Limit (for selected Transfer Output Type) (Writable, Range -1999 to 9999) [Initial Setting Level] + E_TransferOutputScaledLowerLimit = 0x2E15, // Transfer Output Scaled Lower Limit (for selected Transfer Output Type) (Writable, Range -1999 to 9999) [Initial Setting Level] + E_SimpleTransferOutput1UpperLimit = 0x2E16, // Simple Transfer Output 1 Upper Limit (Writable, Range: -1999 to 9999) [Initial Setting Level] (Note *1: E5CC-U/E5GC linear current output only, v2.2+) + E_SimpleTransferOutput1LowerLimit = 0x2E17, // Simple Transfer Output 1 Lower Limit (Writable, Range: -1999 to 9999) [Initial Setting Level] (Note *1: E5CC-U/E5GC linear current output only, v2.2+) + + E_ALARM_1_TYPE = 0x2F00, // Alarm 1 Type (Writable, See E5C_AlarmType_Param) [Initial Setting] + E_ALARM_1_LATCH = 0x2F01, // Alarm 1 Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ALARM_1_HYSTERESIS = 0x2F02, // Alarm 1 Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Initial Setting] + E_ALARM_2_TYPE = 0x2F03, // Alarm 2 Type (Writable, See E5C_AlarmType_Param, Note: LBA_12 cannot be set) [Initial Setting] + E_ALARM_2_LATCH = 0x2F04, // Alarm 2 Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ALARM_2_HYSTERESIS = 0x2F05, // Alarm 2 Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Initial Setting] + E_ALARM_3_TYPE = 0x2F06, // Alarm 3 Type (Writable, See E5C_AlarmType_Param, Note: LBA_12 cannot be set) [Initial Setting] + E_ALARM_3_LATCH = 0x2F07, // Alarm 3 Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ALARM_3_HYSTERESIS = 0x2F08, // Alarm 3 Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Initial Setting] + E_ALARM_4_TYPE = 0x2F09, // Alarm 4 Type (Writable, See E5C_AlarmType_Param, Note: LBA_12 cannot be set) [Initial Setting] + E_ALARM_4_LATCH = 0x2F0A, // Alarm 4 Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ALARM_4_HYSTERESIS = 0x2F0B, // Alarm 4 Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog) [Initial Setting] + E_STANDBY_SEQUENCE_RESET = 0x2F0C, // Standby Sequence Reset Condition (Writable, See E5C_StandbySequenceReset_Param) [Advanced Function Setting] + E_AUXILIARY_OUTPUT_1_OPEN_IN_ALARM = 0x2F0D, // Auxiliary Output 1 Behaviour in Alarm (Writable, See E5C_AuxOutputOpenInAlarm_Param) [Advanced Function Setting] + E_AUXILIARY_OUTPUT_2_OPEN_IN_ALARM = 0x2F0E, // Auxiliary Output 2 Behaviour in Alarm (Writable, See E5C_AuxOutputOpenInAlarm_Param) [Advanced Function Setting] + E_AUXILIARY_OUTPUT_3_OPEN_IN_ALARM = 0x2F0F, // Auxiliary Output 3 Behaviour in Alarm (Writable, See E5C_AuxOutputOpenInAlarm_Param) [Advanced Function Setting] + E_AUXILIARY_OUTPUT_4_OPEN_IN_ALARM = 0x2F10, // Auxiliary Output 4 Behaviour in Alarm (Writable, See E5C_AuxOutputOpenInAlarm_Param) [Advanced Function Setting] + E_ALARM_1_ON_DELAY = 0x2F11, // Alarm 1 ON delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_2_ON_DELAY = 0x2F12, // Alarm 2 ON delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_3_ON_DELAY = 0x2F13, // Alarm 3 ON delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_4_ON_DELAY = 0x2F14, // Alarm 4 ON delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_1_OFF_DELAY = 0x2F15, // Alarm 1 OFF delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_2_OFF_DELAY = 0x2F16, // Alarm 2 OFF delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_3_OFF_DELAY = 0x2F17, // Alarm 3 OFF delay (Writable, Range: 0 to 999 s) [Initial Setting] + E_ALARM_4_OFF_DELAY = 0x2F18, // Alarm 4 OFF delay (Writable, Range: 0 to 999 s) [Initial Setting] + + // --- Communications Settings / Display/Misc Settings (Addresses ~0x3000 - ..., Ref Manual Page 5-13/5-14) --- + E_PV_SP_NO1_DISPLAY_SELECTION = 0x3000, // PV/SP No. 1 Display Selection (Writable, See E5C_PVSP_DisplaySelection_Param) [Initial Setting] + E_MV_DISPLAY_SELECTION = 0x3001, // MV Display Selection (Writable, See E5C_MV_DisplaySelection_Param) [Initial Setting] + E_AUTO_DISPLAY_RETURN_TIME= 0x3003, // Automatic Display Return Time (Writable, Range 0=OFF, 1-99s) [Initial Setting] (See E5C_AutoDisplayReturnTime_SpecialVal) + E_DISPLAY_REFRESH_PERIOD = 0x3004, // Display Refresh Period (Writable, See E5C_DisplayRefreshPeriod_Param) [Initial Setting] + E_PV_SP_NO2_DISPLAY_SELECTION = 0x3008, // PV/SP No. 2 Display Selection (Writable, Range 0-8, See E5C_PVSP_DisplaySelection_Param) [Initial Setting] + E_DISPLAY_BRIGHTNESS = 0x300A, // Display Brightness (Writable, Range 1-3) [Initial Setting] + E_MV_DISPLAY = 0x300B, // MV Display ON/OFF (Writable, Use E5C_OnOff_Param) [Initial Setting] + E_MOVE_TO_PROTECT_LEVEL_TIME = 0x300C, // Move to Protect Level Time (Writable, Range 1-30 s) [Initial Setting] + E_AUTO_MANUAL_SELECT_ADDITION = 0x300F, // Auto/Manual Select Addition (Writable, Use E5C_OnOff_Param) [Initial Setting] + E_PV_STATUS_DISPLAY_FUNCTION = 0x3011, // PV Status Display Function (Writable, See E5C_PV_StatusDisplayFunction_Param) [Initial Setting] + E_SV_STATUS_DISPLAY_FUNCTION = 0x3012, // SV Status Display Function (Writable, Range 0-9, See E5C_PV_StatusDisplayFunction_Param) [Initial Setting] + + E_PROTOCOL_SETTING = 0x3100, // Protocol Setting (Writable, See E5C_ProtocolSetting_Param) [Communications Setting] + E_COMMUNICATIONS_UNIT_NO = 0x3101, // Communications Unit No. (Writable, Range 0-99) [Communications Setting] + E_COMMUNICATIONS_BAUD_RATE= 0x3102, // Communications Baud Rate (Writable, See E5C_BaudRate_Param) [Communications Setting] + E_COMMUNICATIONS_DATA_LENGTH = 0x3103, // Communications Data Length (Writable, See E5C_DataLength_Param) [Communications Setting] + E_COMMUNICATIONS_STOP_BITS= 0x3104, // Communications Stop Bits (Writable, See E5C_StopBits_Param) [Communications Setting] + E_COMMUNICATIONS_PARITY = 0x3105, // Communications Parity (Writable, See E5C_Parity_Param) [Communications Setting] + E_SEND_DATA_WAIT_TIME = 0x3106, // Send Data Wait Time (Writable, Range 0-99 ms) [Communications Setting] + + // --- PF Key / Advanced Function Settings (Addresses ~0x3200 - ..., Ref Manual Page 5-14) --- + E_PF_SETTING = 0x3200, // PF Setting Assignment (Writable, See E5C_PF_Setting_Param) [Advanced Function Setting] + E_MONITOR_SETTING_ITEM_1 = 0x3202, // Monitor/Setting Item 1 (for PF Setting = 8) (Writable, Range 0-23, See E5C_MonitorSettingItem_Param) [Advanced Function Setting] + E_MONITOR_SETTING_ITEM_2 = 0x3203, // Monitor/Setting Item 2 (for PF Setting = 8) (Writable, Range 0-23, See E5C_MonitorSettingItem_Param) [Advanced Function Setting] + E_MONITOR_SETTING_ITEM_3 = 0x3204, // Monitor/Setting Item 3 (for PF Setting = 8) (Writable, Range 0-23, See E5C_MonitorSettingItem_Param) [Advanced Function Setting] + E_MONITOR_SETTING_ITEM_4 = 0x3205, // Monitor/Setting Item 4 (for PF Setting = 8) (Writable, Range 0-23, See E5C_MonitorSettingItem_Param) [Advanced Function Setting] + E_MONITOR_SETTING_ITEM_5 = 0x3206, // Monitor/Setting Item 5 (for PF Setting = 8) (Writable, Range 0-23, See E5C_MonitorSettingItem_Param) [Advanced Function Setting] + + // --- Advanced Function Settings Continued (Addresses ~0x3300 - ..., Ref Manual Page 5-15 / 5-16) --- + E_SP_TRACKING = 0x3301, // SP Tracking (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_PV_DEAD_BAND = 0x3304, // PV Dead Band (Writable, Range: H'0000 to H'270F or 0 to 9999) [Advanced Function Setting] + E_COLD_JUNCTION_COMPENSATION = 0x3305, // Cold Junction Compensation Method (Writable, Use E5C_OnOff_Param. Note: Setting to OFF may require specific conditions) [Advanced Function Setting] + E_INTEGRAL_DERIVATIVE_TIME_UNIT = 0x3309, // Integral/Derivative Time Unit (Writable, See E5C_IntegralDerivativeTimeUnit_Param) [Advanced Function Setting] + E_ALPHA = 0x330A, // Alpha (α) parameter (Writable, Range: H'0000 to H'0064 or 0.00 to 1.00, scaled by 100x?) [Advanced Function Setting] + E_MANUAL_OUTPUT_METHOD = 0x330C, // Manual Output Method (Writable, See E5C_ManualOutputMethod_Param) [Advanced Function Setting] + E_MANUAL_MV_INITIAL_VALUE = 0x330D, // Manual MV Initial Value (Writable, Range: -5.0 to 105.0 or -105.0 to 105.0, depends on control type, scaled by 10x?) [Advanced Function Setting] + E_AT_CALCULATED_GAIN = 0x330F, // AT Calculated Gain value (Writable, Range: H'0001 to H'0064 or 0.1 to 10.0, scaled by 10x?) [Advanced Function Setting] + E_AT_HYSTERESIS = 0x3310, // AT Hysteresis (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 9.99 Analog, scaled?) [Advanced Function Setting] + E_LIMIT_CYCLE_MV_AMPLITUDE= 0x3311, // Limit Cycle MV Amplitude (Writable, Range: H'0032 to H'01F4 or 5.0 to 50.0 %, scaled by 10x?) [Advanced Function Setting] + E_HEATER_BURNOUT_LATCH = 0x3314, // Heater Burnout Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_HEATER_BURNOUT_HYSTERESIS = 0x3315, // Heater Burnout Hysteresis (Writable, Range: H'0001 to H'01F4 or 0.1 to 50.0 A, scaled by 10x?) [Advanced Function Setting] + E_HS_ALARM_LATCH = 0x3316, // HS Alarm Latch (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_HS_ALARM_HYSTERESIS = 0x3317, // HS Alarm Hysteresis (Writable, Range: H'0001 to H'01F4 or 0.1 to 50.0 A, scaled by 10x?) [Advanced Function Setting] + E_NUMBER_OF_MULTI_SP_POINTS = 0x331B, // Number of Multi-SP Points (Writable, See E5C_NumberOfMultiSP_Param) [Advanced Function Setting] + E_HB_ON_OFF = 0x331C, // HB (Heater Break?) ON/OFF (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_INTEGRATED_ALARM_ASSIGNMENT = 0x331E, // Integrated Alarm Assignment (Bitmask) (Writable, Range: H'0000 to H'00FF or 0 to 255) [Advanced Function Setting] + E_MV_AT_STOP_AND_ERROR_ADDITION = 0x3320, // MV at Stop and Error Addition (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_ST_STABLE_RANGE = 0x3321, // ST Stable Range (Writable, Range: H'0001 to H'270F or 0.1 to 999.9, scaled?) [Advanced Function Setting] + E_RT_FLAG = 0x3322, // RT Flag ( unclear meaning, from "RT" ) (Writable, Use E5C_OnOff_Param. Note: Valid only with temp input) [Advanced Function Setting] + E_HS_ALARM_USE = 0x3323, // HS Alarm Use (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_LBA_DETECTION_TIME = 0x3324, // LBA Detection Time (Writable, Range: H'0000 to H'270F or 0 to 9999 s?) [Advanced Function Setting] + E_LBA_LEVEL = 0x3325, // LBA Level (Writable, Range: 0.1 to 999.9 Temp / 0.01 to 99.99 Analog, scaled?) [Advanced Function Setting] + E_LBA_BAND = 0x3326, // LBA Band (Writable, Range: 0.0 to 999.9 Temp / 0.00 to 99.99 Analog, scaled?) [Advanced Function Setting] + E_SOAK_TIME_UNIT = 0x3327, // Soak Time Unit (Writable, See E5C_SoakTimeUnit_Param) [Advanced Function Setting] + E_ALARM_SP_SELECTION = 0x3328, // Alarm SP Selection (Writable, See E5C_AlarmSPSelection_Param) [Advanced Function Setting] + E_REMOTE_SP_ENABLE = 0x3329, // Remote SP Enable (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_MANUAL_MV_LIMIT_ENABLE = 0x332B, // Manual MV Limit Enable (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_DIRECT_SETTING_POS_PROP_MV = 0x332C, // Direct Setting of Position Proportional MV (Writable, Use E5C_OnOff_Param) [Advanced Function Setting] + E_PV_RATE_OF_CHANGE_CALC_PERIOD = 0x332D, // PV Rate of Change Calculation Period (Writable, Range: H'0001 to H'03E7 or 1 to 999) [Advanced Function Setting] + E_HEATING_COOLING_TUNING_METHOD = 0x332E, // Heating/Cooling Tuning Method (Writable, See E5C_HeatingCoolingTuningMethod_Param) [Advanced Function Setting] + E_LCT_COOLING_OUTPUT_MIN_ON_TIME = 0x3335, // LCT Cooling Output Minimum ON Time (Writable, Range: H'0001 to H'000A or 0.1 to 1.0, scaled by 10x? Note: Not supported on version 2.0 or earlier) [Advanced Function Setting] + + // --- Operation Level Parameters (Duplicated Addresses? / Specific Uses) (Addresses ~0x2900 - 0x29FF, Ref Manual Page 5-6/5-7) --- + // These allow setting SPs and Alarm values within the Operation or Adjustment levels, potentially overriding the base settings (0x21xx) when active. + E_SP0_OperationLevel = 0x2900, // SP 0 Setting (Writable, Range: SP lower limit to SP upper limit) [Operation Level] (Likely same as E_SetPoint when SP 0 is selected) + E_AlarmValue1_OperationLevel = 0x2902, // Alarm Value 1 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValue1=0x2104) + E_AlarmValueUpperLimit1_OperationLevel = 0x2903, // Alarm Value Upper Limit 1 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValueUpperLimit1=0x2105) + E_AlarmValueLowerLimit1_OperationLevel = 0x2904, // Alarm Value Lower Limit 1 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValueLowerLimit1=0x2106) + E_AlarmValue2_OperationLevel = 0x2905, // Alarm Value 2 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValue2=0x2107) + E_AlarmValueUpperLimit2_OperationLevel = 0x2906, // Alarm Value Upper Limit 2 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValueUpperLimit2=0x2108) + E_AlarmValueLowerLimit2_OperationLevel = 0x2907, // Alarm Value Lower Limit 2 (Writable, Range: -1999 to 9999) [Operation Level] (Overrides E_AlarmValueLowerLimit2=0x2109) + E_AlarmValue3 = 0x2908, // Alarm Value 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueUpperLimit3 = 0x2909, // Alarm Value Upper Limit 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueLowerLimit3 = 0x290A, // Alarm Value Lower Limit 3 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValue4 = 0x290B, // Alarm Value 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueUpperLimit4 = 0x290C, // Alarm Value Upper Limit 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_AlarmValueLowerLimit4 = 0x290D, // Alarm Value Lower Limit 4 (Writable, Range: -1999 to 9999) [Operation Level] + E_SP1_Setting = 0x290E, // SP 1 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 1) + E_SP2_Setting = 0x291C, // SP 2 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 2) + E_SP3_Setting = 0x292A, // SP 3 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 3) + E_SP4_Setting = 0x2938, // SP 4 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 4) + E_SP5_Setting = 0x2946, // SP 5 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 5) + E_SP6_Setting = 0x2954, // SP 6 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 6) + E_SP7_Setting = 0x2962, // SP 7 Setting (Writable, Range: SP lower limit to SP upper limit) [Adjustment Level] (Value for MultiSP selection 7) + + // --- Adjustment Level PID / MV Limits (Addresses ~0x2A00 - ..., Ref Manual Page 5-7) --- + E_ProportionalBand = 0x2A00, // Proportional Band (Heating, Standard, or Close Position Control) (Writable, Range: 0.1 to 999.9, scaled?) [Adjustment Level] + E_IntegralTime = 0x2A01, // Integral Time (Heating, Standard, or Close Position Control) (Writable, Range depends on time unit setting) [Adjustment Level] + E_DerivativeTime = 0x2A02, // Derivative Time (Heating, Standard, or Close Position Control) (Writable, Range depends on time unit setting) [Adjustment Level] + E_MVUpperLimit = 0x2A05, // MV Upper Limit (%) (Writable, Range depends on control type, see manual, scaled by 10x?) [Adjustment Level] + E_MVLowerLimit = 0x2A06, // MV Lower Limit (%) (Writable, Range depends on control type, see manual, scaled by 10x?) [Adjustment Level] + + // NOTE on Status Registers (e.g., E_Status1, E_Status2_LowerWord, E_Status2_UpperWord): + // These are bitfields. Refer to the E5C Communications Manual Section 5-2 "Status" + // for details on individual bit meanings. Explicit enums for these bits can be added if needed (See examples below). + // Note *1: Not displayed on the Controller display. + // Note *2: In 2-byte mode, the rightmost 16 bits are usually read. + // Note *3: In 2-byte mode, the leftmost 16 bits are usually read. + // This suggests Status 2 (E_Status2_LowerWord/E_Status2_UpperWord) and potentially StatusWord3 (E_StatusWord3_Leftmost) + // might be parts of larger 32-bit status values if the controller supported 4-byte mode reads. +}; + +// --- Parameter Enums for Specific Holding Register Settings --- + +// Parameters for E_OperationAdjustmentProtect (0x2500) +enum class E5C_OperationProtect_Param : uint16_t +{ + E_NoRestrictions = 0x00, // No restrictions in operation and adjustment levels + E_AdjustLevelProhibited = 0x01, // Move to adjustment level is prohibited + E_DisplayChangePV_PVSP = 0x02, // Display and change of only "PV" and "PV/SP" allowed + E_DisplayOnlyPV_PVSP = 0x03, // Display of only "PV" and "PV/SP" allowed +}; + +// Parameters for E_InitialSettingCommsProtect (0x2501) +enum class E5C_InitialProtect_Param : uint16_t +{ + E_MoveToInitialAllowedAdvDisplayed = 0x00, // Move to initial/comms allowed. Adv func displayed. + E_MoveToInitialAllowedAdvNotDisplayed= 0x01, // Move to initial/comms allowed. Adv func not displayed. + E_MoveToInitialProhibited = 0x02, // Move to initial/comms prohibited. +}; + +// Parameters for E_SettingChangeProtect (0x2502) +enum class E5C_SettingChangeProtect_Param : uint16_t +{ + E_OffChangeAllowed = 0x00, // OFF (Changing settings via front panel allowed) + E_OnChangeProhibited = 0x01, // ON (Changing settings via front panel prohibited) +}; + +// Parameters for E_PF_KeyProtect (0x2503) - Reuse E5C_OnOff_Param +// Parameters for E_ParameterMaskEnable (0x2506) - Reuse E5C_OnOff_Param +// Parameters for E_ChangedParametersOnly (0x2507) - Reuse E5C_OnOff_Param + +// --- Special Values / Parameter Enums for specific registers --- + +// Special values for E_ControlPeriodHeating (0x2708) and E_ControlPeriodCooling (0x2709) +// Note: Positive values 1 to 99 represent seconds directly. Use raw integers for those. +enum class E5C_ControlPeriod_SpecialVal : int16_t // Use signed type for negative values +{ + E_Period_0_1_Sec = -2, // Represents 0.1 seconds + E_Period_0_2_Sec = -1, // Represents 0.2 seconds + E_Period_0_5_Sec = 0, // Represents 0.5 seconds + // Values 1..99 are direct seconds, do not add them here. Must be written as int16_t. +}; + +// Parameters for E_SPRampTimeUnit (0x270C) +enum class E5C_SPRampTimeUnit_Param : uint16_t +{ + E_EU_Per_Second = 0, // Unit is Engineering Unit / second + E_EU_Per_Minute = 1, // Unit is Engineering Unit / minute + E_EU_Per_Hour = 2, // Unit is Engineering Unit / hour +}; + +// Special value for E_SPRampSetValue (0x270D) +// Note: Positive values 1 to 9999 represent the rate directly. Use raw integers for those. +enum class E5C_SPRampSetValue_SpecialVal : uint16_t +{ + E_Off = 0, // SP Ramp Set is OFF + // Values 1..9999 are direct rates, do not add them here. Must be written as uint16_t. +}; + +// Special values for E_SPRampFallValue (0x270E) +// Note: Positive values 1 to 9999 represent the rate directly. Use raw integers for those. +enum class E5C_SPRampFallValue_SpecialVal : int16_t // Use signed type for negative value +{ + E_SameAsSet = -1, // Fall rate is same as Set rate (defined by 0x270D) + E_Off = 0, // SP Ramp Fall is OFF + // Values 1..9999 are direct rates, do not add them here. Must be written as int16_t. +}; + +// Special value for E_WaitBand (0x272A) +// Note: Positive values represent the band width directly (needs scaling based on Temp/Analog input). +// Use raw values for setting the width. +enum class E5C_WaitBand_SpecialVal : uint16_t +{ + E_Off = 0, // Wait Band function is OFF + // Other values represent the actual width. +}; + +// Parameters for E_MovingAverageCount (0x2804) +enum class E5C_MovingAverageCount_Param : uint16_t +{ + E_Off = 0, // Moving Average OFF + E_2_Times = 1, // Moving Average Count: 2 times + E_4_Times = 2, // Moving Average Count: 4 times + E_8_Times = 3, // Moving Average Count: 8 times + E_16_Times= 4, // Moving Average Count: 16 times + E_32_Times= 5, // Moving Average Count: 32 times +}; + +// Parameters for E_InputType (0x2C00) [Initial Setting Level] +enum class E5C_InputType_Param : uint16_t +{ + E_Pt_neg200_850C = 0, // Pt (-200 to 850°C / -300 to 1500°F) + E_Pt_neg199_500C_1DP = 1, // Pt (-199.9 to 500.0°C / -199.9 to 900.0°F) + E_Pt_0_100C_1DP = 2, // Pt (0.0 to 100.0°C / 0.0 to 210.0°F) + E_JPt_neg199_500C_1DP = 3, // JPt (-199.9 to 500.0°C / -199.9 to 900.0°F) + E_JPt_0_100C_1DP = 4, // JPt (0.0 to 100.0°C / 0.0 to 210.0°F) + E_K_neg200_1300C = 5, // K (-200 to 1300°C / -300 to 2300°F) + E_K_neg20_500C_1DP = 6, // K (-20.0 to 500.0°C / 0.0 to 900.0°F) + E_J_neg100_850C = 7, // J (-100 to 850°C / -100 to 1500°F) + E_J_neg20_400C_1DP = 8, // J (-20.0 to 400.0°C / 0.0 to 750.0°F) + E_T_neg200_400C = 9, // T (-200 to 400°C / -300 to 700°F) + E_T_neg199_400C_1DP = 10, // T (-199.9 to 400.0°C / -199.9 to 700.0°F) + E_E_neg200_600C = 11, // E (-200 to 600°C / -300 to 1100°F) + E_L_neg100_850C = 12, // L (-100 to 850°C / -100 to 1500°F) + E_U_neg200_400C = 13, // U (-200 to 400°C / -300 to 700°F) + E_U_neg199_400C_1DP = 14, // U (-199.9 to 400.0°C / -199.9 to 700.0°F) + E_N_neg200_1300C = 15, // N (-200 to 1300°C / -300 to 2300°F) + E_R_0_1700C = 16, // R (0 to 1700°C / 0 to 3000°F) + E_S_0_1700C = 17, // S (0 to 1700°C / 0 to 3000°F) + E_B_100_1800C = 18, // B (100 to 1800°C / 300 to 3200°F) + E_W_0_2300C = 19, // W (0 to 2,300°C / 0 to 3,200°F) + E_PLII_0_1300C = 20, // PLII (0 to 1,300°C / 0 to 2,300°F) + E_IR_K_140F_60C = 21, // Infrared temperature sensor (K 140°F/60°C) + E_IR_K_240F_120C = 22, // Infrared temperature sensor (K 240°F/120°C) + E_IR_K_280F_140C = 23, // Infrared temperature sensor (K 280°F/140°C) + E_IR_K_440F_220C = 24, // Infrared temperature sensor (K 440°F/220°C) + E_Analog_4_20MA = 25, // 4 to 20 mA + E_Analog_0_20MA = 26, // 0 to 20 mA + E_Analog_1_5V = 27, // 1 to 5 V + E_Analog_0_5V = 28, // 0 to 5 V + E_Analog_0_10V = 29, // 0 to 10 V + E_Analog_0_50MV = 30, // 0 to 50 mV (Only E5CC-U v2.2+ May 2014 or later) +}; + +// Parameters for E_TemperatureUnit (0x2C01) [Initial Setting Level] +enum class E5C_TemperatureUnit_Param : uint16_t +{ + E_Celsius = 0, // °C + E_Fahrenheit = 1, // °F +}; + +// Parameters for E_DecimalPoint (0x2C0C) [Advanced Function Setting Level] +enum class E5C_DecimalPoint_Param : uint16_t +{ + E_DP_0 = 0, // No decimal point (XXXX) + E_DP_1 = 1, // One decimal place (XXX.X) + E_DP_2 = 2, // Two decimal places (XX.XX) + E_DP_3 = 3, // Three decimal places (X.XXX) +}; + +// Parameters for E_PVDecimalPointDisplay (0x2C0F) - Reuse E5C_OnOff_Param + +// Parameters for E_ControlOutput1Signal (0x2D03) and E_ControlOutput2Signal (0x2D04) [Initial Setting Level] +// Applicable for models with Linear Current Output +enum class E5C_ControlOutputSignal_Param : uint16_t +{ + E_4_20MA = 0, // 4 to 20 mA + E_0_20MA = 1, // 0 to 20 mA + // Note: Check manual if voltage options exist for these registers on specific models +}; + +// Parameters for E_StandardOrHeatingCooling (0x2D11) [Initial Setting Level] +enum class E5C_ControlMode_Param : uint16_t +{ + E_Standard = 0, // Standard control (Heating OR Cooling, depending on wiring/config) + E_HeatingAndCooling = 1, // Heating and Cooling control +}; + +// Parameters for E_DirectReverseOperation (0x2D12) [Initial Setting Level] +enum class E5C_DirectReverseOperation_Param : uint16_t +{ + E_ReverseOperation = 0, // PID Reverse operation (e.g., heating - MV increases as PV decreases) + E_DirectOperation = 1, // PID Direct operation (e.g., cooling - MV increases as PV increases) +}; + +// Parameters for E_CloseFloating (0x2D13) [Initial Setting Level] +// Only for Position-proportional Models +enum class E5C_CloseFloating_Param : uint16_t +{ + E_Floating = 0, + E_Close = 1, +}; + +// Parameters for E_PidOnOff (0x2D14) [Initial Setting Level] +enum class E5C_PidOnOff_Param : uint16_t +{ + E_ONOFF_CONTROL = 0, // Use ON/OFF control + E_PID_CONTROL = 1, // Use 2-PID control (or standard PID if 2-PID not applicable) +}; + +// Parameters for E_ST_Setting (0x2D15) - Reuse E5C_OnOff_Param + +// Parameters for E_ProgramPattern (0x2D16) [Initial Setting Level] +enum class E5C_ProgramPattern_Param : uint16_t +{ + E_Off = 0, // Program Pattern function OFF (normal control) + E_Stop = 1, // Program Pattern STOP (reset or initial state) + E_Cont = 2, // Program Pattern CONTINUE (running) +}; + +// Parameters for E_RemoteSPInputType (0x2D18) [Advanced Function Setting Level] +enum class E5C_RemoteSPInputType_Param : uint16_t +{ + E_4_20MA = 0, + E_0_20MA = 1, + E_1_5V = 2, + E_0_5V = 3, + E_0_10V = 4, +}; + +// Parameters for E_TransferOutputType (0x2E00) [Initial Setting Level] +enum class E5C_TransferOutputType_Param : uint16_t +{ + E_Off = 0, // Transfer Output OFF + E_SetPoint = 1, // Output Set Point value + E_SetPointRamp = 2, // Output Set Point during SP ramp + E_PV = 3, // Output Process Value + E_MV_Heating = 4, // Output Manipulated Value (Heating) + E_MV_Cooling = 5, // Output Manipulated Value (Cooling) + E_ValveOpening = 6, // Output Valve Opening (% - Only for Position-proportional Models) +}; + +// Parameters for E_TransferOutputSignal (0x2E01) [Initial Setting Level] +enum class E5C_TransferOutputSignal_Param : uint16_t +{ + E_4_20MA = 0, + E_1_5V = 1, +}; + +// Parameters for E_ControlOutput1Assignment (0x2E06), E_ControlOutput2Assignment (0x2E07) +// and Auxiliary Output Assignments (0x2E10 - 0x2E13) +// Ref Manual Page 5-9 and 5-10. [Advanced Function Setting Level] +enum class E5C_ControlOutputAssignment_Param : int16_t // Use signed type for negative values +{ + E_ASSIGN_NotAssigned = 0, + E_ASSIGN_ControlOutputHeating = 1, + E_ASSIGN_ControlOutputCooling = 2, + E_ASSIGN_Alarm1 = 3, + E_ASSIGN_Alarm2 = 4, + E_ASSIGN_Alarm3 = 5, + E_ASSIGN_Alarm4 = 6, + E_ASSIGN_HeaterAlarm = 7, // General heater alarm? (Could be HB or HS depending on config) + E_ASSIGN_HB_Alarm = 8, // Heater Break alarm + E_ASSIGN_HS_Alarm = 9, // Heater Short alarm + E_ASSIGN_InputError = 10, // PV Input Error + E_ASSIGN_RSP_InputError = 11, // Remote SP input error + E_ASSIGN_ProgramEndOutput = 12, // Note *1 from page 5-9: P.END can only be set if Program Pattern (0x2D16) is set to OFF + E_ASSIGN_RUN_Output = 13, // Indicates RUN state + E_ASSIGN_IntegratedAlarm = 14, // OR combination of selected alarms + E_ASSIGN_WorkBit1 = 15, + E_ASSIGN_WorkBit2 = 16, + E_ASSIGN_WorkBit3 = 17, + E_ASSIGN_WorkBit4 = 18, + E_ASSIGN_WorkBit5 = 19, + E_ASSIGN_WorkBit6 = 20, + E_ASSIGN_WorkBit7 = 21, + E_ASSIGN_WorkBit8 = 22, + + // Special values for Linear Current Output (Only for OUT1 on E5CC-U/E5GC May 2014+ / v2.2+ models, see Note *2 from page 5-9) + // Typically NOT applicable to Auxiliary Output Assignments (0x2E10-0x2E13) or OUT2 Assignment (0x2E07) + E_ASSIGN_SimpleTransfer_MV_Cooling = -5, // (FFFF FFFB) Simple MV transfer (cooling) + E_ASSIGN_SimpleTransfer_MV_Heating = -4, // (FFFF FFFC) Simple MV transfer (heating) + E_ASSIGN_SimpleTransfer_PV = -3, // (FFFF FFFD) Simple PV transfer + E_ASSIGN_SimpleTransfer_Ramp_SP = -2, // (FFFF FFFE) Simple SP transfer (during ramp) + E_ASSIGN_SimpleTransfer_SP = -1 // (FFFF FFFF) Simple SP transfer +}; + +// Parameters for Event Input Assignments (0x2E0A - 0x2E0F) [Initial Setting Level] +// Ref Manual Page 5-10 +enum class E5C_EventInputAssignment_Param : uint16_t +{ + E_EV_None = 0, // None + E_EV_RunStop = 1, // RUN/STOP + E_EV_AutoManualSwitch = 2, // Auto/Manual Switch + E_EV_ProgramStart = 3, // Program Start (Note *1 from pg 5-10: only if prog pattern is OFF) + E_EV_DirectReverseOperation = 4, // Direct/Reverse Operation switch + E_EV_SPModeSwitch = 5, // SP Mode Switch (Local/Remote) (Note *2 from pg 5-10: only if remote SP input) + E_EV_ATExecuteCancel_100 = 6, // 100% AT Execute/Cancel + E_EV_ATExecuteCancel_40 = 7, // 40% AT Execute/Cancel + E_EV_SettingChangeEnableDisable = 8, // Setting Change Enable/Disable + E_EV_CommsWritingEnableDisable = 9, // Communications Writing Enable/Disable (Note *3 from pg 5-10: only if external comms supported) + E_EV_AlarmLatchCancel = 10, // Alarm Latch Cancel + E_EV_MultiSP_Switch_Bit0 = 11, // Multi-SP No. Switch, Bit 0 + E_EV_MultiSP_Switch_Bit1 = 12, // Multi-SP No. Switch, Bit 1 + E_EV_MultiSP_Switch_Bit2 = 13, // Multi-SP No. Switch, Bit 2 +}; + +// Parameters for Alarm Latch (0x2F01, 0x2F04, 0x2F07, 0x2F0A) - Use E5C_OnOff_Param + +// Parameters for Alarm Types (0x2F00, 0x2F03, 0x2F06, 0x2F09) +enum class E5C_AlarmType_Param : uint16_t +{ + E_AlarmFunctionOff = 0, // Alarm function OFF + E_UpperLowerLimit = 1, // Upper and lower-limit alarm + E_UpperLimit = 2, // Upper-limit alarm + E_LowerLimit = 3, // Lower-limit alarm + E_UpperLowerRange = 4, // Upper and lower-limit range alarm + E_UpperLowerLimitStandby = 5, // Upper and lower-limit alarm with standby sequence + E_UpperLimitStandby = 6, // Upper-limit alarm with standby sequence + E_LowerLimitStandby = 7, // Lower-limit alarm with standby sequence + E_AbsoluteUpperLimit = 8, // Absolute-value upper-limit alarm + E_AbsoluteLowerLimit = 9, // Absolute-value lower-limit alarm + E_AbsoluteUpperLimitStandby = 10, // Absolute-value upper-limit alarm with standby sequence + E_AbsoluteLowerLimitStandby = 11, // Absolute-value lower-limit alarm with standby sequence + E_LBA = 12, // LBA (Loop Burnout Alarm) (Not settable for Alarms 2, 3, 4) + E_PVChangeRate = 13, // PV change rate alarm + E_SPAbsoluteUpperLimit = 14, // SP absolute-value upper-limit alarm + E_SPAbsoluteLowerLimit = 15, // SP absolute-value lower-limit alarm + E_MVAbsoluteUpperLimit = 16, // MV absolute-value upper-limit alarm + E_MVAbsoluteLowerLimit = 17, // MV absolute-value lower-limit alarm + E_RSPAbsoluteUpperLimit = 18, // RSP absolute-value upper-limit alarm (Only with remote SP input) + E_RSPAbsoluteLowerLimit = 19, // RSP absolute-value lower-limit alarm (Only with remote SP input) +}; + +// Parameters for Standby Sequence Reset (0x2F0C) [Advanced Function Setting] +enum class E5C_StandbySequenceReset_Param : uint16_t +{ + E_ConditionA = 0, // Condition A (Reset when deviation enters non-alarm range OR power ON/Run mode start) + E_ConditionB = 1, // Condition B (Reset only when deviation enters non-alarm range) +}; + +// Parameters for Auxiliary Output Open/Close in Alarm (0x2F0D - 0x2F10) [Advanced Function Setting] +enum class E5C_AuxOutputOpenInAlarm_Param : uint16_t +{ + E_CloseInAlarm = 0, // Output CLOSES (becomes energized/active low depending on hardware) when the assigned alarm is ON + E_OpenInAlarm = 1, // Output OPENS (becomes de-energized/active high depending on hardware) when the assigned alarm is ON +}; + +// Parameters for PV/SP No. 1/2 Display Selection (0x3000, 0x3008) +enum class E5C_PVSP_DisplaySelection_Param : uint16_t +{ + E_NothingDisplayed = 0, + E_PV_SP = 1, // PV/SP (Normal display) + E_PV = 2, // PV Only + E_PV_SP_Char = 3, // PV/SP (Character display) + E_PV_SP_MV = 4, // PV/SP/Manipulated Value + E_PV_SP_MultiSP_No = 5, // PV/SP/Multi-SP No. + E_PV_SP_SoakTimeRemain = 6, // PV/SP/Soak time remain + E_PV_SP_RampSP = 7, // PV/SP/Ramp SP + E_PV_SP_AlarmValue1 = 8, // PV/SP/Alarm Value 1 +}; + +// Parameters for MV Display Selection (0x3001) +enum class E5C_MV_DisplaySelection_Param : uint16_t +{ + E_MV_Heating = 0, + E_MV_Cooling = 1, +}; + +// Special value for Auto Display Return Time (0x3003) +enum class E5C_AutoDisplayReturnTime_SpecialVal : uint16_t +{ + E_Off = 0, + // Values 1-99 represent seconds directly +}; + +// Parameters for Display Refresh Period (0x3004) +enum class E5C_DisplayRefreshPeriod_Param : uint16_t +{ + E_Off = 0, // No Refresh (?) - Check Manual for exact meaning + E_0_25s = 1, // 0.25 seconds + E_0_5s = 2, // 0.5 seconds + E_1_0s = 3, // 1.0 second +}; + +// Parameters for MV Display (0x300B) - Reuse E5C_OnOff_Param +// Parameters for Auto/Manual Select Addition (0x300F) - Reuse E5C_OnOff_Param + +// Parameters for PV/SV Status Display Function (0x3011, 0x3012) +enum class E5C_PV_StatusDisplayFunction_Param : uint16_t +{ + E_Off = 0, + E_Manual = 1, // Manual mode status + E_Stop = 2, // Stop status + E_Alarm1 = 3, // Alarm 1 status + E_Alarm2 = 4, // Alarm 2 status + E_Alarm3 = 5, // Alarm 3 status + E_Alarm4 = 6, // Alarm 4 status + E_Alarm1To4_OR_Status = 7, // OR of Alarm 1-4 status + E_HeaterAlarm = 8, // Heater alarm status (HB or HS) + E_StatusDisplayMsg = 9, // Status display message (E5GC only) +}; + + +// --- Communication Setting Parameters (from page 5-14) --- + +// Parameters for E_PROTOCOL_SETTING (0x3100) +enum class E5C_ProtocolSetting_Param : uint16_t +{ + E_CompoWayF = 0, + E_Modbus = 1, +}; + +// Parameters for E_COMMUNICATIONS_BAUD_RATE (0x3102) +enum class E5C_BaudRate_Param : uint16_t +{ + E_BR_9600 = 3, + E_BR_19200 = 4, + E_BR_38400 = 5, + E_BR_57600 = 6, + // Note: Lower baud rates might be available on older models +}; + +// Parameters for E_COMMUNICATIONS_DATA_LENGTH (0x3103) +enum class E5C_DataLength_Param : uint16_t +{ + E_DL_7_BITS = 7, + E_DL_8_BITS = 8, +}; + +// Parameters for E_COMMUNICATIONS_STOP_BITS (0x3104) +enum class E5C_StopBits_Param : uint16_t +{ + E_SB_1 = 1, + E_SB_2 = 2, +}; + +// Parameters for E_COMMUNICATIONS_PARITY (0x3105) +enum class E5C_Parity_Param : uint16_t +{ + E_None = 0, + E_Even = 1, + E_Odd = 2, +}; + +// Parameters for E_PF_SETTING (0x3200) [Advanced Function Setting] +enum class E5C_PF_Setting_Param : uint16_t +{ + E_Disabled = 0, // PF key function disabled + E_Run = 1, // RUN + E_Stop = 2, // STOP + E_RunStop = 3, // RUN/STOP toggle + E_ATExecuteCancel100 = 4, // Execute/cancel 100% AT + E_ATExecuteCancel40 = 5, // Execute/cancel 40% AT + E_AlarmLatchCancel = 6, // Cancel alarm latch + E_AutoManualSwitch = 7, // Auto/Manual switch + E_MonitorSettingItem = 8, // Switch Monitor/Setting Item + E_DigitShiftKey = 9, // Digit shift key +}; + +// Parameters for Monitor/Setting Items (0x3202 - 0x3206) [Advanced Function Setting] +// Used when E_PF_SETTING = E_MonitorSettingItem (8) +enum class E5C_MonitorSettingItem_Param : uint16_t +{ + E_ITEM_Disabled = 0, + E_ITEM_PV_SP_MultiSP = 1, + E_ITEM_PV_SP_MV = 2, + E_ITEM_PV_SP_SoakTimeRemain = 3, + E_ITEM_ProportionalBand = 4, + E_ITEM_IntegralTime = 5, + E_ITEM_DerivativeTime = 6, + E_ITEM_AlarmValue1 = 7, + E_ITEM_AlarmValueUpperLimit1 = 8, + E_ITEM_AlarmValueLowerLimit1 = 9, + E_ITEM_AlarmValue2 = 10, + E_ITEM_AlarmValueUpperLimit2 = 11, + E_ITEM_AlarmValueLowerLimit2 = 12, + E_ITEM_AlarmValue3 = 13, + E_ITEM_AlarmValueUpperLimit3 = 14, + E_ITEM_AlarmValueLowerLimit3 = 15, + E_ITEM_AlarmValue4 = 16, + E_ITEM_AlarmValueUpperLimit4 = 17, + E_ITEM_AlarmValueLowerLimit4 = 18, + E_ITEM_PV_SP_InternalSetPoint = 19, + E_ITEM_PV_SP_AlarmValue1_Alt = 20, // Different display? Name matches item 7 + E_ITEM_ProportionalBand_Cooling = 21, + E_ITEM_IntegralTime_Cooling = 22, + E_ITEM_DerivativeTime_Cooling = 23, +}; + + +// --- Parameter Enums Added from Page 5-15 / 5-16 --- + +// Parameters for E_INTEGRAL_DERIVATIVE_TIME_UNIT (0x3309) +enum class E5C_IntegralDerivativeTimeUnit_Param : uint16_t +{ + E_Unit_1_Sec = 0, // Seconds (e.g., Integral/Derivative times are 0-9999 s) + E_Unit_0_1_Sec = 1, // 0.1 Seconds (e.g., Integral/Derivative times are 0.0-999.9 s) +}; + +// Parameters for E_MANUAL_OUTPUT_METHOD (0x330C) +enum class E5C_ManualOutputMethod_Param : uint16_t +{ + E_Hold = 0, // Hold last value when switching to Manual + E_Init = 1, // Use Manual MV Initial Value (0x330D) when switching to Manual +}; + +// Parameters for E_NUMBER_OF_MULTI_SP_POINTS (0x331B) +enum class E5C_NumberOfMultiSP_Param : uint16_t +{ + E_MultiSP_Off = 1, // Multi-SP function disabled + E_MultiSP_2 = 2, // 2 SPs enabled (SP0, SP1) + E_MultiSP_3 = 3, // 3 SPs enabled (SP0-SP2) + E_MultiSP_4 = 4, // 4 SPs enabled (SP0-SP3) + E_MultiSP_5 = 5, // 5 SPs enabled (SP0-SP4) + E_MultiSP_6 = 6, // 6 SPs enabled (SP0-SP5) + E_MultiSP_7 = 7, // 7 SPs enabled (SP0-SP6) + E_MultiSP_8 = 8, // 8 SPs enabled (SP0-SP7) +}; + +// Parameters for E_SOAK_TIME_UNIT (0x3327) +enum class E5C_SoakTimeUnit_Param : uint16_t +{ + E_Minutes = 0, + E_Hours = 1, + E_Seconds = 2, // Note: E5GC only +}; + +// Parameters for E_ALARM_SP_SELECTION (0x3328) +enum class E5C_AlarmSPSelection_Param : uint16_t +{ + E_SetPointDuringSPRamp = 0, // Alarm calculation based on SP during ramp + E_SetPoint = 1, // Alarm calculation based on final SP target +}; + +// Parameters for E_HEATING_COOLING_TUNING_METHOD (0x332E) +enum class E5C_HeatingCoolingTuningMethod_Param : uint16_t +{ + E_SAME_AS_HEATING = 0, // Same as heating control (Default) + E_LINEAR = 1, // Linear + E_AIR_COOLING = 2, // Air cooling + E_WATER_COOLING = 3, // Water cooling +}; + + +// --- Enums for Status Register Bits (Refer to Manual Section 5-2) --- +// These are *examples* and need to be carefully verified against the specific E5C model manual. +// Define these if you need to decode individual status bits from registers like E_Status1, E_Status2_LowerWord, etc. + +/* +// Example bits for E_Status1 (0x2001) / E_Status1_StatusArea (0x2406) +enum class E5C_Status1_Bits : uint16_t +{ + E_S1_Alarm1_Output = (1 << 0), // Bit 0: Alarm 1 Output Status (0: OFF, 1: ON) + E_S1_Alarm2_Output = (1 << 1), // Bit 1: Alarm 2 Output Status + E_S1_Alarm3_Output = (1 << 2), // Bit 2: Alarm 3 Output Status + E_S1_Alarm4_Output = (1 << 3), // Bit 3: Alarm 4 Output Status (?) + E_S1_HeaterBurnout1 = (1 << 4), // Bit 4: Heater Burnout 1 Status + E_S1_HeaterBurnout2 = (1 << 5), // Bit 5: Heater Burnout 2 Status + E_S1_RunMode = (1 << 8), // Bit 8: RUN/STOP Status (0: STOP, 1: RUN) + E_S1_AutoTuning = (1 << 9), // Bit 9: AT Execution Status (0: OFF, 1: ON) + E_S1_TaskOperating = (1 << 10), // Bit 10: Task Operating Status (Programs) + E_S1_CommWritingDisabled= (1 << 11), // Bit 11: Communications Writing Disabled Status + E_S1_ManualMode = (1 << 12), // Bit 12: Auto/Manual Mode Status (0: Auto, 1: Manual) + E_S1_RemoteSP_Mode = (1 << 13), // Bit 13: SP Mode (0: Local, 1: Remote) + // ... add other relevant bits based on manual section 5-2 +}; +*/ + +/* +// Example bits for E_Status2_LowerWord (0x2408) +enum class E5C_Status2Lower_Bits : uint16_t +{ + E_S2L_RAM_Error = (1 << 0), // Bit 0: RAM Error + E_S2L_MemoryError = (1 << 1), // Bit 1: Memory Error (Non-volatile) + E_S2L_ADC_Error = (1 << 2), // Bit 2: A/D Converter Error + E_S2L_InputTypeError = (1 << 3), // Bit 3: Input Type Error + E_S2L_WatchdogTimeout = (1 << 4), // Bit 4: Watchdog Timer Timeout + E_S2L_OverrunError = (1 << 5), // Bit 5: Overrun Error (Communications?) + E_S2L_FramingError = (1 << 6), // Bit 6: Framing Error (Communications?) + E_S2L_ParityError = (1 << 7), // Bit 7: Parity Error (Communications?) + E_S2L_CommsTimeoutError = (1 << 8), // Bit 8: Communications Timeout Error + E_S2L_CommsError = (1 << 9), // Bit 9: Communications Error (General?) + E_S2L_CommsBufferOverrun = (1 << 10),// Bit 10: Communications Buffer Overrun Error + E_S2L_PowerSupplyFreqError = (1 << 11),// Bit 11: Power Supply Frequency Error + // ... add other relevant bits based on manual section 5-2 +}; + */ + +/* +// Example bits for E_Status2_UpperWord (0x2409) - Note: Bit numbering starts from 16 conceptually +enum class E5C_Status2Upper_Bits : uint16_t +{ + E_S2U_PV_InputError = (1 << 0), // Bit 16 (0 in upper word): PV Input Error (Over/Under Range or Disconnect) + E_S2U_RemoteSPInputError = (1 << 1), // Bit 17 (1 in upper word): Remote SP Input Error (Over/Under Range) + E_S2U_MVOutputError = (1 << 2), // Bit 18 (2 in upper word): MV Output Error + E_S2U_ExternalDIError = (1 << 3), // Bit 19 (3 in upper word): Error via External DI (Digital Input) + E_S2U_HeaterShortAlarm1 = (1 << 4), // Bit 20 (4 in upper word): HS (Heater Short) Alarm 1 Status + E_S2U_HeaterShortAlarm2 = (1 << 5), // Bit 21 (5 in upper word): HS (Heater Short) Alarm 2 Status + // E_S2U_TempSensorDisconnected= (1 << 6), // Bit 22 (6 in upper word): (Not explicitly listed, PV Input Error likely covers this) + // ... add other relevant bits based on manual section 5-2 +}; +*/ + +#endif // E5C_MODBUS_REGISTERS_HPP