使用Modbus将LabVIEW连接到任何PLC

更新 Apr 15, 2021

环境

软件

  • LabVIEW
  • LabVIEW Datalogging and Supervisory Control Module

NI LabVIEW软件可以通过多种方式与可编程逻辑控制器(PLC)通信。 Modbus是Modicon于1979年发布的用于与PLC进行通信的串行通信协议,后来被扩展为TCP协议。 Modbus由于其可用性而成为业界事实上的标准通信协议之一。在本教程中,学习如何使用LabVIEW通过Modbus与联网的PLC通信。

本教程使用了LabVIEW数据记录和监控(DSC)模块。该模块包括用于将数据记录到联网的历史数据库,实时和历史趋势,管理警报和事件,将LabVIEW Real-Time目标和Modbus设备联网到一个完整系统中以及为用户界面增加安全性的工具。凭借这些功能,LabVIEW成为用于工业控制应用程序的功能强大的HMI / SCADA软件包。

创建一个Modbus主I / O服务器

在本节中,您将创建一个到Modbus地址的LabVIEW接口,称为I / O服务器。 I / O服务器会使用当前值自动更新LabVIEW。

  1. 在LabVIEW入门窗口中,单击文件»新建项目。这将打开一个新的LabVIEW项目。
  2. 如果“上下文帮助”窗口不可见,请按Ctrl + H以显示该窗口。使此窗口保持打开状态,以获取有关光标下方项目的有用信息。
  3. 在LabVIEW Project窗口中,右键单击My Computer,然后选择New»I / O Server ,如图1所示。
图1:通过LabVIEW项目创建新的I / O服务器
  1. 在“创建新的I / O服务器”窗口中选择Modbus ,然后单击“继续”
  2. 型号下拉菜单中选择Modbus以太网

图2:配置Modbus主I / O服务器
  1. IP地址字段中输入目标Modbus从站的IP地址。如果您不知道如何确定计算机的IP地址,请参考以下网页:外部链接:如何查找IP信息。在此示例中,我们将Modbus从站与主站运行在同一台计算机上,因此我们使用本地主机IP地址127.0.0.1。
  2. 选择确定。在“项目资源管理器”窗口中会自动创建一个库来管理I / O服务器。
  3. 通过从项目浏览器窗口中选择文件»全部保存,将项目另存为ModbusDemoProject,将库另存为ModbusDemoLibrary。


通过I / O服务器将共享变量绑定到Modbus地址

在本节中,您将学习创建绑定到Modbus地址的共享变量,使您可以在LabVIEW中对PLC数据进行本地访问。使用共享变量,您可以在一台计算机或网络上的LabVIEW应用程序之间共享数据。

  1. 创建绑定到Modbus地址的新共享变量。
  1. 右键单击新创建的ModbusDemoLibrary,然后选择“创建绑定变量”
  2. 在“创建绑定变量”窗口中,将树向下扩展到Modbus1 ,以选择所需的地址范围。
  3. 然后选择000001-065535 ,然后单击添加范围。将“数据项”的默认值保留为000001,将“项目数”保留为1。单击确定

图3:选择要绑定到共享变量的Modbus地址
  1. 现在,您的配置窗口在“已添加变量”部分中应具有变量000001。
  2. 单击确定。这将创建一个绑定到Modbus地址的共享变量,并将其加载到多变量编辑器中。
  3. 在“多变量编辑器”中,选择“完成” 。这会将新的共享变量添加到之前创建的库中。
  4. 在项目资源管理器中,右键单击000001,然后选择“重命名” 。将变量重命名为Coil1。
注意:LabVIEW DSC模块通过添加将数据,警报和事件直接记录到数据库的功能来增强共享变量,而无需编写LabVIEW应用程序。
  1. 通过右键单击ModbusDemoLibrary并选择Deploy All部署共享变量。这将发布共享变量,使它们在网络上可用于其他计算机。
现在,您可以通过共享变量在LabVIEW中本地访问Modbus数据

在LabVIEW中写入Modbus地址

  1. 在项目浏览器中,右键单击我的电脑,然后选择新建»VI 。这将创建一个新的虚拟仪器或VI。 VI用于创建用户界面和可执行的图形代码。
  2. 默认情况下,您会看到前面板,这是VI的用户界面。 LabVIEW具有许多内置的UI组件,例如图形,图表,刻度盘等,可用于构建功能强大,直观的UI。选择查看»控件面板,或右键单击前面板上的任意位置以调出控件面板。将鼠标悬停在各个类别上,以探索LabVIEW中的UI组件。
  3. 通过选择Express»Button&Switches»Push Button从Controls面板中选择一个按钮,并将其放置在前面板上,如图4和5所示。

图4:从控件面板中选择一个按钮

图5:位于前面板上的按钮
  1. 在VI中,选择窗口»显示程序框图或按Ctrl + E以显示程序框图。框图是您构建应用程序行为的地方。注意程序框图上的图标,该图标代表前面板上的按钮。通过按前面板上的按钮,可以更改从框图上的图标端子传递的布尔值。
  2. 在项目资源管理器中,展开ModbusDemoLibrary库,然后选择Coil1共享变量。
  3. Coil1共享变量从项目浏览器拖放至VI的程序框图。共享变量充当程序框图上其他端子的数据源。
  4. 右键单击新放置的Coil1共享变量,然后选择访问模式»写入。这使您可以写入共享变量,而不是从共享变量中读取
  5. 使用连线工具到接线COIL1共享变量为布尔按钮通过点击COIL1共享变量,然后在布尔按钮,如图6。

图6:一起接线框图项目

现在,VI运行时,数据从布尔按钮流向共享变量。

  1. 通过选择视图»功能面板或在程序框图上的任意位置单击鼠标右键,打开“功能”面板。 “功能”选板包含数百个分析功能,控制功能和图形化编程结构。
  2. 导航到“编程”»“结构”»“循环”,从“功能”选项板中选择一个while循环。一旦选择了while循环,就会出现光标,如图7所示。这使您可以将while循环包装在一段代码中。

图7:选择While循环

图8:While循环游标
 
  1. 使用while循环光标,通过单击并拖动光标在共享变量和波形图周围放置while循环。现在,通过右键单击“循环条件”并选择“创建控件”,在while循环中创建一个Stop控件。这会在前面板上放置一个“停止”按钮,允许用户停止VI。


图9:在共享变量和控件周围放置While循环

while循环使其中的代码连续执行,直到被用户或VI中的其他逻辑停止。

  1. 由于while循环是现在,它将尽可能快地运行。等待直到下一个ms多个VI应添加到循环中,以使循环每隔设置的秒数执行一次,在这种情况下为100ms。
图10:在While循环中添加时序
  1. 通过选择窗口»显示前面板或按Ctrl + E返回前面板。
  2. 单击工具栏上的运行按钮以执行VI。

图11:运行按钮
  1. 部署完成后,单击Deploy …窗口上的Close 。当应用程序开始执行时,您现在可以将按钮切换为true和false。这将使用True或False更新共享变量引擎中Modbus绑定的共享变量

图12:完成的前面板-控制Modbus线圈
  1. 恭喜你!您已在LabVIEW应用程序中成功访问了PLC数据,因此可以在解决方案中合并强大的分析和控制功能。


使用分布式系统管理器查看共享变量

  1. 在项目资源管理器窗口中,选择工具»分布式系统管理器。这将打开一个窗口,您可以使用该窗口以各种方式(查看,部署,取消部署等)来管理共享变量。
  2. 在“变量管理器”的“树”窗格中,展开“我的系统”类别下的localhost项目。找到并展开ModbusDemoLibrary库,然后选择Coil1以在窗口右侧显示自动视图。
  3. 现在,您可以在前面板上切换布尔按钮,并在分布式系统管理器中查看结果,如图13所示。

图13:在分布式系统管理器中查看Coil1的值

:分布式系统管理器已随LabVIEW 8.6一起提供。 LabVIEW的早期版本通过转到工具»共享变量»变量管理器并将共享变量拖到“监视的变量:”窗口中来完成此操作。


使用Modbus从站查看线圈值

在文档的第一部分中,我们创建了一个Modbus主站,该主站将布尔值写入Modbus线圈。该线圈值存储在共享变量中,然后我们可以在分布式系统管理器中看到该变量。在下一节中,我们将展示Modbus从站如何读取主站正在更新的线圈值。我们在第一部分中创建的Modbus主站正在寻找IP地址为127.0.0.1(localhost)的Modbus从站。因此,如果我们想通过Modbus与Modbus主站通信,我们需要在本地计算机上创建一个Modbus从站。

  1. 在LabVIEW中,通过单击帮助»查找示例打开NI示例查找器
  2. 在NI Example Finder中,浏览至工具箱和模块»数据记录和监控»I / O服务器,双击Modbus Simulator.lvproj 。参见图16。

图14:NI Example Finder中的Modus Simulator
  1. 从项目中打开ModbusSimulator.vi,然后运行它。
  2. 如果您的Modbus Master VI当前未运行,请运行它。两者同时运行时,您会看到Modbus Simulator上的Digital 1 LED亮起,如图15所示。

图15:运行并显示Coil1真实值的Modbus Simulator
  1. 单击Modbus Simulator上的“退出”,然后按Ctrl + E切换到框图。
  2. 在程序框图上,注意正在使用共享变量读取Modbus地址000001。该共享变量连接到Modbus主站的Coil1值。

图16:Modbus Simulator框图

额外挑战

为了更好地理解Modbus主站和从站之间的关系,一个有意思的挑战是修改Modbus主站程序以读取和控制Modbus Simulator中的其余值。您将需要在ModDemoProject中将绑定的共享变量添加到Modbus I / O服务器。