使用Modbus將LabVIEW連接到任何PLC

更新 Oct 30, 2023

環境

軟體

  • 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 Master I/O伺服器

在本節中,您將創建一個到Modbus地址的LabVIEW接口,稱為I/O 伺服器。 I/O 伺服器會使用當前值自動更新LabVIEW。

  1. 在LabVIEWGetting Started視窗中,單擊File»New Project。這將打開一個新的LabVIEW專案。
  2. 如果“Context Help”視窗被屏蔽,請按Ctrl + H以顯示該視窗。使此視窗保持打開狀態,以獲取有關鼠標下方項目的有用訊息。
  3. 在LabVIEW Project視窗中,右鍵單擊My Computer,然後選擇New»I/O Server ,如圖1所示。
圖1:通過LabVIEW專案創建新的I/O伺服器
  1. 在“創建新的I/O伺服器”視窗中選擇Modbus ,然後單擊“Continue” 。
  2. Model下拉菜單中選擇Modbus Ethernet
圖2:配置Modbus Master I/O伺服器
  1. IP address欄位中輸入目標Modbus Slave的IP地址。如果您不知道如何確認電腦的IP地址,請參考以下外部網頁:如何查找IP資訊。在此範例中,我們將Modbus Slave與Master運行在同一台電腦上,因此我們使用本地主機IP地址127.0.0.1。
  2. 選擇OK。在“Project Explorer”視窗中會自動創建一個庫來管理 I/O伺服器。
  3. 通過從Project Explorer”視窗中選擇File»Save All保存,將專案另存為ModbusDemoProject,將庫另存為ModbusDemoLibrary。


通過I/O伺服器將共享變數綁定到Modbus地址

在本節中,您將學習創建綁定到Modbus地址的共享變數,使您可以在LabVIEW中對PLC數據進行本地存取。使用共享變數,您可以在一台電腦或網絡上的LabVIEW應用程式之間共享數據。

  1. 創建綁定到Modbus地址的新共享變數。
  1. 右鍵單擊新創建的ModbusDemoLibrary,然後選擇“Create Bound Variables…” 。
  2. 在“Create Bound Variables”視窗中,將樹向下擴展到Modbus1 ,以選擇所需的地址範圍。
  3. 然後選擇000001-065535 ,然後單擊Add Range。將“Data Item”的默認值保留為000001,將“Number of items”保留為1。單擊OK
圖3:選擇要綁定到共享變數的Modbus地址
  1. 現在,您的配置視窗在“Added variables”部分中應具有變數000001。
  2. 單擊OK。這將創建一個綁定到Modbus地址的共享變數,並將其加載到Multiple Variable Editor中。
  3. 在“Multiple Variable Editor”中,選擇“Done” 。這會將新的共享變數添加到之前創建的庫中。
  4. 在Project Explorer中,右鍵單擊000001,然後選擇“ Rename” 。將變數重命名為Coil1。
請注意:LabVIEW DSC模組通過添加將數據,警報和事件直接記錄到資料庫的功能來增強共享變數,而無需編寫LabVIEW應用程式。
  1. 通過右鍵單擊ModbusDemoLibrary並選擇Deploy All來部署共享變數。這將發佈共享變數,使它們在網絡上可用於其他電腦。
現在,您可以通過共享變數在LabVIEW中本地存取Modbus數據

在LabVIEW中寫入Modbus地址

  1. 在Project Explorer中,右鍵單擊My Computer,然後選擇New»VI 。這將創建一個新的虛擬儀器或VI。 VI用於創建用戶界面和可執行的圖形程式碼。
  2. 默認情況下,您會看到Front Panel,這是VI的用戶界面。 LabVIEW具有許多內置的UI組件,例如圖形,圖表,刻度盤等,可用於構建功能強大,直觀的UI。選擇View»Controls Palette,或右鍵單擊Front Panel上的任意位置以呼叫Controls面板。將鼠標懸停在各個類別上,以探索LabVIEW中的UI組件。
  3. 通過選擇Express»Button&Switches»Push Button從Controls面板中選擇一個按鈕,並將其放置在Front Panel上,如圖4和5所示。
圖4:從Controls面板中選擇一個按鈕
圖5:位於Front Panel上的按鈕
  1. 在VI中,選擇Window»Show Block Diagram或按Ctrl + E以顯示Block Diagram。Block Diagram是您構建應用程式行為的地方。注意Block Diagram上的圖標,該圖標代表Front Panel上的按鈕。通過按Front Panel上的按鈕,可以更改從Block Diagram上的圖標端口傳遞的Boolean值。
  2. 在項目Project Explorer中,展開ModbusDemoLibrary庫,然後選擇Coil1共享變數。
  3. Coil1共享變數從Project Explorer拖放至VI的Block Diagram。共享變數充當Block Diagram上其他端口的數據源。
  4. 右鍵單擊新放置的Coil1共享變數,然後選擇Access Mode»Write。這使您可以寫入共享變數,而不是從共享變數中讀取。
  5. 使用Connect Wire工具到接線COIL1共享變數為Boolean按鈕通過點擊COIL1共享變數,然後在Boolean按鈕,如圖6。
圖6:Block Diagram項目接線

現在,VI運行時,數據從Boolean 按鈕流向共享變數。

  1. 通過選擇View»Functions Palette或在Block Diagram上的任意位置單擊鼠標右鍵,打開“Functions ”面板。 “Functions ”面板包含數百個分析功能,控制功能和圖形化編程結構。
  2. 導航到“Programming»Structures»While Loop”,從“Functions”選項板中選擇一個while迴圈。一旦選擇了while迴圈,就會出現鼠標,如圖7所示。這使您可以將while迴圈包裝在一段程式碼中。
圖7:選擇While迴圈
圖8:While迴圈鼠標
 
  1. 使用while迴圈鼠標,通過單擊並拖動鼠標在共享變數和波形圖周圍放置while迴圈。現在,通過右鍵單擊“Loop Condition”並選擇“Create Control在while迴圈中創建一個Stop控件。這會在Front Panel上放置一個“Stop”按鈕,允許用戶停止VI。
圖9:在共享變數和控件周圍放置While迴圈

while迴圈使其中的程式碼連續執行,直到被用戶或VI中的其他邏輯停止。

  1. 由於while迴圈是現在式,它將盡可能快速地運行。Wait Until Next ms MultipleVI應添加到迴圈中,以使迴圈每隔設置的秒數執行一次,在這種情況下為100ms。
圖10:在While迴圈中添加時序
  1. 通過選擇Window»Show Front Panel或按Ctrl + E返回Front Panel。
  2. 單擊工具欄上的Run按鈕以執行VI。
圖11:運行按鈕
  1. 部署完成後,單擊Deploy …視窗上的Close 。當應用程式開始執行時,您現在可以將按鈕切換為true和false。這將使用True或False更新共享變數引擎中Modbus綁定的共享變數
圖12:完成的Front Panel-控制Modbus線圈
  1. 恭喜您!您已在LabVIEW應用程式中成功存取了PLC數據,因此可以在解決方案中合併強大的分析和控制功能。


使用分佈式系統管理員查看共享變數

  1. 在項目Project Explorer視窗中,選擇Tools»Distributed System Manager。這將打開一個窗口,您可以使用該視窗以各種方式(查看,部署,取消部署等)來管理共享變數。
  2. 在“Variable Manager”的“樹”視窗中,展開“My Systems”類別下的localhost項目。找到並展開ModbusDemoLibrary庫,然後選擇Coil1以在視窗右側顯示 Auto View。
  3. 現在,您可以在front panel 上切換Boolean按鈕,並在分佈式系統管理員中查看結果,如圖13所示。

圖13:在分佈式系統管理員中查看Coil1的值

請注意:分佈式系統管理員已隨LabVIEW 8.6一起提供。 LabVIEW的早期版本通過轉到Tools»Shared Variable»Variable Manager並將共享變數拖到“ Watched Variables:”視窗中來完成此操作。


使用Modbus Slave查看線圈值

在文檔的第一部分中,我們創建了一個Modbus Master,該Master將Boolean 值寫入Modbus線圈。該線圈值存儲在共享變數中,然後我們可以在分佈式系統管理員中看到該變數。在下一節中,我們將展示Modbus Slave如何讀取Master正在更新的線圈值。我們在第一部分中創建的Modbus Master正在尋找IP地址為127.0.0.1(localhost)的Modbus Slave。因此,如果我們想通過Modbus與Modbus Master通訊,我們需要在本地電腦上創建一個Modbus Slave。

  1. 在LabVIEW中,通過單擊Help»Find Examples打開NI Example Finder
  2. 在NI Example Finder中,瀏覽至Toolkits and Modules» Datalogging and Supervisory Control» I/O Servers雙擊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 true值的Modbus Simulator
  1. 單擊Modbus Simulator上的“Quit”,然後按Ctrl + E切換到block diagram。
  2. 在block diagram上,注意正在使用共享變數讀取Modbus地址000001。該共享變數連接到Modbus Master 的Coil1值。
圖16:Modbus Simulator Block Diagram

額外挑戰

為了更好地理解Modbus Master和Slave之間的關係,一個有幫助的挑戰是修改Modbus Master程式以讀取和控制Modbus Simulator中的其餘值。您需要在ModDemoProject中將綁定的共享變數添加到Modbus I/O伺服器。