mharb 4c83529292 Check-in Source P.2
Signed-off-by: mharb <mharb@noreply.localhost>
2025-08-02 19:40:47 -04:00

60 lines
1.7 KiB
C#

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);
}
}
}