虹科工業(yè)樹莓派是一款基于樹莓派計(jì)算模塊進(jìn)行工業(yè)級(jí)設(shè)計(jì)和封裝的,并且經(jīng)過(guò)工業(yè)標(biāo)準(zhǔn)測(cè)試(EN61131-2和IEC 61000-6-2),如EMI,浪涌和突發(fā)事件等等,有ESD的極性保護(hù),達(dá)到4KV/8KV。
虹科工業(yè)樹莓派的操作系統(tǒng)在Raspbian基礎(chǔ)上進(jìn)行了優(yōu)化,給linux內(nèi)核添加了RT實(shí)時(shí)補(bǔ)丁,以使得linux滿足硬實(shí)時(shí)的需求。
“ 02 / Modbus TCP/RTU主從站功能 ”
虹科工業(yè)樹莓派內(nèi)置虛擬Modbus TCP/RTU主從站功能,用戶可以通過(guò)產(chǎn)品上的USB接口(需要USB轉(zhuǎn)接線)/RS485接口連接Modbus RTU設(shè)備,并對(duì)設(shè)備進(jìn)行讀寫操作。
用戶可以在網(wǎng)頁(yè)配置界面PiCtory中對(duì)虛擬主從站進(jìn)行配置。
比如:配置Modbus RTU Master一個(gè)任務(wù)為每1000ms讀取一次從站地址為1,寄存器地址為1的保持寄存器的值,并將讀取到的值放入Input_Word_1中,配置好之后讀取操作將自動(dòng)執(zhí)行,用戶只需讀取Input_Word_1的值即可獲得相應(yīng)數(shù)據(jù)。
在配置Modbus RTU Master時(shí)需要輸入通過(guò)USB口連接的從站的設(shè)備編號(hào)的路徑,比如:/dev/ttyUSB0。
但這就帶來(lái)一個(gè)問(wèn)題:當(dāng)從站通過(guò)USB口連接到模塊時(shí),其設(shè)備端口號(hào)是系統(tǒng)自動(dòng)分配的,Linux內(nèi)核會(huì)根據(jù)設(shè)備插入的先后順序進(jìn)行編號(hào)的分配,比如第一個(gè)插入的設(shè)備編號(hào)是ttyUSB0,第二個(gè)插入的設(shè)備編號(hào)是ttyUSB1,依次類推。
所以,在每次重啟系統(tǒng)之后,連接的Modbus RTU從站的設(shè)備編號(hào)可能會(huì)發(fā)生變化,上一次啟動(dòng)時(shí)是ttyUSB0,下一次啟動(dòng)就可能變成ttyUSB1。
如果每次啟動(dòng)設(shè)備都要檢查和修改設(shè)備編號(hào)路徑的話就會(huì)在實(shí)際應(yīng)用中帶來(lái)很多麻煩,那么有沒(méi)有一種方法可以固定設(shè)備編號(hào)呢?
答案是肯定的!
我們可以通過(guò)指定udev規(guī)則,讓udev除了產(chǎn)生/dev/ttyUSB*設(shè)備文件外,另外再創(chuàng)建一個(gè)軟鏈接。具體操作見(jiàn)下文。
“ 03 / udev規(guī)則-通過(guò)芯片的特定碼創(chuàng)建軟鏈接 ”
Vender ID和Product ID,即“廠家標(biāo)識(shí)”和“產(chǎn)品標(biāo)識(shí)”。USB 設(shè)備驅(qū)動(dòng)的硬件接口需要識(shí)別Vender ID和Product ID。
可以通過(guò)lsusb命令查看當(dāng)前通過(guò)USB接入的設(shè)備的描述列表,就可以得到設(shè)備的Vender ID和Product ID,然后在進(jìn)行后續(xù)綁定。
圖2.1 lsusb命令
從上圖可以看到,我通過(guò)USB口連接的USB-Serial adapter設(shè)備的Vender ID是1a86,Product ID是7523。接下來(lái),在/etc/udev/rule.d目錄下創(chuàng)建新的規(guī)則文件ttyUSBLink.rules。并輸入以下規(guī)則:
KERNEL==”ttyUSB*”, ATTRS{idVendor}==”1a86”, ATTRS{idProduct}==”7523”, MODE:=”0666”, GROUP:=”dialout”, SYMLINK+=”modbus_device_1”
保存并退出文件,重新拔插USB設(shè)備,新建的udev規(guī)則即可生效(若沒(méi)有生效,以root權(quán)限運(yùn)行命令:service udev reload和service udev restart)。
以上述規(guī)則為例,以后無(wú)論按照什么順序插入,都能夠通過(guò)自定義的modbus_device_1設(shè)備文件軟鏈接訪問(wèn)設(shè)備,而無(wú)需關(guān)心系統(tǒng)分配給設(shè)備的ttyUSB*的編號(hào)是什么。
圖2.2 udev規(guī)則效果
從上圖可以看出,系統(tǒng)自動(dòng)為我的設(shè)備分配的編號(hào)是ttyUSB0,同時(shí)也創(chuàng)建了一個(gè)名為modbus_device_1的軟鏈接,這樣就可以在PiCtory界面直接輸入軟鏈接的路徑。
但很多時(shí)候,設(shè)備廠商由于一些特殊原因,在串口芯片上寫入的設(shè)備號(hào)是相同的:
圖2.3 具有相同ID的USB串口設(shè)備
那么這種創(chuàng)建軟連接的方法就會(huì)出問(wèn)題,此時(shí)我們就需要另一種方法,詳見(jiàn)下一部分。
“ 04 / udev規(guī)則-綁定硬件端口號(hào) ”
如上文所說(shuō),我們可能會(huì)遇到具有相同ID號(hào)的設(shè)備,此時(shí)通過(guò)綁定ID號(hào)創(chuàng)建軟鏈接的方法就行不通了,但可以通過(guò)綁定硬件端口號(hào)實(shí)現(xiàn)同樣的效果。
每個(gè)設(shè)備的硬件端口號(hào)是不一樣的,可以通過(guò)udevadm info --attribute-walk --name=/dev/ttyUSB0查看設(shè)備的硬件端口號(hào):
圖3.1 查看設(shè)備硬件端口號(hào)
通過(guò)上述命令,可以看到我的ttyUSB0設(shè)備的硬件端口號(hào)是1-1.2:1.0,ttyUSB1設(shè)備的硬件端口號(hào)是1-1.3:1.0。
然后修改一下ttyUSBLink.rules文件,改為以下規(guī)則:
圖3.2 綁定硬件端口號(hào)udev規(guī)則
保存并退出后,重新拔插設(shè)備就可以看到生成的兩個(gè)軟鏈接:
圖3.3 udev規(guī)則效果
需要注意的是,這里涉及的硬件端口號(hào)對(duì)應(yīng)的是USB端口而不是USB端口上連接的設(shè)備。也就是說(shuō),假如你有左右兩個(gè)USB端口,左邊USB端口的端口號(hào)是1-1.2:1.0,右邊USB端口的端口號(hào)是1-1.3:1.0。那么,插入左邊USB端口的設(shè)備對(duì)應(yīng)的軟鏈接就是modbus_device_1,插入右邊USB端口的設(shè)備對(duì)應(yīng)的軟鏈接就是modbus_device_2。
責(zé)任編輯:haq
-
樹莓派
+關(guān)注
關(guān)注
116文章
1706瀏覽量
105608 -
虹科電子
+關(guān)注
關(guān)注
0文章
601瀏覽量
14340
原文標(biāo)題:虹科教您派固定工業(yè)樹莓派Modbus RTU設(shè)備編號(hào)
文章出處:【微信號(hào):Hongketeam,微信公眾號(hào):廣州虹科電子科技有限公司】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論