S7PlcRx 1.3.3

dotnet add package S7PlcRx --version 1.3.3                
NuGet\Install-Package S7PlcRx -Version 1.3.3                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="S7PlcRx" Version="1.3.3" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中,以引用包。
paket add S7PlcRx --version 1.3.3                
#r "nuget: S7PlcRx, 1.3.3"                
#r 指令可以在 F# Interactive 和 Polyglot Notebooks 中使用。将此内容复制到交互式工具或脚本的源代码中,以引用包。
// Install S7PlcRx as a Cake Addin
#addin nuget:?package=S7PlcRx&version=1.3.3

// Install S7PlcRx as a Cake Tool
#tool nuget:?package=S7PlcRx&version=1.3.3                

License Build Nuget NuGet

Alt

<p align="left"> <a href="https://github.com/ChrisPulman/S7PlcRx"> <img alt="S7PlcRx" src="./Images/S7PlcRx.png" width="200"/> </a> </p>

S7PlcRx

响应式 S7 PLC 通信库

简介

S7PlcRx 是一个库,它提供了一个简单的接口来与西门子 S7 PLC 进行通信。

特性

  • 读写 PLC
  • 通过响应式订阅从 PLC 读取

入门指南

安装

S7PlcRx 可在 NuGet 上获得。

在 Siemens PLC 程序中,您需要在 PLC 设置中启用 PUT/GET 通信。您还需要将您想要访问的任何 DB 设置为非优化。

包管理器
Install-Package S7PlcRx
.NET CLI
dotnet add package S7PlcRx

用法

设置标签并观察 PLC 中的值
using S7PlcRx;

var plc = new RxS7(S7PlcRx.Enums.CpuType.S71500, "PLC_IP_ADDRESS", 0, 5);
// Add Tag without Polling
plc.AddUpdateTagItem<double>("Tag0", "DB500.DBD0").SetTagPollIng(false);
// Add Tag with Polling
plc.AddUpdateTagItem<double>("Tag1", "DB500.DBD8");

plc.IsConnected
    .Where(x => x)
    .Take(1)
    .Subscribe(async _ =>
    {
        Console.WriteLine("Connected");

        // Read Tag Value manually
        var tag0 = await plc.Value<double>("Tag0");
    });

// Subscribe to Tag Values
plc.Observe<double>("Tag0").Subscribe(x => Console.WriteLine($"Tag0: {x}"));
plc.Observe<double>("Tag1").Subscribe(x => Console.WriteLine($"Tag1: {x}"));
// Start Polling on previously disabled Tag
plc?.GetTag("Tag0")?.SetTagPollIng(true);

您还可以使用 S7xxxx 静态类来设置 PLC。例如,使用 S7PlcRx.S71500.Create(...... 设置 S7-1500 PLC。

不带泛型类型的添加标签
plc.AddUpdateTagItem(typeof(double), "Tag0", "DB500.DBD0");
带链式选项的添加标签
plc.AddUpdateTagItem<double>("Tag0", "DB500.DBD0").SetTagPollIng(false)
   .AddUpdateTagItem(typeof(double), "Tag1", "DB500.DBD8");
删除标签
plc.RemoveTagItem("Tag0");
设置轮询

添加标签时默认启用轮询。您可以在任何时候禁用或启用标签的轮询。

// Create a new Tag and with no Polling
plc.AddUpdateTagItem<double>("Tag0", "DB500.DBD0").SetTagPollIng(false);

// Set Polling on Tag
plc?.GetTag("Tag0")?.SetTagPollIng(true);

// Stop Polling on Tag
plc?.GetTag("Tag0")?.SetTagPollIng(false);
写入 PLC
plc.Value<double>("Tag0", 1.0);
读取 PLC CPU 信息
// Get CPU Info from PLC Async
var cpuInfo = await plc.CpuInfo();

// Get CPU Info from PLC Reactive
plc.GetCpuInfo().Subscribe(info =>
    {
    });

此函数返回一个包含以下值的 CpuInfo 字符串数组:AS 名称、模块名称、版权信息、序列号、模块类型名称、订单代码、版本。

使用看门狗

看门狗是一个功能,它每隔设定的时间将一个值写入PLC的一个特定地址。这可以用来保持PLC的活动状态,防止其进入停止模式。

PLC的功能由用户来实施。

推荐使用看门狗的方法是使用一个定时器来递减PLC中的值。如果值达到0,则可以停止PLC。看门狗会始终将一个值写回PLC来重置定时器并恢复正常操作。

var plc = new RxS7(S7PlcRx.Enums.CpuType.S71500, "PLC_IP_ADDRESS", 0, watchDogAddress, 5, watchDogValueToWrite, watchDogInterval);

看门狗默认是禁用的。要启用看门狗,设置 watchDogAddress,它必须是一个DBW类型的地址。《code>watchDogInterval 是每次写入之间的时间(秒),watchDogValueToWrite 是写入PLC的值。

支持的数据类型
  • 布尔型 - DB?.DBX?.?
  • 字节型 - DB?.DBB?
  • 字节型数组 - DB?.DBB? 创建数组标签时设置长度为字节数 - 例子:AddUpdateTagItem<byte[]>(PlcData, "DB100.DBB0", 64) - 创建一个包含64字节的标签
  • 整型 - DB?.DBW?
  • 整型数组 - DB?.DBW?
  • 无符号整型 - DB?.DBW?
  • 无符号整型数组 - DB?.DBW?
  • 双整型 - DB?.DBD?
  • 双整型数组 - DB?.DBD?
  • 无符号双整型 - DB?.DBD?
  • 无符号双整型数组 - DB?.DBD?
  • 实型 - DB?.DBD?
  • 实型数组 - DB?.DBD?
  • 长实型 - DB?.DBD?
  • 长实型数组 - DB?.DBD?
  • 字符串 - TODO - 暂时使用字节数组
  • 字型 - DB?.DBW?
  • 字型数组 - DB?.DBW?
  • 双字型 - DB?.DBD?
  • 双字型数组 - DB?.DBD?

将来将添加更多类型。

支持的PLC
  • Logo-0BA8
  • S7-200
  • S7-300
  • S7-400
  • S7-1200
  • S7-1500
产品 兼容和附加计算的目标框架版本。
.NET net5.0 已计算。 net5.0-windows 已计算。 net6.0 兼容。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 兼容。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 兼容。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
.NET Core netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET Standard netstandard2.0 兼容。 netstandard2.1 已计算。
.NET 框架 net461 已计算。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容的目标框架
包括的目标框架(在包中)
有关 目标框架.NET Standard 的更多信息。

NuGet 包 (1)

显示依赖 S7PlcRx 的前 1 个 NuGet 包

下载
MQTTnet.Rx.S7Plc

MQTTnet 协议的响应式扩展

GitHub 仓库

此包未在任何流行的 GitHub 仓库中使用。

版本 下载 最后更新
1.3.3 251 2/29/2024
1.3.2 128 1/18/2024
1.3.1 84 1/18/2024
1.3.0 102 1/16/2024
1.2.5 191 12/19/2023
1.2.4 186 10/30/2023
1.2.3 120 10/20/2023
1.2.2 100 10/19/2023
1.2.1 259 8/22/2023
1.2.0 106 8/21/2023
1.1.4 203 8/3/2023
1.1.3 137 8/2/2023
1.1.2 129 8/2/2023
1.1.1 177 7/27/2023
1.1.0 128 7/27/2023
1.0.3 200 5/19/2023
1.0.2 1,205 7/26/2022
1.0.1 366 7/25/2022

与 Net 6 / 7 / 8 和 netstandard2.0 的兼容性