Plugins/Drivers/DriverModbusMaster/NModbus4/IO/ModbusIpTransport.cs
(开头部分) 5KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
namespace Modbus.IO
{
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using Message;
using Unme.Common;
/// <summary>
/// Transport for Internet protocols.
/// Refined Abstraction - http://en.wikipedia.org/wiki/Bridge_Pattern
/// </summary>
internal class ModbusIpTransport : ModbusTransport
{
private static readonly object _transactionIdLock = new object();
private ushort _transactionId;
internal ModbusIpTransport(IStreamResource streamResource)
: base(streamResource)
{
Debug.Assert(streamResource != null, "Argument streamResource cannot be null.");
}
internal static byte[] ReadRequestResponse(IStreamResource streamResource)
{
// read header
var mbapHeader = new byte[6];
int numBytesRead = 0;
while (numBytesRead != 6)
{
int bRead = streamResource.Read(mbapHeader, numBytesRead, 6 - numBytesRead);
if (bRead == 0)
{
throw new IOException("Read resulted in 0 bytes returned.");
}
numBytesRead += bRead;
}
Debug.WriteLine($"MBAP header: {string.Join(", ", mbapHeader)}");
var frameLength = (ushort)IPAddress.HostToNetworkOrder(BitConverter.ToInt16(mbapHeader, 4));
Debug.WriteLine($"{frameLength} bytes in PDU.");
// read message
var messageFrame = new byte[frameLength];
numBytesRead = 0;
while (numBytesRead != frameLength)
{
int bRead = streamResource.Read(messageFrame, numBytesRead, frameLength - numBytesRead);
if (bRead == 0)
{
throw new IOException("Read resulted in 0 bytes returned.");
后面还有 103 行代码,购买后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
