using Sick.Tim781s.Colab; using Sick.Tim781s.Colab.Commands; using Sick.Tim781s.Colab.Communication; namespace Sick.Tim781s.Colab; /// /// Main class for communicating with SICK TiM781s scanner using ColaB protocol /// public sealed class Tim781sScanner : IDisposable { private readonly ColaBSession _session; private readonly TcpClient _tcpClient; private bool _disposed; public Tim781sScanner(string ipAddress, ushort port = 2112) { _tcpClient = new TcpClient(ipAddress, port); _session = new ColaBSession(_tcpClient); } /// /// Connects to the scanner /// public void Connect(int timeoutMs = 5000) { _session.Open(timeoutMs); } /// /// Disconnects from the scanner /// public void Disconnect() { _session.Close(); } /// /// Gets whether the scanner is connected /// public bool IsConnected => _session.IsOpen; /// /// Reads device identification /// public string? ReadDeviceIdent(int timeoutMs = 5000) { var command = new ReadCommand("DeviceIdent"); _session.ExecuteCommand(command, timeoutMs); return command.ReplyValue; } /// /// Reads serial number /// public string? ReadSerialNumber(int timeoutMs = 5000) { var command = new ReadCommand("SerialNumber"); _session.ExecuteCommand(command, timeoutMs); return command.ReplyValue; } /// /// Reads firmware version /// public string? ReadFirmwareVersion(int timeoutMs = 5000) { var command = new ReadCommand("FirmwareVersion"); _session.ExecuteCommand(command, timeoutMs); return command.ReplyValue; } /// /// Starts measurement /// public bool StartMeasurement(int timeoutMs = 5000) { var command = new MethodCommand("mNEVAChangeState", "1"); // 1 = measurement mode _session.ExecuteCommand(command, timeoutMs); return command.WasSuccessful; } /// /// Stops measurement /// public bool StopMeasurement(int timeoutMs = 5000) { var command = new MethodCommand("mNEVAChangeState", "0"); // 0 = standby mode _session.ExecuteCommand(command, timeoutMs); return command.WasSuccessful; } /// /// Executes a custom read command /// public string? ExecuteRead(string variableName, int timeoutMs = 5000) { var command = new ReadCommand(variableName); _session.ExecuteCommand(command, timeoutMs); return command.ReplyValue; } /// /// Executes a custom write command /// public bool ExecuteWrite(string variableName, string value, int timeoutMs = 5000) { var command = new WriteCommand(variableName, value); _session.ExecuteCommand(command, timeoutMs); return command.WasSuccessful; } /// /// Executes a custom method command /// public string? ExecuteMethod(string methodName, params string[] parameters) { var command = new MethodCommand(methodName, parameters); _session.ExecuteCommand(command); return command.ReplyValue; } public void Dispose() { if (_disposed) return; _session?.Dispose(); _tcpClient?.Dispose(); _disposed = true; } }