新聞中心
PRESS CENTER為提升用戶操作便捷性,網(wǎng)關已實現(xiàn)對不同PLC協(xié)議差異性的底層封裝,用戶無需關注協(xié)議差異。不同的PLC品牌,不同的PLC節(jié)點,使用方式已完全統(tǒng)一,均可參考本使用文檔。
新版本PLC節(jié)點將輸出端口優(yōu)化為2個獨立接口,實現(xiàn)讀寫響應的物理隔離:
輸出口1:專用于數(shù)據(jù)讀取響應
輸出口2:專用于數(shù)據(jù)寫入響應
本優(yōu)化屬于增量升級,完全兼容歷史版本,主要目標是進一步降低用戶使用門檻。請注意當前使用手冊可能尚未同步更新相關內(nèi)容,具體操作請以實際設備功能為準。
PLC 物理連接分為 網(wǎng)口連接、串口連接。兩種連接方式的參數(shù)配置分別如下。部分參數(shù)需要向PLC工程師或者業(yè)主方獲?。?/p>
【網(wǎng)絡參數(shù)】
地址:PLC的IP地址。
端口:PLC的端口號。
連接超時:連接超時時間,超時后重連。
通訊超時:等待PLC響應的時間,如果是負數(shù)則不等待。
【串口參數(shù)】
串口:串口號。
波特率:600~115200。
數(shù)據(jù)位:8 | 7
停止位:1 | 2
校驗位:NONE(無) | ODD(奇) | EVEN(偶)
讀取超時:讀數(shù)據(jù)的等待時間,'-1'表示永不超時
寫入超時:寫數(shù)據(jù)的等待時間,'-1'表示永不超時
等待時間:接收對方返回數(shù)據(jù)的等待時間,'0'表示不等待
PLC正確連接后,需要配置點位表。點位表由若干行組成,每一行代表一個數(shù)據(jù)點。行的各個參數(shù)介紹如下:
選中
請勾選要讀取的點位。不勾選則不會自動讀取,僅用于寫入時匹配數(shù)據(jù)點用。
寫入匹配示例:輸入格式【msg.payload.C = 125】,當點位表中存在數(shù)據(jù)名稱為C或者地址為C的點位時,將會匹配該點位,并將值125寫入該點位。否則不作處理。
組
連續(xù) 且 可讀 且 數(shù)據(jù)類型相同 的點位可配置為一個組。此目的是為了讓讀取效率最大化,一個組的數(shù)據(jù)可以使用1條命令交互完成讀寫。1條命令最大可讀5000點位。如果對讀取效率無要求,可以不設置 組 。
如果不了解點位是否連續(xù) 、可讀、數(shù)據(jù)類型,請參考【常規(guī) 讀】。
地址
PLC內(nèi)數(shù)據(jù)點的地址。
當點位的內(nèi)容為字符串時,需指定【點位長度】。點位地址與要讀取的長度以'-'分隔。例如:【V2-30】表示從點位地址V2開始讀取30個字符。
名稱
PLC內(nèi)數(shù)據(jù)點的名稱。
讀取后以【msg.payload.名稱】輸出 ,如果為空則按【msg.payload.地址】輸出 。
類型
按選擇的數(shù)據(jù)類型解析數(shù)據(jù)。
對于字符串,請先確認該點位的編碼格式。
String-ACSII:ACSII 。
不支持中文。
String-Unicode:Unicode。
按小端對字節(jié)解碼。
String-Unicode-big:Unicode。
按大端對字節(jié)解碼。
String-UTF-8:UTF-8。
String-UTF-32:UTF-32。
String-ANSI:ANSI。
String-GB2312:GB2312。
循環(huán)讀取
設置后,后臺會自動按照設置的時間周期循環(huán)讀取PLC的數(shù)據(jù),單位 ms。
點位屬性不明確的情況下 ( 是否連續(xù)? 是否可讀? 數(shù)據(jù)類型是否相同?) ,建議使用此方法。
步驟一: 配置連接
根據(jù)PLC的協(xié)議、連接方式選擇合適的配置參數(shù)。
步驟二: 添加點位
在節(jié)點的配置頁面依次添加要讀寫的點位。
不需要設置<組>。
勾選要讀取的點位。
注意: 當點位較多時,可以先導出點位表,在表格工具中編輯后再導入。
步驟三:設置循環(huán)讀取
若有需要,可配置循環(huán)讀取,否則跳過此步驟。
測試:使用<調(diào)試節(jié)點>查看輸出
添加調(diào)試節(jié)點到流程中,查看輸出。注意:使用外部觸發(fā)讀取時,請將循環(huán)讀取設置為-1。
輸出說明
循環(huán)讀取、外部觸發(fā)讀取、外部觸發(fā)寫入的輸出對象略有不同。
使用注入節(jié)點讀取實際上是讓節(jié)點立即按照點位表讀取一次數(shù)據(jù),與循環(huán)讀取的區(qū)別僅在于讀取時間的區(qū)別。注入節(jié)點僅是為了調(diào)試方便。不滿足寫入格式的任意輸入都能使節(jié)點立即按照點位表讀取一次數(shù)據(jù)。
{
"payload":{
"名稱測試":false,
"DB1.0.2":false
},
"rspType":"intRead",
"_msgid":"9b83c4384131d66f"
}
/*payload : 循環(huán)讀取的值*/
/* 名稱測試 : 名稱為 '名稱測試'的點位,當前值讀取的值為false */
/* DB1.0.2 : 地址為 'DB1.0.2'的點位,當前值讀取的值為false */
/*rspType : 當前輸出的類型 */
/*intRead : 循環(huán)讀取輸出 */
/*inputRead : 外部觸發(fā)讀取輸出 */
/*inputWrite: 外部觸發(fā)寫入輸出 */
/*_msgid : 當前消息id*/
進階讀,實際上就是按組讀,即:使讀寫效率最大化。使用進階讀,請先理解點位表屬性< 組 >概念 。
步驟一:配置連接
根據(jù)PLC的協(xié)議、連接方式選擇合適的配置參數(shù)。
步驟二:按組配置點位
在節(jié)點的配置頁面中添加點位。
< 沒有分組(空字符串) >
但
< 被勾選 >
的點位會被
單獨讀取
。
< 沒有分組(空字符串) >
且
< 沒被勾選 >
的點位只在
寫入時用作匹配點位
。
注意: 當點位較多時,可以先導出點位表,在表格工具中編輯后再導入。
步驟三:設置循環(huán)讀取
若有需要,可配置循環(huán)讀取,否則跳過此步驟。
測試:使用<調(diào)試節(jié)點>查看輸出
輸出說明
循環(huán)讀取、外部觸發(fā)讀取、外部觸發(fā)寫入 的輸出對象 略有不同。
使用注入節(jié)點讀取實際上是讓節(jié)點立即按照點位表讀取一次數(shù)據(jù),與循環(huán)讀取的區(qū)別僅在于讀取時間的區(qū)別。注入節(jié)點僅是為了調(diào)試方便。不滿足寫入格式的任意輸入都能使節(jié)點立即按照點位表讀取一次數(shù)據(jù)。
{
"payload":{
"DB1.0.1":false,
"DB1.0.2":false,
"DB1.0.3":false,
"DB1.0.4":true,
"DB1.0.6":false,
"DB1.0.11":false,
"DB1.0.12":false,
"DB1.0.13":false,
"M1.6":false,
"V2":"aa中文編碼測試\u0000\u0000\u0000\u0000\u0000\u0000"
},
"rspType":"intRead",
"_msgid":"d4ef195506deab88"
}
/*payload : 循環(huán)讀取的值*/
/* DB1.0.1 : 地址為 "DB1.0.1'的點位,當前值讀取的值為false */
/* ...*/
/* V2 : 地址為"V2'的點位,當前值讀取的值為 aa中文編碼測試\u0000\u0000\u0000\u0000\u0000\u0000 */
/*rspType : 當前輸出的類型 */
/*intRead : 循環(huán)讀取輸出 */
/*inputRead : 外部觸發(fā)讀取輸出 */
/*inputWrite: 外部觸發(fā)寫入輸出 */
/*_msgid : 當前消息id*/
借助點位表的配置可快速寫入?yún)?shù),這里以一個流程示例:
PLC點位表配置如下:
輸入
輸入內(nèi)容通過函數(shù)節(jié)點實現(xiàn),格式如下:
msg.payload = {
B:true,
A:false
}
/*payload : 要寫入的參數(shù)*/
/* B : 名稱為 "B'的點位,要寫入的值為 true */
/* A : 名稱為 "A'的點位,要寫入的值為 false*/
/* 傳入地址:DB1.0.1亦可被識別*/
輸出
按照輸入示例的規(guī)范輸入后,PLC節(jié)點會將數(shù)據(jù)寫入PLC,并打印結果:
{
"payload":{
"A":true,
"B":true
},
"rspType":"inputWrite",
"inputMsg":{
"_msgid":"e1816c45abd5e4a3",
"payload":{
"B":true,
"A":false
},"topic":""
},
"_msgid":"20a8b1995cd507cd"
}
/*payload : 寫入的結果*/
/* A : 名稱為 "A'的點位,true:操作成功false:操作失敗*/
/* B : 名稱為 "B'的點位,true:操作成功false:操作失敗*/
/* 返回的順序取決與點位在點位表的排序 */
/*rspType : 當前輸出的類型 */
/*intRead : 循環(huán)讀取輸出 */
/*inputRead : 外部觸發(fā)讀取輸出 */
/*inputWrite: 外部觸發(fā)寫入輸出 */
/*inputMsg : 觸發(fā)本次操作的消息對象 參考 <常規(guī) 寫> --->輸入 */
/*_msgid : 當前消息id*/
通過向PLC節(jié)點注入一個對象,可以實現(xiàn)更高效、更自由的讀寫。此方法完全由用戶自己掌控讀寫操作,PLC節(jié)點內(nèi)部的點位配置無效。
使用高級讀寫時可忽略點位表。
func | Notes | example |
ReadAddressArray | 一次性獲取多個地址的數(shù)據(jù),length以字節(jié)為單位,type為對應數(shù)據(jù)類型(此方法只能西門子使用) | { func: "ReadAddressArray", body: { name: ["a", "b", "c"], datatype: ["byte", "int16"], address: ["VB10", "VD102"], length: [6, 6]} } |
ReadByteArray | 讀連續(xù)地址的字節(jié)數(shù)據(jù) | { func: "ReadByteArray", body: { name: "abc", address: "VB10", length: 6 } } |
WriteByteArray | 向連續(xù)地址寫入字節(jié)數(shù)據(jù) | { func: "WriteByteArray", body:{ name: "", address: "VB10", value: "00 1A 2B 3C 4D 5E" } } |
ReadBool | 讀取單個地址的布爾數(shù)據(jù) | { func: "ReadBool", body: { name: "", address: "V0.0" } } |
ReadBoolArray | 讀取連續(xù)地址的布爾數(shù)據(jù) | { func: "ReadBoolArray", body: { name: "", address: "V0.1", length: 6 } } |
WriteBool | 向單個地址寫入布爾數(shù)據(jù) | { func: "WriteBool", body: { name: "", address: "V0.0", value: true } } |
WriteBoolArray | 向連續(xù)地址寫入布爾數(shù)據(jù) | { func: "WriteBoolArray", body: { name: "", address: "V0.1", values: [true, false, true, false, true, false] } } |
ReadInt16 | 讀取單個地址的16位有符號整數(shù) | { func: "ReadInt16", body: { name: "", address: "VD100" } } |
ReadInt16Array | 讀取連續(xù)地址的16位有符號整數(shù) | { func: "ReadInt16Array", body: { name: "", address: "VD102", length: 6 } } |
WriteInt16 | 向單個地址寫入16位有符號整數(shù) | { func: "WriteInt16", body: { name: "", address: "VD100", value: 123 } } |
WriteInt16Array | 向連續(xù)地址寫入16位有符號整數(shù) | { func: "WriteInt16Array", body: { name: "", address: "VD102", values: [1, 2, 3, 4, 5, 6] } } |
ReadUInt16 | 讀取單個地址的16位無符號整數(shù) | { func: "ReadUInt16", body: { name: "", address: "VD110" } } |
ReadUInt16Array | 讀取連續(xù)地址的16位無符號整數(shù) | { func: "ReadUInt16Array", body: { name: "", address: "VD112", length: 6 } } |
WriteUInt16 | 向單個地址寫入16位無符號整數(shù) | { func: "WriteUInt16", body: { name: "", address: "VD110", value: 456 } } |
WriteUInt16Array | 向連續(xù)地址寫入16位無符號整數(shù) | { func: "WriteUInt16Array", body: { name: "", address: "VD112", values: [0, 1, 2, 3, 4, 5] } } |
ReadInt32 | 讀取單個地址的32位有符號整數(shù) | { func: "ReadInt32", body: { name: "", address: "VD120" } } |
ReadInt32Array | 讀取連續(xù)地址的32位有符號整數(shù) | { func: "ReadInt32Array", body: { name: "", address: "VD124", length: 6 } } |
WriteInt32 | 向單個地址寫入32位有符號整數(shù) | { func: "WriteInt32", body: { name: "", address: "VD120", value: 456 } } |
WriteInt32Array | 向連續(xù)地址寫入32位有符號整數(shù) | { func: "WriteInt32Array", body: { name: "", address: "VD124", values: [6, 7, 8, 9, 10, 11] } } |
ReadUInt32 | 讀取單個地址的32位無符號整數(shù) | { func: "ReadUInt32", body: { name: "", address: "VD130" } } |
ReadUInt32Array | 讀取連續(xù)地址的32位無符號整數(shù) | { func: "ReadUInt32Array", body: { name: "", address: "VD131", length: 6 } } |
WriteUInt32 | 向單個地址寫入32位無符號整數(shù) | { func: "WriteUInt32", body: { name: "", address: "VD130", value: 290 } } |
WriteUInt32Array | 向連續(xù)地址寫入32位無符號整數(shù) | { func: "WriteUInt32Array", body: { name: "", address: "VD131", values: [12, 13, 14, 15, 16, 17] } } |
ReadInt64 | 讀取單個地址的64位有符號整數(shù) | { func: "ReadInt64", body: { name: "", address: "VD140" } } |
ReadInt64Array | 讀取連續(xù)多個地址的64位有符號整數(shù) | { func: "ReadInt64Array", body: { name: "", address: "VD141", length: 6 } } |
WriteInt64 | 向單個地址寫入64位有符號整數(shù) | { func: "WriteInt64", body: { name: "", address: "VD140", value: 310 } } |
WriteInt64Array | 向連續(xù)地址寫入64位有符號整數(shù) | { func: "WriteInt64Array", body: { name: "", address: "VD141", values: [20, 21, 22, 23, 24, 25] } } |
ReadUInt64 | 讀取單個地址的64位無符號整數(shù) | { func: "ReadUInt64", body: { name: "", address: "VD150" } } |
ReadUInt64Array | 讀取連續(xù)地址的64位無符號整數(shù) | { func: "ReadUInt64Array", body: { name: "", address: "VD151", length: 6 } } |
WriteUInt64 | 向單個地址寫入64位無符號整數(shù) | { func: "WriteUInt64", body: { name: "", address: "VD150", value: 330 } } |
WriteUInt64Array | 向連續(xù)地址寫入64位無符號整數(shù) | { func: "WriteUInt64Array", body: { name: "", address: "VD151", values: [20, 21, 22, 23, 24, 25] } } |
ReadFloat | 讀取單個地址的單精度浮點數(shù) | { func: "ReadFloat", body: { name: "", address: "VD160" } } |
ReadFloatArray | 讀取連續(xù)地址的單精度浮點數(shù) | { func: "ReadFloatArray", body: { name: "", address: "VD160", length: 6 } } |
WriteFloat | 向單個地址寫入單精度浮點數(shù) | { func: "WriteFloat", body: { name: "", address: "VD160", value: 1.1 } } |
WriteFloatArray | 向連續(xù)地址寫入單精度浮點數(shù) | { func: "WriteFloatArray", body: { name: "", address: "VD160", values: [1.1, 2.2, 3.3, 4.4, 5.5, 6.6] } } |
ReadDouble | 讀取單個地址的雙精度浮點數(shù) | { func: "ReadDouble", body: { name: "", address: "VD180" } } |
ReadDoubleArray | 讀取連續(xù)地址的雙精度浮點數(shù) | { func: "ReadDoubleArray", body: { name: "", address: "VD200", length: 6 } } |
WriteDouble | 向單個地址寫入雙精度浮點數(shù) | { func: "WriteDouble", body: { name: "", address: "VD180", value: 12.3 } } |
WriteDoubleArray | 向連續(xù)地址寫入 雙精度浮點數(shù) | { func: "WriteDoubleArray", body: { name: "", address: "VD200", values: [7.1, 8.2, 9.3, 10.4, 11.5, 12.6] } } |
ReadString | 讀取字符串 | { func: "ReadString", body: { name: "", address: "VD301", length: 11 } } |
WriteString | 寫入字符串 | { func: "WriteString", body: { name: "", address: "VD300", value: "hello world" } } |
讀單個點位
一次讀一個點位,示例如下:
輸入對象結構如下:
msg.payload =
{
"func": "ReadBool",
"body": {
"address": "DB1.0.4",
"name":"test"
}
}
/*func : 控制字段 */
/* ReadBool*/
/* ReadByte*/
/* ReadInt16 */
/* ReadUInt16*/
/* ReadInt32 */
/* ReadUInt32*/
/* ReadInt64 */
/* ReadUInt64*/
/* ReadFloat */
/* ReadDouble*/
/*body : 一個對象,包含要讀取的點位、點位名稱 */
/*address:點位地址 */
/*name :點位名稱 -可選,如果攜帶了此字段且不為空,則以此字段作為 key,否則以點位地址為 key */
輸出對象結構如下:
{
"payload":{
"test":true
},
"rspType":"inputRead",
"inputMsg":{
"_msgid":"06f6cb5ef65e7df2",
"payload":{
"func":"ReadBool",
"body":{
"address":"DB1.0.4",
"name":"test"
}
},
"topic":""
},
"_msgid":"6c0dc0e5b35c7212"
}
/*payload : 外部觸發(fā)讀取的值*/
/* test : 名稱為 'test'的點位,當前值讀取的值為true*/
/*rspType : 當前輸出的類型*/
/*intRead : 循環(huán)讀取輸出*/
/*inputRead : 外部觸發(fā)讀取輸出*/
/*inputWrite: 外部觸發(fā)寫入輸出*/
/*inputMsg : 輸入的對象請參考 參考 < 高級 讀 寫 > --> < 讀 > --> < 讀單個 >輸入*/
/*_msgid : 當前消息id*/
讀多個點位(同類型)
一次讀多個同類型點位,示例如下:
輸入對象結構如下:
msg.payload =
{
"func": "ReadBoolArray",
"body": {
"address": "DB1.0.1",
"name": 'test',
"length": 10
}
}
/*func : 控制字段*/
/* ReadBoolArray*/
/* ReadByteArray*/
/* ReadInt16Array */
/* ReadUInt16Array*/
/* ReadInt32Array */
/* ReadUInt32Array*/
/* ReadInt64Array */
/* ReadUInt64Array*/
/* ReadFloatArray */
/* ReadDoubleArray*/
/*body : 一個對象,包含要讀取的點位、點位名稱 */
/*address:點位地址 */
/*name :點位名稱 -可選,如果攜帶了此字段且不為空,則以此字段作為 key,否則以點位地址為 key */
/*length :點位數(shù)量 */
輸出對象結構如下:
{
"payload":{
"test":[false,true,false,true,false,false,false,false,false,false]
},
"rspType":"inputRead",
"inputMsg":{
"_msgid":"2a6fc9bdb035b576",
"payload":{
"func":"ReadBoolArray",
"body":{
"address":"DB1.0.1",
"name":"test",
"length":10
}
},
"topic":""
},
"_msgid":"d5cd648295d54b9e"
}
/*payload : 外部觸發(fā)讀取的值*/
/* test : 名稱為 'test'的點位(起始點位),
當前值讀取的值為[false,true,false,true,false,false,false,false,false,false]
類型為 Array */
/*rspType : 當前輸出的類型*/
/*intRead : 循環(huán)讀取輸出*/
/*inputRead : 外部觸發(fā)讀取輸出*/
/*inputWrite: 外部觸發(fā)寫入輸出*/
/*inputMsg : 輸入的對象請參考 參考 < 高級 讀 寫 > -->< 讀 > --> < 讀多個 >輸入*/
/*_msgid : 當前消息id*/
讀多個點位(不同類型)
對于類型不同的點位可以使用數(shù)組的形式輸入,合并一起讀取。
對于類型不同的點位可以使用數(shù)組的形式輸入,合并一起讀取。
輸入對象結構如下:
msg.payload =
[{
"func": "ReadInt16",
"body": {
"address": "DB1.0"
}
}, {
"func": "ReadInt16Array",
"body": {
"address": "DB2.0",
"length": 5
}
}, {
"func": "ReadBoolArray",
"body": {
"address": "DB3.0",
"length": 9
}
}]
/*數(shù)組的成員 即 <讀單個>、<讀多個>的輸入*/
輸出對象結構如下:
{
"payload":{
"DB1.0":5120,
"DB2.0":[0,0,0,0,0],
"DB3.0":[false,false,false,false,false,false,false,false,false]
},
"rspType":"inputRead",
"inputMsg":{
"_msgid":"63860e372f904617",
"payload":[
{"func":"ReadInt16","body":{"address":"DB1.0"}},
{"func":"ReadInt16Array","body":{"address":"DB2.0","length":5}},
{"func":"ReadBoolArray","body":{"address":"DB3.0","length":9}}
],
"topic":"",
"test":"aaaa"
},
"_msgid":"10b9ad097069625b"
}
/*payload : 外部觸發(fā)讀取的值*/
/* DB1.0 : 地址為 'DB1.0'的點位,值 5120 */
/*...*/
/*rspType : 當前輸出的類型*/
/*intRead : 循環(huán)讀取輸出*/
/*inputRead : 外部觸發(fā)讀取輸出*/
/*inputWrite: 外部觸發(fā)寫入輸出*/
/*inputMsg : 輸入的對象請參考 參考 < 高級 讀 寫 > -->< 讀 > --> < 合并讀取 >輸入*/
/*_msgid : 當前消息id*/
西門子S7協(xié)議讀多個
特別指出:西門子S7協(xié)議支持按地址讀取數(shù)據(jù)。
輸入對象結構如下:
msg.payload =
{
"func": "ReadAddressArray",
"body": {
"address": ["DB1.0", "DB1.1", "DB1.2", "V0", "V2", "V2"],
"name":"",
"type": ["Bool", "Bool", "Bool", "UInt16", "UInt32", "String-Unicode-big"],
"length": [1, 1, 1, 4, 4, 80]
}
}
/*func : 控制字段 */
/* ReadAddressArray 【唯一】/*
/*body : 一個對象,包含要讀取的點位、點位名稱 */
/*address:點位地址 */
/*name :點位名稱 -可選,如果攜帶了此字段且不為空,則以此字段作為 key,否則以點位地址為 key */
/*type :點位類型參考 <屬性> --> <類型> */
輸出對象結構如下:
{
"payload":{
"DB1.0":[false,false,true,false,true,false,false,false],
"DB1.1":[false,false,false,false,false,false,false,false],
"DB1.2":[false,true,true,true,true,true,true,true],
"V0":[5120,65040],
"V2":"aa中文編碼測試\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"
},
"rspType":"inputRead",
"inputMsg":{
"_msgid":"491920338e36c07e",
"payload":{
"func":"ReadAddressArray",
"body":{
"address":["DB1.0","DB1.1","DB1.2","V0","V2","V2"],
"name":"",
"type":["Bool","Bool","Bool","UInt16","UInt32","String-Unicode-big"],
"length":[1,1,1,4,4,80]
}
},
"topic":""
},
"_msgid":"a653aa1949ecd101"
}
/*payload : 外部觸發(fā)讀取的值*/
/* DB1.0 : 地址 'DB1.0'的點位(起始點位),
當前值讀取的值為[false,false,true,false,true,false,false,false] 類型為 Array*/
/*...*/
/*V2 : 地址 'V2'的點位(起始點位)
當前值讀取的值為 aa中文編碼測試\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000
類型為 String*/
/*rspType : 當前輸出的類型*/
/*intRead : 循環(huán)讀取輸出*/
/*inputRead : 外部觸發(fā)讀取輸出*/
/*inputWrite: 外部觸發(fā)寫入輸出*/
/*inputMsg : 輸入的對象請參考 參考 < 高級 讀 寫 > --> < S7 讀 > --> 輸入*/
/*_msgid : 當前消息id*/
注意
如果使用高級讀寫讀取字符串 ,可以先按字節(jié)讀取指定的長度,然后解析返回的數(shù)據(jù)。
寫單個
一次寫一個點位,示例如下:
輸入對象結構如下:
msg.payload =
{
"func": "WriteBool",
"body": {
"address": "DB1.0.4",
"name":"test",
"value":true
}
}
/*func : 控制字段*/
/* WriteBool*/
/* WriteByte*/
/* WriteInt16 */
/* WriteUInt16*/
/* WriteInt32 */
/* WriteUInt32*/
/* WriteInt64*/
/* WriteUInt64*/
/* WriteFloat */
/* WriteDouble*/
/* WriteString*/
/*body : 一個對象,包含要寫入的點位、點位值 */
/*address:點位地址 */
/*name :點位名稱 -可選,如果攜帶了此字段且不為空,則以此字段作為 key,否則以點位地址為 key */
/*value:要寫入的值 */
輸出對象結構如下:
{
"payload":{
"test":true
},
"rspType":"inputWrite",
"inputMsg":{
"_msgid":"a20bc807b2876c74",
"payload":{
"func":"WriteBool",
"body":{
"address":"DB1.0.4",
"name":"test",
"value":true
}
},
"topic":""
},
"_msgid":"8031517037c06b21"
}
/*payload : 外部觸發(fā) 寫入 執(zhí)行的結果*/
/*test : 名為 'test'的點位,執(zhí)行結果true:成功false:失敗 */
/*rspType : 當前輸出的類型*/
/*intRead : 循環(huán)讀取輸出*/
/*inputRead : 外部觸發(fā)讀取輸出*/
/*inputWrite: 外部觸發(fā)寫入輸出*/
/*inputMsg : 輸入的對象請參考 參考 < 高級 讀 寫 > --> < 寫 >--><寫單個> --> 輸入*/
/*_msgid : 當前消息id*/
注意:西門子Smart200 WriteString一次寫入有長度限制。建議借助點位表實現(xiàn)超長數(shù)據(jù)寫入。
寫多個
一次寫多個點位,示例如下:
輸入對象結構如下:
msg.payload=
{
"func": "WriteBoolArray",
"body": {
"address": "DB1.0.1",
"name":"test",
"values":[true,false,true,false]
}
}
/*func : 控制字段*/
/* WriteBoolArray*/
/* WriteInt16Array */
/* WriteUInt16Array*/
/* ReadInt32Array */
/* WriteUInt32Array*/
/* WriteInt64Array*/
/* WriteUInt64Array*/
/* WriteFloatArray */
/* WriteDoubleArray*/
/*body : 一個對象,包含要寫入的點位、點位值 */
/*address:點位地址 */
/*name :點位名稱 -可選,如果攜帶了此字段且不為空,則以此字段作為 key,否則以點位地址為 key */
/*values:要寫入的值 [Array] */
輸出對象結構如下:
{
"payload":{
"a":true,
"b":true
},
"rspType":"inputWrite",
"inputMsg":{
"_msgid":"f108c441d997cd9f",
"payload":[{
"func":"WriteBoolArray",
"body":{
"name":"a",
"address":"V0.0",
"values":[true,false,true,false,true,false]}
},{
"func":"WriteBoolArray",
"body":{
"name":"b",
"address":"V100.0",
"values":[true,false,true,false,true,false]}
}],
"topic":"",
"_event":"node:0c5265872911e459"
},
"_msgid":"2581ee60d30a5273"
}
/*payload : 外部觸發(fā) 寫入 執(zhí)行的結果*/
/*a : 名為 'a'的點位,執(zhí)行結果true:成功false:失敗 */
/*rspType : 當前輸出的類型*/
/*intRead : 循環(huán)讀取輸出*/
/*inputRead : 外部觸發(fā)讀取輸出*/
/*inputWrite: 外部觸發(fā)寫入輸出*/
/*inputMsg : 輸入的對象請參考 參考 < 高級 讀 寫 > --> < 寫 >--><寫多個> --> 輸入*/
/*_msgid : 當前消息id*/
按字節(jié)寫多個
注意,按字節(jié)寫多個時,需要將要寫入的值轉為16進制字符串形式。
輸入對象結構如下:
msg.payload = [{
func: "WriteByteArray",
body: {
name: "a",
address: "V0",
value: "00 1A 2B 3C 4D 5E"}
},{
func: "WriteByteArray",
body: {
name: "b",
address:"V100",
value:"00 1A 2B 3C 4D 5E"
}
}]
/*func : 控制字段*/
/* WriteByteArray*/
/*body : 一個對象,包含要寫入的點位、點位值 */
/*address:點位地址 */
/*name :點位名稱 -可選,如果攜帶了此字段且不為空,則以此字段作為 key,否則以點位地址為 key */
/*value:要寫入的值 */
輸出對象結構如下:
{
"payload": {
"a": true,
"b": true
},
"rspType": "inputWrite",
"inputMsg": {
"_msgid": "8af239f0a126347f",
"payload": [{
"func": "WriteByteArray",
"body": {
"name": "a",
"address": "V0",
"value": "00 1A 2B 3C 4D 5E"
}
}, {
"func": "WriteByteArray",
"body": {
"name": "b",
"address": "V100",
"value": "00 1A 2B 3C 4D 5E"
}
}],
"topic": "",
"_event": "node:48035aaef43d7e72"
},
"_msgid": "e37370ddcf37073d"
}
/*payload : 外部觸發(fā) 寫入 執(zhí)行的結果*/
/*a : 名為 'a'的點位,執(zhí)行結果true:成功false:失敗 */
/*rspType : 當前輸出的類型*/
/*intRead : 循環(huán)讀取輸出*/
/*inputRead : 外部觸發(fā)讀取輸出*/
/*inputWrite: 外部觸發(fā)寫入輸出*/
/*inputMsg : 輸入的對象請參考 參考 < 高級 讀 寫 > --> < 寫 >--><按字節(jié)寫讀個> --> 輸入*/
/*_msgid : 當前消息id*/
源碼/詳細:https://iotrouter.yuque.com/zn3vdn/eg8000/vw4fa0mibhixgocn#J2HzK