科伺 - Snet Docs

Kossi 协议驱动

包: Snet.Kossi | 类: KossiOperate | 类型数量: 1

通过 Kossi 专用以太网协议提供与科伺 PLC 的连接。

安装

dotnet add package Snet.Kossi

快速入门

using Snet.Kossi;

var op = await KossiOperate.InstanceAsync(new KossiData.Basics
{
    IpAddress = "192.168.1.100",
    Port = 4001
});

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 OmronCipNet 协议类型(默认 OmronCipNet)

支持类型

类型 说明
OmronCipNet 科伺 PLC 通过 Omron CIP 以太网协议通信

适用于 KS 系列 PLC 的科伺协议,支持 D/M/P/F/T/C 寄存器。

地址格式

底层欧姆龙 CIP 网络按 标签名 读写 — 无数字地址解析。

区域 地址格式 示例
CIP 标签 符号名;局部变量用 Program:MainProgram.{名称};数组用 Tag[下标];i= 前缀走立即寻址 Program:MainProgram.Variable, D100[0]
KS 系列寄存器标签(惯例) 以寄存器助记符作标签名: D/M/P/F/T/C + 十进制 D100, D102, M0
注意

D/M/P/F/T/C 寄存器清单遵循 KS 系列惯例(驱动本身按原始标签名读写)。

支持的数据类型

所有读取按 AddressDetails.DataType 分发 — 别名(Short = Int16Float = SingleInt = 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 原始字节读取
注意

NoneDateDateTimeTimeReadAsync 中没有分支 — 不支持。

地址自动组包与解包

每个数采驱动都实现 IPacker。KossiOperate 使用标签/符号寻址,未注册在自动组包注册表中,因此 Packer 原样返回地址集合(透传)——见 IPacker 接口。支持字节偏移寻址的协议(如西门子 S7、Modbus、三菱 MC)可组包:地址自动组包

订阅

先绑定数据事件,再通过 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)

参见