在C# .NET中进行PLC编程

7

我可以用C#编写PLC控制程序吗?如何实现?


我相信这将取决于制造商或品牌。 - Luiscencio
2
你的意思是什么?是编写一个由PLC处理器执行的程序,还是一个只需要通过以太网、Modbus等与PLC通信的程序? - JohnSaps
12个回答

14

不太可能。C#需要实现公共语言运行时(CLR)来运行用该语言或任何.NET语言开发的应用程序。因为各种原因,我会说任何PLC都很难支持它。

现在您可以做的是使用OPC协议使C#应用程序读取和写入PLC中的数据。有一些可用于.NET Framework的不同库来使用OPC。

这里是一个非常好的网站,列出了各种选择。


8
贝克霍夫实际上为直接使用C#(和其他语言)操纵PLC程序中的变量提供了一个接口(ADS),可用于TwinCAT 2或3。正如Ahmed Yazan Tibi所正确指出的那样,您还可以在TC3中直接使用C ++编写PLC程序。
请参见此处:http://www.beckhoff.com/english.asp?twincat/twincat_ads_communication_library.htm 然而,在此之前,您仍需要在PLC程序中创建变量,并使用贝克霍夫的系统管理软件将其“连接”到物理接口才能使其有用。
虽然这是完全可能的,但通过这种方式,您将忽视和忽略直接在PLC环境中编程的一些关键优势:
1.确定性行为 2.运行时安全性
话虽如此,它也有许多好处-从能够非常简单地与任何类型的前端技术进行接口到直接记录数据到数据库等等。
干杯,
LazzMaTazz

4

贝克霍夫(Beckhoff)的 TwinCAT 是最好的选择!否则,您必须使用 IEC 6113-3,它有五种编程风格,包括最接近“文本代码外观”的“结构化文本”代码。

警告:永远不要创建一个带有常量循环(while(1))的程序,否则它将被检测为故障。该循环是全局的且已验证。

享受 PLC 编程吧!


4

它不在运行时内运行任何C#代码。它可以运行C++编译的代码。您可以使用它们的ADS DLL从C#或.NET与运行时进行接口,或者我想使用OPC服务器。这通常用于在C#中构建HMI,或作为与数据库、Web服务或设备(如激光测量或条形码扫描仪)进行接口的方式,其中制造商提供DLL。 - Scott Whitlock

3

是的,您可以。

我现在正在真实环境中使用它。我们正在使用Modbus协议通过TCP连接。

我不会说这很容易,或者对于PLC编程来说是最佳选项,但它确实有效,我们的在线机器正在全球范围内运行,并在您附近的医院工作和运行 :)

甚至不必使用C#,您可以使用任何可以通过TCP进行通信的语言,您只需要编写一个能够通过TCP工作的Modbus接口,这是出奇的容易的。 然后,您需要获得一些从Modbus TCP接收命令并将其转换到设置其他部分的Slave Controllers。

许多人此时会皱起眉头,说些废话,比如“非确定性环境”、“内存管理”或我最喜欢的“不能在RTOS上运行”。 这些都是废话。 实际上,很少有环境需要RTOS或确定性编程才能使其正常工作,事实上,200ms的响应时间就足够了,我们发现C#做得最好。 如果您的环境需要RTOS,则不建议使用C#,但如果像大多数环境一样,您只需要在人的感知时间内控制事物,则C#[填写您的语言选择]就可以了。

哦,远离梯形编程或任何那种垃圾,这是愚蠢的,旨在使电气工程师更容易过渡。


1
它可能像你说的那样大多数时间都能工作,但在某些特定的工业环境中,很难让人们相信一个非确定性控制系统。这一次是200毫秒,下一次可能是300或800毫秒。没有保证。任何顺序错误都可能导致灾难性事故,这是不允许发生的。 - joe

3

不,至少现在不行。未来呢?我认为也几乎不可能。

PLC太硬件特定了,无法使用CLR编写程序。

如果您有兴趣编写可在不同类型的PLC之间移植的代码,目前最接近的方法是使用IEC 6113-3结构化文本代码。

大多数(如果不是全部)领先的PLC制造商现在都能够使用它,包括欧姆龙、西门子、艾伦·布拉德利、三菱、Telemecanique等等。


3

2
你可以通过从plc的内存中检索或存储数据来从.net应用程序向plc进行通信,这称为DB。然后,您可以使用这些变量来操作plc的代码。
与plc的TCPIP通信可以使用开源API Snap7完成,该API仅与西门子PLC兼容。
也许更可靠的设置是通过opc服务器进行通信。这可以通过Kepware或SNMP SIEMENS完成。
有几个可以购买的.net API允许通过这些协议(还有其他协议)进行opc通信:
- 通过COM的OPC DA - 通过TCP或webservices的OPC UA

2
是的,您绝对可以编写软件来使用C#读写PLC。 但是,这可能需要很多工作。 如果您很幸运,可以找到适用于您感兴趣的PLC的.NET库。 在我的情况下,这是一个DirectLogic PLC EBC模块,在那里我找到了一个VB.NET库here和一个Allen Bradley SLC Micro,在那里我找到了另一个VB.NET库here。 在两种情况下,我都必须稍微重构代码,然后从我的C#应用程序引用它。
如果找不到.NET库,通常可以获得一些C / C ++代码,然后自己进行移植。 然后,如果最糟糕的情况出现,并且只有预编译库,则始终存在native interop

2

自从我进行PLC编程以来已经很长时间了,但是PLC只是一组基于输入、定时器等做出决策并发布输出的逻辑门,为什么VB或C#或任何.NET语言不能执行此逻辑?

这不是关于指导PLC的问题,而是一个更大的问题,即如果硬件、驱动程序和DLL可用,它是否可以替代PLC。

如果还没有,很快就会有这个功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接