using System; using Modbus.Device; using static System.Console; namespace ProtosXdigitalDemo { internal class OutputExerciser { private readonly ModbusIpMaster _master; public OutputExerciser(ModbusIpMaster master) { _master = master; } public void RunSequence() { SetAllOutputs(false, "Turning all outputs OFF…"); WaitForKey("Press any key to turn outputs ON…"); SetAllOutputs(true, "Turning all outputs ON…"); WaitForKey("Press any key to turn outputs OFF and finish…"); SetAllOutputs(false, "Turning all outputs OFF…"); } private void SetAllOutputs(bool state, string message) { WriteLine(message); UpdateMachineState(state); int result = WriteMachineDigitalStateToIO.WriteMachineStateToIO(_master, 0); if (result == Data.MachineState.failureCode[0]) { WriteLine($"All digital outputs are now {(state ? "ON" : "OFF")}"); } else { WriteLine("[Error] Writing machine-state failed"); WaitForKey("Press any key to exit…"); Environment.Exit(Data.MachineState.failureCode[1]); } } private void UpdateMachineState(bool state) { for (int i = 0; i < Data.MachineState.digitalOutputChannels.Length; i++) { Data.MachineState.digitalOutputChannels[i] = state; } } private void WaitForKey(string prompt) { WriteLine(prompt); ReadKey(intercept: true); } } }