C#.NET中的PLC编程[关闭]
Posted
技术标签:
【中文标题】C#.NET中的PLC编程[关闭]【英文标题】:PLC Programing in C# .NET [closed] 【发布时间】:2011-03-19 03:55:03 【问题描述】:我可以用 C# 编写用于 PLC 控制的程序吗? 怎么样?
【问题讨论】:
我相信这取决于制造商或品牌 这是什么意思?编写一个由 PLC 中的处理器执行的程序,或者一个只需要通过例如 PLC 与 PLC 通信的程序。以太网、Modbus 等? 【参考方案1】:不太可能。 C# 需要公共语言运行时 (CLR) 的实现来运行以该语言或任何 .NET 语言开发的应用程序。我想说的是,出于各种原因,任何支持这一点的 PLC 都不太可能被制造出来。
现在您可以做的是让您的 C# 应用程序使用 OPC 协议从 PLC 读取和写入数据。有几个不同的库可用于 .NET Framework。
Here 是一个很好的网站,用于展示选项。
【讨论】:
【参考方案2】:不,至少现在不是。至于未来?几乎肯定不会,IMO。
PLC 的硬件过于特殊,无法使用 CLR 编写程序。
如果您有兴趣编写可跨不同类型 PLC 移植的代码,您现在最接近的方法是使用 IEC 6113-3 Structured Text 代码。
现在大多数(如果不是所有)领先的 PLC 制造商都可以使用它,包括 Omron、Siemens、Allen Bradley、Mitsubishi、Telemecanique 等等。
【讨论】:
【参考方案3】:C# 不用于 PLC 世界。你能得到的最接近的是FEZ Domino with .NET Micro Framework。
【讨论】:
【参考方案4】:unitronics 呢。 unittronics的所有plc型号都有通信驱动程序和源代码
【讨论】:
【参考方案5】:是的,您绝对可以使用 C# 编写软件来读取和写入 PLC。但是,这可能需要做很多工作。如果幸运的话,您可以为您感兴趣的 PLC 找到一个 .NET 库。就我而言,这是一个 DirectLogic PLC EBC 模块,在那里我找到了一个 VB.NET 库 here 和一个 Allen Bradley SLC Micro,在那里我找到了另一个 VB.NET 库 here。在这两种情况下,我都必须稍微重构一下代码,然后从我的 C# 应用程序中引用它。
如果您找不到 .NET 库,您通常可以获取一些 C/C++ 代码,然后自行移植。那么如果最坏的情况发生并且只有一个预编译的库,那么总是有native interop。
【讨论】:
【参考方案6】:我已经很久没有进行任何 PLC 编程了,但 PLC 不只是一组逻辑门,可以根据输入、计时器等做出决策并发布输出吗?那么为什么 vb 或 c# 或任何 .Net 语言都不能执行这个逻辑呢?
这不是指导plc的问题,更多的是如果硬件、驱动程序和dll可用的话,它能否替代plc。
如果还没有,肯定很快就会出现。
【讨论】:
【参考方案7】:Twincat 版本 3(Beckhoff PLC 开发环境)除了支持 C# 之外,还将支持 C++ 编程语言
EN | TwinCAT 3: Visual Studio integration, language support (SPS/IPC/DRIVES 2010)
【讨论】:
它不会在运行时内运行任何 C# 代码。它可以运行 C++ 编译的代码。您可以使用他们的 ADS DLL 或我想是 OPC 服务器从 C# 或 .NET 连接到运行时。这通常用于在 C# 中构建 HMI,或者作为与数据库、Web 服务或制造商提供 DLL 的激光测量或条形码扫描仪等设备的接口方式。【参考方案8】:Beckhoff 实际上提供了一个接口 (ADS),用于使用 C#(和其他语言)直接操作 PLC 程序中的变量,可用于 TwinCAT 2 或 3。正如 Ahmed Yazan Tibi 也正确地说,您可以使用 C++也可以直接在 TC3 的 PLC 程序中。
请看这里:http://www.beckhoff.com/english.asp?twincat/twincat_ads_communication_library.htm
您仍然需要在 PLC 程序中创建变量,并使用 Beckhoff 的系统管理器软件将它们“连接”到物理接口,然后才能发挥作用。
虽然这是完全可能的,但如果沿着这条路线走,您可能会忽略并忽略直接在 PLC 环境中编程的一些关键优势:
-
确定性行为
运行时安全
话虽如此,它有很多好处 - 从能够非常简单地连接任何类型的前端技术到将数据直接记录到数据库以及介于两者之间的所有内容。
干杯,
LazzMaTazz
【讨论】:
【参考方案9】:Beckhoff 的 TwinCAT 就是这样!否则,您必须使用 IEC 6113-3 和它的 5 种编程风格,包括最接近“类似文本代码”的“结构化文本”代码。
警告,切勿创建具有恒定循环(while(1))的程序,否则会被检测为错误。该循环是全局的并且经过验证。
享受 PLC 编程。
【讨论】:
【参考方案10】:是的,你可以。
我目前正在现场制作。我们通过 TCP 使用 Modbus 协议。
我不会说它容易上手,或 PLC 编程的最佳选择,但它确实有效,而且我们在世界各地都有现场机器,在您附近的医院工作和运行 :)
它甚至不必是 C#,您可以使用任何可以通过 TCP 进行通信的语言,您只需编写一个通过 TCP 工作的 Modbus 接口,这非常容易。然后你需要获取一些使用 Modbus TCP 的从控制器并将命令转换到设置的其他部分。
此时很多人会皱眉说诸如“不是确定性环境”、“内存管理”或我最喜欢的“不在 RTOS 上运行”之类的废话。这些都是垃圾。很少有环境需要 RTOS 或确定性编程才能使其工作,事实上 200 毫秒的响应时间就可以了,我们发现 c# 最能做到这一点。如果你的环境需要 RTOS,我不推荐使用 C#,但如果像大多数环境一样,你只需要在人类感知时间内控制东西,那么 C# [在此处填写你的语言选择] 就可以了。
哦,请不要使用梯形编程,或者其他什么垃圾,它很愚蠢,专为电气工程师设计,目的是让他们更轻松地过渡。
【讨论】:
它可能像你说的那样在大多数时间都可以工作,但是在某些特定的工业环境中,很难让人相信一个非确定性的控制系统。这次是200ms,下一次可能是300或800ms。没有任何保证。任何顺序错误都可能导致灾难性事故,这是不允许发生的。【参考方案11】:是的,许多 PLC 制造商提供 DLL 文件以与基于 PC 的软件(如 VB、C#、VB.NET)进行通信。
在 DELTA PLC 网站上,您将找到 C# 代码以与 Delta PLC 通信。
要了解如何与 VB 进行 PLC 通信,您可以访问
http://plc-scada-dcs.blogspot.com/2013/06/plc-visual-basic-60-communication-using.html
【讨论】:
【参考方案12】:您可以通过从 plc 的内存中检索或存储数据来从.net 应用程序与 plc 进行通信,这称为 DB。然后就可以使用这些变量来操作plc的代码了。
与 plc 的 TCPIP 通信可以使用仅与 siemens plc 兼容的开源 api snap7 来完成。
也许更可靠的设置是通过 opc 服务器进行通信。这可以通过 kepware 或 SNMP SIEMENS 完成
可以购买多个 .net API,允许通过这些协议通过 opc 进行通信(还有其他协议)
通过 COM 的 OPC DA 通过 TCP 或 Web 服务的 OPC UA【讨论】:
以上是关于C#.NET中的PLC编程[关闭]的主要内容,如果未能解决你的问题,请参考以下文章