【工業樹莓派】自定義設備(RAP文件)

工業樹莓派是基於樹莓派的工業級工控機產品,型號和功能齊全,包括現場總線各協議網關比與DIO、AIO等模塊擴展。

工業樹莓派具有工業適用性,工作溫度範圍達到-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系統或是雲端服務器。

自定義設備(RAP文件)

要將自己的設備集成到 PiCtory中時,你需要創建一個設備描述文件來告訴 PiCtory你的設備具有哪些屬性。該文件稱為 RAP文件(RevolutionPiAdapter Profile)。

要創建自己的 RAP文件,需要以下工具:

  • 用於創建 RAP文件的文本編輯器(例如Notepad ++)。
  • 用於驗證RAP文件的JSONLint。JSONLint 是免費的線上工具。

建議複製現有的RAP文件,並將其用作模板。在本示例中,我們將以RevPiTimer為模板進行操作。在操作之前先備份系統映像文件,以便出現錯誤時可以恢復備份。

▍以下開始正式操作

  • 先學習“FileZilla”軟體。它用來在PC上處理RevPi模塊內的文件。
  • 打開軟體之後點擊此處開始添加一個新的連接。

然後點擊“新站點”,給新建的站點命名。

在協議選項欄中選擇『SFTP』,然後在右側頁面的 『主機』欄中輸入RevPiCore的IP地址。登錄類型選擇『正常』。在『用戶』和『密碼』欄輸入登錄RevPi Core的用戶和密碼訊息。

之後點擊『連接』就可建立一個新的連接。連接建立成功後,在窗口的右側顯示的就是RevPi模塊裡的文件。在窗口左側顯示的是PC上的文件。

  • 進入RevPi Core上的“/ var / www / pictory/resources / data / rap”目錄。這裡存放的是PiCtory目錄中的所有RAP文件。
  • 雙擊RAP文件VirtTimer_20170208_1_0.rap將其複製到你的PC上。
  • 為複製的RAP文件重命名為VirtTimer2_20170208_1_0.rap。

文件名的結構:

[名稱] _ [時間戳] _ [主版本號] _ [次版本號].rap

例如:VirtTimer_20170208_1_0.rap

  • 在文本編輯器中打開你的RAP文件。如果使用的是Notepad ++,則可以將源語言切換為JSON。菜單- >語言- > JSON。

下面具體介紹一下RAP文件的語法。

RAP文件的語法是JSON格式。

下面列出了所有可用的屬性:

ID標題描述/實例類型必要/可選
Aid模塊/設備的內部IDString必要
Bversion模塊/設備版本String必要
Ccomment內部註釋,例如用於解釋String-Array可選
Dscreencomment設備類型的預置註釋,顯示在應用程序裡的設備信息表的註釋列中;可以由用戶為每個設備更改String必要
Esize擴展模塊的寬度;可用於確定DIN導軌上是否有足夠的空間String可選
Fdevicetype設備的定位類型;確定設備可插入的位置(請輸入大寫字母)
 BASE Core單元;必須先定位
 LEFT 模塊只能位於Core單元的左側
 RIGHT 模塊只能位於Core單元的右側
 LEFT_EDGE 模塊只能位於最左側
 RIGHT_EDGE 模塊只能位於最右側
 LEFT_RIGHT 模塊可以位於BASE單元的左側或右側
 RIGHT_LEFT 模塊可以位於BASE單元的左側或右側
 VIRTUAL 虛擬設備- 自動放入虛擬設備區域。
String必要
GproducttypeKUNBUS產品系列的單元號Num必要
Hinput / output / memory在操作期間修改的設備的實際操作數據(“屬性”);數據聲明由以下描述的值(H.1到H.12)組成。input,output和memory數組都必須存在於文件中,但允許為空([])。Object-Array必要
H.1name值的名稱
 提醒:讀取文件時,名稱中的空格將被下劃線替換!盡可能避免使用空格。
String必要
H.2typeDIN61131數據類型;例如BOOL,BYTE,WORD;用大寫字母String必要
H.3range值輸入的有效範圍;基於不同的類型,可以生成合理性檢查或預定義的下拉列表。每個“range”條目包含依照下例格式的兩個子條目:
 “range”:{
 “type”:”tooltip_loop”,
 “values”:[0,1,1]
 }
 可用的type/values組合參見H.3.1至H.3.3
Object必要
H.3.1Range類型01:
 loop
根據“values”數組中定義的循環值創建一個下拉列表,例如”values”:[0,10,1.5]創建一個下拉列表,其值為0到10,步長為1.5(0,1.5,3,4.5,6…等)
H.3.2Range類型02:
 tooltip_loop
創建一個普通的文本輸入字段,當鼠標置於此處時在提示框中顯示有效值範圍;在輸入值之後檢查值範圍,如果輸入錯誤,則生成錯誤消息。
H.3.3Range類型03:
 list
用“values”數組中定義的常量生成下拉列表:
 “values”:[
 “M01|1”,
 “M02|2”,
 “M03|3”
 ]
 “|”符號前面的條目在下拉框中顯示為可讀文本,“|”符號後面的條目將作為實際工作值導出。
H.4default屬性的預設值;注意:請確保它在“range/values”定義的值範圍內!當使用“list”range類型時,該值必須在’|’分隔符之後有定義!String必要
H.5unit描述屬性值單位的文本字符串;出現在編輯列表的“Unit”列中;如果其為空,則將數據類型顯示為單位。String可選
H.6tags屬性的任意描述性文本標籤;但是,至少必須指定屬性區域(“input / output / memory”)和屬性的“type”(bool,byte,word等),用逗號分隔。
 注意:屬性的範圍和類型也可以在標記中存儲,以便更輕鬆,更有效地處理RAP文件。但它們不應與屬性區域/類型的內容相對立。
String必要
H.7edit屬性的編輯模式;確定用戶可以輸入或更改哪個部分;有效值是0-4之間的值
 0 既不能編輯屬性的名稱也不能編輯屬性的值
 1 可以編輯屬性的值
 2 可以編輯屬性的名稱
 3 可以編輯屬性的名稱和值
 4 值列不顯示在編輯列表中(用於不應向用戶顯示的常量或不可更改的值)
String必要
H.8order排序順序,即在編輯列表中的相對位置;這裡可以輸入任何有間斷的數值,然後執行升序排序,例如:10,20,25,99等。注意:不要使用兩次相同值,否則排序將導致不可預測的結果。Num必要
H.9offset屬性的內存偏移量;設備的第一個屬性從’0’開始;為了確保正確連續地分配偏移量,請根據值類型(“type”條目,例如BYTE)輸入距離下一個屬性的適當偏移距離,例如:
 “name”:”Input01″,
 “type”:”WORD”,
 “offset”:0,
 :
 “name”:”Input02″,
 “type”:”BYTE”,
 “offset”:2
 作為WORD型值,Input01佔用字節0和1;因此,Input02的偏移量從字節2開始。
Num必要
H.10multi從1到n的整數值;從該屬性生成所需數量的多個屬性(主要是為了省略許多相似或相關值的冗餘數據錄入);按順序的編號將附加到屬性的名稱中,例如:
 “name”:”Input01″,
 “multi”:3
 …創建屬性Input01_1到Input01_3。
 注意:
 如果未設置“multi”值,則預設值為1。
 如果沒有為BOOL值定義“multi”值,則在內部讀取RAP文件時,“multi”值會自動固定為“8”,以便將它們設置為字節限制。RAP文件中的“multi”值會覆蓋此預設設置- 需要確認僅定義“8”的倍數的值。
Num可選
H.11activetrue或false;定義在讀取RAP文件時是否考慮屬性值。這使你可以完全停用屬性值。Bool可選
H.12exporttrue或false;確定編輯列表的“Export”列中該屬性是否預設進行導出。Bool可選
IcolorEdit#000000和#ffffff之間的十六進制顏色代碼;為可編輯輸入字段設置單獨的背景顏色;如果此值不存在,則使用config.json文件中的默認值。(“colors”:{colorEdit…)Hex-color可選
JcolorReadOnly#000000和#ffffff之間的十六進制顏色代碼;為不可編輯(只讀)輸入字段設置單獨的背景顏色;如果此值不存在,則使用config.json文件中的預設值。(“colors”:{colorReadOnly…)Hex-color可選
KcolorTextEdit#000000和#ffffff之間的十六進制顏色代碼;為可編輯輸入字段設置單獨的文本顏色;如果此值不存在,則使用config.json文件中的預設值。(“colors”:{colorTextEdit…)Hex-color可選
LcolorTextReadOnly#000000和#ffffff之間的十六進制顏色代碼;為不可編輯(只讀)輸入字段設置單獨的文本顏色;如果此值不存在,則使用config.json文件中的預設值。(“colors”:{colorTextReadOnly…)Hex-color可選
MVariant-specific要創建變體層次結構,輸入/輸出條目後需要以下附加條目:
 “variants”:[
 {
 “id”:”Variante 001″,
 “isDefault”:true,
 “data”:[
 :
 :
 變體“id”將顯示在“PiCtory”的未來版本中,用於變體選擇。在這裡,你應輸入具有唯一性的描述性文本。
 “isDefault”指定將RAP文件導入PiCtory後的默認變體。請注意定義的規則,並在設置’isDefault’時考慮它們。PiCtory目前僅在用戶手動更改變體時才應用規則,並且無法解決與’isDefault’條目的矛盾!
 在“data”數組中,再次輸入“normal”輸入/輸出屬性,因為它們將在沒有變體的情況下完成。
 注意:通過使用變體,輸入/輸出條目的類型從數組變為對象(矩形括號到大括號),例如:
 “input”:[…
 變為
 “input”:{…
Array可選
Nlang為了實現值顯示的國際化,工作值的名稱(標籤)用作指向相應國家名稱的指針。如果標籤條目以前綴“lang_”開頭,則將其解釋為指針。如果沒有此前綴,則值將按規定存儲在顯示中。
 例如:
 work unit:”lang_input”:”8″
 國際化區域
 “lang”:{
 {
 “de”: {
 “input”:”Eingang”,
 “output”:”Ausgang”
 },
 “en”:{
 “input”:”Input”,
 “output”:”Output”
 }
 }
 }
 如果設置了德語,則在值編輯器中進行渲染:
 Eingang:8
Object可選
Orules包含輸入和輸出條目的RAP文件變體,可用於通過指定“rules”在輸入和輸出變體之間創建邏輯鏈接。一旦選擇了變體,這會使“PiCtory”自動“同步”鏈接的變體。例如:
 “rules”:{
 “IO”:[
 {
 “sync”:[0,0]
 },
 {
 “sync”:[1,1]
 }
 ]
 }
 在此示例中,鏈接了第0個輸入和第0個輸出變量,以及第1個輸入和第1個輸出變量。如果用戶將輸入更改為變量1,則“PiCtory”會自動將輸出更改為變量1。如果輸出重置為0,則輸入自動跳回0。
Object可選
Pinclude要集成由外部配置工具創建的數據定義,還可以在運行時從外部文件中讀取輸入,輸出和內存塊的內容(PiCtory讀取RAP文件時)。必須按如下方式對相應的塊進行編碼:
 “input”:
 {
 “include”:”[path to Include file]”
 }
 注意以下幾點:
 包含文件的路徑必須以物理和權限相關的方式定義,以便通過Ajax調用(Web服務器的用戶上下文)訪問它。
 包含文件的內容必須是JSON格式;它完全替換“input”對象塊,這意味著它不只是被添加到“include”條目所在的對象塊中。這意味著普通(非變體)內容的包含文件必須包含數組的方括號,例如:
 [
 {
 “name”:”RevPiLED”,
 “type”:”BYTE”,
 “offset”:1,
 :
 :
 如果是變體定義,它必須如下所示:
 {
 “variants”:[
 {
 “id”:”001″,
 “isDefault”:true,
 :
 :

接著需要對RAP文件做一些調整。

為了避免你的RAP文件因為與現有文件重疊而出現錯誤,需要更改以下屬性:

  • id

一個尚未在PiCtory中分配的唯一的名稱,本例修改為“VirtTimer2”。

  • producttype

例如:32769

將 product type更改為大於或等於32769的數字。此區域適用於非生產商提供的自編寫的 RAP文件。該數字不能是已經在 PiCtory中分配的數字。因此,如果你編寫了多個 RAP文件,可以考慮為每個RAP文件中的 producttype數字遞增1。

修改完成後打開JSONLint網站。

  • 將文件內容從文本編輯器複製到瀏覽器窗口,然後點擊相應按鈕開始驗證。

▍下面介紹如何將設備添加到設備目錄

PiCtory 具有包含所有已知設備的樹狀結構。要包含一個新設備,你需要擴展以下文件:/var/www/pictory/resources/data/catalog.json。在這個文件裡可以看到設備的分佈子目錄。

因此複製這個文件到你的電腦並用文本編輯器打開它。

複製一個虛擬設備行,例如下面這個虛擬設備:

{“key”:”VirtTimer_20170208_1_0″, “title”: “RevPiTimer”, “tooltip”:”Weekly Timer”, “icon”: “##GSD_ICON_PATHNAME##” }

更改此行,使其與你的RAP文件匹配:

  • key:沒有文件擴展名的RAP文件的文件名。
  • title:在已配置設備的列表中顯示的名稱。
  • tooltip:當使用滑鼠指向設備時顯示的訊息。
  • icon:不用改變。

{“key”:”VirtTimer2_20170208_1_0″, “title”: “RevPiTimer2″,”tooltip”: “Weekly Timer”, “icon”:”##GSD_ICON_PATHNAME##” }

注意:在上一行設備描述的最後需要加上一個逗號。

保存文件並使用JSONLint對其進行驗證。

你可以為虛擬設備添加一個漂亮的圖標,該圖標將顯示在 PiCtory中。本示例使用以下文件作為模板:

/var/www/pictory/resources/images/devices/VirtTimer.png

將此文件複製到你的PC並使用畫圖工具打開。在圖片上添加一個數字2,來和已經存在的VirtTimer區別。

然後將其保存在與RAP文件的“id”屬性相對應的文件名下:VirtTimer2.png。

接著介紹如何導入新的RAP文件。

注意:在導入文件之前,請備份文件或系統,以便在出現錯誤時能夠恢復可執行系統。

如果文件在語法上是正確的,就可以將它們複製回RevPi。在本示例中,這三個文件是:

  • /var/www/pictory/resources/images/devices/VirtTimer2.png
  • /var/www/pictory/resources/data/catalog.json
  • /var/www/pictory/resources/data/rap/VirtTimer2_20170208_1_0.rap

最後測試你的設備是否成功創建了。

打開PiCtory並檢查設備列表。現在應該能看到你新建的虛擬設備了。

【更多工業樹莓派技術/案例文檔】


聯繫我們