精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

邊緣網關教程-Modbus協(xié)議轉MQTT協(xié)議

IOTRouter ? 來源:IOTRouter ? 作者:IOTRouter ? 2024-07-03 10:37 ? 次閱讀

需求概述

主要實現一個流程:

1.采集Modbus電表數據上傳到MQTT指定topic

2.如果傳感器未響應需要發(fā)送報警信息到指定topic

3.MQTT連接成功時發(fā)送注冊信息

4.周期推送心跳到指定topic

5.云端下發(fā)控制EG8200繼電器并回復

對接資料

1.南向接口 RS485對接協(xié)議(標準modbus)

點位 字段 寄存器地址 解析方式
A相電壓 voltageA 40001~40002 float32 ABCD
B相電壓 voltageB 40003~40004 float32 ABCD
C相電壓 voltageC 40005~40006 float32 ABCD
A相電壓 currentA 40007~40008 float32 ABCD
B相電壓 currentB 40009~40010 float32 ABCD
C相電壓 currentC 40011~40012 float32 ABCD

2.北向接口協(xié)議說明:

MQTT連接信息
Broker 139.129.229.113
Clientid TestClient
Username 82000000305E144F
Password EG12345678
Topic報文格式
功能 Topic 數據流向 報文示例
信息注冊 data/sg/${sn}/info 網關->平臺 {
"sn":"82000000305E144F",
"time":"2023-01-01 12:00:00"
}
數據上報 data/sg/${sn}/report 網關->平臺 {
"sn":"82000000305E144F",
"data":{
"voltageA":0,
"voltageB":0,
"voltageC":0,
"currentA":0,
"currentB":0,
"currentC":0
},
time:"2023-01-01 12:00:00"
}
心跳 data/sg/${sn}/heart 網關->平臺 {
"sn":"82000000305E144F",
"data":{},
"message":"heart",
"time":"2023-01-01 12:00:00"
}
報警 data/sg/${sn}/warn 網關->平臺 {
"sn":"82000000305E144F",
"data":{},
"message":"offline",
"time":"2023-01-01 12:00:00"
}
平臺控制 /data/sg/${sn}/request 平臺->網關 {
"event_id":"HsUCigC4Jk",
"data": {
"parameter": "DO1",
"value": 0
}
}
控制回復 data/sg/${sn}/response 網關->平臺 {
"event_id":"HsUCigC4Jk",
"message":"OK",
"data":{},
"time":"2023-01-01 12:00:00"
}

需求分析

注冊與連接工作

a.建立MQTT連接,發(fā)布到注冊主題(MQTT發(fā)布節(jié)點)注:MQTT訂閱發(fā)布節(jié)點連接信息共享,其他MQTT無需在配置連接參數,選擇第一次配置的連接參數即可

b.監(jiān)聽MQTT連接狀態(tài)(狀態(tài)變化節(jié)點)

c.封裝注冊信息(函數節(jié)點)

數據上報

a.modbus讀取電表數據(modbus讀節(jié)點)

b.判斷傳感器是否有回復并封裝上報報文(函數節(jié)點)

c.配置對應的發(fā)布主題(MQTT發(fā)布節(jié)點)

心跳推送

a.注入節(jié)點周期觸發(fā)(注入節(jié)點)

b.封裝心跳報文(函數節(jié)點)

c.MQTT發(fā)布數據(MQTT發(fā)布節(jié)點)

下發(fā)控制

a.MQTT訂閱云端下發(fā)主題(MQTT訂閱節(jié)點)

b.解析云端數據,并控制對應DO(函數節(jié)點)

c.響應MQTT控制情況(函數節(jié)點)

d.上報響應報文(MQTT發(fā)布)

實現流程框架

wKgZomaEt1uAGN4qAABu4JP5xmw397.png

需求實現

1.監(jiān)聽MQTT狀態(tài)并發(fā)布注冊信息

a.從節(jié)點庫拖出一個MQTT發(fā)布節(jié)點,函數節(jié)點,調試節(jié)點,狀態(tài)監(jiān)測節(jié)點和條件判斷節(jié)點,MQTT發(fā)布用于消息發(fā)布,函數節(jié)點用于注冊信息封裝,狀態(tài)檢測節(jié)點用于檢測MQTT的連接狀態(tài),調試節(jié)點用于打印發(fā)布的報文

wKgZomaEt2uAWCAWAAF4ebgsg2A254.png

b.從上可以看見日志打印了注冊報文,以及MQTTx端以及接收到了注冊信息

wKgaomaEt32AM3yLAAGesr-MT8g037.png

c.注冊流程使用的代碼塊:

const fmt = dateFormat("YYYY-mm-dd HH:MM:SS", new Date())

let obj = {
    "sn": "82000000305E144F",
    "time": fmt
}

function dateFormat(fmt, timestamp) {
    let ret;
    const opt = {
        "Y+": timestamp.getFullYear().toString(), // 年
        "m+": (timestamp.getMonth() + 1).toString(),  // 月
        "d+": timestamp.getDate().toString(), // 日
        "H+": timestamp.getHours().toString(), // 時
        "M+": timestamp.getMinutes().toString(), // 分
        "S+": timestamp.getSeconds().toString() // 秒
        // 有其他格式化字符需求可以繼續(xù)添加,必須轉化成字符串
    };
    for (let k in opt) {
        ret = new RegExp("(" + k + ")").exec(fmt);
        if (ret) {
            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
        };
    };
    return fmt;
}

msg.payload = JSON.stringify(obj)
return msg

2.數據上報

a.從節(jié)點庫拖出一個注入節(jié)點,函數節(jié)點和一個MQTT發(fā)布節(jié)點,注入節(jié)點用于周期觸發(fā),函數節(jié)點用于封裝心跳報文,MQTT發(fā)布節(jié)點用于心跳發(fā)布

wKgaomaEt5yAGYc1AAHXgK03t6I764.png

b.從上面可以看到日志窗口打印了數據報文,MQTTx也接收到了上報數據

wKgZomaEt6qAblqPAAHzi27BQzo469.png

c.數據上報流程使用的代碼塊:

function dateFormat(fmt, timestamp) {
    let ret;
    const opt = {
        "Y+": timestamp.getFullYear().toString(), // 年
        "m+": (timestamp.getMonth() + 1).toString(),  // 月
        "d+": timestamp.getDate().toString(), // 日
        "H+": timestamp.getHours().toString(), // 時
        "M+": timestamp.getMinutes().toString(), // 分
        "S+": timestamp.getSeconds().toString() // 秒
        // 有其他格式化字符需求可以繼續(xù)添加,必須轉化成字符串
    };
    for (let k in opt) {
        ret = new RegExp("(" + k + ")").exec(fmt);
        if (ret) {
            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
        };
    };
    return fmt;
}

var flag = msg.status
var data = msg.payload
var payload
const fmt = dateFormat("YYYY-mm-dd HH:MM:SS", new Date())

if (flag == "TIMEOUT") {
    payload = {
        "sn": "82000000305E144F",
        "data": {},
        "message": "offline",
        "time": fmt
    }
    msg.payload = JSON.stringify(payload)
    return [msg, null]
}
else if (flag == "OK") {
    payload = {
        sn: "02C00081275A574E",
        data,
        time: fmt
    }
    msg.payload = JSON.stringify(payload)
    return [null, msg]
}

3.心跳推送

a.從節(jié)點庫拿出一個注入節(jié)點,函數節(jié)點,MQTT發(fā)布節(jié)點。注入節(jié)點用于周期發(fā)發(fā)送心跳,函數節(jié)點用于封裝心跳報文,MQTT發(fā)布節(jié)點用于發(fā)布到MQTT

wKgZomaEt7-AWVocAAJlZz-ZS_Y845.png

b.從上面可以看到日志窗口打印了心跳報文,MQTTx也接收到了心跳報

wKgaomaEt8eAQMTlAAHOWaHue9g429.png

心跳上報流程使用的代碼塊:

const fmt = dateFormat("YYYY-mm-dd HH:MM:SS", new Date())

function dateFormat(fmt, timestamp) {
  let ret;
  const opt = {
    "Y+": timestamp.getFullYear().toString(), // 年
    "m+": (timestamp.getMonth() + 1).toString(),  // 月
    "d+": timestamp.getDate().toString(), // 日
    "H+": timestamp.getHours().toString(), // 時
    "M+": timestamp.getMinutes().toString(), // 分
    "S+": timestamp.getSeconds().toString() // 秒
    // 有其他格式化字符需求可以繼續(xù)添加,必須轉化成字符串
  };
  for (let k in opt) {
    ret = new RegExp("(" + k + ")").exec(fmt);
    if (ret) {
      fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
    };
  };
  return fmt;
}

let obj = {
  "sn": "82000000305E144F",
  "data": {},
  "message": "heart",
  "time": fmt
}
msg.payload = JSON.stringify(obj)
return msg;

4.下發(fā)控制及響應

a.從節(jié)點庫拿出一個MQTT訂閱節(jié)點,MQTT發(fā)布節(jié)點,函數節(jié)點和DO節(jié)點,MQTT訂閱節(jié)點和MQTT發(fā)布節(jié)點用于接收云端發(fā)來的數據和控制響應,函數節(jié)點用于解析下發(fā)的報文和控制的響應報文封裝

wKgaomaEt9aAYWXtAAJQ_PKGmCk107.png

b.從上面可以看到日志窗口打印了報文,MQTTx也接收到了控制響應

wKgZomaEt-aANZv_AAGjccNC5Zk976.png

c.控制流程使用的代碼塊


//云端下發(fā)解析
//############################
if (msg.payload.length < 10) { return }

if (typeof (msg.payload) == "object") {
    var obj = msg.payload
    //信息獲取
    let event_id = obj.event_id;
    global.set("event_id", event_id)
    let parameter = obj.data.parameter
    let value = obj.data.value
    let arr = []
    switch (parameter) {
        case "DO1":
            arr = value
            break
        case "DO2":
            arr = value
            break
    }

    msg.payload = arr


    return msg;
}
//############################

//反饋響應封裝
//############################
let event_id = global.get("event_id")
const fmt = dateFormat("YYYY-mm-dd HH:MM:SS", new Date())
function dateFormat(fmt, timestamp) {
    let ret;
    const opt = {
        "Y+": timestamp.getFullYear().toString(), // 年
        "m+": (timestamp.getMonth() + 1).toString(),  // 月
        "d+": timestamp.getDate().toString(), // 日
        "H+": timestamp.getHours().toString(), // 時
        "M+": timestamp.getMinutes().toString(), // 分
        "S+": timestamp.getSeconds().toString() // 秒
        // 有其他格式化字符需求可以繼續(xù)添加,必須轉化成字符串
    };
    for (let k in opt) {
        ret = new RegExp("(" + k + ")").exec(fmt);
        if (ret) {
            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
        };
    };
    return fmt;
}

let obj = {
    "event_id": event_id,
    "message": "OK",
    "data": {},
    "time": fmt

}

msg.payload = JSON.stringify(obj);
return msg;
//############################

通過以上步驟,你可以在邊緣網關上成功實現 Modbus 協(xié)議到 MQTT 協(xié)議的轉換。這種集成方式不僅簡化了工業(yè)設備與物聯(lián)網平臺的通信,還增強了數據的實時性和可靠性。希望本文能為你提供有用的指導,助你更好地利用 Modbus 和 MQTT 技術

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • MODBUS
    +關注

    關注

    28

    文章

    1762

    瀏覽量

    76843
  • 網關
    +關注

    關注

    9

    文章

    4308

    瀏覽量

    50957
  • MQTT
    +關注

    關注

    5

    文章

    649

    瀏覽量

    22435
收藏 人收藏

    評論

    相關推薦

    Modbus協(xié)議Profinet協(xié)議網關與氣體監(jiān)測系統(tǒng)配置案例

    Modbus協(xié)議和Profinet協(xié)議作為工業(yè)領域常見的兩種通訊協(xié)議,各自具有一定的特點和應用范圍。ModbusProfinet
    的頭像 發(fā)表于 06-13 17:50 ?1359次閱讀
    <b class='flag-5'>Modbus協(xié)議</b><b class='flag-5'>轉</b>Profinet<b class='flag-5'>協(xié)議</b><b class='flag-5'>網關</b>與氣體監(jiān)測系統(tǒng)配置案例

    Modbus協(xié)議Profibus協(xié)議網關接溫控表與PLC通訊

    Modbus協(xié)議Profibus協(xié)議網關(XD-MDPB100)則是實現這一通訊的重要工具。Modbus
    的頭像 發(fā)表于 06-21 11:31 ?1870次閱讀
    <b class='flag-5'>Modbus協(xié)議</b><b class='flag-5'>轉</b>Profibus<b class='flag-5'>協(xié)議</b><b class='flag-5'>網關</b>接溫控表與PLC通訊

    巴圖自動化Profinet協(xié)議Modbus協(xié)議網關模塊連接智能儀表與PLC通訊

    巴圖自動化Profinet協(xié)議Modbus協(xié)議網關模塊(BT-MDPN10)的主要功能是實現Modbus協(xié)議和Profinet
    的頭像 發(fā)表于 07-04 11:35 ?2577次閱讀
    巴圖自動化Profinet<b class='flag-5'>協(xié)議</b><b class='flag-5'>轉</b><b class='flag-5'>Modbus協(xié)議</b><b class='flag-5'>網關</b>模塊連接智能儀表與PLC通訊

    Modbusprofient網關連接Smart PLC實現Profinetmodbus協(xié)議轉換

    Modbusprofinet網關連接西門子/DCS及機器人Profinetmodbus協(xié)議轉換,不需要PLC或者Profinet主站編程
    發(fā)表于 03-22 19:13

    西門子S7協(xié)議Modbus協(xié)議網關

    西門子S7協(xié)議Modbus協(xié)議網關
    發(fā)表于 11-13 15:03 ?1798次閱讀

    歐姆龍CP1L-ELModbus協(xié)議歐姆龍PLCModbus協(xié)議

    歐姆龍PLCModbus協(xié)議 歐姆龍CP1L-ELModbus協(xié)議
    的頭像 發(fā)表于 11-06 15:55 ?2774次閱讀
    歐姆龍CP1L-EL<b class='flag-5'>轉</b><b class='flag-5'>Modbus協(xié)議</b>歐姆龍PLC<b class='flag-5'>轉</b><b class='flag-5'>Modbus協(xié)議</b>

    4G無線ModbusMQTT協(xié)議網關BL100產品簡介

    4G無線ModbusMQTT協(xié)議網關
    發(fā)表于 08-19 15:22 ?22次下載

    Modbus協(xié)議網關是什么?Modbus協(xié)議網關的功能

    數據的互聯(lián)互通。Modbus協(xié)議作為一種廣泛應用于工業(yè)控制領域的通信協(xié)議,主要用于在主設備(如PLC、SCADA系統(tǒng))與從設備(如傳感器、執(zhí)行器、智能儀表等)之間交換數據。 Modbus協(xié)議
    的頭像 發(fā)表于 04-11 15:51 ?710次閱讀

    Profibus協(xié)議Modbus協(xié)議網關模塊在船舶中的應用

    本文主要介紹了Profibus協(xié)議Modbus協(xié)議網關模塊(XD-MDPB100)在船舶中的應用。 Profibus
    的頭像 發(fā)表于 06-27 17:25 ?457次閱讀
    Profibus<b class='flag-5'>協(xié)議</b><b class='flag-5'>轉</b><b class='flag-5'>Modbus協(xié)議</b><b class='flag-5'>網關</b>模塊在船舶中的應用

    鋇錸協(xié)議網關輕松實現ModbusMQTT協(xié)議

    效的數據交換。本文從Modbus協(xié)議轉換為MQTT協(xié)議的必要性為出發(fā)點,分析鋇錸ModbusMQTT
    的頭像 發(fā)表于 07-23 15:51 ?309次閱讀
    鋇錸<b class='flag-5'>協(xié)議</b><b class='flag-5'>網關</b>輕松實現<b class='flag-5'>Modbus</b><b class='flag-5'>轉</b><b class='flag-5'>MQTT</b><b class='flag-5'>協(xié)議</b>

    基于MQTT協(xié)議云平臺的ModbusMQTT網關

    鋇錸ModbusMQTT網關BL100是一款高性能、高性價比的物聯(lián)網網關,它支持將Modbus協(xié)議
    的頭像 發(fā)表于 07-29 17:59 ?702次閱讀
    基于<b class='flag-5'>MQTT</b><b class='flag-5'>協(xié)議</b>云平臺的<b class='flag-5'>Modbus</b><b class='flag-5'>轉</b><b class='flag-5'>MQTT</b><b class='flag-5'>網關</b>

    鋇錸技術ModbusMQTT網關:橋接Modbus協(xié)議MQTT協(xié)議

    提供了一鍵對接亞馬遜云平臺的解決方案。 BL101網關是鋇錸技術研發(fā)的一款高性能工業(yè)物聯(lián)網設備,通過橋接Modbus協(xié)議MQTT通信協(xié)議,實現了工業(yè)設備與云端平臺之間的高效互聯(lián)。支持
    的頭像 發(fā)表于 07-30 16:28 ?334次閱讀
    鋇錸技術<b class='flag-5'>Modbus</b><b class='flag-5'>轉</b><b class='flag-5'>MQTT</b><b class='flag-5'>網關</b>:橋接<b class='flag-5'>Modbus協(xié)議</b>與<b class='flag-5'>MQTT</b><b class='flag-5'>協(xié)議</b>

    BACnetModbus協(xié)議網關實現設備無縫對接GE Digital iFIX

    與整合,實現協(xié)議間的無縫轉換,鋇錸技術隆重推出BACnetModbus協(xié)議網關BL120BN,為用戶提供了一個既高效又可靠的解決方案。 一、BACnet
    的頭像 發(fā)表于 08-06 17:32 ?352次閱讀
    BACnet<b class='flag-5'>轉</b><b class='flag-5'>Modbus協(xié)議</b><b class='flag-5'>網關</b>實現設備無縫對接GE Digital iFIX

    Modbus、樓宇自控、電力協(xié)議Modbus協(xié)議網關BL120ML支持一鍵對接LabVIEW

    Modbus樓宇自控電力協(xié)議Modbus協(xié)議網關BL120ML在LabVIEW中的實際應用中,我們首先需要理解LabVIEW和
    的頭像 發(fā)表于 08-10 10:40 ?364次閱讀
    <b class='flag-5'>Modbus</b>、樓宇自控、電力<b class='flag-5'>協(xié)議</b><b class='flag-5'>轉</b><b class='flag-5'>Modbus協(xié)議</b><b class='flag-5'>網關</b>BL120ML支持一鍵對接LabVIEW

    使用Modbus、樓宇自控、電力協(xié)議Modbus協(xié)議網關實現生產設備的遠程監(jiān)控和管理

    Modbus協(xié)議、樓宇自控、電力協(xié)議Modbus協(xié)議網關,將不同類型的生產設備數據集中傳輸到監(jiān)控系統(tǒng),實現遠程監(jiān)控和管理。 我們先來看整
    的頭像 發(fā)表于 08-08 17:29 ?344次閱讀
    使用<b class='flag-5'>Modbus</b>、樓宇自控、電力<b class='flag-5'>協(xié)議</b><b class='flag-5'>轉</b><b class='flag-5'>Modbus協(xié)議</b><b class='flag-5'>網關</b>實現生產設備的遠程監(jiān)控和管理