public ModbusMasterTcpConnection(TcpClient client, IModbusSlaveNetwork slaveNetwork, IModbusLogger logger) : base(new ModbusIpTransport(new TcpClientAdapter(client), logger)) { Logger = logger ?? throw new ArgumentNullException(nameof(logger)); _client = client ?? throw new ArgumentNullException(nameof(client)); _endPoint = client.Client.RemoteEndPoint.ToString(); _stream = client.GetStream(); _slaveNetwork = slaveNetwork ?? throw new ArgumentNullException(nameof(slaveNetwork)); _requestHandlerTask = Task.Run((Func <Task>)HandleRequestAsync); }
public ModbusMasterRtuOverTcpConnection(TcpClient client, IModbusSlaveNetwork slaveNetwork, IModbusFactory modbusFactory) : base(new ModbusRtuTransport(new TcpClientAdapter(client), modbusFactory)) { //Logger = logger ?? throw new ArgumentNullException(nameof(logger)); TcpClient = client ?? throw new ArgumentNullException(nameof(client)); EndPoint = client.Client.RemoteEndPoint.ToString(); Stream = client.GetStream(); _slaveNetwork = slaveNetwork ?? throw new ArgumentNullException(nameof(slaveNetwork)); _modbusFactory = modbusFactory ?? throw new ArgumentNullException(nameof(modbusFactory)); _requestHandlerTask = Task.Run((Func <Task>)HandleRequestAsync); }
//使用.net core 3.1架構開發 - https://docs.microsoft.com/zh-tw/dotnet/core/introduction //使用NModbus開源程式碼實作Modbus通訊 - https://github.com/NModbus/NModbus static void Main(string[] args) { ModbusFactory modbusFactory = new ModbusFactory(); TcpListener tcpListener = new TcpListener(new IPEndPoint(IPAddress.Any, 502)); IModbusSlaveNetwork modbusSlaveNetwork = modbusFactory.CreateSlaveNetwork(tcpListener); IModbusSlave modbusSlave = modbusFactory.CreateSlave(1); modbusSlaveNetwork.AddSlave(modbusSlave); modbusSlaveNetwork.ListenAsync(); Process.GetCurrentProcess().WaitForExit(); }
private void Start() { try { CompileTags(richTextBoxVar.Text); tagsView1.Load(tags); state = SvrState.Starting; cts = new CancellationTokenSource(); slaveTcpListener = new TcpListener(address, port); slaveTcpListener.Start(); network = factory.CreateSlaveNetwork(slaveTcpListener); var slave1 = factory.CreateSlave(slaveId, store); network.AddSlave(slave1); networkListenerTask = network.ListenAsync(cts.Token); scriptLoopTask = scriptLoop(cts.Token); state = SvrState.Runing; } catch (Exception ex) { jsConsole.error(ex); state = SvrState.Stopped; cts?.Cancel(); network.Dispose(); slaveTcpListener?.Stop(); scriptLoopTask.Wait(100); scriptLoopTask.Dispose(); } }