NEW v0.1.0 — 首次发布 →
KEYENCE PLC — KV SERIES

与基恩士 KV PLC通信,几行代码即可实现。

KcpX 是通过上位链路与基恩士 KV 系列 PLC 通信的 .NET 库,可通过 TCP/UDP 读写软元件。命令的组装与响应的解析都由库代劳,你只需写出要读写的类型与地址。

PROTOCOL
Host Link · TCP/UDP
LICENSE
MIT
PLATFORM
Win · Linux · macOS
PLC
KV-8000 · 7000 · 5000 · Nano

// WHY KcpX

简洁、安全的 PLC 通信

只需传入类型与地址即可读写 PLC,其通信报文已在测试中逐字符验证。

直观且类型安全的 API

只需指定类型与点数。借助泛型,bool 就是 bool,short 就是 short。数据格式(.U / .S / .D / .L)的选择与 32 位值的拆分也由库完成,非法地址会在发送前以异常形式检出。

经实机与仿真器验证

除了逐字符验证上位链路命令与响应的 MSTest 测试外,还在 KV-7500 实机与 KV STUDIO 仿真器上进行了集成测试。PLC 的错误响应(E0〜E6)以类型化异常的形式返回。

免费开源,不挑环境

采用 MIT 许可证的开源软件,无需授权费用,当然也可商用。纯 .NET 实现,不受限于 Windows,在 Linux・macOS・Raspberry Pi 上也能直接运行。

与 KV COM+ Library 的区别

项目KcpXKV COM+ Library
授权费用免费(MIT・开源)付费(按授权购买)
支持的操作系统Linux / Windows / macOS仅 Windows
实现方式纯 .NETActiveX 控件(依赖 Windows)
开发环境.NET 7〜9 / .NET Framework 4.6.1+ / .NET Core 2.0+Visual Basic / Visual C++ / Excel / Access
导入通过 NuGet 添加安装程序 / 购买授权
源代码公开(GitHub)不公开

※ 基于基恩士产品页面(KV-DH1L)公开信息的一般性比较。

// CAPABILITIES

PLC 通信所需的功能,恰到好处

功能专注于 PLC 通信,不干涉应用的设计。可以作为组件直接嵌入监视、控制、日志记录等应用中。

01 COMBINED READ / WRITE

范围与单个软元件,一个构建器搞定

指定点数即为批量读取(RDS),不指定则为单点读取(RD)。只需把连续的范围与分散的软元件放进同一个构建器,KcpX 会分别选用合适的命令进行读写。类型不同、软元件不同,写法都一样。

Example.cs
short[] block = [];
int  total   = 0;
bool running = false;

// 指定点数 → 批量读取(RDS),不指定 → 单点读取(RD)
kcpx.Read(b => b
    .Add<short>(Prefix.DM, "400", 100, v => block = v)
    .Add<int>(Prefix.DM, "2000", v => total = v)
    .Add<bool>(Prefix.MR, "10", v => running = v));

kcpx.Write(b => b
    .Add<short>(Prefix.DM, "500", [1, 2, 3])
    .Add<bool>(Prefix.MR, "20", true));
02 KV STUDIO SIMULATOR

没有实机,也能用仿真器验证

使用 KcpXSimulator,即可通过上位链路(TCP)连接 KV STUDIO 的仿真器。读写 API 与实机相同,即使手边没有 PLC 也能推进开发与测试。切换到实机时,只需把连接对象换成 KcpX。(KV-8000 / KV-X500 项目,已在 KV STUDIO Ver.12.41 上确认)

Example.cs
// 连接 KV STUDIO 仿真器(127.0.0.1:8501)
using var sim = new KcpXSimulator();

// 读写 API 与面向实机的 KcpX 相同
sim.Write(b => b
    .Add<short>(Prefix.DM, "100", 123)
    .Add<bool>(Prefix.MR, "0", true));

short dm100 = sim.Read<short>(Prefix.DM, "100");

// 定时器的触点・当前值・设定值同样可以直接读取
TimerCounterValue t0 = sim.ReadTimerCounter(Prefix.T, "0");

其他命令

命令说明方法
单点读写指定类型,直接读写单个软元件(RD / WR)。Read<T>/Write<T>
批量读写即使是数千点的连续软元件,也只需一次调用即可读写。超出点数上限时自动拆分(RDS / WRS)。BatchRead<T>/BatchWrite<T>
定时器 / 计数器一并读取 T / C 的触点・当前值・设定值,并改写设定值(RD / RDS / WS / WSS)。ReadTimerCounter/BatchReadTimerCounter/WriteSetValue<T>/BatchWriteSetValue<T>
强制置位 / 复位强制将位软元件置为 ON / OFF。超过连续 16 点的指定也会自动拆分(ST / RS / STS / RSS)。ForceSet/ForceReset/BatchForceSet/BatchForceReset
监视位与字各最多登录 120 点,之后只需调用 Read() 即可获取最新值(MBS / MWS / MBR / MWR)。MonitorRegist(build)/MonitorSession.Read()
运行模式确认 PLC 的运行模式(PROGRAM / RUN),并通过代码进行切换(?M / M0 / M1)。ReadOperatingMode/ChangeOperatingMode

所有命令都提供支持 async/await 的 …Async 版本。

NO LIMITS

点数上限与字的合并,全部自动

上位链路的读写按软元件与 PLC 系列存在点数上限。KcpX 根据连接时指定的系列判定上限,超出时自动拆分命令发送。 此外,int、double 等值所需的字数与数据格式也在内部确定,无需关心协议的限制。

SAME API AS McpX

与三菱电机 PLC 相同的写法

KcpX 采用与面向三菱电机 PLC 的库 McpX 相同的 API 设计。Read<T>・BatchRead<T>・基于构建器的组合读写・MonitorRegist 等,用 McpX 写代码的感觉可以直接沿用到基恩士 PLC 上。

// USE CASES

KcpX 能做什么

介绍 KcpX 大显身手的典型应用场景。

应用场景

设备运行监视

实时监视仪表板

将软元件登录到监视中,周期性获取当前值。在 Web 仪表板上实时显示运行状态与报警。

ASP.NET监视异步
SCADA 集成

SCADA 软件的通信基础

用 KcpX 实现 SCADA 应用与 PLC 之间的通信层。类型安全的读写,可为标签采集与控制指令打下稳定的基础。

通信基础SCADA类型安全
通信网关

PLC ↔ 服务器的 MQTT 联动

构建通信网关,将从 PLC 读取的软元件值通过 MQTT 发布到服务器,经由代理将现场数据轻量地传送到云端。

MQTT网关IoT
测试自动化 / CI

PLC 软件的自动测试与 CI

通过代码验证梯形图程序的输入输出。自动执行"写入软元件值→读取期望值",并纳入 CI 流水线。连接 KV STUDIO 仿真器,无需实机也能运行测试。

CI自动测试仿真器

// PLATFORMS

广泛的平台与 PLC 支持

从最新的 .NET 到 .NET Framework,可在主流操作系统上运行。通过泛型支持 9 种数据类型与 24 种软元件。

框架

.NET 7.0+.NET 8.0+.NET 9.0+.NET Core 2.0+.NET Framework 4.6.1+

操作系统

LinuxWindowsmacOS

支持的 PLC

KV-8000KV-7500 / 7300KV-5500 / 5000 / 3000KV NanoKV STUDIO 仿真器

协议

Host LinkTCPUDPASCIIPort 8501

数据类型

boolshortushortintuintlongulongfloatdouble

软元件类型

RBMRLRCRVBDMEMFMZFWTMZTTCTSCCCCSCTHCTCATCMVM

// QUICK START

两步即可运行

1 · 添加程序包

terminal
dotnet add package KcpX

2 · 读写软元件

Program.cs
using KcpXLib;
using KcpXLib.Enums;

// 连接 PLC(上位链路端口 8501,TCP)
using (var kcpx = new KcpX("192.168.12.89", 8501, series: PlcSeries.KV7000))
{
    short[] block = [];
    int total = 0;

    // 一次调用同时读取范围(指定点数)与单个软元件
    kcpx.Read(b => b
        .Add<short>(Prefix.DM, "400", 100, v => block = v)
        .Add<int>(Prefix.DM, "2000", v => total = v));

    // 一次调用同时写入不同软元件与类型
    kcpx.Write(b => b
        .Add<short>(Prefix.DM, "500", [1, 2, 3])
        .Add<bool>(Prefix.MR, "20", true));
}

想先了解上位链路的原理? 上位链路入门 →

// PROJECT HEALTH

可以放心采用的理由

以开放的方式开发与维护,具备投入生产所需的基础。

持续维护

变更在 CHANGELOG 中公开,缺陷与需求在 GitHub 上处理。完整继承了在 McpX 中积累的设计与运维经验。

CI 与实机验证

所有变更都在 CI 中构建并测试,还准备了基于 KV-7500 实机与 KV STUDIO 仿真器的集成测试。

广泛的运行环境

目标框架覆盖 .NET Framework 4.6.1 / .NET Core 2.0(.NET Standard 2.0)到最新的 .NET 9。

2026 年首次发布。与 McpX 一样,新功能以次版本、修复以补丁版本进行管理。

// ROADMAP

后续计划

我们会持续添加提升现场易用性的功能。

  • 已实现 · v0.1

    首次发布

    支持单点・批量・组合读写、定时器/计数器、强制置位/复位、监视、运行模式的确认与切换,以及连接 KV STUDIO 仿真器。

  • 计划中

    以字符串指定软元件

    支持像 Read<short>("DM100") 这样,用一个字符串同时指定软元件类型与编号。

  • 计划中

    其他上位链路命令

    机型查询(?K)、错误编号确认(?E)、错误清除(ER)、时间设置(WRT)、注释读取(RDC)、存储区切换(BE)、扩展单元缓冲存储器(URD / UWR)。

  • 计划中

    字符串读写

    添加以字符串形式读写软元件值的 ReadString / WriteString。

  • 计划中

    XYM 表示法

    支持以 X / Y / M / L / D / E / F 的 XYM 表示法指定软元件。

// GET STARTED

立即开始

添加程序包并指定 IP,几行代码即可完成首次读写。免费、可商用的 MIT 许可证。

$ dotnet add package KcpX