色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

英創信息技術WinCE下的Modbus設備方協議軟件介紹

英創信息技術 ? 來源:英創信息技術 ? 作者:英創信息技術 ? 2019-11-14 09:45 ? 次閱讀

Modbus協議是一種已廣泛應用于當今工業控制領域的通用通訊協議。通過此協議,控制器相互之間、或控制器經由網絡(如以太網)可以和其它設備之間進行通信。Modbus 協議使用的是主從通訊技術,即由主設備主動查詢和操作從設備。一般將主控設備方所使用的協議稱為Modbus Master,從設備方使用的服務器協議稱為Modbus Slave。典型的主設備包括工控機和工業控制器等;典型的從設備如PLC編程控制器等。Modbus通訊物理接口可以選用串口(包括RS232RS485),也可以選擇以太網口。其通信遵循以下的過程:

·主設備向從設備發送請求;

·從設備分析并處理主設備的請求,然后向主設備發送結果;

·如果出現任何差錯,從設備將返回一個異常功能碼。

英創公司提供的ARM9嵌入式主板系列產品,均帶有豐富的串口、網絡資源、通用GPIO接口等,同時具有強大的處理能力,除了適用于作為Modbus 主設備的開發應用,還可以作為ModBus從設備的開發應用。主控協議軟件在英創的《WinCE下的ModBus主控協議軟件》一文已有介紹, 在本文中主要介紹基于實現ModBus設備方協議的軟件包“WinCE下的ModBus設備方協議軟件”(以下簡稱modbusSlave軟件包)。該軟件的是以C函數加靜態LIB庫的形式提供給客戶。主要特征如下:

·非常適用于實時的工業應用。

·可以支持基于串口的Modbus協議應用或者基于TCP的Modbus協議應用。

·支持RTU傳輸模式。

·支持大多數的Modbus功能碼操作,包括對線圈、離散開關輸入的位操作,以及對寄存器的字節操作。

·可以獲取通訊中傳輸協議的錯誤代碼的詳細信息

作為ModBus服務器,無論是基于串口還是基于TCP,在英創提供的modbusSlave軟件包中,實現了對于ModBus應用報文的分析與響應,這只是ModBus通訊的一部分。另一部分是還需要有對應用數據的訪問,這部分的內容則需要用戶自己來進行定義,為了方便客戶的使用,在modbusSlave軟件包中通過函數指針的形式,實現了這些用戶接口函數的自動加載,將用戶應用數據處理和ModBus應用報文響應關聯起來。用戶只需根據需求定義這些接口函數來實現相應的功能,各個函數具體的定義是通過專門的一個CPP文件:DataProvider.cpp來實現。所以在使用英創的modbusSlave軟件包時,有兩個部分組成,一部分是 modbus_slave.h/ modbus_slave.lib定義的API函數;另一部分是DataProvider.h /DataProvider.cpp定義的用戶數據接口函數,其中接口函數需要用戶在DataProvider.cpp中具體實現。

1、modbusSlave軟件包API函數

為了方便應用程序的使用,對不同的通訊介質保持一致的代碼形式,英創所提供的modbusSlave軟件包的API函數可以同時支持基于串口和TCP的Modbus協議,應用程序只需要在調用初始化函數時,用不同參數區分即可。以下介紹英創modbusSlave軟件包的相關API函數,各個函數的定義如下:

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

功能描述:通過串口或者網絡TCP打開ModBus協議,連接到ModBus設備。對于串口方式,通過該函數打開串口,并設置相應串口的通訊參數,以滿足數據和控制命令的通訊;對于TCP方式,通過該函數和ModBus設備建立基于Socket方式的TCP連接,利用該連接進行數據和控制命令的通訊。

輸入參數 lpPortName:

該參數為TCHAR類型的字符串,該字符串中包含了啟動ModBus協議的需要設置的通訊參數信息。對于串口模式和TCP兩種模式分別采用不同的格式的字符串。

(1) 串口模式:

字符串必須以COM作為開頭,后面再帶上需要設置的串口通訊參數。格式為:

COMIdx:baudRate-dataBits-opBits-parity

其中Idx為串口序號,‘:’ 后為串口通訊參數,各個通訊參數均用整型數據來表示,依次為波特率、數據位、停止位、校驗位,校驗位 0-無校驗 1-奇校驗 2-偶校驗。

如COM3作為通訊的協議口,波特率:9600bps、8為數據位、1個停止位、無校驗。其格式如下:

_T( ‘COM3:9600-8-1-0’ );

也可以直接就用 _T( ‘COM3’ )來表示,表明串口所用的為缺省參數:

波特率 9600bps 數據位 8 停止位 1 無奇偶校驗。

(2) TCP模式:

字符串以IP地址或者”*”作為開頭,‘:’后為指定TCP連接的特殊端口號,ModBus協議中缺省端口為502。如果不需要指定特殊端口,可以不帶此參數。格式如:

_T( ‘192.168.201.178’ )或者_T(“*”),使用端口號為502;

slaveAddr:

ModBus Slave設備地址。

timeout:

設置ModBus協議通訊響應的超時時間,單位為毫秒ms

mbusSlave_Interface:

數據處理函數指針結構,即需要加載ModBus Slave設備響應各個功能的用戶數據處理接口函數。這些用戶接口函數是由用戶自己提供,用戶可以根據選擇的功能來實現。這些函數的名稱和定義是固定的。分別為:

(1) 功能:讀保持寄存器/讀寫寄存器,實現功能碼3、23

int ReadHoldingRegistersTable( int startRef, short regArr[], int refCnt );

(2) 功能:寫寄存器,實現功能碼6、16、22、23

int WriteHoldingRegistersTable( int startRef, const short regArr[], int refCnt );

(3) 功能:讀輸入寄存器,實現功能碼4

int ReadInputRegistersTable( int startRef, short regArr[], int refCnt );

(4) 功能:讀線圈,實現功能碼1

int ReadCoilsTable( int startRef, char bitArr[], int refCnt );

(5) 功能:寫線圈,實現功能碼5、15

int WriteCoilsTable( int startRef, const char bitArr[], int refCnt );

(6) 功能:讀離散量,實現功能碼 2

int ReadInputDiscretesTable( int startRef, char bitArr[], int refCnt );

返回值 = NULL: 啟動ModBus設備失敗。

!= NULL: 啟動ModBus設備成功,并返回相應的操作句柄。

/////////////////////////////////////////////////////////////////////////////////////////////////////////

(1) HANDLE mbusSlave_StartupServer( LPCTSTR lpPortName, int slaveAddr,int timeout, ModBusSlave_Interface mbusSlave_Interface );

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

功能描述: ModBus 服務器執行函數,用于對ModBus報文的分析和響應。

該函數為阻塞模式,阻塞的時間為函數mbusSlave_StartupServer (…)中設置的ModBus協議通訊響應的超時時間 timeout,也相當于等待請求響應的超時時間。實際應用中需要在線程中不斷地調用該函數。

輸入參數

hPort: 啟動ModBus設備后獲取的操作句柄

返回值 0: 相應操作成功

!=0: 錯誤代碼,可調用函數mbusSlave_GetErrorText(…)獲取錯誤的文本信息

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

(2) int mbusSlave_ServerLoop( HANDLE hPort );

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

功能描述: 關閉ModBus服務器應用。

輸入參數

hPort: 啟動ModBus設備后獲取的操作句柄

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

(3) void mbusSlave_ShutdownServer( HANDLE hPort );

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

功能描述: 獲取ModBus軟件包的版本信息。

返回值 : TCHAR類型的字符串,為ModBus軟件包的版本信息。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

(4) TCHAR * mbusSlave_GetPackageVersion( );

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

功能描述: 根據錯誤代碼獲取錯誤文本信息。

返回值 : TCHAR類型的字符串,為錯誤文本信息。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

(5) TCHAR * mbusSlave_GetErrorText( int errCode );

modbus_Slave API調用的使用范例:

1、啟動modbus設備方協議

TCP方式:

hPort = mbusSlave_StartupServer( _T(‘*’), 1, 10000, mbusSlave_Interface );

串口方式:

hPort=mbusSlave_StartupServer( _T(‘COM3:9600-8-1-0’),1,10000,

mbusSlave_Interface );

2、線程中調用Serverloop 響應請求

while( 1 )

{

result = mbusSlave_ServerLoop( hPort );

if( result!=0 ) // 檢查是否返回錯誤

{

// 出錯處理:本例為獲取并打印錯誤代碼的文本信息

wcscpy( szText, mbusSlave_GetErrorText( result ) );

i1 = wcslen( szText );

if( i1》0 )

{

wcstombs( strText, szText, i1 );

printf( ‘ error code: %s!\n’, strText );

}

}

}

2、modbusSlave軟件包用戶接口函數

在DataProvider.h中共定義了6個用戶數據接口函數定義如下:

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

功能描述: 讀保持寄存器/讀寫寄存器,實現功能碼3、23

輸入參數

startRef: 寄存器的起始地址,范圍:1-0x10000

regArr: 讀取寄存器的值

refCnt: 需要讀取的寄存器數目,范圍:1-125

返回值

=1:操作成功

=0:不支持該項操作

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

(1) int ReadHoldingRegistersTable( int startRef, short regArr[], int refCnt );

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

功能描述: 寫寄存器,實現功能碼6、16、22、23

輸入參數

startRef: 寄存器的起始地址,范圍:1-0x10000

regArr: 寫寄存器的值

refCnt: 需要操作的寄存器數目,范圍:1-125

返回值

=1:操作成功

=0:不支持該項操作

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

(2) int WriteHoldingRegistersTable( int startRef, const short regArr[], int refCnt );

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

功能描述: 讀輸入寄存器,實現功能碼4

輸入參數

startRef: 寄存器的起始地址,范圍:1-0x10000

regArr: 讀取寄存器的值

refCnt: 需要讀取的寄存器數目,范圍:1-125

返回值

=1:操作成功

=0:不支持該項操作

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

(3) int ReadInputRegistersTable ( int startRef, short regArr[], int refCnt );

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

功能描述: 讀線圈,實現功能碼1

輸入參數

startRef: 寄存器的起始地址,范圍:1-0x10000

bitArr: 讀取線圈的值

refCnt: 需要讀取的線圈數目,范圍:1-2000

返回值

=1:操作成功

=0:不支持該項操作

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

(4) int ReadCoilsTable( int startRef, char bitArr[], int refCnt );

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

功能描述: 寫線圈,實現功能碼5、15

輸入參數

startRef: 寄存器的起始地址,范圍:1-0x10000

bitArr: 寫線圈的值

refCnt: 需要操作的線圈數目,范圍:1-2000

返回值

=1:操作成功

=0:不支持該項操作

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

(5) int WriteCoilsTable( int startRef, const char bitArr[], int refCnt );

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

功能描述: 讀離散量,實現功能碼 2

輸入參數

startRef: 寄存器的起始地址,范圍:1-0x10000

bitArr: 讀取離散量的值

refCnt: 需要讀取的離散量數目,范圍:1-2000

返回值

=1:操作成功

=0:不支持該項操作

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

(6) int ReadInputDiscretesTable( int startRef, char bitArr[], int refCnt );

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

    關注

    7

    文章

    6086

    瀏覽量

    35522
收藏 人收藏

    評論

    相關推薦

    主板中預裝Modbus通訊協議

    modbus_Master.h,與原來的靜態庫保持不變,相應各個API函數的說明請參見網站技術天地文章《Wince
    發表于 10-20 10:40

    信息技術WinCE工控主板簡介

    公司的ARM9嵌入式工控主板產品系列,均預裝了正版WinCE5.0操作系統。微軟的 WinCE實時多任務操作系統是嵌入式領域的主流操作系統之一,它包括了以TCP/IP為特色的完整網
    的頭像 發表于 11-01 09:29 ?1538次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b><b class='flag-5'>WinCE</b>工控主板簡介

    信息技術ARM9工控主板WinCE應用程序遠程控制應用

    公司推出的ARM9嵌入式工控主板產品系列,均預裝了正版的WinCE5.0操作系統。微軟的WINCE實時多任務操作系統是嵌入式領域的主流操作系統之一,它包括了以TCP/IP為特色的完
    的頭像 發表于 11-04 09:28 ?1781次閱讀

    信息技術WinCEModbus主控通訊協議軟件概述

     Modbus 協議是一種已廣泛應用于當今工業控制領域的通用通訊協議。通過此協議,控制器相互之間、或控制器經由網絡(如以太網)可以和其它設備
    的頭像 發表于 11-14 09:23 ?1979次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b><b class='flag-5'>WinCE</b><b class='flag-5'>下</b>的<b class='flag-5'>Modbus</b>主控通訊<b class='flag-5'>協議</b><b class='flag-5'>軟件</b>概述

    信息技術如何實現WinCE系統中USB設備自動檢測概述

    公司ARM9系列工控主板預裝正版WinCE操作系統,提供標準USB接口,本文介紹如何在應用程序中判斷USB存儲設備的插入和移出操作。
    的頭像 發表于 11-18 09:44 ?1423次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b>如何實現<b class='flag-5'>WinCE</b>系統中USB<b class='flag-5'>設備</b>自動檢測概述

    信息技術WinCE工控主板的數據庫配置簡介

    。由于公司的產品處于不斷發展之中,WinCE也在不斷的發展之中,導致在不同型號的產品中存在配置的數據庫的情況有所不同,本文的主要目的是詳細介紹
    的頭像 發表于 01-14 11:35 ?1510次閱讀

    信息技術主板支持Modbus主控協議軟件

    1、簡述 Modbus 協議是一種已廣泛應用于當今工業控制領域的通用通訊協議。通過此協議,控制器相互之間、或控制器經由網絡(如以太網)可以和其它設備
    的頭像 發表于 01-16 10:35 ?1594次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b>主板支持<b class='flag-5'>Modbus</b>主控<b class='flag-5'>協議</b><b class='flag-5'>軟件</b>

    信息技術WinCE遠程桌面介紹

    的應用程序。但在一些應用場合,可能用戶的最終設備根本就不需要顯示功能,但在開發過程中,又希望能看到顯示界面,以方便調試,這時候就可以利用WinCE的遠程桌面功能了。 EM9280是
    的頭像 發表于 01-16 10:24 ?3000次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b><b class='flag-5'>WinCE</b>遠程桌面<b class='flag-5'>介紹</b>

    信息技術LinuxModbus設備協議軟件介紹

    Modbus協議是一種已廣泛應用于當今工業控制領域的通用通訊協議。通過此協議,控制器相互之間、或控制器經由網絡(如以太網)可以和其它設備之間進行通信。
    的頭像 發表于 01-17 08:47 ?1394次閱讀

    信息技術主板WinCE應用程序的FTP遠程更新介紹

    特色的完整網絡通訊協議,并提供了基于TCP/IP應用協議的服務器程序,如FTP Server、Web Server等等很實用的軟件程序。
    的頭像 發表于 02-03 09:00 ?1529次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b>主板<b class='flag-5'>WinCE</b>應用程序的FTP遠程更新<b class='flag-5'>介紹</b>

    信息技術主板中預裝Modbus通訊協議

    目前公司提供ModBus通訊協議軟件運行于WinCE及Linux環境
    的頭像 發表于 02-06 10:55 ?1346次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b>主板中預裝<b class='flag-5'>Modbus</b>通訊<b class='flag-5'>協議</b>

    信息技術WinCE主板與STM32多功能模塊通訊介紹

    ,STM32F103RCT6通過其USB Device接口與工控主板連接通訊,STM32在WinCE系統中被當做一個串口設備
    的頭像 發表于 02-06 11:12 ?2119次閱讀

    信息技術WinCE6系統CEDB故障分析介紹

    導致的。直到近期,公司通過大量實驗,找到了觸發CEDB故障的原因。本文將介紹我們的實驗結果,為防止CEDB故障,希望客戶注意: 使用WINCE6平臺的客戶,在產品發布時請使用rel
    的頭像 發表于 02-07 10:30 ?1081次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b><b class='flag-5'>WinCE</b>6系統CEDB故障分析<b class='flag-5'>介紹</b>

    信息技術WinCE文件系統測試及故障分析簡介

    WINCE文件系統的偶發故障一直是WINCE系統最為棘手的問題,盡管出現故障的幾率不高,但對設備的穩定運行造成嚴重影響。為了保證基于WinCE的嵌入式系統能穩定可靠運行,
    的頭像 發表于 02-07 11:15 ?1488次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b><b class='flag-5'>WinCE</b>文件系統測試及故障分析簡介

    信息技術ModBus通訊協議軟件包簡介

    使用的是主從通訊技術,即由主設備主動查詢和操作從設備。一般將主控設備所使用的協議稱為
    的頭像 發表于 02-14 09:38 ?2309次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b><b class='flag-5'>ModBus</b>通訊<b class='flag-5'>協議</b><b class='flag-5'>軟件</b>包簡介
    主站蜘蛛池模板: 成人免费在线观看视频| 青柠在线观看免费完整版| 久久99国产视频| 欧美日韩免费看| 亚洲AV福利天堂一区二区三| 伊人影院中文字幕| 丰满人妻熟女色情A片| 精品日产1区2卡三卡麻豆| 蜜桃最新网址| 亚洲国产成人在线视频| 被同桌摸出水来了好爽的视频| 精品久久久无码21P发布| 肉色无边(高h)| 1313久久国产午夜精品理论片 | 双性被疯狂灌满精NP| 秋霞成人午夜鲁丝一区二区三区 | 美美哒高清在线播放8| 亚洲国产精品第一影院在线观看 | 热巴两次用约老师屁股发底线球| 日本国产精品无码一区免费看| 亚洲一区二区影院| 国产短视频精品区| 欧美另类与牲交ZOZOZO| 7m凹凸国产刺激在线视频| 久久国产精品永久网站| 暖暖 免费 日本 高清 在线1 | 亚洲日韩在线天堂一| 最新国自产拍天天更新| 国内一级一级毛片a免费| 久久精品热在线观看30| 亚洲bt区| 国产在线观看香蕉视频| 羞羞麻豆国产精品1区2区3区| 国产成人自拍视频在线观看| 湖南电台在线收听| 亚洲 日韩 欧美 国产专区| 国产精品点击进入在线影院高清| 国产成人高清亚洲一区app| 青娱乐在线一区| 被老头下药玩好爽| 日韩亚洲欧美中文高清在线|