60 lines
1.7 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|