本文介紹物模型TSL檔案中JSON欄位及其詳細說明。
說明 為了完整展示TSL的結構,以下樣本中包含所有參數,不代表實際使用中可能出現的組合。參數後的文字為參數說明,非參數值。各參數的使用情境,請參見參數說明。
{
"schema": "物模型結構定義的訪問URL。",
"profile": {
"productKey": "當前產品的ProductKey。"
},
"properties": [
{
"identifier": "屬性唯一識別碼(物模型模組下唯一)。",
"name": "屬性名稱",
"accessMode": "屬性讀寫類型:唯讀(r)或讀寫(rw)。",
"required": "是否是標準功能的必選屬性:是(true),否(false)。",
"dataType": {
"type": "屬性類型: int(原生)、float(原生)、double(原生)、text(原生)、date(String類型UTC毫秒)、bool(0或1的int類型)、enum(int類型,枚舉項定義方法與bool類型定義0和1的值方法相同)、struct(結構體類型,可包含前面7種類型,下面使用"specs":[{}]描述包含的對象)、array(數群組類型,支援int、double、float、text、struct)。",
"specs": {
"min": "參數最小值(int、float、double類型特有)。",
"max": "參數最大值(int、float、double類型特有)。",
"unit": "屬性單位(int、float、double類型特有,非必填)。",
"unitName": "單位名稱(int、float、double類型特有,非必填)。",
"size": "數組元素的個數,最大512(array類型特有)。",
"step": "步長(text、enum類型無此參數)。",
"length": "資料長度,最大10240(text類型特有)。",
"0": "0的值(bool類型特有)。",
"1": "1的值(bool類型特有)。",
"item": {
"type": "數組元素的類型(array類型特有)。"
}
}
}
}
],
"events": [
{
"identifier": "事件唯一識別碼(物模型模組下唯一,其中post是預設產生的屬性上報事件)。",
"name": "事件名稱。",
"desc": "事件描述。",
"type": "事件類型(info、alert、error)。",
"required": "是否是標準功能的必選事件:是(true),否(false)。",
"outputData": [
{
"identifier": "參數唯一識別碼。",
"name": "參數名稱。",
"dataType": {
"type": "屬性類型: int(原生)、float(原生)、double(原生)、text(原生)、date(String類型UTC毫秒)、bool(0或1的int類型)、enum(int類型,枚舉項定義方法與bool類型定義0和1的值方法相同)、struct(結構體類型,可包含前面7種類型,下面使用"specs":[{}]描述包含的對象)、array(數群組類型,支援int、double、float、text、struct)。",
"specs": {
"min": "參數最小值(int、float、double類型特有)。",
"max": "參數最大值(int、float、double類型特有)。",
"unit": "屬性單位(int、float、double類型特有,非必填)。",
"unitName": "單位名稱(int、float、double類型特有,非必填)。",
"size": "數組元素的個數,最大512(array類型特有)。",
"step": "步長(text、enum類型無此參數)。",
"length": "資料長度,最大10240(text類型特有)。",
"0": "0的值(bool類型特有)。",
"1": "1的值(bool類型特有)。",
"item": {
"type": "數組元素的類型(array類型特有)。"
}
}
}
}
],
"method": "事件對應的方法名稱(根據identifier產生)。"
}
],
"services": [
{
"identifier": "服務唯一識別碼(物模型模組下唯一,其中set/get是根據屬性的accessMode預設產生的服務)。",
"name": "服務名稱。",
"desc": "服務描述。",
"required": "是否是標準功能的必選服務:是(true),否(false)。",
"callType": "async(非同步呼叫)或sync(同步調用)。",
"inputData": [
{
"identifier": "入參唯一識別碼。",
"name": "入參名稱。",
"dataType": {
"type": "屬性類型: int(原生)、float(原生)、double(原生)、text(原生)、date(String類型UTC毫秒)、bool(0或1的int類型)、enum(int類型,枚舉項定義方法與bool類型定義0和1的值方法相同)、struct(結構體類型,可包含前面7種類型,下面使用"specs":[{}]描述包含的對象)、array(數群組類型,支援int、double、float、text、struct)。",
"specs": {
"min": "參數最小值(int、float、double類型特有)。",
"max": "參數最大值(int、float、double類型特有)。",
"unit": "屬性單位(int、float、double類型特有,非必填)。",
"unitName": "單位名稱(int、float、double類型特有,非必填)。",
"size": "數組元素的個數,最大512(array類型特有)。",
"step": "步長(text、enum類型無此參數)。",
"length": "資料長度,最大10240(text類型特有)。",
"0": "0的值(bool類型特有)。",
"1": "1的值(bool類型特有)。",
"item": {
"type": "數組元素的類型(array類型特有)。"
}
}
}
}
],
"outputData": [
{
"identifier": "出參唯一識別碼。",
"name": "出參名稱。",
"dataType": {
"type": "屬性類型: int(原生)、float(原生)、double(原生)、text(原生)、date(String類型UTC毫秒)、bool(0或1的int類型)、enum(int類型,枚舉項定義方法與bool類型定義0和1的方法相同)、struct(結構體類型,可包含前面7種類型,下面使用"specs":[{}]描述包含的對象)、array(數群組類型,支援int、double、float、text、struct)。",
"specs": {
"min": "參數最小值(int、float、double類型特有)。",
"max": "參數最大值(int、float、double類型特有)。",
"unit": "屬性單位(int、float、double類型特有,非必填)。",
"unitName": "單位名稱(int、float、double類型特有,非必填)。",
"size": "數組元素的個數,最大512(array類型特有)。",
"step": "步長(text、enum類型無此參數)。",
"length": "資料長度,最大10240(text類型特有)。",
"0": "0的值(bool類型特有)。",
"1": "1的值(bool類型特有)。",
"item": {
"type": "數組元素的類型(array類型特有)。"
}
}
}
}
],
"method": "服務對應的方法名稱(根據identifier產生)。"
}
],
//僅自訂模組的TSL中有以下參數。
"functionBlockId": "自訂模組的唯一識別碼,模組ID。",
"functionBlockName": "自訂模組名稱。",
//當產品下添加了自訂模組,預設模組TSL中會包含以下參數,表示已添加的自訂模組列表。
"functionBlocks": [
{
"functionBlockId": "自訂模組的唯一識別碼,模組ID。",
"functionBlockName": "自訂模組名稱。",
"productKey": "產品ProductKey。"
}
]
}
若產品的節點類型是網關子裝置,且接入網關協議為Modbus、OPC UA或自訂時,可以查看物模型擴充配置資訊。
Modbus協議產品的擴充配置可用於Modbus子裝置的物聯網邊緣計算,請參見物聯網邊緣計算文檔。
Modbus協議產品的擴充配置資料結構如下:
{
"profile": {
"productKey": "產品ProductKey。"
},
"properties": [
{
"identifier": "屬性唯一識別碼(產品下唯一)。",
"operateType": "(線圈狀態/離散量輸入/保持寄存器/輸入寄存器: coilStatus/inputStatus/holdingRegister/inputRegister)。",
"registerAddress": "寄存器地址。",
"originalDataType": {
"type": "未經處理資料類型:int16、uint16、int32、uint32、int64、uint64、float、double、string、bool、customized data(按大端順序返回hex data)。",
"specs": {
"registerCount": "寄存器資料個數,string、customized data特有。",
"swap16": "交換寄存器內高低位元組,把寄存器內16位元據的前後8個bit互換(byte1byte2 -> byte2byte1),除string和bool外,其他資料類型特有。",
"reverseRegister": "交換寄存器順序,把未經處理資料32位元據的前後16個bit互換(byte1byte2byte3byte4 -> byte3byte4byte1byte2),除string和bool外,其他資料類型特有。"
}
},
"scaling": "縮放因子,除string和bool外,其他資料類型特有。",
"trigger": "資料上報方式。1代表按時上報,2代表變更上報。",
"writeFunctionCode":"讀寫操作,對於不同的operateType,可選的取值不同。coilStatus:5代表讀寫(讀0x01,寫0x05),15代表讀寫(讀0x01,寫0x0F),0代表唯讀0x01,6代表唯寫0x05,15代表唯寫0x0F。inputStatus:0代表唯讀0x02。holdingRegister:6代表讀寫(讀0x03,寫0x06),16代表讀寫(讀0x03,寫0x10),0代表唯讀0x03,6代表唯寫0x06,16代表唯寫0x10。inputRegister:0代表唯讀0x04。",
"writeOnly":"是否唯寫。0代表非唯寫,1代表唯寫。",
"pollingTime":"採集間隔,單位是ms。無需傳入,將使用裝置配置的採集間隔。",
"bitMask":"掩碼,bool特有。取值:1、2、4、8、16、32、64、128、256、512、1024、2048、4096、8192、16384、32768,即1<<(0~15)。"
}
]
}