FreeModbus串行传输初始化
生活随笔
收集整理的這篇文章主要介紹了
FreeModbus串行传输初始化
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
先看一下初始化函數(shù),參數(shù)包括傳輸模式、從機(jī)地址、端口號(hào)、波特率和奇偶校驗(yàn)。從函數(shù)大概能夠猜到,初始化內(nèi)容:選擇傳輸模式,設(shè)置從機(jī)地址,配置串口。
/* 初始化Modbus協(xié)議棧 */ eMBErrorCode eMBInit(eMBMode eMode, UCHAR ucSlaveAddress, UCHAR ucPort, ULONG ulBaudRate, eMBParity eParity);?
先了解一下modbus的地址規(guī)則
所以,從機(jī)地址必須在1~247之間
?
在485總線(xiàn)上使用Modbus協(xié)議,有兩種主要方式:RTU ASCII。在使用過(guò)程中,只能選擇其中一種傳輸模式。
?
Modbus RTU初始化,大概內(nèi)容包括:串口初始化、超時(shí)定時(shí)器初始化
/* modbus rtu初始化 */ eMBErrorCode eMBRTUInit(UCHAR ucSlaveAddress, UCHAR ucPort, ULONG ulBaudRate, eMBParity eParity) {eMBErrorCode eStatus = MB_ENOERR;ULONG usTimerT35_50us;(void)ucSlaveAddress;ENTER_CRITICAL_SECTION();/* 串口初始化,失敗 */if(xMBPortSerialInit(ucPort, ulBaudRate, 8, eParity) != TRUE){/* 端口層錯(cuò)誤 */eStatus = MB_EPORTERR;}/* 初始化成功 */else{/* 波特率大于19200 */if(ulBaudRate > 19200){/* 超時(shí)時(shí)間為35*50=1050us */usTimerT35_50us = 35;}/* 波特率小于等于19200 */else{/* 3.5幀為超時(shí)時(shí)間 */usTimerT35_50us = (7UL * 220000UL) / (2UL * ulBaudRate);}/* 超時(shí)定時(shí)器初始化 */if(xMBPortTimersInit((USHORT)usTimerT35_50us) != TRUE){/* 端口層錯(cuò)誤 */eStatus = MB_EPORTERR;}}EXIT_CRITICAL_SECTION();return eStatus; }特別要注意的是,串口數(shù)據(jù)位固定為8位,超時(shí)時(shí)間固定為3.5幀。這兩個(gè)參數(shù)是modbus規(guī)定死的。
?
Modbus ASCII初始化,大概內(nèi)容包括:串口初始化、超時(shí)定時(shí)器初始化
/* modbus ascii初始化 */ eMBErrorCode eMBASCIIInit(UCHAR ucSlaveAddress, UCHAR ucPort, ULONG ulBaudRate, eMBParity eParity) {eMBErrorCode eStatus = MB_ENOERR;(void)ucSlaveAddress;ENTER_CRITICAL_SECTION();ucMBLFCharacter = MB_ASCII_DEFAULT_LF;/* 串口初始化,失敗 */if(xMBPortSerialInit(ucPort, ulBaudRate, 7, eParity) != TRUE){/* 端口層錯(cuò)誤 */eStatus = MB_EPORTERR;}/* 超時(shí)定時(shí)器初始化,超時(shí)時(shí)間1秒 */else if(xMBPortTimersInit(MB_ASCII_TIMEOUT_SEC * 20000UL) != TRUE){/* 端口層錯(cuò)誤 */eStatus = MB_EPORTERR;}EXIT_CRITICAL_SECTION();return eStatus; }特別要注意的是,串口數(shù)據(jù)位固定為7位,超時(shí)時(shí)間固定為1秒。這兩個(gè)參數(shù)是modbus規(guī)定死的。
新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!總結(jié)
以上是生活随笔為你收集整理的FreeModbus串行传输初始化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数字逻辑概论
- 下一篇: 跟2G说再见?这些IoT“钉子户”表示做