
虹科IIOT工業樹莓派
Revolution Pi是一款基于樹莓派計算模塊進行工業級設計和封裝的工業樹莓派,RevPi的作業系統在Raspbian基礎上進行了優化,給linux內核添加了RT實時補丁,以使得linux滿足硬實時的需求,
用戶可以通過python等高級語言撰寫程式,并且可以通過存盤器中的程序映像便捷的寫入或者讀取所有當前程序值,
本文將介紹從程序映像中訪問資料的三種方法:直接從檔案中讀取、通過ioctl讀取或通過revpimodio2模塊讀取,(以下示例均采用python代碼)
設備配置
為了演示如何從程序映像中讀取程序值,本文采用RevPi內置的虛擬Modbus TCP Master讀取電腦模擬的Modbus TCP Slave的一個保持暫存器的值,并將其放入變數Input_Word_1中,其中變數Input_Word_1的值被放入程序映像中,
下面將采用三種方法讀取它的值,在此之前,首先使用piTest命令,查看Input_Word_1的當前值,


訪問資料方法
直接從檔案中讀取
直接從檔案中讀取資料,簡單來說就是通過變數的引數offset和length,在程序映像檔案中查找變數所在位置并讀取,然后對讀取到的資料進行解包即可,


當然,也可以直接對檔案進行修改,為變數賦值,可以在RevPi的Modbus TCP Master中配置另一個任務,將Output_Word_1的值寫入電腦模擬的Modbus TCP Slave暫存器中,下圖展示了,如何通過python程式為Output_Word_1賦值,


通過這種方式讀取和寫入資料,程序不是很復雜,但問題在于:需要提前知道變數的offset和length,這對于編程開發人員來說很不友好,我們希望的是直接通過變數名,而不需要知道變數的存盤位置及長度,就可以對變數進行操作,下面一個方法將彌補這個缺點,
通過ioctl讀取
在計算機中,ioctl(input/output control)是一個專用于設備輸入輸出操作的系統呼叫,該呼叫傳入一個跟設備有關的請求碼,系統呼叫的功能完全取決于請求碼,
RevPi的系統中已經預定義好了一些ioctl功能,我們可以通過呼叫這些功能,獲取變數的offset、length等資訊,并讀取資料,





實際上ioctl功能15和16主要用于長度為1bit的變數的讀寫,如果將其用于2byte的變數的讀寫,程式比較繁雜,且可能會帶來其它問題,
示例程式采用ioctl功能15和16讀寫變數資料僅僅是為了展示其功能,在實際使用時,通過ioctl功能17得到變數的offset之后,用f.seek()和f.read()以及f.write()實際上更方便,



雖然采用第二種方法,我們不再需要提前記住變數的offset,但這種程式比較繁雜,只是為了讀取或者修改一個變數就需要很多代碼,在實際開發中,這也會給開發人員帶來很多困擾,
那有沒有一種更簡單的方式讓我們能夠輕松便捷的控制變數呢?很幸運,確實有這樣的方法,就是下面要介紹的第三種方法:revpimodio2模塊,
通過revpimodio2模塊獲取
如前所述,如果要使用Python3撰寫程式,可以使用FileHandler打開程序映像并讀取/寫入模塊中的資料,但是,變數名稱在那里不可用,必須在檔案中搜索IO的各個位…計算…讀取…寫入…
這給開發人員帶來很大的困擾,但這也正是python3-revpimodio2發揮作用的地方!與程序映像的所有通信均可在該模塊內部執行,不僅如此,python3-revpimodio2還為開發者提供了一些其它功能,總的來說,通過這個模塊,可以讓所有Python開發人員省去很多作業,
如需了解詳細資訊,可以訪問:https://revpimodio.org/en/homepage/,在這里,本文僅僅展示如何借助revpimodio2模塊讀取或寫入變數,



可以看到,通過使用revpimodio2模塊,我們可以很簡單地讀取和寫入變數的值,所有與程序映像相關的操作都自動完成,
需要注意的是,對于Core模塊,revpimodio2默認的io資料同步頻率是25Hz,所以在向io變數寫入數值之后,至少保證40ms內不退出程式運行,否則可能會導致寫入失敗,當然此回圈時間可以自行更改,
總結
本文總結了三種訪問程序映像的方法,對于大多數開發者來說,第三種方法已經足夠了,而且操作相對其它兩種方法來說十分便捷,前兩種方法的目的是讓你能夠更加深刻地理解RevPi中的程序映像的資料訪問機制,
當然,第三種方法也并非毫無缺點,相對來說,呼叫revpimodio2模塊進行資料訪問的效率比起其它兩種辦法來說較低,開發者可根據自身專案的要求選擇合適的方法,
另外,關于revpimodio2的其它功能,作者將在另一篇文章中進行詳細介紹,有興趣的也可以訪問revpimodio2官網深入了解,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/186864.html
標籤:其他
上一篇:航弈單通道腦電設備通過lsl在Matlab中接收資料
下一篇:軟體測驗基礎理論知識
