【问题标题】:Desktop SCADA Application - Reading and Writing to PLCs through C++桌面 SCADA 应用程序 - 通过 C++ 读取和写入 PLC
【发布时间】:2014-01-15 16:22:05
【问题描述】:

我已尽力搜索有关 SCADA 和开发您自己的 C++ 桌面应用程序以与 PLC 通信的所有主题,但找不到任何最近或在我看来符合我需要的相关主题。如果我错过了他们,将非常感谢他们的链接。如果我也碰巧在错误的版块中发布了此内容,或者您​​可以想出一个更好的版块让我将其发布到那里,我会把它带到那里。

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


关于我在做什么的一点点

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

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

我将在 Qt 中开发应用程序,以便以一种简单的方式设计 GUI,并允许我访问 QNetworkInterface 以及 QTcpSocket。

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


我的问题

  1. 是否有任何我可以阅读的参考资料,您可以提出建议,以便更轻松地了解我需要通过什么样的过程来接收信息(即:单个 I/O、状态位、标签、日志等)直接从 PLC 获取,而不是通过 OPC 服务器?

  2. 1234563想远离 excel,如果可能的话,还想远离 OPC 服务器 (RSLinx))。对于对 OPC 服务器主题一无所知的人,或者据我所知,一般 OPC,您有什么建议?
  3. 你们中的任何人以前是否曾编写过自己的应用程序来完成与我想要完成的任务类似的事情(如果性质不同的话)?

  4. 对于正在尝试此类项目的人,您有什么建议或建议?


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

PSS:我想再次指出,我仍然是一名学生,并且仍在全面了解这门学科。想请大家耐心等待,我第一次可能无法完全掌握!

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

谢谢!


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

编辑 #2:修正问题 2

【问题讨论】:

  • 如果已经有OPC Server,直接轮询PLC会不会导致端口冲突,或者两者可以同时存在?由于每个 PLC 都不同,因此使用 OPC 服务器启动并计算需要哪些标签可能会更快。 OPC 所做的就是为您提供所有这些接口的一致接口。
  • 如果它在 excel 中工作,您可以在 javascript/vbscript 中将其作为 hta。它不能移植到 Linux,但可以在任何 Windows 平台(95 或更高版本)上运行。
  • OPC 为您提供的是一个可以查询的 ODBC 数据库。为什么不分两个阶段进行:首先确定使用 OPC 和 ODBC 的 GUI 会是什么样子。同时您可以计算出用于控制 PLC 的变量。完成后,尝试直接与 PLC 对话。如果没有足够的时间来完成它,那么至少您可以显示控制 GUI。您也可以将 OPC 添加到您的简历中,因为它是一个众所周知的标准。您可以在代码中放置一个开关,用于选择是直接通话还是通过 OPC 通话
  • plc 连接是一个主要的安全线程,这就是为什么你对处理目前存在的东西感到困惑的原因。 Opc 最初被设计为微软进入由主机制造商统治的工业计算的后门。 Opc-ua 引入了多平台可移植性(即使对于嵌入式东西),但仍保持其精心设计的不透明性。控制是我们经济中的关键点,工厂巴士很受那些不想放松控制的人的关注......
  • MQTT 将(或不会)领先一步,由监管机构为现场总线互连释放一些压力

标签: c++ tcp plc scada


【解决方案1】:

恕我直言,SCADA 程序应该具有连接到 OPC 服务器的最低要求。 OPC 用于大多数商业 PLC。

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

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

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

【讨论】:

    【解决方案2】:

    我会远离编写自己的代码来直接连接 到 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/$file/rslinxsdk_ma_eng.pdf

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

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      【讨论】:

        【解决方案4】:

        查看 github 中的 pycomm 或 github 中的 pylogix,它们是 Python 编写的驱动程序,用于链接到 clx plc。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-05
          • 2016-06-13
          • 2016-01-23
          • 1970-01-01
          • 2014-12-21
          • 2021-12-25
          相关资源
          最近更新 更多