Modbus 協(xié)議是一種已廣泛應(yīng)用于當(dāng)今工業(yè)控制領(lǐng)域的通用通訊協(xié)議。通過(guò)此協(xié)議,控制器相互之間、或控制器經(jīng)由網(wǎng)絡(luò)(如以太網(wǎng))可以和其它設(shè)備之間進(jìn)行通信。Modbus 協(xié)議使用的是主從通訊技術(shù),即由主設(shè)備主動(dòng)查詢和操作從設(shè)備。一般將主控設(shè)備方所使用的協(xié)議稱為Modbus Master,從設(shè)備方使用的協(xié)議稱為Modbus Slave。典型的主設(shè)備包括工控機(jī)和工業(yè)控制器等;典型的從設(shè)備如PLC可編程控制器等。Modbus通訊物理接口可以選用串口(包括RS232和RS485),也可以選擇以太網(wǎng)口。其通信遵循以下的過(guò)程:
1、主設(shè)備向從設(shè)備發(fā)送請(qǐng)求;
2、從設(shè)備分析并處理主設(shè)備的請(qǐng)求,然后向主設(shè)備發(fā)送結(jié)果;
3、如果出現(xiàn)任何差錯(cuò),從設(shè)備將返回一個(gè)異常功能碼。
英創(chuàng)公司提供的ARM9嵌入式主板系列產(chǎn)品,均帶有豐富的串口、網(wǎng)絡(luò)資源,同時(shí)具有強(qiáng)大的處理能力,非常適用于作為Modbus 主設(shè)備的開發(fā)應(yīng)用,為了加快做這類應(yīng)用的開發(fā)速度,英創(chuàng)公司特推出WinCE下的Modbus主控軟件,該軟件的是以C函數(shù)加靜態(tài)LIB庫(kù)的形式提供給客戶。主要特征如下:
·非常適用于實(shí)時(shí)的工業(yè)應(yīng)用,特別可以廣泛應(yīng)用于對(duì)于PLC的控制。
·可以支持基于串口的Modbus 協(xié)議或者基于TCP的Modbus 協(xié)議。
·支持RTU傳輸模式。
·支持大多數(shù)的Modbus功能碼操作,包括對(duì)線圈、離散開關(guān)輸入的位操作,以及對(duì)寄存器的字節(jié)操作。
·支持廣播地址。
·可以獲取通訊中傳輸協(xié)議的錯(cuò)誤代碼的詳細(xì)信息。
為了方便應(yīng)用程序的使用,對(duì)不同的通訊介質(zhì)保持一致的代碼形式,英創(chuàng)所提供的ModBus主控軟件包的API函數(shù)可以同時(shí)支持基于串口和TCP的Modbus Master協(xié)議,應(yīng)用程序只需要在調(diào)用初始化函數(shù)時(shí),用不同參數(shù)區(qū)分即可。有關(guān)Modbus通訊的具體使用方法,請(qǐng)參考Modbus標(biāo)準(zhǔn)文獻(xiàn)以及被控設(shè)備的通訊接口數(shù)據(jù)手冊(cè)。以下介紹英創(chuàng)Modbus主控軟件的相關(guān)API函數(shù),各個(gè)函數(shù)的定義如下:
//////////////////////////////////////////////////////////////////////////////////////////////////////////
描述:通過(guò)串口或者網(wǎng)絡(luò)TCP打開ModBus協(xié)議,連接到ModBus設(shè)備。對(duì)于串口方式,通過(guò)該函數(shù)打開串口,并設(shè)置相應(yīng)串口的通訊參數(shù),以滿足數(shù)據(jù)和控制命令的通訊;對(duì)于TCP方式,通過(guò)該函數(shù)和ModBus設(shè)備建立基于Socket方式的TCP連接,利用該連接進(jìn)行數(shù)據(jù)和控制命令的通訊。
輸入?yún)?shù) lpPortName:
該參數(shù)為TCHAR類型的字符串,該字符串中包含了打開ModBus協(xié)議的需
要設(shè)置的通訊參數(shù)信息。對(duì)于串口模式和TCP兩種模式分別采用不同的格式
的字符串。
(1)串口模式:
字符串必須以COM作為開頭,后面再帶上需要設(shè)置的串口通訊參數(shù)。格式為:
COMIdx:baudRate-dataBits-stopBits-parity
其中Idx為串口序號(hào),‘:’ 后為串口通訊參數(shù),各個(gè)通訊參數(shù)均用整型數(shù)據(jù)來(lái)表示,依次為波特率、數(shù)據(jù)位、停止位、校驗(yàn)位,校驗(yàn)位 0-無(wú)校驗(yàn) 1-奇校驗(yàn) 2-偶校驗(yàn)。
如COM3作為通訊的協(xié)議口,波特率:9600bps、8為數(shù)據(jù)位、1個(gè)停止位、無(wú)校驗(yàn)。其格式如下:
_T( ‘COM3:9600-8-1-0’ );
也可以直接就用 _T( ‘COM3’ )來(lái)表示,表明串口所用的為缺省參數(shù):波特率 9600bps 數(shù)據(jù)位 8 停止位 1 無(wú)奇偶校驗(yàn)。
(2) TCP模式:
字符串以IP地址作為開頭,‘:’后為指定TCP連接的特殊端口號(hào),ModBus協(xié)議中缺省端口為502。如果不需要指定特殊端口,可以不帶此參數(shù)。格式如:
_T( ‘192.168.201.178’ ),使用端口號(hào)為502;
返回值 = NULL: 連接ModBus設(shè)備失敗。
!= NULL: 連接ModBus設(shè)備成功,并返回相應(yīng)的操作句柄。
/////////////////////////////////////////////////////////////////////////////////////////////////////////
(1) HANDLE mbusMaster_OpenPortProtocol( LPCTSTR lpPortName );
////////////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: 關(guān)閉ModBus設(shè)備連接,同時(shí)釋放使用的系統(tǒng)資源。
輸入?yún)?shù) hPort: 連接ModBus設(shè)備返回的有效操作句柄。
返回值 = FALSE: 關(guān)閉操作失敗。
= TRUE: 關(guān)閉操作成功。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
(2) BOOL mbusMaster_ClosePortProtocol( HANDLE hPort );
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: 設(shè)置ModBus通訊的超時(shí)時(shí)間,單位為毫秒。并返回實(shí)際設(shè)置的超時(shí)時(shí)間。
輸入?yún)?shù) hPort: 連接ModBus設(shè)備返回的有效操作句柄。
milliseconds: ModBus通訊超時(shí)時(shí)間,單位為毫秒。
返回值 《 0: 操作失敗。
》 0: 實(shí)際設(shè)置的超時(shí)時(shí)間。
//////////////////////////////////////////////////////////////////////////////////////////////////////////
(3) int mbusMaster_SetTimeout( HANDLE hPort, int milliseconds );
//////////////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: 讀取ModBus從機(jī)設(shè)備的線圈值,實(shí)現(xiàn)ModBus功能碼1。
輸入?yún)?shù) hPort: 連接ModBus設(shè)備返回的有效操作句柄。
slaveAddr: ModBus從機(jī)設(shè)備的地址,地址范圍為: 1~255
startRef: 需要讀取線圈的起始值,其范圍為: 1~0x10000
bitArr: 存放讀取線圈數(shù)據(jù)的數(shù)組
refCnt: 需要讀取的線圈數(shù)量,其范圍為: 1~2000
返回值 != 0: 該功能操作失敗,返回值為相應(yīng)的出錯(cuò)代碼。
= 0: 該功能操作成功。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(4) int mbusMaster_ReadCoils( HANDLE hPort, UCHAR slaveAddr, UINT16 startRef, int bitArr[], UINT16 refCnt);
//////////////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: 讀取ModBus從機(jī)設(shè)備離散量的輸入值,實(shí)現(xiàn)ModBus功能碼2。
輸入?yún)?shù) hPort: 連接ModBus設(shè)備返回的有效操作句柄。
slaveAddr: ModBus從機(jī)設(shè)備的地址,地址范圍為: 1~255
startRef: 需要讀取離散量的起始值,其范圍為: 1~0x10000
bitArr: 存放讀取離散量輸入數(shù)據(jù)的數(shù)組
refCnt: 需要讀取的離散量數(shù)量,其范圍為: 1~2000
返回值 != 0: 該功能操作失敗,返回值為相應(yīng)的出錯(cuò)代碼。
= 0: 該功能操作成功。
////////////////////////////////////////////////////////////////////////////////////////////////////
(5) int mbusMaster_ReadInputDiscretes( HANDLE hPort, UCHAR slaveAddr, UINT16 startRef, int bitArr[], UINT16 refCnt);
///////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: ModBus從機(jī)設(shè)備的單個(gè)線圈的寫入操作,實(shí)現(xiàn)ModBus功能碼5。
輸入?yún)?shù) hPort: 連接ModBus設(shè)備返回的有效操作句柄。
slaveAddr: ModBus從機(jī)設(shè)備的地址,地址范圍為: 1~255
bitAddr: 需要操作的線圈地址,其范圍為: 1~0x10000
bitVal: 寫入線圈的值, 1-置位(ON) 0-清(OFF)
返回值 != 0: 該功能操作失敗,返回值為相應(yīng)的出錯(cuò)代碼。
= 0: 該功能操作成功。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(6) int mbusMaster_WriteCoil( HANDLE hPort, UCHAR slaveAddr, UINT16 bitAddr, int bitVal );
//////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: ModBus從機(jī)設(shè)備的多個(gè)線圈的寫入操作,實(shí)現(xiàn)ModBus功能碼15。
輸入?yún)?shù) hPort: 連接ModBus設(shè)備返回的有效操作句柄。
slaveAddr: ModBus從機(jī)設(shè)備的地址,地址范圍為: 1~255
startRef: 需要設(shè)置的線圈起始值,其范圍為: 1~0x10000
bitArr: 需要設(shè)置線圈數(shù)據(jù)的數(shù)組
refCnt: 需要設(shè)置的線圈數(shù)量,其范圍為: 1~800
返回值 != 0: 該功能操作失敗,返回值為相應(yīng)的出錯(cuò)代碼。
= 0: 該功能操作成功。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(7) int mbusMaster_ForceMultipleCoils( HANDLE hPort, UCHAR slaveAddr, UINT16 startRef, int bitArr[], UINT16 refCnt);
/////////////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: 讀取ModBus從機(jī)設(shè)備多個(gè)寄存器值,實(shí)現(xiàn)ModBus功能碼3。
輸入?yún)?shù) hPort: 連接ModBus設(shè)備返回的有效操作句柄。
slaveAddr: ModBus從機(jī)設(shè)備的地址,地址范圍為: 1~255
startRef: 需要讀取寄存器的起始值,其范圍為: 1~0x10000
regArr: 存放讀取寄存器值的數(shù)組
refCnt: 需要讀取的寄存器數(shù)量,其范圍為: 1~125
返回值 != 0: 該功能操作失敗,返回值為相應(yīng)的出錯(cuò)代碼。
= 0: 該功能操作成功。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(8) int mbusMaster_ReadMultipleRegisters( HANDLE hPort, UCHAR slaveAddr, UINT16 startRef, UINT16 regArr[], UINT16 refCnt );
////////////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: 讀取ModBus從機(jī)設(shè)備輸入寄存器值,實(shí)現(xiàn)ModBus功能碼4。
輸入?yún)?shù) hPort: 連接ModBus設(shè)備返回的有效操作句柄。
slaveAddr: ModBus從機(jī)設(shè)備的地址,地址范圍為: 1~255
startRef: 需要讀取輸入寄存器的起始值,其范圍為: 1~0x10000
regArr: 存放讀取輸入寄存器值的數(shù)組
refCnt: 需要讀取的輸入寄存器數(shù)量,其范圍為: 1~125
返回值 != 0: 該功能操作失敗,返回值為相應(yīng)的出錯(cuò)代碼。
= 0: 該功能操作成功。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(9) int mbusMaster_ReadInputRegisters( HANDLE hPort, UCHAR slaveAddr, UINT16 startRef, UINT16 regArr[], UINT16 refCnt);
//////////////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: ModBus從機(jī)設(shè)備多個(gè)寄存器的寫操作,實(shí)現(xiàn)ModBus功能碼16。
輸入?yún)?shù) hPort: 連接ModBus設(shè)備返回的有效操作句柄。
slaveAddr: ModBus從機(jī)設(shè)備的地址,地址范圍為: 1~255
startRef: 需要讀取寄存器的起始值,其范圍為: 1~0x10000
regArr: 需寫入寄存器值的數(shù)組
refCnt: 需要操作的寄存器數(shù)量,其范圍為: 1~100
返回值 != 0: 該功能操作失敗,返回值為相應(yīng)的出錯(cuò)代碼。
= 0: 該功能操作成功。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(10) int mbusMaster_WriteMultipleRegisters( HANDLE hPort, UCHAR slaveAddr, UINT16 startRef, UINT16 regArr[], UINT16 refCnt);
/////////////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: 對(duì)ModBus從機(jī)設(shè)備單個(gè)寄存器的寫操作,實(shí)現(xiàn)ModBus功能碼6。
輸入?yún)?shù) hPort: 連接ModBus設(shè)備返回的有效操作句柄。
slaveAddr: ModBus從機(jī)設(shè)備的地址,地址范圍為: 1~255
regAddr: 需要操作寄存器的地址,其范圍為: 1~0x10000
regVal: 需寫入寄存器的值
返回值 != 0: 該功能操作失敗,返回值為相應(yīng)的出錯(cuò)代碼。
= 0: 該功能操作成功。
//////////////////////////////////////////////////////////////////////////////////////////////////////////
(11) int mbusMaster_WriteSingleRegister( HANDLE hPort, UCHAR slaveAddr, UINT16 regAddr, UINT16 regVal );
//////////////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: 對(duì)ModBus從機(jī)設(shè)備屏蔽寫寄存器,實(shí)現(xiàn)ModBus功能碼22。
輸入?yún)?shù) hPort: 連接ModBus設(shè)備返回的有效操作句柄。
slaveAddr: ModBus從機(jī)設(shè)備的地址,地址范圍為: 1~255
regAddr: 需要操作寄存器的地址,其范圍為: 1~0x10000
andMask: 屏蔽寫與數(shù)據(jù)
orMask: 屏蔽寫或數(shù)據(jù)
返回值 != 0: 該功能操作失敗,返回值為相應(yīng)的出錯(cuò)代碼。
= 0: 該功能操作成功。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
(12) int mbusMaster_MaskWriteRegister( HANDLE hPort, UCHAR slaveAddr, UINT16 regAddr, UINT16 andMask, UINT16 orMask);
////////////////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: 對(duì)ModBus從機(jī)設(shè)備讀寫多個(gè)寄存器操作,實(shí)現(xiàn)ModBus功能碼23。
輸入?yún)?shù) hPort: 連接ModBus設(shè)備返回的有效操作句柄。
slaveAddr: ModBus從機(jī)設(shè)備的地址,地址范圍為: 1~255
readRef: 需要讀取多個(gè)寄存器的起始值,其范圍為: 1~0x10000
readArr: 存放讀取寄存器值的數(shù)組
readCnt: 需要讀取的寄存器數(shù)量,其范圍為: 1~125
writeRef: 需要寫入多個(gè)寄存器的起始值,其范圍為: 1~0x10000
writeArr: 寫入寄存器值的數(shù)組
writeCnt: 需要寫入的寄存器數(shù)量,其范圍為: 1~125
返回值 != 0: 該功能操作失敗,返回值為相應(yīng)的出錯(cuò)代碼。
= 0: 該功能操作成功。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(13) int mbusMaster_ReadWriteRegisters( HANDLE hPort, UCHAR slaveAddr, UINT16 readRef, UINT16 readArr[],UINT16 readCnt,UINT16 writeRef,
UINT16 writeArr[], UINT16 writeCnt);
///////////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: 獲取ModBus軟件包的版本信息。
返回值 : TCHAR類型的字符串,為ModBus軟件包的版本信息。
//////////////////////////////////////////////////////////////////////////////////////////////////////
(14) TCHAR * mbusMaster_GetPackageVersion( );
/////////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: 根據(jù)錯(cuò)誤代碼獲取錯(cuò)誤文本信息。
返回值 : TCHAR類型的字符串,為錯(cuò)誤文本信息。
/////////////////////////////////////////////////////////////////////////////////////////////////////
(15) TCHAR * mbusMaster_GetErrorText( int errCode );
-
嵌入式主板
+關(guān)注
關(guān)注
7文章
6086瀏覽量
35639
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
在英創(chuàng)主板中預(yù)裝Modbus通訊協(xié)議
英創(chuàng)信息技術(shù)WinCE系統(tǒng)多串口擴(kuò)展方案簡(jiǎn)介
![<b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b><b class='flag-5'>WinCE</b>系統(tǒng)多串口擴(kuò)展方案簡(jiǎn)介](https://file.elecfans.com/web1/M00/A7/DB/o4YBAF2KEUeANXtvAAEMblCcc2o268.jpg)
英創(chuàng)信息技術(shù)WinCE工控主板簡(jiǎn)介
![<b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b><b class='flag-5'>WinCE</b>工控主板簡(jiǎn)介](https://file.elecfans.com/web1/M00/A8/2F/pIYBAF2KEe2AGpyzAAChEfwbiYY458.jpg)
英創(chuàng)信息技術(shù)ARM9工控主板WinCE應(yīng)用程序遠(yuǎn)程控制應(yīng)用
英創(chuàng)信息技術(shù)WinCE下的Modbus設(shè)備方協(xié)議軟件介紹
英創(chuàng)信息技術(shù)如何實(shí)現(xiàn)WinCE系統(tǒng)中USB設(shè)備自動(dòng)檢測(cè)概述
![<b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b>如何實(shí)現(xiàn)<b class='flag-5'>WinCE</b>系統(tǒng)中USB設(shè)備自動(dòng)檢測(cè)<b class='flag-5'>概述</b>](https://file.elecfans.com/web1/M00/AE/0A/pIYBAF3R99qAdYruAARpDGhFSdI239.png)
英創(chuàng)信息技術(shù)WinCE工控主板的數(shù)據(jù)庫(kù)配置簡(jiǎn)介
英創(chuàng)信息技術(shù)主板支持Modbus主控協(xié)議軟件
![<b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b>主板支持<b class='flag-5'>Modbus</b><b class='flag-5'>主控</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>軟件</b>](https://file.elecfans.com/web1/M00/B3/54/o4YBAF4fwR-ASy_OAAD2xYhFYlA155.png)
英創(chuàng)信息技術(shù)WinCE遠(yuǎn)程桌面介紹
![<b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b><b class='flag-5'>WinCE</b>遠(yuǎn)程桌面介紹](https://file.elecfans.com/web1/M00/A7/DF/o4YBAF2KErOAAgl0AABLYJXRYm0326.gif)
英創(chuàng)信息技術(shù)Linux下的Modbus設(shè)備方協(xié)議軟件介紹
英創(chuàng)信息技術(shù)主板WinCE應(yīng)用程序的FTP遠(yuǎn)程更新介紹
![<b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b>主板<b class='flag-5'>WinCE</b>應(yīng)用程序的FTP遠(yuǎn)程更新介紹](https://file.elecfans.com/web1/M00/B3/D4/pIYBAF43cJ-ALY7OAAAGn4vrrqA278.png)
英創(chuàng)信息技術(shù)WinCE主板與STM32多功能模塊通訊介紹
英創(chuàng)信息技術(shù)WinCE文件系統(tǒng)測(cè)試及故障分析簡(jiǎn)介
![<b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b><b class='flag-5'>WinCE</b>文件系統(tǒng)測(cè)試及故障分析簡(jiǎn)介](https://file.elecfans.com/web1/M00/B3/96/o4YBAF481mqASNYGAASSscaFtmc840.png)
英創(chuàng)信息技術(shù)ModBus通訊協(xié)議軟件包簡(jiǎn)介
![<b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b><b class='flag-5'>ModBus</b><b class='flag-5'>通訊</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>軟件</b>包簡(jiǎn)介](https://file.elecfans.com/web1/M00/B3/BF/o4YBAF5F-gqAUvfJAADWlPRmmcc571.png)
評(píng)論