禁用Modbus调试日志
This commit is contained in:
parent
24c757087c
commit
8c39ef0260
@ -79,31 +79,31 @@
|
|||||||
{
|
{
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
Debug.WriteLine($"Begin reading header from Master at IP: {EndPoint}");
|
//Debug.WriteLine($"Begin reading header from Master at IP: {EndPoint}");
|
||||||
|
|
||||||
int readBytes = await Stream.ReadAsync(_mbapHeader, 0, 6).ConfigureAwait(false);
|
int readBytes = await Stream.ReadAsync(_mbapHeader, 0, 6).ConfigureAwait(false);
|
||||||
if (readBytes == 0)
|
if (readBytes == 0)
|
||||||
{
|
{
|
||||||
Debug.WriteLine($"0 bytes read, Master at {EndPoint} has closed Socket connection.");
|
//Debug.WriteLine($"0 bytes read, Master at {EndPoint} has closed Socket connection.");
|
||||||
ModbusMasterTcpConnectionClosed?.Invoke(this, new TcpConnectionEventArgs(EndPoint));
|
ModbusMasterTcpConnectionClosed?.Invoke(this, new TcpConnectionEventArgs(EndPoint));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ushort frameLength = (ushort)IPAddress.HostToNetworkOrder(BitConverter.ToInt16(_mbapHeader, 4));
|
ushort frameLength = (ushort)IPAddress.HostToNetworkOrder(BitConverter.ToInt16(_mbapHeader, 4));
|
||||||
Debug.WriteLine($"Master at {EndPoint} sent header: \"{string.Join(", ", _mbapHeader)}\" with {frameLength} bytes in PDU");
|
//Debug.WriteLine($"Master at {EndPoint} sent header: \"{string.Join(", ", _mbapHeader)}\" with {frameLength} bytes in PDU");
|
||||||
|
|
||||||
_messageFrame = new byte[frameLength];
|
_messageFrame = new byte[frameLength];
|
||||||
readBytes = await Stream.ReadAsync(_messageFrame, 0, frameLength).ConfigureAwait(false);
|
readBytes = await Stream.ReadAsync(_messageFrame, 0, frameLength).ConfigureAwait(false);
|
||||||
if (readBytes == 0)
|
if (readBytes == 0)
|
||||||
{
|
{
|
||||||
Debug.WriteLine($"0 bytes read, Master at {EndPoint} has closed Socket connection.");
|
//Debug.WriteLine($"0 bytes read, Master at {EndPoint} has closed Socket connection.");
|
||||||
ModbusMasterTcpConnectionClosed?.Invoke(this, new TcpConnectionEventArgs(EndPoint));
|
ModbusMasterTcpConnectionClosed?.Invoke(this, new TcpConnectionEventArgs(EndPoint));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.WriteLine($"Read frame from Master at {EndPoint} completed {readBytes} bytes");
|
//Debug.WriteLine($"Read frame from Master at {EndPoint} completed {readBytes} bytes");
|
||||||
byte[] frame = _mbapHeader.Concat(_messageFrame).ToArray();
|
byte[] frame = _mbapHeader.Concat(_messageFrame).ToArray();
|
||||||
Debug.WriteLine($"RX from Master at {EndPoint}: {string.Join(", ", frame)}");
|
//Debug.WriteLine($"RX from Master at {EndPoint}: {string.Join(", ", frame)}");
|
||||||
|
|
||||||
var request = ModbusMessageFactory.CreateModbusRequest(_messageFrame);
|
var request = ModbusMessageFactory.CreateModbusRequest(_messageFrame);
|
||||||
request.TransactionId = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(frame, 0));
|
request.TransactionId = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(frame, 0));
|
||||||
@ -114,7 +114,7 @@
|
|||||||
|
|
||||||
// write response
|
// write response
|
||||||
byte[] responseFrame = Transport.BuildMessageFrame(response);
|
byte[] responseFrame = Transport.BuildMessageFrame(response);
|
||||||
Debug.WriteLine($"TX to Master at {EndPoint}: {string.Join(", ", responseFrame)}");
|
//Debug.WriteLine($"TX to Master at {EndPoint}: {string.Join(", ", responseFrame)}");
|
||||||
await Stream.WriteAsync(responseFrame, 0, responseFrame.Length).ConfigureAwait(false);
|
await Stream.WriteAsync(responseFrame, 0, responseFrame.Length).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -112,14 +112,14 @@
|
|||||||
if (SerialTransport.CheckFrame && !SerialTransport.ChecksumsMatch(request, frame))
|
if (SerialTransport.CheckFrame && !SerialTransport.ChecksumsMatch(request, frame))
|
||||||
{
|
{
|
||||||
string msg = $"Checksums failed to match {string.Join(", ", request.MessageFrame)} != {string.Join(", ", frame)}.";
|
string msg = $"Checksums failed to match {string.Join(", ", request.MessageFrame)} != {string.Join(", ", frame)}.";
|
||||||
Debug.WriteLine(msg);
|
//Debug.WriteLine(msg);
|
||||||
throw new IOException(msg);
|
throw new IOException(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// only service requests addressed to this particular slave
|
// only service requests addressed to this particular slave
|
||||||
if (request.SlaveAddress != UnitId)
|
if (request.SlaveAddress != UnitId)
|
||||||
{
|
{
|
||||||
Debug.WriteLine($"NModbus Slave {UnitId} ignoring request intended for NModbus Slave {request.SlaveAddress}");
|
//Debug.WriteLine($"NModbus Slave {UnitId} ignoring request intended for NModbus Slave {request.SlaveAddress}");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,12 +131,12 @@
|
|||||||
}
|
}
|
||||||
catch (IOException ioe)
|
catch (IOException ioe)
|
||||||
{
|
{
|
||||||
Debug.WriteLine($"IO Exception encountered while listening for requests - {ioe.Message}");
|
//Debug.WriteLine($"IO Exception encountered while listening for requests - {ioe.Message}");
|
||||||
SerialTransport.DiscardInBuffer();
|
SerialTransport.DiscardInBuffer();
|
||||||
}
|
}
|
||||||
catch (TimeoutException te)
|
catch (TimeoutException te)
|
||||||
{
|
{
|
||||||
Debug.WriteLine($"Timeout Exception encountered while listening for requests - {te.Message}");
|
//Debug.WriteLine($"Timeout Exception encountered while listening for requests - {te.Message}");
|
||||||
SerialTransport.DiscardInBuffer();
|
SerialTransport.DiscardInBuffer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -177,7 +177,7 @@
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Debug.WriteLine(request.ToString());
|
//Debug.WriteLine(request.ToString());
|
||||||
var eventArgs = new ModbusSlaveRequestEventArgs(request);
|
var eventArgs = new ModbusSlaveRequestEventArgs(request);
|
||||||
ModbusSlaveRequestReceived?.Invoke(this, eventArgs);
|
ModbusSlaveRequestReceived?.Invoke(this, eventArgs);
|
||||||
|
|
||||||
@ -252,7 +252,7 @@
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
string msg = $"Unsupported function code {request.FunctionCode}.";
|
string msg = $"Unsupported function code {request.FunctionCode}.";
|
||||||
Debug.WriteLine(msg);
|
//Debug.WriteLine(msg);
|
||||||
throw new InvalidModbusRequestException(Modbus.IllegalFunction);
|
throw new InvalidModbusRequestException(Modbus.IllegalFunction);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -109,7 +109,7 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public override async Task ListenAsync()
|
public override async Task ListenAsync()
|
||||||
{
|
{
|
||||||
Debug.WriteLine("Start Modbus Tcp Server.");
|
//Debug.WriteLine("Start Modbus Tcp Server.");
|
||||||
// TODO: add state {stoped, listening} and check it before starting
|
// TODO: add state {stoped, listening} and check it before starting
|
||||||
Server.Start();
|
Server.Start();
|
||||||
|
|
||||||
@ -197,7 +197,7 @@
|
|||||||
throw new ArgumentException(msg);
|
throw new ArgumentException(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.WriteLine($"Removed Master {e.EndPoint}");
|
//Debug.WriteLine($"Removed Master {e.EndPoint}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public override async Task ListenAsync()
|
public override async Task ListenAsync()
|
||||||
{
|
{
|
||||||
Debug.WriteLine("Start Modbus Udp Server.");
|
//Debug.WriteLine("Start Modbus Udp Server.");
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -57,8 +57,8 @@
|
|||||||
IPEndPoint masterEndPoint = receiveResult.RemoteEndPoint;
|
IPEndPoint masterEndPoint = receiveResult.RemoteEndPoint;
|
||||||
byte[] frame = receiveResult.Buffer;
|
byte[] frame = receiveResult.Buffer;
|
||||||
|
|
||||||
Debug.WriteLine($"Read Frame completed {frame.Length} bytes");
|
//Debug.WriteLine($"Read Frame completed {frame.Length} bytes");
|
||||||
Debug.WriteLine($"RX: {string.Join(", ", frame)}");
|
//Debug.WriteLine($"RX: {string.Join(", ", frame)}");
|
||||||
|
|
||||||
IModbusMessage request =
|
IModbusMessage request =
|
||||||
ModbusMessageFactory.CreateModbusRequest(frame.Slice(6, frame.Length - 6).ToArray());
|
ModbusMessageFactory.CreateModbusRequest(frame.Slice(6, frame.Length - 6).ToArray());
|
||||||
@ -70,7 +70,7 @@
|
|||||||
|
|
||||||
// write response
|
// write response
|
||||||
byte[] responseFrame = Transport.BuildMessageFrame(response);
|
byte[] responseFrame = Transport.BuildMessageFrame(response);
|
||||||
Debug.WriteLine($"TX: {string.Join(", ", responseFrame)}");
|
//Debug.WriteLine($"TX: {string.Join(", ", responseFrame)}");
|
||||||
await _udpClient.SendAsync(responseFrame, responseFrame.Length, masterEndPoint).ConfigureAwait(false);
|
await _udpClient.SendAsync(responseFrame, responseFrame.Length, masterEndPoint).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@
|
|||||||
|
|
||||||
// convert hex to bytes
|
// convert hex to bytes
|
||||||
byte[] frame = ModbusUtility.HexToBytes(frameHex);
|
byte[] frame = ModbusUtility.HexToBytes(frameHex);
|
||||||
Debug.WriteLine($"RX: {string.Join(", ", frame)}");
|
//Debug.WriteLine($"RX: {string.Join(", ", frame)}");
|
||||||
|
|
||||||
if (frame.Length < 3)
|
if (frame.Length < 3)
|
||||||
{
|
{
|
||||||
|
@ -43,9 +43,9 @@
|
|||||||
numBytesRead += bRead;
|
numBytesRead += bRead;
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.WriteLine($"MBAP header: {string.Join(", ", mbapHeader)}");
|
//Debug.WriteLine($"MBAP header: {string.Join(", ", mbapHeader)}");
|
||||||
var frameLength = (ushort)IPAddress.HostToNetworkOrder(BitConverter.ToInt16(mbapHeader, 4));
|
var frameLength = (ushort)IPAddress.HostToNetworkOrder(BitConverter.ToInt16(mbapHeader, 4));
|
||||||
Debug.WriteLine($"{frameLength} bytes in PDU.");
|
//Debug.WriteLine($"{frameLength} bytes in PDU.");
|
||||||
|
|
||||||
// read message
|
// read message
|
||||||
var messageFrame = new byte[frameLength];
|
var messageFrame = new byte[frameLength];
|
||||||
@ -63,9 +63,9 @@
|
|||||||
numBytesRead += bRead;
|
numBytesRead += bRead;
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.WriteLine($"PDU: {frameLength}");
|
//Debug.WriteLine($"PDU: {frameLength}");
|
||||||
var frame = mbapHeader.Concat(messageFrame).ToArray();
|
var frame = mbapHeader.Concat(messageFrame).ToArray();
|
||||||
Debug.WriteLine($"RX: {string.Join(", ", frame)}");
|
//Debug.WriteLine($"RX: {string.Join(", ", frame)}");
|
||||||
|
|
||||||
return frame;
|
return frame;
|
||||||
}
|
}
|
||||||
@ -126,7 +126,7 @@
|
|||||||
{
|
{
|
||||||
message.TransactionId = GetNewTransactionId();
|
message.TransactionId = GetNewTransactionId();
|
||||||
byte[] frame = BuildMessageFrame(message);
|
byte[] frame = BuildMessageFrame(message);
|
||||||
Debug.WriteLine($"TX: {string.Join(", ", frame)}");
|
//Debug.WriteLine($"TX: {string.Join(", ", frame)}");
|
||||||
StreamResource.Write(frame, 0, frame.Length);
|
StreamResource.Write(frame, 0, frame.Length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
string msg = $"Function code {functionCode} not supported.";
|
string msg = $"Function code {functionCode} not supported.";
|
||||||
Debug.WriteLine(msg);
|
//Debug.WriteLine(msg);
|
||||||
throw new NotImplementedException(msg);
|
throw new NotImplementedException(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,7 +81,7 @@
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
string msg = $"Function code {functionCode} not supported.";
|
string msg = $"Function code {functionCode} not supported.";
|
||||||
Debug.WriteLine(msg);
|
//Debug.WriteLine(msg);
|
||||||
throw new NotImplementedException(msg);
|
throw new NotImplementedException(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,7 +124,7 @@
|
|||||||
byte[] frameStart = Read(ResponseFrameStartLength);
|
byte[] frameStart = Read(ResponseFrameStartLength);
|
||||||
byte[] frameEnd = Read(ResponseBytesToRead(frameStart));
|
byte[] frameEnd = Read(ResponseBytesToRead(frameStart));
|
||||||
byte[] frame = Enumerable.Concat(frameStart, frameEnd).ToArray();
|
byte[] frame = Enumerable.Concat(frameStart, frameEnd).ToArray();
|
||||||
Debug.WriteLine($"RX: {string.Join(", ", frame)}");
|
//Debug.WriteLine($"RX: {string.Join(", ", frame)}");
|
||||||
|
|
||||||
return CreateResponse<T>(frame);
|
return CreateResponse<T>(frame);
|
||||||
}
|
}
|
||||||
@ -134,7 +134,7 @@
|
|||||||
byte[] frameStart = Read(RequestFrameStartLength);
|
byte[] frameStart = Read(RequestFrameStartLength);
|
||||||
byte[] frameEnd = Read(RequestBytesToRead(frameStart));
|
byte[] frameEnd = Read(RequestBytesToRead(frameStart));
|
||||||
byte[] frame = Enumerable.Concat(frameStart, frameEnd).ToArray();
|
byte[] frame = Enumerable.Concat(frameStart, frameEnd).ToArray();
|
||||||
Debug.WriteLine($"RX: {string.Join(", ", frame)}");
|
//Debug.WriteLine($"RX: {string.Join(", ", frame)}");
|
||||||
|
|
||||||
return frame;
|
return frame;
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
DiscardInBuffer();
|
DiscardInBuffer();
|
||||||
|
|
||||||
byte[] frame = BuildMessageFrame(message);
|
byte[] frame = BuildMessageFrame(message);
|
||||||
Debug.WriteLine($"TX: {string.Join(", ", frame)}");
|
//Debug.WriteLine($"TX: {string.Join(", ", frame)}");
|
||||||
StreamResource.Write(frame, 0, frame.Length);
|
StreamResource.Write(frame, 0, frame.Length);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,7 +50,7 @@
|
|||||||
if (CheckFrame && !ChecksumsMatch(response, frame))
|
if (CheckFrame && !ChecksumsMatch(response, frame))
|
||||||
{
|
{
|
||||||
string msg = $"Checksums failed to match {string.Join(", ", response.MessageFrame)} != {string.Join(", ", frame)}";
|
string msg = $"Checksums failed to match {string.Join(", ", response.MessageFrame)} != {string.Join(", ", frame)}";
|
||||||
Debug.WriteLine(msg);
|
//Debug.WriteLine(msg);
|
||||||
throw new IOException(msg);
|
throw new IOException(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -142,7 +142,7 @@
|
|||||||
|
|
||||||
if (readAgain)
|
if (readAgain)
|
||||||
{
|
{
|
||||||
Debug.WriteLine($"Received ACKNOWLEDGE slave exception response, waiting {_waitToRetryMilliseconds} milliseconds and retrying to read response.");
|
//Debug.WriteLine($"Received ACKNOWLEDGE slave exception response, waiting {_waitToRetryMilliseconds} milliseconds and retrying to read response.");
|
||||||
Sleep(WaitToRetryMilliseconds);
|
Sleep(WaitToRetryMilliseconds);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -173,7 +173,7 @@
|
|||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.WriteLine($"Received SLAVE_DEVICE_BUSY exception response, waiting {_waitToRetryMilliseconds} milliseconds and resubmitting request.");
|
//Debug.WriteLine($"Received SLAVE_DEVICE_BUSY exception response, waiting {_waitToRetryMilliseconds} milliseconds and resubmitting request.");
|
||||||
Sleep(WaitToRetryMilliseconds);
|
Sleep(WaitToRetryMilliseconds);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@ -183,7 +183,7 @@
|
|||||||
e is TimeoutException ||
|
e is TimeoutException ||
|
||||||
e is IOException)
|
e is IOException)
|
||||||
{
|
{
|
||||||
Debug.WriteLine($"{e.GetType().Name}, {(_retries - attempt + 1)} retries remaining - {e}");
|
//Debug.WriteLine($"{e.GetType().Name}, {(_retries - attempt + 1)} retries remaining - {e}");
|
||||||
|
|
||||||
if (attempt++ > _retries)
|
if (attempt++ > _retries)
|
||||||
{
|
{
|
||||||
|
@ -77,6 +77,7 @@ namespace Plugin
|
|||||||
//Message: {"device": "Device A", "data": {"attribute1": "value1", "attribute2": 42}}
|
//Message: {"device": "Device A", "data": {"attribute1": "value1", "attribute2": 42}}
|
||||||
subTopics.Add(new MqttTopicFilterBuilder().WithTopic("v1/gateway/attributese").WithExactlyOnceQoS().Build());
|
subTopics.Add(new MqttTopicFilterBuilder().WithTopic("v1/gateway/attributese").WithExactlyOnceQoS().Build());
|
||||||
break;
|
break;
|
||||||
|
case IoTPlatformType.IotDB:
|
||||||
case IoTPlatformType.IoTSharp:
|
case IoTPlatformType.IoTSharp:
|
||||||
subTopics.Add(new MqttTopicFilterBuilder().WithTopic("devices/+/rpc/request/+/+").WithExactlyOnceQoS().Build());
|
subTopics.Add(new MqttTopicFilterBuilder().WithTopic("devices/+/rpc/request/+/+").WithExactlyOnceQoS().Build());
|
||||||
subTopics.Add(new MqttTopicFilterBuilder().WithTopic("devices/+/attributes/update").WithExactlyOnceQoS().Build());
|
subTopics.Add(new MqttTopicFilterBuilder().WithTopic("devices/+/attributes/update").WithExactlyOnceQoS().Build());
|
||||||
@ -229,6 +230,8 @@ namespace Plugin
|
|||||||
_logger.LogInformation($"rpcRequestId={rpcRequestId} ");
|
_logger.LogInformation($"rpcRequestId={rpcRequestId} ");
|
||||||
if (!string.IsNullOrEmpty(rpcMethodName) && !string.IsNullOrEmpty(rpcDeviceName) &&
|
if (!string.IsNullOrEmpty(rpcMethodName) && !string.IsNullOrEmpty(rpcDeviceName) &&
|
||||||
!string.IsNullOrEmpty(rpcRequestId))
|
!string.IsNullOrEmpty(rpcRequestId))
|
||||||
|
{
|
||||||
|
Task.Run(() =>
|
||||||
{
|
{
|
||||||
OnExcRpc(Client, new RpcRequest()
|
OnExcRpc(Client, new RpcRequest()
|
||||||
{
|
{
|
||||||
@ -238,6 +241,7 @@ namespace Plugin
|
|||||||
Params = JsonConvert.DeserializeObject<Dictionary<string, object>>(e.ApplicationMessage
|
Params = JsonConvert.DeserializeObject<Dictionary<string, object>>(e.ApplicationMessage
|
||||||
.ConvertPayloadToString())
|
.ConvertPayloadToString())
|
||||||
});
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
Loading…
Reference in New Issue
Block a user