Testing polling for the Watlow F4SD; register #100
Signed-off-by: mharb <mharb@noreply.localhost>
This commit is contained in:
88
watlow-f4sd/ModbusWatlowRamp/Program.cs
Normal file
88
watlow-f4sd/ModbusWatlowRamp/Program.cs
Normal file
@@ -0,0 +1,88 @@
|
||||
using Modbus.Device; // NModbus namespace
|
||||
using System.Net.Sockets;
|
||||
|
||||
internal class Program
|
||||
{
|
||||
// Configuration
|
||||
private const string hostname = "127.0.0.1"; // Replace with your Watlow F4 IP
|
||||
|
||||
private const int port = 502;
|
||||
private const byte slaveId = 0;
|
||||
|
||||
// Register 100 should be the first read-only input on the F4
|
||||
// Value 99 or 100 should work depending on zero indexing
|
||||
private const ushort loadRegister = 99;
|
||||
|
||||
private static void Main(string[] args)
|
||||
{
|
||||
TcpClient tcpClient = null;
|
||||
ModbusIpMaster master = null;
|
||||
|
||||
try
|
||||
{
|
||||
// Initialize connection
|
||||
tcpClient = new TcpClient(hostname, port);
|
||||
master = ModbusIpMaster.CreateIp(tcpClient);
|
||||
|
||||
// Monitor continuously
|
||||
while (true)
|
||||
{
|
||||
// Check for Escape key press
|
||||
if (Console.KeyAvailable)
|
||||
{
|
||||
ConsoleKeyInfo key = Console.ReadKey(true);
|
||||
if (key.Key == ConsoleKey.Escape)
|
||||
{
|
||||
Console.WriteLine("Escape pressed. Exiting...");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// Read load value (holding register)
|
||||
ushort[] registers = master.ReadHoldingRegisters(slaveId, loadRegister, 1);
|
||||
int load = registers[0];
|
||||
|
||||
// Display load info
|
||||
DisplayLoadInfo(load);
|
||||
|
||||
// Pause before next read
|
||||
Thread.Sleep(1000);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"Error: {ex.Message}");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"Initialization error: {ex.Message}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
// Clean up
|
||||
master?.Dispose();
|
||||
tcpClient?.Close();
|
||||
}
|
||||
}
|
||||
|
||||
private static void DisplayLoadInfo(int load)
|
||||
{
|
||||
Console.Clear(); // Clears the console
|
||||
|
||||
// Assume load is 0-65535 for 0.00-100.00% (16-bit range)
|
||||
int percent = (int)load / 65535 * 100;
|
||||
int barLength = (int)(percent / 2); // Scale to 50 chars for console
|
||||
|
||||
Console.WriteLine($"Load Value: {load}");
|
||||
Console.WriteLine($"Load Percentage: {percent:F2}%");
|
||||
Console.Write("Bar Graph: [");
|
||||
Console.Write(new string('=', barLength));
|
||||
Console.Write(new string(' ', 50 - barLength));
|
||||
Console.WriteLine("]");
|
||||
Console.WriteLine("\nHold ESC to exit.");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user