hex文件修改_树莓派工控机RevPi(十一)自定义设备(RAP文件)
摘要:REVOLUTION PI Family是基于树莓派的工业级工控机家族,型号和功能齐全,家族产品还包括现场总线各协议网关比如Profinet/EtherCAT/CANopen等,还包括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是一个免费的在线工具。http://pro.jsonlint.com
建议复制现有的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 | 标题 | 描述/实例 | 类型 | 必要/可选 |
A | id | 模块/设备的内部ID | String | 必要 |
B | version | 模块/设备版本 | String | 必要 |
C | comment | 内部注释,例如用于解释 | String-Array | 可选 |
D | screencomment | 设备类型的预置注释,显示在应用程序里的设备信息表的注释列中;可以由用户为每个设备更改 | String | 必要 |
E | size | 扩展模块的宽度;可用于确定DIN导轨上是否有足够的空间 | String | 可选 |
F | devicetype | 设备的定位类型;确定设备可插入的位置(请输入大写字母) | String | 必要 |
G | producttype | KUNBUS产品系列的单元号 | Num | 必要 |
H | input / output / memory | 在操作期间修改的设备的实际操作数据(“属性”);数据声明由以下描述的值(H.1到H.12)组成。input,output和memory数组都必须存在于文件中,但允许为空([])。 | Object-Array | 必要 |
H.1 | name | 值的名称 | String | 必要 |
H.2 | type | DIN61131数据类型;例如BOOL,BYTE,WORD;用大写字母 | String | 必要 |
H.3 | range | 值输入的有效范围;基于不同的类型,可以生成合理性检查或预定义的下拉列表。每个“range”条目包含依照下例格式的两个子条目: | Object | 必要 |
H.3.1 | Range类型01: | 根据“values”数组中定义的循环值创建一个下拉列表,例如"values":[0,10,1.5]创建一个下拉列表,其值为0到10,步长为1.5(0,1.5,3,4.5,6...等) | - | - |
H.3.2 | Range类型02: | 创建一个普通的文本输入字段,当鼠标置于此处时在提示框中显示有效值范围;在输入值之后检查值范围,如果输入错误,则生成错误消息。 | - | - |
H.3.3 | Range类型03: | 用“values”数组中定义的常量生成下拉列表: | - | - |
H.4 | default | 属性的默认值;注意:请确保它在“range/values”定义的值范围内!当使用“list”range类型时,该值必须在'|'分隔符之后有定义! | String | 必要 |
H.5 | unit | 描述属性值单位的文本字符串;出现在编辑列表的“Unit”列中;如果其为空,则将数据类型显示为单位。 | String | 可选 |
H.6 | tags | 属性的任意描述性文本标签;但是,至少必须指定属性区域(“input / output / memory”)和属性的“type”(bool,byte,word等),用逗号分隔。 | String | 必要 |
H.7 | edit | 属性的编辑模式;确定用户可以输入或更改哪个部分;有效值是0-4之间的值 | String | 必要 |
H.8 | order | 排序顺序,即在编辑列表中的相对位置;这里可以输入任何有间断的数值,然后执行升序排序,例如:10,20,25,99等。注意:不要使用两次相同值,否则排序将导致不可预测的结果。 | Num | 必要 |
H.9 | offset | 属性的内存偏移量;设备的第一个属性从‘0’开始;为了确保正确连续地分配偏移量,请根据值类型(“type”条目,例如BYTE)输入距离下一个属性的适当偏移距离,例如: | Num | 必要 |
H.10 | multi | 从1到n的整数值;从该属性生成所需数量的多个属性(主要是为了省略许多相似或相关值的冗余数据录入);按顺序的编号将附加到属性的名称中,例如: | Num | 可选 |
H.11 | active | true或false;定义在读取RAP文件时是否考虑属性值。这使你可以完全停用属性值。 | Bool | 可选 |
H.12 | export | true或false;确定编辑列表的“Export”列中该属性是否默认进行导出。 | Bool | 可选 |
I | colorEdit | #000000和#ffffff之间的十六进制颜色代码;为可编辑输入字段设置单独的背景颜色;如果此值不存在,则使用config.json文件中的默认值。("colors":{colorEdit...) | Hex-color | 可选 |
J | colorReadOnly | #000000和#ffffff之间的十六进制颜色代码;为不可编辑(只读)输入字段设置单独的背景颜色;如果此值不存在,则使用config.json文件中的默认值。("colors":{colorReadOnly...) | Hex-color | 可选 |
K | colorTextEdit | #000000和#ffffff之间的十六进制颜色代码;为可编辑输入字段设置单独的文本颜色;如果此值不存在,则使用config.json文件中的默认值。("colors":{colorTextEdit...) | Hex-color | 可选 |
L | colorTextReadOnly | #000000和#ffffff之间的十六进制颜色代码;为不可编辑(只读)输入字段设置单独的文本颜色;如果此值不存在,则使用config.json文件中的默认值。("colors":{colorTextReadOnly...) | Hex-color | 可选 |
M | Variant-specific | 要创建变体层次结构,输入/输出条目后需要以下附加条目: | Array | 可选 |
N | lang | 为了实现值显示的国际化,工作值的名称(标签)用作指向相应国家名称的指针。如果标签条目以前缀“lang_”开头,则将其解释为指针。如果没有此前缀,则值将按规定存储在显示中。 | Object | 可选 |
O | rules | 包含输入和输出条目的RAP文件变体,可用于通过指定“rules”在输入和输出变体之间创建逻辑链接。一旦选择了变体,这会使“PiCtory”自动“同步”链接的变体。 例如: | Object | 可选 |
P | include | 要集成由外部配置工具创建的数据定义,还可以在运行时从外部文件中读取输入,输出和内存块的内容(PiCtory读取RAP文件时)。必须按如下方式对相应的块进行编码: |
接着需要对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并检查设备列表。现在应该能看到你新建的虚拟设备了。