【工業樹莓派】配置 Modbus RTU從站

工業級樹莓派可做為工控機使用,型號和功能齊全,除控制器核心外,還包括各類工業協定網關以及IO擴展模塊等。

工業級樹莓派具有高度工業適用性,工作溫度範圍達到-40 ~55 °C ,靜電保護達到4 kV / 8 kV ,且浪湧/爆裂測試以及EMI測試都達到了EN61131-2和IEC 61000-6-2標準的要求。支援Node-RED、Python、或純C等多種編程語言;支援通用的工業物聯網(IIoT )協議,如MQTT和OPC UA;含兩個以太網接口,其中一個可以透過Modbus TCP協議連接工業現場網路,另一個可以連接上級的IT系統或是雲端服務器。 

Modbus RTU 從站

 

本例適用於Jessie Image。但並不適用於Wheezy。

在以下示例中,我們提供了一個Modbus RTU主站,它採集RevPi Core的CPU溫度訊息。我們使用的RevPi Core被視為從站。

提醒!在此示例中,我們使用Windows 計算機中的“qModMaster”軟體來模擬Modbus主站。可以在https://sourceforge.net/projects/qmodmaster下載此軟體。

▍正式操作

  • 透過RJ45連接器將RevPi Core連接到主站網路。
  • 將RevPi Core連接到電源。
  • 首先啟用Modbus-RTU 從站功能。
  • 打開網頁瀏覽器。
  • 在瀏覽器的地址欄中輸入RevPi Core的IP地址。

之後將進入登錄界面。

  • 使用用戶名“admin”登錄。
  • 輸入密碼。你可以在RevPi Core側面的標籤上找到它。
  • 點擊“LOGIN”。

現在你可以看到RevPi Core的當前設備狀態。

  • 點擊“SERVICES”標籤。
  • 點擊“Enable/Disable ModbusSlave” 行中的“Enabled”。
  • 點擊“SAVE ALL”按鈕。
  • 點擊“APPS”標籤。
  • 點擊“PiCtory”後面的開始按鈕。

進入PiCtory界面。

▍下面進行Modbus RTU從站配置。

  • 打開設備目錄中的“Virtual Devices”文件夾。
  • 選擇Modbus RTU Slave。
  • 按住滑鼠左鍵並將Modbus RTU從站拖到RevPiCore旁。Modbus RTU從站現在將出現在配置面板的最右側。

在“Device Data”窗口中設置該設備的基本設置。此設置是可選的。如果你使用大量設備並希望稍後在另一個程序中處理數據,則此輸入可能非常有用。

在“Value Editor”中,我們進行有關RTU連接的設置。在本示例中的設置是:

device_path: /dev/ttyUSB0。

baud_rate: 19200。

parity: none。

data_bits: 8。

stop_bits: 1。

modbus_address: 1。

下面保存PiCtory配置。

點擊“File>Save”以保存文件。

點擊“Tools>Reset Driver”。這將激活設備的更改。

下面說明如何查詢CPU溫度。

你可以在命令行中使用以下命令查詢RevPi Core的CPU溫度:

/usr/bin/vcgencmd measure_temp

可以得到當前的溫度輸出:

為了在Modbus上處理這個值,需要轉換此輸出量。溫度需要x10即去掉小數點之後再用作輸出量:

/usr/bin/vcgencmd measure_temp | awk ‘ { printsubstr($0,6,2) substr($0,9,1) } ‘

現在使用piTest將數據寫入Modbus寄存器:

piTest -w Output_1, $(/usr/bin/vcgencmdmeasure_temp | awk ‘ { print substr($0,6,2) substr($0,9,1) } ‘)

為確保溫度不僅一次寫入寄存器,而是連續寫入,整個過程必須循環運行:

while true; do piTest -wOutput_1,$(/usr/bin/vcgencmd measure_temp | awk ‘ { print substr($0,6,2)substr($0,9,1) } ‘); sleep 1; done &

如果要退出該循環,則必須鍵入“fg”,然後鍵入CTRL+ C。

▍下面進行Modbus RTU主站配置。

在本示例中使用工具“qModMaster”來查詢值。

針對本示例進行以下設置:

  • 透過Modbus RTU連接進行通訊:

Modbus模式:RTU

  • 與設備地址為1的從站通訊:

SlaveAddr:1

  • 以1000毫秒的周期提取數據:

掃描速率(毫秒):1000

  • 數據應作為一個完整的Modbus寄存器被讀取:

功能碼:Read Input Registers (0x04)

  • 數據應以十進制形式輸出:

DataFormat:Dec

  • 應從Modbus寄存器地址0開始讀取數據:

起始地址:1

  • 要讀取完整的寄存器:

寄存器數量:1

  • 點擊“選項”,然後選擇“Modbus RTU”。

在此處進行串行接口的設置。對於本示例,它的設置如下圖所示:

提醒!如果你正在使用qModMaster並使用其他端口,則可能需要使用如下輸入:“.COM10”。

點擊“連接”。這將從站連接到Modbus主站。

點擊“讀/寫”。這將透過Modbus提取值。

現在可以看到值505。這說明RevPiCore的CPU溫度為50.5°C

下面來看看Modbus功能。

▍Modbus從站模塊為你提供以下Modbus功能:

  • 讀保持寄存器(0x03)

讀輸入

  • 讀輸入寄存器(0x04)

讀輸出

  • 寫單寄存器(0x06)

寫入一個輸入寄存器

  • 寫多個寄存器(0x10)

寫入多個輸入寄存器

一個Modbus RTU從站有32個輸入寄存器和32個輸出寄存器可供使用。如果你需要更多,也可以在PiCtory裡配置多個ModbusRTU從站。