工業級樹莓派可做為工控機使用,型號和功能齊全,除控制器核心外,還包括各類工業協定網關以及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。
本文使用 RevPi Core用作ModbusRTU 主站。這樣就可以透過Modbus RTU連接溫度傳感器、按鈕、運動檢測器等從站,並在RevPiCore中處理這些從站的數據。
▍所需要的工具
- RevPi Core
- 從站
- 帶D-Sub 9接口的電纜
- USB轉RS232連接線
- 網路連接
▍要求
- 網路瀏覽器,例如google瀏覽器或MozillaFirefox。
- RevPi Core位於你的網路中。
▍下面開始正式操作
- 將RevPi Core的一個USB端口連接到USB轉RS232連接線。
- 透過D-Sub 9接口將RS232接口連接到從站。
- 明確從站的地址並做好記錄。如有必要可以在製造商的操作說明中找到相關訊息。
注意!如果您使用多個從站,則必須確保每個從站都有自己的地址。如果2個或更多從站具有相同的地址,則會發生通訊錯誤。
- 將RevPi Core連接到電源。
- 打開網頁瀏覽器。
- 在瀏覽器的地址欄中輸入RevPi Core的IP地址。
之後將進入登錄界面。
- 使用用戶名“admin”登錄。
- 輸入密碼。你可以在RevPi Core側面的標籤上找到它。
- 點擊“LOGIN”。
現在你可以看到RevPi Core的當前設備狀態。
- 點擊“SERVICES”標籤。
- 點擊“Enable/Disable ModbusSlave” 行中的“Enabled”。
- 點擊“SAVE ALL”按鈕。
提示:你也可以在命令行上激活Master功能。輸入以下命令:“sudorevpi-config enable pimodbus-master”。
- 點擊“APPS”標籤。
- 點擊“PiCtory”後面的開始按鈕。
進入PiCtory界面。
- 打開設備目錄中的“Virtual Devices”文件夾。
- 選擇Modbus RTU Master。
- 按住滑鼠左鍵並將Modbus RTU主站拖到RevPi Core旁。Modbus RTU主站現在將出現在配置面板的最右側。
- 選中Modbus RTU Master。
- 在“Device Data”窗口中設置該設備的基本設置。此設置是可選的。如果你使用大量設備並希望稍後在另一個程序中處理數據,則此輸入可能非常有用。
- 在“Value Editor”中,進行連接的設置:
Input:你可以在此處配置輸入。每個主站總共可以使用32個值。值的寬度為16位。
Output:你可以在此處配置輸出。每個主站總共可以使用32個值。值的寬度為16位。
device_path:Linux設備文件的文件路徑,默認值為:/dev/ttyUSB0。
注意!如果您使用的是同一類型的多個設備,則重啟時Linux設備文件的路徑可能會發生變化。通過設置將Linux設備文件路徑分配給設備序列號的規則,可以防止這種情況。
baud_rate:波特率決定了串行連接的速度。預設值:19200。
parity:奇偶校驗位的配置。
None:沒有奇偶校驗位。
Even:偶校驗(預設)。
Odd:奇校驗。
data_bits:數據位數預設值:8。
stop_bits:停止位數預設值:1
- 右鍵單擊配置面板中的Modbus RTU主站。
- 會出現一個菜單。
- 選擇“Extended Data”。
這會打開一個輸入掩碼。你可以在此處設置Modbus指令。
注意:一些製造商使用地址1作為其產品的第一個寄存器地址。一些製造商使用地址0作為其產品的第一個寄存器地址。需要明確從站是如何指定尋址的。如果要使用的從站使用地址0作為第一個寄存器地址,則必須在配置期間將特定值加1。
例如:從站的文檔指定了寄存器地址30053,而文檔中說明了地址從0開始。那麼在配置Modbus指令時,要使用地址30054作為該寄存器地址。
Slave Addr.:該地址直接在從站上設置。有關如何執行此操作的信息,請參閱製造商的說明手冊。
注意:如果你使用多個從站,請確保每個從站都有自己的地址。如果2個或更多從站具有相同的地址,則會發生通信錯誤。
“0”不能用作從機地址。它保留給Modbus進行傳播。
Function Code:Modbus具有允許以某種方式訪問數據的功能代碼。可以使用以下功能代碼:
READ_COILS
讀單個位
READ_DISCRETE_INPUTS
讀單個輸入位
READ_HOLDING_REGISTERS
讀取整個16位輸入/輸出寄存器
READ_INPUT_REGISTERS
讀取整個輸入寄存器(16位)
WRITE_SINGLE_COIL
寫單個位
WRITE_SINGLE_REGISTER
寫整個寄存器
WRITE_MULTIPLE_COILS
寫幾個連續的位
WRITE_MULTIPLE_REGISTERS
寫幾個連續的寄存器
Register Addr.:要訪問的數據的Modbus寄存器地址或位地址。
你將在從站的操作說明中找到有關如何分配從站寄存器的信息。
寄存器地址始終與相應的功能代碼一起生效。這意味著讀取保持寄存器地址17訪問的值與讀取輸入寄存器地址17訪問的值不同。
Quantity ofRegisters:讀/寫的寄存器(或位)數。
ActionInterval:發送指令的時間間隔(以毫秒為單位)。
需要注意的是如果系統負載過高,則無法實現非常短的間隔。只會在情況允許的情況下盡快發送命令。
Device Value:RevPi過程映像中讀取或寫入Modbus命令的首字或位的變量名。
確保不同的命令不重疊。
例如:從“Output_Word_1”開始的4個字節也佔用“Output_Word_2”。為避免重疊,你必須將下一個指令設置為指向“Output_Word_3”。
點擊“Add Row”來添加另一個指令。
你可以透過勾選在指令開頭的複選標記並單擊“RemoveSelected Rows”來刪除指令。
- 點擊“File>Save”以保存文件。
- 點擊“Tools>Reset Driver”。這將激活設備的更改。
需要繼續在logiCAD3或C中使用該配置?
- 點擊“File>Export”。
這時會彈出一個窗口。你可以指定文件的格式和文件名。
您可以選擇2種文件格式:
Export 01創建一個適合在logiCAD3中使用的文件。
Export 02創建一個偏移量列表,你可以將其用作自己的C程序的基本訊息。
- 選擇要繼續使用的格式。
- 指定文件名。
- 點擊“Ok”。
提示:針對你的項目,32個值不夠用?沒問題。只需要另一個主站並使用它訪問同一個從站。這樣你就有了64個值。
如果出現錯誤,在Modbus主站中,有指定的Modbus寄存器用於狀態報告。
如果發生通訊錯誤,錯誤代碼將寫入Modbus寄存器“Modbus_Master_Status”。
錯誤保留在該寄存器中,直到modbus寄存器“Master_Status_Reset”被手動置1。
錯誤碼0x10:找不到配置的設備。
檢查接線是否正確。
錯誤碼0x11:配置的設備不響應或您正在使用從站不允許的寄存器地址。
檢查配置是否正確。
Modbus主站可以處理32個任務。每個任務都有一個狀態寄存器和狀態復位寄存器。如果任務中發生錯誤,則錯誤代碼將寫入Modbus寄存器“Modbus_Action_Status_ [1 … 32]”。
該錯誤保留在該寄存器中,直到modbus寄存器“Action_Status_Reset_[1 … 32]”手動置1。
錯誤代碼對應於Modbus規範中指定的Modbus異常代碼。
這裡列出一些最重要的錯誤代碼:
1 非法功能碼:使用的功能代碼是不允許的。檢查你是否使用了正確的功能代碼。
2 非法數據地址:使用的Modbus寄存器地址無效。寄存器處於寫保護或無效狀態。檢查寄存器地址。
3 非法數據值:至少一部分數據值無效。可能是指定了過多寄存器。檢查你的值。
11 資源暫時不可用
12 無效的CRC:從從站接收到錯誤的數據包。在連接中斷後可能會發生這種情況。檢查你的接線。
13 無效數據:從站響應了不完整的數據包。在連接中斷後可能會發生這種情況。檢查你的接線。
104 CONNECTION RESET BY PEER
110連接超時:從站沒有足夠快的反應或根本沒有反應。檢查你的配置和接線。
你可以在Modbus的規格中找到更多相關內容:
http://www.modbus.org/specs.php
在接下來的示例中,將RevPi Core用作ModbusRTU主站並與溫濕度測量儀連接。
為了配置從站,需要事先獲得一些數據,以便可以通過RevPi Core對從站進行尋址。在從站的用戶手冊中可以找到這些數據。
請注意從站用戶手冊中的以下數據:
Baud rate:9600
Data bits:8
Stop bits:1
Parity:None
Slave address:1
Modbus function:ReadHolding Registers
接著在PiCtory的配置面板中選中ModbusRTU Master,然後在其“Value Editor”中進行串行連接的設置。
首先,需要知道USB轉RS232轉換線的連接位置。透過在命令行輸入’ls/dev/ttyU*’就可以顯示的當前USB設備的設備路徑。
另外我們已經從傳感器的用戶手冊中確定了我們的從站的值。
- device_path:/dev/ttyUSB0
- baud_rate:9600
- parity:None
- data_bits:8
- stop_bits:1
右鍵點擊配置面板中的Modbus RTU主站。在彈出的菜單中選擇“ExtendedData”來創建一個輸入掩碼。
這是我們設置Modbus指令的地方。在本示例中,我們需要一個指令來讀取溫濕度傳感器的值。我們也已經從傳感器的操作說明中收集了必要的訊息:
Slave Addr.:1
Function Code:READ_INPUT_REGISTERS
Register Addr.:49
Quantity of Registers:5
▎定義Modbus 任務
為了方便使用,在“Value Editor”中將Input_Word_1至5分別命名為I_1至5。
- 點擊“File>Save”以保存文件。
- 點擊“Tools>Reset Driver”。激活設備的更改。
接著在命令行中輸入“piTest -d”命令,可以看到我們在PiCtory中完成的RevPiCore和Modbus RTU Master配置。
現在我們可以使用“piTest –r I_1”命令來讀I_1的值了。這個值也就是當前測得的溫度值。
使用“piTest –r I_2”命令來讀I_2的值。這個值是當前測得的濕度值。
使用“piTest –r I_4”命令來讀I_4的值。這個值是當前測得的氣壓值。