麦格米特 - Snet Docs

MegMeet 协议驱动

包: Snet.MegMeet | 类: MegMeetOperate | 类型: 3

提供连接麦格米特 PLC 的能力——三种协议类型均基于 Modbus TCP/RTU,叠加麦格米特地址转换。

安装

dotnet add package Snet.MegMeet

快速开始

using Snet.MegMeet;

var op = await MegMeetOperate.InstanceAsync(new MegMeetData.Basics
{
    IpAddress = "192.168.1.100",
    Port = 502
});

var address = new Address(new List<AddressDetails>
{
    new("读数", "D100", DataType.Int16),
    new("读数2", "D102", DataType.Int16)
});
var result = await op.ReadAsync(address);
if (result.Status)
{
    var data = result.GetSource<ConcurrentDictionary<string, AddressValue>>();
    foreach (var kv in data)
        Console.WriteLine($"{kv.Key} = {kv.Value.ResultValue}");
}
else
{
    Console.WriteLine($"读取失败: {result.Message}");
}

// 订阅之前 绑定数据事件
op.OnDataEventAsync += async (sender, e) =>
{
    if (e.Status)
    {
        var data = e.GetSource<ConcurrentDictionary<string, AddressValue>>();
        foreach (var kv in data)
            Console.WriteLine($"{kv.Key} = {kv.Value.ResultValue}");
    }
    else
    {
        Console.WriteLine($"{e.Message}");
    }
};

var subAddr = new Address(new List<AddressDetails>
{
    new("读数", "D100", DataType.Int16)
});
await op.SubscribeAsync(subAddr);

// 后续:取消订阅
// await op.UnSubscribeAsync(subAddr);

await op.DisposeAsync();

配置

参数 类型 默认值 描述
IpAddress string 127.0.0.1 PLC IP 地址
Port int 6688 通信端口
ConnectTimeOut int 1000 连接超时(毫秒)
ReceiveTimeOut int 1000 接收超时(毫秒)
ProtocolType enum MegMeetTcpNet 协议类型(默认 MegMeetTcpNet)

支持的类型

Megmeet 协议,适用于 MC 系列 PLC,支持标准 Modbus 寄存器寻址和扩展功能。

  • MegMeetTcpNet — Megmeet TCP Net 通信
  • MegMeetSerial — Megmeet 串行通信
  • MegMeetSerialOverTcp — Megmeet 串行转 TCP

地址格式

区域 地址格式 示例
位 X/Y (八进制) / M{编号} (0-2047 → +2000, ≥2048 → +12000) / SM/S/T/C + 十进制 X0, Y0, M100, T0
字 D{编号} (偏移0) / SD{编号} / R{编号} (+13000) / Z{编号} (+8500) D100, SD0, R0, Z0
注意

地址由 MegMeetHelper 转 Modbus 码;Station / AddressStartWithZero / DataFormat 可配置。

支持的数据类型

所有读取按 AddressDetails.DataType 分发 — 别名(Short = Int16、Float = Single、Int = Int32 等)共用同一分支。

数据类型 支持 说明
Bool ✅ 位读取 — 线圈 / 字内位
Int16 / Short, UInt16 / Ushort ✅ 16 位整数
Int32 / Int, UInt32 / Uint ✅ 32 位整数
Int64 / Long, UInt64 / Ulong ✅ 64 位整数
Float / Single, Double ✅ 32 / 64 位浮点
String / Char ✅ 带 length + 编码读取
ByteArray + 全部 10 种 *Array ✅ 带 length 的数组读取
Byte ❌ ReadAsync 中有 case 但无底层读取 — "不支持该类型读取"
注意

None、Date、DateTime、Time 在 ReadAsync 中没有分支 — 不支持。

地址自动组包与解包

每个数采驱动都实现 IPacker,但当前 MegMeet 三种协议均从 Modbus 组包映射移除。数字及原生地址都保留原输入,交由驱动逐点读取,不做地址转换修复。引擎细节:地址自动组包。

订阅

先绑定数据事件,再通过 SubscribeAsync 添加地址;数据通过 OnDataEventAsync 到达:

op.OnDataEventAsync += async (sender, e) =>
{
    if (e.Status)
    {
        var data = e.GetSource<ConcurrentDictionary<string, AddressValue>>();
        foreach (var kv in data)
            Console.WriteLine($"{kv.Key} = {kv.Value.ResultValue}");
    }
    else
    {
        Console.WriteLine($"订阅错误: {e.Message}");
    }
};

var subAddr = new Address(new List<AddressDetails>
{
    new("读数", "D100", DataType.Int16)
});
await op.SubscribeAsync(subAddr);

// 后续:停止监视
// await op.UnSubscribeAsync(subAddr);

支持的操作

操作 方法
连接 OnAsync()
断开 OffAsync()
读取 ReadAsync(address)
写入 WriteAsync(values)
订阅 SubscribeAsync(address)
组包 / 解包 PackerAsync(address, protocolTypeKey) / UnPackerAsync(data)

参见