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

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

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

3天內不再提示

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

英創信息技術 ? 來源:英創信息技術 ? 作者:英創信息技術 ? 2020-01-17 08:47 ? 次閱讀

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

? 主設備向從設備發送請求;
? 從設備分析并處理主設備的請求,然后向主設備發送結果;
? 如果出現任何差錯,從設備將返回一個異常功能碼。

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

? 非常適用于實時的工業應用。
? 可以支持基于串口的Modbus協議應用或者基于TCP的Modbus協議應用。
? 支持RTU傳輸模式。
? 支持大多數的Modbus功能碼操作,包括對線圈、離散開關輸入的位操作,以及對寄存器的字節操作。
? 可以獲取通訊中傳輸協議的錯誤代碼的詳細信息

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

一、mbusslave軟件包API函數

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

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

功能描述:

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

輸入參數 pPortName:

該參數為char類型的字符串,該字符串中包含了啟動ModBus協議的需要設置的通訊參數信息。對于串口模式和TCP兩種模式分別采用不同的格式的字符串。
(1) 串口模式:
字符串必須以ttyS作為開頭,后面再帶上需要設置的串口通訊參數。格式為: ttySIdx:baudRate-dataBits-stopBits-parity
其中Idx為串口序號,':' 后為串口通訊參數,各個通訊參數均用整型數據來表示,依次為波特率、數據位、停止位、校驗位,校驗位 0-無校驗 1-奇校驗 2-偶校驗。
如ttyS2作為通訊的協議口,波特率:9600bps、8為數據位、1個停止位、無校驗。其格式如下:'ttyS2:9600-8-1-0' ;

也可以直接就用 'ttyS2' 來表示,表明串口所用的為缺省參數:波特率 9600bps 數據位 8 停止位 1 無奇偶校驗。
(2) TCP模式:
字符串以IP地址或者”*”作為開頭,':'后為指定TCP連接的特殊端口號,ModBus協議中缺省端口為502。如果不需要指定特殊端口,可以不帶此參數。格式如:'192.168.201.178' 或者“*”,使用端口號為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( char* pPortName, 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軟件包的版本信息。
返回值 : ModBus軟件包的版本信息。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(4) char * mbusSlave_GetPackageVersion( );


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
功能描述: 根據錯誤代碼獲取錯誤文本信息。
返回值 :錯誤文本信息。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(5) char * mbusSlave_GetErrorText( int errCode );
modbus_Slave API調用的使用范例:

1、啟動modbus設備方協議

TCP方式:

hPort = mbusSlave_StartupServer( '*', 1, 10000, mbusSlave_Interface );
串口方式:
hPort=mbusSlave_StartupServer( 'ttyS2:9600-8-1-0',1,10000, mbusSlave_Interface );
2、線程中調用Serverloop 響應請求
while( 1 )
{
result = mbusSlave_ServerLoop( hPort );
if( result!=0 ) // 檢查是否返回錯誤
{
// 出錯處理:本例為獲取并打印錯誤代碼的文本信息
strcpy( strText, mbusSlave_GetErrorText( result ) );
i1 = strlen( strText );
if( i1>0 )
{
printf( ' error code: %s!\n', strText );
}
}
}

二、mbusslave軟件包用戶接口函數

在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 );

英創現有的Linux工控主板均可支持該協議軟件,感興趣的客戶向公司索取相關的測試代碼。

相關閱讀:英創嵌入式Linux工控主板支持Modbus主控協議軟件

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

    關注

    87

    文章

    11312

    瀏覽量

    209696
  • 嵌入式主板
    +關注

    關注

    7

    文章

    6085

    瀏覽量

    35396
收藏 人收藏

    評論

    相關推薦

    科技獲評2024年度軟件信息技術服務競爭力百強企業

    近期,中國電子信息行業聯合會發布《2024年度軟件信息技術服務競爭力百強企業》(即“中國軟件百強企業”),千科技憑借在
    的頭像 發表于 12-11 16:09 ?188次閱讀

    中科達榮獲2024年軟件信息技術服務優秀企業

    及前百家企業”名單。中科達憑借非凡的技術實力與持續的創新能力,成功入選“2024年度軟件信息技術服務競爭力百強企業”以及“2024年軟件
    的頭像 發表于 10-30 11:44 ?497次閱讀

    智能工廠升級:Modbus設備與OPC UA協議的無縫對接

    本文將帶你了解OPCUA協議,并探討其在未來智能制造中的趨勢。同時,我們還介紹如何快速方便地將Modbus設備接入到OPCUA協議通訊,實現
    的頭像 發表于 10-17 08:04 ?447次閱讀
    智能工廠升級:<b class='flag-5'>Modbus</b><b class='flag-5'>設備</b>與OPC UA<b class='flag-5'>協議</b>的無縫對接

    Modbus協議網關簡介

    ,在工業控制系統中占據了重要地位。然而,隨著工業自動化技術的不斷發展,不同設備間通信協議的多樣性成為了一個亟待解決的問題。Modbus協議網關作為這一背景
    的頭像 發表于 09-23 14:51 ?266次閱讀
    <b class='flag-5'>Modbus協議</b>網關簡介

    Modbus、樓宇自控、電力協議Modbus協議網關BL120ML實現不同協議設備之間的數據互通

    Modbus、樓宇自控、電力協議Modbus協議網關BL120ML是鋇錸技術專為滿足工業級苛刻環境條件多種
    的頭像 發表于 08-10 10:37 ?329次閱讀
    <b class='flag-5'>Modbus</b>、樓宇自控、電力<b class='flag-5'>協議</b>轉<b class='flag-5'>Modbus協議</b>網關BL120ML實現不同<b class='flag-5'>協議</b><b class='flag-5'>設備</b>之間的數據互通

    實現工業設備與ThingWorx無縫對接:Modbus轉OPC UA協議網關的應用

    隨著智能制造的不斷演進,將這些傳統設備與現代自動化軟件如ThingWorx高效集成,已成為技術發展的重要課題。本文將探討如何利用Modbus轉OPC UA
    的頭像 發表于 08-09 17:14 ?366次閱讀
    實現工業<b class='flag-5'>設備</b>與ThingWorx無縫對接:<b class='flag-5'>Modbus</b>轉OPC UA<b class='flag-5'>協議</b>網關的應用

    使用MODBUS協議、樓宇自控系統、電力協議Modbus協議網關來集成樓宇內的溫濕度傳感器設備

    在現代建筑管理中,實現樓宇環境的自動化控制是降低能耗、增強管理效率的關鍵。本文將詳細介紹如何使用MODBUS協議、樓宇自控系統、電力協議Modbus協議網關來集成樓宇內的溫濕度傳感器
    的頭像 發表于 08-08 17:31 ?348次閱讀
    使用<b class='flag-5'>MODBUS協議</b>、樓宇自控系統、電力<b class='flag-5'>協議</b>轉<b class='flag-5'>Modbus協議</b>網關來集成樓宇內的溫濕度傳感器<b class='flag-5'>設備</b>

    使用Modbus、樓宇自控、電力協議Modbus協議網關實現生產設備的遠程監控和管理

    對不同協議設備的可靠數據采集;上行轉發協議方面支持Modbus RTU和Modbus TCP,為用戶提供靈活的上行通信選擇,實現不同
    的頭像 發表于 08-08 17:29 ?392次閱讀
    使用<b class='flag-5'>Modbus</b>、樓宇自控、電力<b class='flag-5'>協議</b>轉<b class='flag-5'>Modbus協議</b>網關實現生產<b class='flag-5'>設備</b>的遠程監控和管理

    ModBus Scan32模擬軟件的使用方法

    的一款軟件,下面介紹其使用方法。 ModScan32用來模擬主設備。它可以發送指令到從機設備(使用
    發表于 07-24 08:04

    Modbus轉Profinet協議轉化網關

    怎么樣把Modbus與Profinet連接起來呢?最近有很多客戶朋友咨詢這個問題,在這里為大家詳細說明一。其實有一個設備可以很輕松地解決這個問題,名為YC-MDPN-001,下面是詳細信息
    的頭像 發表于 07-22 14:25 ?284次閱讀
    <b class='flag-5'>Modbus</b>轉Profinet<b class='flag-5'>協議</b>轉化網關

    鋇錸網關設備Modbus?轉 Profinet協議

    Modbus?轉換為 Profinet?是一種常用的工業通信協議轉換技術,旨在實現不同工業設備之間的互聯互通,允許不同類型的工業設備通過網絡
    的頭像 發表于 07-12 11:44 ?476次閱讀
    鋇錸網關<b class='flag-5'>設備</b>:<b class='flag-5'>Modbus</b>?轉 Profinet<b class='flag-5'>協議</b>

    Modbus協議的工作原理、優缺點及應用

    在當今工業物聯網(IIoT)的浪潮中,Modbus協議無疑是連接傳統工業設備與現代信息技術的橋梁。作為一位工業物聯網的資深工程師,我深感有責任向傳統行業解釋這一重要協議的工作原理、優缺
    的頭像 發表于 05-21 17:06 ?1417次閱讀
    <b class='flag-5'>Modbus協議</b>的工作原理、優缺點及應用

    簡單介紹Modbus RTU協議

    介紹modbus rtu之前,我們可以了解到,Modbus是施耐德電氣公司,于1979年發明的,是全球第一個真正用于工業現場的總線協議
    的頭像 發表于 05-09 09:13 ?2547次閱讀
    簡單<b class='flag-5'>介紹</b><b class='flag-5'>Modbus</b> RTU<b class='flag-5'>協議</b>

    Modbus協議網關是什么?Modbus協議網關的功能

    Modbus協議網關是一種專門用于工業自動化環境中的網絡設備,其主要功能是實現不同通信協議之間的轉換,尤其是將基于Modbus協議設備或系
    的頭像 發表于 04-11 15:51 ?757次閱讀

    軟通動力與捷技術簽訂戰略合作協議

    近日,軟通動力信息技術(集團)股份有限公司(以下簡稱“軟通動力”)與寧波捷技術股份有限公司(以下簡稱“捷技術”)正式簽訂戰略合作
    的頭像 發表于 02-03 16:35 ?1123次閱讀
    主站蜘蛛池模板: 一个人的免费完整在线观看HD| 99re在线播放| 国产 亚洲 中文在线 字幕| 偷偷鲁青春草原视频| 国产亚洲精品品视频在线| 亚洲日本天堂在线| 男人J桶进男人屁股过程| 成人免费在线观看| 亚洲理论在线a中文字幕| 蜜桃成熟时2在线观看完整版hd| YELLOW视频直播在线观看| 无码一区二区在线欧洲| 久久精品国产福利电影网| WWW婷婷AV久久久影片| 亚洲精品久久久久久蜜臀| 蜜柚视频高清在线| 国产乱人精品视频AV麻豆| 777福彩社区| 校园刺激全黄H全肉细节文| 蜜臀AV精品久久无码99| 国产偷窥盗摄一区二区| 9久久免费国产精品特黄| 亚洲AV无码专区国产乱码网站 | 少妇精油按摩| 久久蜜视频| 国产精品1区2区| 99久久就热视频精品草| 亚洲电影网址| 日本高清无人区影院| 久久久久国产| 国产精品日本不卡一区二区| 2021国产精品视频| 新妺妺窝人体色WWW| 欧美亚洲日本日韩在线| 久久大综合| 国产毛多水多高潮高清| av老司机色爱区综合| 伊人久久综合| 亚欧免费观看在线观看更新| 青草久久伊人| 男女生爽爽爽视频免费观看|