原创 FreeModbus離散量輸入

離散量輸入的訪問屬性爲只讀 對離散量輸入的操作包括:讀離散量輸入(0x02)   在一個遠程設備中,使用該功能碼讀取離散量輸入的1 至2000 連續狀態。請求PDU 詳細說明了起始地址,即指定的第一個輸入地址和輸入編號。從零開始尋址輸入

原创 FreeModbus保持寄存器

保持寄存器的訪問屬性爲讀寫 對保持寄存器的操作包括:讀保持寄存器(0x03)、寫單個保持寄存器(0x06)、寫多個保持寄存器(0x10)、讀寫多個保持寄存器(0x17)   讀保持寄存器(0x03) 在一個遠程設備中,使用該功能碼讀取保

原创 Modbus功能碼

功能碼 名稱 作用 01 讀取線圈狀態 取得一組邏輯線圈的當前狀態(ON/OFF) 02 讀取輸入狀態 取得一組開關輸入的當前狀態(ON/OFF) 03 讀取保持寄存器 在一個或多個保持寄存器

原创 Modbus異常碼

功能碼域 在正常響應中,服務器利用響應功能碼域來應答最初請求的功能碼。所有功能碼的最高有效位(MSB)都爲0(它們的值都低於十六進制80)。在異常響應中,服務器設置功能碼的MSB 爲1。這使得異常響應中的功能碼值比正常響應中的功能碼值高十

原创 FreeModbus初始化

先看一下初始化函數,參數包括傳輸模式、從機地址、端口號、波特率和奇偶校驗。從函數大概能夠猜到,初始化內容:選擇傳輸模式,設置從機地址,配置串口。 /* 初始化Modbus協議棧 */ eMBErrorCode eMBInit(eMBMo

原创 Modbus協議格式

MODBUS 協議定義了一個與基礎通信層無關的簡單協議數據單元(PDU)。特定總線或網絡上 的MODBUS 協議映射能夠在應用數據單元(ADU)上引入一些附加域。 啓動MODBUS 事務處理的客戶機創建MODBUS應用數據單元。功能碼向

原创 FreeModbus源碼獲取

1.進入官網:https://www.embedded-solutions.at/en/freemodbus/ 2.進入下載頁面 3.下載源碼 4.解壓源碼 5.查看FreeRTOS源碼

原创 FreeModbus移植到STM32F103

1.創建工程   2.將FreeModbus源碼,拷貝到工程目錄   3.將FreeModbus文件添加進工程 添加好之後,編譯出現錯誤   4.移植底層接口 先看第一個錯誤,缺少port.h 借鑑AVR架構的程序,將d

原创 Modbus傳輸方式

傳輸方式 在485總線上使用Modbus協議,有兩種主要方式:RTU ASCII。RTU傳輸方式傳輸的數據幀爲二進制數據,ASCII傳輸方式傳輸的是ASCII碼。舉例來說要發送 0x31(十進制數)使用RTU直接發送0x31就可以(佔用一

原创 FreeModbus ASCII傳輸

首先,在使能modbus協議棧的時候,會調用pvMBFrameStartCur函數 /* 使能modbus */ eMBErrorCode eMBEnable(void) { eMBErrorCode eStatus = MB_ENO

原创 FreeModbus RTU傳輸

首先,在使能modbus協議棧的時候,會調用pvMBFrameStartCur函數 /* 使能modbus */ eMBErrorCode eMBEnable(void) { eMBErrorCode eStatus = MB_ENO

原创 CanFestival移植準備工作

CanFestival是一種開源的CANOpen協議棧,可以很容易在網上下載CanFestival-3.10。 objdictedit是CanFestival的字典生成工具,開發過程中使用objdictedit配置CANOpen字典能夠很

原创 CanFestival移植到STM32F103

1.創建工程     2.將CanFestival源碼,拷貝到工程目錄     3.刪除其它架構和編譯器的代碼 查看include文件夾發現沒有cortex-m3架構,因此我們這裏借鑑AVR架構進行修改 將AVR文件夾重命名爲

原创 FreeRTOS協程

FreeRTOS的協程,實際上是線程並發出來的。從協程控制塊中沒有棧空間就能夠知道,每個線程並發出來的協程共用一個棧空間。 /* 協程控制塊 */ typedef struct corCoRoutineControlBlock { c

原创 FreeRTOS任務通知

任務通知可以替代二進制信號量、計數信號量、事件組,可以替代長度爲1的隊列(可以保存一個32位整數或指針值),並且任務通知速度更快、使用的RAM更少。     先看一下任務TCB /* 任務TCB */ typedef struct ts