桌面SCADA应用程序 - 通过C ++读写PLC

时间:2013-12-28 05:46:27

标签: c++ tcp plc scada

我尽最大努力搜索有关SCADA的所有主题并开发自己的C ++桌面应用程序以与PLC通信,但无法找到最近或我认为适合我所需要的相关主题。如果我错过了他们,将非常感谢他们的链接。如果我也碰巧在错误的部分发布了这个帖子,或者你可以想一个更好的部分让我发布,我会把它带到那里。

话虽如此,我提前感谢您抽出时间阅读我的问题,并感谢您提供的任何意见。


关于我正在做的事情

我目前正在学校接受机电工程学习,在我的最后一年项目中,我正在用C ++开发一个桌面应用程序来监控我们在我们的一个实验室内的PLC。

在这个实验室中,我有一个预先存在的以太网网络将所有PLC连接到单点,我正在用PC连接,并将从那里完成我的所有工作。

我将在Qt中开发应用程序,以便轻松设计GUI,并允许我访问QNetworkInterface以及QTcpSocket。

话虽如此,我不会说我是一名经验丰富的程序员,但我已经用几种语言(即:python,c ++,c,php)搞砸了好几年,考虑到学习从不停止,我仍在学习。


我的问题

  1. 是否有任何我可以阅读的参考资料,您可以建议,在这个主题上更容易理解我需要通过什么样的过程来接收信息(即:个别I / O,状态位,标签,日志等...)直接来自PLC,而不是通过OPC服务器?

  2. 如果需要OPC服务器,除了使用Rockwell Automations RSLinx获取标签并在excel中显示其值之外,我从未处理过OPC链接(我使用该确切方法创建了原型,但是我想离开excel,如果可能的话,还要转移OPC服务器(RSLinx)。对于那些对OPC服务器主题一无所知的人,或者据我所知,OPC一般会对你有什么建议?

  3. 你们之前是否有人写过自己的应用程序来做类似的事情,如果不是和我想要完成的事情相同?

  4. 对于尝试此类项目的人,您会给出什么建议或建议?


  5. PS:作为这个项目的开始,我最初只想读取I / O(标签或地址)来查看它们当前的值(关闭或打开)输入,为输出通电或不通电)。但最终我还希望能够根据我从他们那里收到的值为我监控的PLC上的标签写入值。

    PSS:我想再次注意,我仍然是一名学生,并且我仍在全面了解这个主题。我只想请你的耐心,因为我可能不会在第一次完全掌握一切!

    如果我错过了您认为能够提供答案的相关信息,请告诉我们!我会尽力及时提出上述信息!

    谢谢!


    编辑#1 :在另一个问题中添加,并略微改变了我的第一个问题

    编辑#2 :修正了问题2

4 个答案:

答案 0 :(得分:4)

恕我直言,SCADA程序应至少具备能够连接到OPC服务器的要求。 OPC用于大多数商业PLC。

严格来说,不需要OPC服务器/客户端方法,但它为您提供了灵活性并为您提供了抽象模型。如果您想使用协议直接连接到PLC,那么当然也可以。然后,您需要了解有关协议及其各种版本的更多详细信息。

是的,我在开发商业SCADA应用程序的团队中工作了几年。

在这样的项目中很容易迷失方向,所以尽量保持简单。通过使用OPC,您可以节省时间,而不是直接使用协议。您可以添加为其他协议添加自定义驱动程序的功能 - 具体取决于您的时间范围。在开始编写模型的鸟瞰图之前,尝试对项目进行建模,避免迷失在细节中。

答案 1 :(得分:3)

我会远离寻找编写自己的代码直接连接 到AB PLC - 你可以在你的应用程序中使用的产品: http://www.rtaautomation.com/software/ethernetip/client/tagc/ControlWin.html http://www.automatedsolutions.com/products/dotnet/ascomm/

最好使用OPC - 如果需要,可以编写自己的OPC客户端,并按照此处的示例进行操作: http://www.opcconnect.com/source.php#freesource

根据此http://www.control.com/thread/1026173407,您应该能够获得Kepwares OPC Quick Client的源代码。

在本例中使用库可能更容易(RSLogix,C#): http://www.mesta-automation.com/opc-client-with-c-an-how-to-video/

你可能会发现这个用法: http://www.rockwellautomation.co.kr/applications/gs/ap/GSKR.nsf/files/rslinxsdk_ma_eng.pdf/ $文件/ rslinxsdk_ma_eng.pdf

一些资源: http://www.opcconnect.com/http://www.mesta-automation.com/

答案 2 :(得分:0)

查看github中的pycomm或github上的pylogix,这是Python编写的链接到clx plc的驱动程序。

答案 3 :(得分:0)

对问题#4的回答 - 意识到您的实验室在未来技术上可以包含任何制造商的PLC。如果您参加过数据通信课程,您会发现对于N种不同的PLC类型,您必须为PLC客户端编写N个不同的通信驱动程序。

这是标准有用的地方。如果不使用标准协议,扩展实验室可能会变得更加耗时且难以管理。这就是通信标准存在的原因。

但是,并非所有PLC都必须支持您可能决定的标准。

最佳选择是OPC / UA。许多PLC都有现成的服务器驱动程序。这意味着您的客户只需要了解1个协议(OPC / UA),然后就可以“轻松”连接到任何具有该标准驱动程序的PLC。

之后,有OPC。之后,Modbus(TCP和RTU风格),这是一个相对简单的行业标准,大多数PLC都支持。 EtherNet / IP也是一种可能的选择,尽管不是所有的PLC都支持它作为“服务器”角色(很多人支持它作为客户端,但这不是你需要的。)

相关问题