Driver 报文诊断
本页是底层 Snet.Driver API,不是 IDaq 或 Snet.Core.communication 方法。说明按当前源码核对,使用时须检查实际安装包是否包含这些入口。Snet.Log日志属于独立层。
开启请求摘要
Snet.Driver.Core.Device.DeviceServer.AnalysisLogMessage 默认 false,协议服务器通过继承取得它。开启后,已实现的解析器仅在接收日志(send == false)追加伪调用摘要,原有十六进制/ASCII日志仍保留;该开关不配置日志目标,也不启动服务器。
本地模拟器示例(运行时会打开监听端口):
using Snet.Driver.LogNet;
using Snet.Driver.Profinet.Siemens;
using var log = new LogNetSingle("driver.log");
using var server = new SiemensS7Server
{
LogNet = log,
AnalysisLogMessage = true
};
server.ServerStart(1102);
try
{
Console.WriteLine("模拟器已监听,按Enter停止。");
Console.ReadLine();
}
finally
{
server.ServerClose();
}
请求解析成功不代表设备操作成功。不支持的命令可以没有尾注;标量写会显示byte/ushort/bool摘要,大数组仅显示 byte[n] 或 bool[n],并不展开所有值。输出不是可直接重放的C#或完整审计记录。TrafficAnalysis 是internal类型。
解析器覆盖
下表描述源码中存在的实现,不代表全部已做真实设备测试。
| 协议族 | 已实现摘要及限制 |
|---|---|
| 罗克韦尔 | 已连接/未连接CIP、PCCC;多服务CIP可能不产生尾注 |
| 三菱 | MC Binary/ASCII、1E、3C格式1–4、4C格式1–5、FX Links格式1/4、旧/新FX串口 |
| 欧姆龙 | FINS TCP/UDP、HostLink FINS、C-mode;按实际传输提取核心偏移 |
| 西门子 | S7、PPI、Fetch/Write;不表示新增传输或读写API |
| 富士 | SPH/SPB/CommandSettingType;SPH的I/Q共用代码,摘要显示I |
| 西蒙 / 永宏 | Cimon HMI、Fatek Program位/字请求 |
| GE / 汇川 | GE SRTP数据帧、EasyNet;GE非数据命令可不解析 |
| 基恩士 / 松下 | Nano;Mewtocol触点/随机/字请求(RT/RS未解析) |
| 丰炜 / 信捷 | Vigor;XinJE私有功能30/31/32/33,不包含标准Modbus帧 |
| 安川 / 横河 | Memobus标准/扩展/随机请求;Link连续/随机位/字请求 |
| Modbus / LSis | 本次仅迁移/转发格式化签名,没有新增协议分析覆写 |
| 基础DeviceServer | 默认解析为空,由子类实现 |
FX区域重叠,逆地址助手按固定优先级选取一种可能名称;部分强制位特殊分支尚未实现。MC/FINS多Bool写只显示长度;A3C/A4C适配器为日志提取组装伪帧,不改变实际通信帧。
扩展签名与迁移
BinaryCommunication 位于 Snet.Driver.Core.Net,DeviceServer 位于 Snet.Driver.Core.Device。
// BinaryCommunication:替代旧的两参数受保护覆写。
protected virtual string GetLogTextFromBinary(
PipeSession session, byte[] content, bool send);
// DeviceServer:实际API拼写为Messafe。
protected virtual string AnalysisLogMessafeTail(
PipeSession session, byte[] content, IByteTransform byteTransform);
protected string LogTextAddTail(
string msg, PipeSession session, byte[] content, bool send);
// MelsecA3CServer:3C/4C诊断解析器共用。
protected static string AnalysisLogMessageFromMcCore(
byte[] content, IByteTransform byteTransform, int coreOffset, bool isBinary);
自定义覆写须迁移到三参数格式化方法,没有旧签名兼容重载。源码公共门禁仅分析接收方向,不能照XML注释宣称收发都会分析。逃逸异常追加 --- faild: 与错误消息;很多协议解析器内部捕获后返回空尾注。日志解析不能代替输入校验或完整协议追踪。
串口模拟器设置
CommunicationServer.StartSerialSlave(Action<SerialPort> inni) 先执行初始化委托,再强制设 ReadBufferSize = 1024、ReceivedBytesThreshold = 1,随后打开串口;这两项会覆盖委托设置,不等于验证了设备分帧正确性。
当前XinJEServer串口完整性代码在“声明长度+6大于等于已接收长度”时也可能返回true,存在提前接受不完整输入的疑点。本轮没有验证该比较,不能描述为已证明正确的分帧修复。
