BACnet協議移植適配實現BACnet/IP和BACnet MSTP相關功能

1、從GitHub或者其他網站下載最新的協議棧源碼

源碼結構如圖所示:

其中src是協議棧源碼,可直接拿來使用,apps里面是一些功能的應用示例,有BACnet IP,BACnet MSTP,BACnet Router等功能。

2、協議棧移植完成后,需要改造幾個函數與自己的硬件接口想匹配才能使用

1)使用以下四個函數進行初始化工作,可參考協議棧的示例

其中Device_Set_Object_Instance_Number()用來設置本設備的ID號,通過客戶端掃描出來的設備就會帶上這個ID號,Init_Service_Handlers()用于設置本設備支持哪些服務,比如SERVICE_UNCONFIRMED_WHO_IS,SERVICE_UNCONFIRMED_WHO_HAS,SERVICE_UNCONFIRMED_I_AM,SERVICE_UNCONFIRMED_I_HAVE等等,開發者可根據自己要開發的設備等級去支持相應的服務,BACnet協議棧就是通過這些服務進行數據通訊的,address_init()是初始化地址緩存表,dlenv_init()是接口相關的初始化行為,只有這個初始化正確完成后才能進行IP或者MSTP相關的通訊。

2)dlenv_init()函數里面已經定義好了幾種不同介質的初始化行為,有IP6,IP,MSTP,BSC,開發者可根據自己要開發的設備通訊類型去開啟不同的宏定義,dlenv_init()里面最重要的是datalink_init()初始化函數

調用此函數就會跳轉到對應介質的初始化函數中,如果是定義了BACDL_BIP宏定義則

在bip_init()中用戶需自己實現兩個socket的創建,可參考應用示例完成,比較簡單;如果是定義了BACDL_MSTP宏定義,則通過dlmstp_init()去完成串口的初始化行為,串口的初始化相對麻煩點,這里對串口的初始化還附帶了MSTP端口的其他接口功能初始化,如圖所示

后續MSTP通訊都通過MSTP_Port來進行,用戶需提前注冊此接口中的一些函數,可參考如下所示

需要完成RS485接口相關的函數注冊以及時間設置相關的函數,可參考如下:

然后在dlmstp_init()函數中完成初始化行為。

至此接口部分的初始化行為就完成了。

3、創建一個任務用于接收BACnet的數據,不停地調用接收端口,如下所示

至此,就基本完成了BACnet協議棧移植和數據通訊相關的工作,如果收到IP端或者485端的數據,會進入npdu_handler()函數中,最終會調用相應的服務處理信息。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/909613.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/909613.shtml
英文地址,請注明出處:http://en.pswp.cn/news/909613.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ubuntu 22.04.1 LTS 離線安裝Docker(最快方法,僅需一個壓縮文件和兩個腳本)

作者親測:親測有效無bug。 利用ubuntu22.04下載完docker-27.4.1.tgz,然后按照下面方法安裝。選擇sudo方法。 tips:這個ubuntu22.04是遷移后的服務器的版本,不是遷移前的版本。 下載 下載地址 : https://download.docker.com/linux/static/stable/x86_…

Tkinter --按鈕點擊事件應用場景

第二章 事件處理 目錄 第二章 事件處理 四、事件處理 4.1 按鈕點擊事件 4.1.1信息展示類場景 1. 靜態文本說明 ?編輯 2. 動態狀態顯示 4.1.2.界面美化與裝飾 1. 圖像 / 圖標展示 ?編輯 2. 分隔與布局輔助 4.1.3 交互反饋與提示 1. 操作結果提示 2. 幫助與說明文本…

計算機網絡學習筆記:TCP流控、擁塞控制

文章目錄 前言一、TCP流量控制1.1、案例:三次流量控制1.2、持續計時器 二、TCP擁塞控制2.1、擁塞控制的指標2.2、慢開始算法和擁塞避免算法2.3、快重傳算法和快恢復算法2.4、練習 三、TCP擁塞控制與網際層擁塞控制總結 前言 TCP協議中的流量和擁塞,是兩個…

【Linux】Tomcat搭建

前言 Tomcat Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬于輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。 JSP JSP是一種跨平臺的動態網頁技術標準,可以…

Ajax 核心知識點全面總結

文章目錄 Ajax 核心知識點全面總結一、Ajax 基礎概念1、定義2、核心特點 二、Ajax 工作原理與核心組件1、工作流程2、XMLHttpRequest(XHR)對象 三、Ajax 請求方法與參數1、常見請求方法2、請求參數處理 四、Ajax 異步與錯誤處理1、異步處理2、錯誤處理 五…

SpinFlowSim:用于癌癥組織學信息驅動的擴散MRI微血管映射的血流模擬框架|文獻速遞-深度學習醫療AI最新文獻

Title 題目 SpinFlowSim: A blood flow simulation framework for histology-informeddiffusion MRI microvasculature mapping in cancer SpinFlowSim:用于癌癥組織學信息驅動的擴散MRI微血管映射的血流模擬框架 01 文獻速遞介紹 在擴散磁共振成像&#xff08…

量化面試綠皮書:21. 拋硬幣游戲

文中內容僅限技術學習與代碼實踐參考,市場存在不確定性,技術分析需謹慎驗證,不構成任何投資建議。 21. 拋硬幣游戲 兩個賭徒正在玩一個拋硬幣游戲。 賭徒A有(n1)枚均勻硬幣,賭徒B有n枚均勻硬幣。 Q: 如果兩人同時拋擲所有硬幣&a…

OpenLayers 框架體系

注:當前使用的是 ol 9.2.4 版本,天地圖使用的key請到天地圖官網申請,并替換為自己的key OpenLayers框架組織結構龐大,只通過官網API進行查看,對框架結構缺少一個整體、全面的看法。借助樹形結構圖或思維導圖&#xff0…

緩存系統-基本概述

目錄 一、系統概述 二、名詞解釋 三、淘汰策略 1、LRU 2、LFU 3、FIFO 4、TTL 5、Random 四、讀寫模式 1、Cache Aside(旁路緩存) 2、Write Through(直寫) 3、Write Back(回寫) 五、問題方案 …

基于GNU Radio Companion搭建的BPSK收發通信實驗

目錄 一、實驗目的和要求 二、實驗內容 1.Lab5 仿真設計一個BPSK的數字收發射系統 Lab6 實際使用RTLSDR解調BPSK信號 一、實驗目的和要求 1.了解軟FM的工作方式和原理,數字通信的碼間串擾及星座圖 2.掌握并正確使用RTL-SDL硬件和Gnuradio軟件 3.正確使用Gnraduo軟件,建…

華為OD機試-返回矩陣中非1的元素、個數/數值同化-BFS(JAVA 2025B卷)

import java.util.*;/*** author 308413* version Ver 1.0* date 2025/6/18* description 返回矩陣中非1的元素*/ public class Non1ElementInMatrix {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int N scanner.nextInt();int M scan…

Redis學習筆記——黑馬點評 消息隊列25-30

前言: 學習收獲: Redis消息隊列: 消息隊列(Message Queue),字面意思就是存放消息的隊列。最簡單的消息隊列包括3個角色: 消息隊列:存儲和管理消息,也被稱為消息代理生…

基于Django+Vue3的草莓病害檢測系統設計與實現,Web前后端分離,YOLOv8 Web目標檢測系統

這里寫自定義目錄標題 基于DjangoVue3的草莓病害檢測系統 基于DjangoVue3的草莓病害檢測系統 本項目結合 YOLOv8 與 Django Vue3 ,構建了一個通用的 Web 前后端系統,便于用戶進行目標檢測的操作和展示,實現對圖片、視頻實時目標檢測和攝像頭…

【MFC】樹控件的使用詳解

目錄 添加線條鏈接 添加折疊小按鈕 設置樹控件的節點和對應的圖標 設置默認選中項 設置選中項切換響應函數 涉及接口介紹: 首先我們通過資源視圖可以添加一個樹形控件,如下: 添加線條鏈接 在樹形控件中,有一個屬性“Has…

跨境賣家警報。抽繩背包版權案立案,TRO在即速排查

近日Shenzhenshi Jingyida Trading Co., LTD委托律所Dewitty And Associates, Chtd.對其熱銷的抽繩設計多功能運動背包發起跨境版權維權,保護范圍涵蓋產品外觀設計。 案件基本情況: 起訴時間:2025-6-12 案件號:25-cv-06509 原…

Android Activity全面解析:從創建到生命周期的完整指南

Activity作為Android四大組件之一,是構建用戶界面的核心單元。筆者通過郭霖著的第一行代碼入門安卓,內容基本都取自書中,這篇博客作為筆者的筆記同時精簡了一些書中內容分享在csdn中 一、Activity的創建與基礎配置 1.1 創建Activity的基本步…

深入理解 Python 的 secrets 模塊:打造更安全的隨機數生成機制

深入理解 Python 的 secrets 模塊:打造更安全的隨機數生成機制 在構建涉及用戶身份認證、權限管理、加密通信等系統時,開發者最不能忽視的一個問題就是“安全性”。安全問題的核心之一在于“隨機性”——尤其是密碼、驗證碼、Token、Session、API Key 的…

CHAPTER 19 Concurrency Models in Python

一、A Bit of Jargon 1、關鍵術語解析 1.1 并發 (Concurrency) 定義: 并發是指同時處理多個待處理任務的能力,這些任務可以依次或并行(如果可能)進行,最終每個任務都會成功或失敗。 理解: 單核 CPU: 即使是單核 CPU 也可以實…

DCM4CHEE Archive Light 開發環境部署(5)-IDEA集成調試配置

系列文章目錄 DCM4CHEE Archive light 開發環境部署(1)-前言DCM4CHEE Archive light 開發環境部署(2)-PostgreSQLDCM4CHEE Archive light 開發環境部署(3)-OpenLDAPDCM4CHEE Archive light 開發環境部署(4)-Wildfly(JBoss)DCM4CHEE Archive light 開發環境部署(5)-IDEA集成…

在rust中執行命令行輸出中文亂碼解決辦法

如果你使用標準的依賴庫執行命令中包含中文的話, 就會發現中文亂碼,如果你的輸出中沒有中文,就可以正常輸出,因為windows的命令行默認使用的是gbk編碼。。。。。 #[tauri::command] pub async fn run_command(command: String) -…