袁福營,史智興(等)
摘要:將Modbus協議應用到農業信息化領域,設計了一種基于Modbus協議的嵌入式農田信息采集服務器。分析了Modbus協議,設計了系統各模塊之間的數據通信接口,ARM服務器與應用層采用Modbus/TCP通信完成用戶的查詢,ARM服務器與數據采集層采用Modbus串口通信進行數據的存儲,提出了Modbus/TCP幀與串行鏈路RTU幀的轉換方法,實現了應用層與數據采集層的實時通信,提高了系統的有效性和可靠性。
關鍵詞:現代農業;嵌入式服務器;農田信息采集;Modbus
中圖分類號:TP274 文獻標識碼:A 文章編號:0439-8114(2014)07-1667-04
Modbus Protocol Based Designs of ARM Farmland Server
YUAN Fu-ying,SHI Zhi-xing,JING Li-wei,ZHANG Yi-jun
(College of Information Science and Technology, Agricultural University of Hebei, Baoding 071000, Hebei, China)
Abstract: Modbus protocol was applied in the farmland information collection system and a preliminary design of an embedded farmland information collection server based on Modbus protocol was presented. ARM server using Modbus/TCP to communicate with the application layer for completing the users query, and ARM server using seriallink to communicate with data acquisition layer for data storage were analyzed. The conversion of Modbus/TCP frame with serial link RTU frame was proposed to realize the communication for the application layer and the data acquisition layer. The design improved the effectiveness and reliability of the system.
Key words: modern agriculture; embedded server; farmland information acquisition; Modbus
隨著現代農業的推動,信息技術正在迅速滲透到農業的各個領域。采用農業信息化技術,對大田種植、設施園藝和水產養殖等農業生產的各種要素進行信息采集,進一步實行數字化設計、智能化控制、科學化管理,大大提高了農業生產的標準化、自動化、產業化,促進了農業生產的高產、高效、生態和安全。信息采集技術成為了實現農業信息化的必不可少的前提。
在工業自動化領域中,控制系統普遍采用Modbus通訊協議[1]。陸晶[2]設計了一種基于Modbus協議的電廠數據采集系統,提高了數據采集的精確性和穩定性。任清娟[3]針對煉鐵廠的高爐渣粒化工廠,采用Modbus通訊協議達到了對現場設備遠程實時監控的目的。林勇堅[4]將Modbus現場總線應用到水處理流程控制工程項目中,解決了傳統現場總線布線量大、傳輸精度低、信號易受干擾等問題。但是Modbus協議在農業信息化領域的應用尚且不足,為此,將Modbus協議應用到農業信息化領域,設計一種基礎Modbus協議的嵌入式農田信息采集服務器。
1 基于Modbus協議ARM農田服務器的整體設計
農田信息采集系統主要包括數據采集層、數據處理控制層、應用層。系統的體系結構如圖1所示。在數據采集層,數據傳感器采集田間CO2濃度、空氣濕度、光照度等田間參數,經過一系列數據處理之后將采集的數據信息匯總通過串口RS485上傳至數據處理控制層。服務器接收到田間信息數據,進行存儲。客戶端可通過瀏覽器訪問服務器瀏覽田間信息,也可采用C/S的Windows客戶端訪問服務器讀取田間信息。
2 服務器到應用層的通信
設計的ARM服務器使用Linux系統采用Modbus協議,服務器與客戶端通信采用Modbus/TCP,服務器與數據采集層通信采用Modbus串口。Modbus/TCP是可靠連接,保證了客戶端與服務器的有效實時通信。服務器與數據采集層通過串口通信,故可將ARM服務器放置于田間,解決了傳統服務器必須放置于室內的問題。
Modbus屬于應用層報文傳輸協議,用于不同類型的總線或網絡連接的設備之間的客戶端/服務器通信[5]。數據通訊采用一對多的主從查詢模式。主站可以單獨與從機通信,也可以廣播方式和所有從站通信。主站以廣播方式查詢,則從站不做出回應[6]。Modbus/TCP采用以太網技術(IEEE802.3)以一種簡單的方式將Modbus幀嵌入到TCP/IP協議幀中,在物理層傳輸[7]。Modbus/TCP在TCP/IP上使用專用MBAP報文頭,MBAP報文頭包括傳輸標志(Transaction Identifier)、協議標志(Protocol Identifier)、長度域(Length)、單元標志(Unit Identifier)。Protocol Identifier為0時,表明是Modbus協議。Unit Identifier用來定義從站的設備地址。Modbus/TCP是可靠連接,因此在Modbus/TCP中不存在校驗碼。Modbus/TCP數據幀格式如圖2所示。
Modbus有ASCII和RTU兩種串行傳輸方式。ASCII模式通過冒號、回車字符判定數據幀的起始和結束,采用LRC 數據檢驗。消息中的每一個8位字節作為2個ASCII字符傳輸。ASCII幀字符之間的最大間隔為1 s,超過1 s則默認發送錯誤。RTU模式消息中的每一個8位字節含有兩個4位的16進制的字符傳輸,因此在相同的波特率下其具有更高的數據量[8]。RTU 模式中數據以非壓縮 BCD 碼表示,通過時間標記實現數據幀起始判定,采用CRC數據校驗,具有數據吞吐量高、傳輸穩定、通信效率高的優點[9]。此次設計采用了RTU傳輸方式,RTU報文格式如表1所示。
2.1 服務器到應用層的通信實現
Modbus客戶端根據用戶應用向Modbus客戶機接口發送的要求中所包含的參數來建立一個Modbus/TCP請求。Modbus服務器一直處于監聽TCP502端口的狀態,當檢測到有Modbus請求的時候,經過TCP 3次握手連接成功。服務器接收到Modbus請求幀之后,首先進行幀解析,完成事務處理,然后向用戶發送返回幀。Modbus服務器處理的事件主要有:等待Modbus/TCP連接、接收請求幀、處理應答、處理差錯等。Modbus服務器與客戶端通信流程如圖3所示。
作為通信服務器端,首先初始化并建立通信socket,bind()本地IP和端口與socket相連,并使用listen方法將其設置為偵聽模式。當Modbus客戶機需要對服務器進行查詢時,首先會向Modbus服務器網關的502端口發起連接請求,服務器監聽到請求與之建立TCP連接后,客戶機發送Modbus/TCP請求幀并等待響應。服務器收到Modbus客戶機的請求幀,首先進行Modbus PDU處理,依次分析處理消息幀結構,根據功能碼進行事務處理,并將事物處理結果封裝成Modbus/TCP應答幀,返回至Modbus客戶機,然后斷開連接等待下一次的連接請求。
程序中最核心的Modbus類的主要方法的聲明如下:
class CModBus
{
public:
void Connect(const char*ip,ushort port);
void ReadHoldingRegistersFun(ushort strAddress,ushortnumInputs);
void WriteMultipleRegistersFun(ushort straddress,int*ptrValue,int nLen);
void WriteSingleRegistersFun(ushort address,ushort Data);
private:
void CreateReadHeader(ushort startReadAddress,ushort lenght,unsigned char function);
void CreateWriteHeader(ushort starAddaress,ushort len,unsigned char function);
void CRCChick(unsigned char*messageDate,int nLen);
void WriteAsyncDate(unsigned char*pWriteDate,int nDataLen);
void TransformParamDateFun(int len,unsigned char*Data);
void TransformControlDateFun(int len,unsigned char*Data);
void RecvReadData();
……}
Modbus類中Connect()實現服務器與客戶端socket的連接,ReadHoldingRegistersFun()用來發送客戶端讀取數據的結果,WriteSingleRegistersFun()、WriteMultipleRegistersFun()分別實現寫單個寄存器和寫多個寄存器。CreateReadHeader()、CreateWriteHeader()分別創建Modbus讀寫寄存器幀的頭部數據,WriteAsyncDate()將數據寫入到socket。TransformControlDateFun()、TransformParamDateFun()轉換讀取控制、參數數據。RecvReadData()從連接套接字中讀取信息。
服務器向客戶端發送回應結果,首先調用ReadHoldingRegistersFun(),通過執行CreateReadWriteHeader()填寫RTU數據幀信息,然后WriteAsyncDate()向緩沖區用SendData發送數據。具體實現程序如下:
void CModBus::ReadHoldingRegistersFun(usho
rt strAddress,ushort numInputs){
CreateReadWriteHeader(strAddress,numInputs,ReadHoldingRegisters);
WriteAsyncDate(SendDate,READ_REGISTERS_HEA
DER_LEN);
}
void CModBus::WriteAsyncDate(unsigned char *pWriteDate,int nDataLen)
{
if(nSocket>0&&nConnect>=0)
{
FD_SET(nSocket,&set);
neSlect=select(nSocket+1,NULL,&set,NULL,&tv);if(neSlect>0)
{
nSend=send(nSocket,(char*)pWriteDate,nDataLen,0);
}
if(nDataLen==READ_REGISTERS_HEAD
ER_LEN)
{
RecvReadData();
}
else
{
RecvWriteReturn();
}
}
FD_ZERO(&set);
}
若客戶端要讀取06號設備起始地址為4的連續2個寄存器,讀取保持寄存器的功能碼function為3。服務器通信結果見圖4。
2.2 Modbus/TCP幀與RTU幀轉換設計
當客戶端需要查詢當前的實時數據,而服務器還未進行存儲,客戶端向服務器發送Modbus/TCP請求幀并等待服務器應答,服務器接收Modbus/TCP請求幀對其進行分析處理,轉化成Modus RTU串行鏈路響應幀并發送到與數據采集層相連的串行鏈路中去,監聽等待數據采集層的應答。若服務器收到串行鏈路上的RTU應答幀,則將該應答幀重新封裝成Modbus/TCP應答幀,發送給客戶端。因此,在服務器端需要進行Modbus/TCP與串行鏈路RTU的轉換。
ModToRtu()函數實現Modbus/TCP幀與串行鏈路RTU幀的轉換功能,轉換過程見圖5。
Modbus/TCP幀與串行鏈路RTU幀相比,增加了MBAP報文,減少了CRC校驗碼。Modbus/TCP轉串行鏈路RTU過程:首先從MBAP報文頭中解析出地址段,并將MBAP的各字段保存。然后從Modbus/TCP幀中分別解析出功能碼和數據段,并計算CRC校驗碼,最后封裝成串行鏈路RTU幀。
串行鏈路RTU幀轉換成Modbus/TCP幀:首先利用已保存MBAP字段重新封裝成MBAP,然后從RTU幀中讀取數據段和功能碼,分別填充到Modbus/TCP幀的數據段和功能碼,封裝成Modbus/TCP幀。
2.3 線程池
在服務器整個工作過程中,系統通過線程與客戶端和與數據采集層進行通信。傳統多線程方案的服務器,多個線程在同一時間內并發運行執行相應的任務[10],采用“及時創建,及時銷毀”的策略。當服務器接收到請求之后創建一個線程,由該線程執行具體任務,任務結束之后線程退出。若大量用戶同時訪問服務器,在短時間內,服務器將處于不停地創建線程、銷毀線程的狀態,容易導致消耗系統內存。因此,系統增加了線程池,大大減少了線程的開銷。
線程池采用預創建技術。程序啟動之后,首先創建一定數量(NUM個)的線程,這些線程處于阻塞狀態,并不消耗CPU。當系統有任務需要執行時,程序喚醒一個空閑線程執行任務。任務完成之后,該線程再次回到阻塞狀態,等待下次任務的到來。在線程池的數量設計上,程序所創建的線程總數不能高于THREAD_MAXNUM,當系統中的空閑線程數量低于THREAD_Max時,程序將創建一些線程,使得空閑線程維持在THREAD_AvailLow之上。當系統中的空閑線程數量高于THREAD_AvailHigh時,線程池會自動銷毀一些線程,保持空閑線程的數量在一個合理的范圍內。
3 服務器到數據采集層的通信
服務器通過串口定期向數據采集層發送RTU請求幀,并等待接收數據采集層的RTU返回幀,將收到的農田信息存儲在數據庫中。
服務器端首先打開串口,調用CreatData()準備要發送的請求數據,執行CreatCRC()生成函數獲取CRC校驗碼,通過CreatRtu()封裝程序組織生成RTU報文,發送RTU信息幀,檢測串口等待返回幀。若等待超過Modbus協議規定的4個字符延時等待時間,則進行超時處理。否則,接收數據采集層的返回幀之后,返回到數據準備階段,繼續檢測串口。服務器端界面采用qt設計,如圖6所示。
4 小結
分析了Modbus協議,將應用在工業控制中的Modbus協議引入到農田信息采集系統,Modbus幀格式簡單、緊湊、高效,同時Modbus/TCP具有實時通信的特點,更適合嵌入式設備,實現遠程數據的交互,從而達到遠程監測的目的。設計了基于Modbus協議的ARM農田信息采集服務器,實現了服務器與應用層、服務器與數據采集層的通信接口,提出了Modbus/TCP幀與串行鏈路RTU幀的轉換方法,增加了線程池完成每一次的通信任務。服務器可訪問數據采集端進行田間信息存儲,客戶端可隨時訪問服務器瀏覽田間信息。但是服務器還存在不足,如何健全服務器功能,發揮Modbus嵌入式服務器的綜合優勢,仍需進一步的研究。
參考文獻:
[1] 劉西廣.用于西門子Insight軟件的Modbus協議通用網關設計[D].成都:電子科技大學,2011.
[2] 陸 晶.基于Modbus的數據采集系統[D].江蘇無錫:江南大學,2011.
[3] 任清娟.基于Modbus和GPRS的高爐渣粒化配電監控系統的設計[D].內蒙古包頭:內蒙古科技大學,2012.
[4] 林勇堅.基于Modbus現場總線的水處理流程控制的工程設計[J].廣西民族大學學報(自然科學版),2013,19(1):79-81.
[5] 陳 輝.基于Modbus協議灌區遠程智能測控系統研究[D].蘭州:蘭州理工大學,2012.
[6] 王 諦.基于Modbus協議的PC機與dsPIC6014處理器的通信[D].呼和浩特:內蒙古大學,2012.
[7] 景柏豪,沈孟良,唐曄鈞.CAN-Modbus/TCP協議轉換的設計與實現[J].計算機工程與設計,2013,34(5):1552-1556.
[8] 李振江.Linux系統下Modbus主協議棧設計與實現[D].合肥:安徽大學,2012.
[9] 吳寅華,趙 敏.基于ARM Cortex-M3的Modbus協議實現及其應用[J].電子科技,2011,24(6):19-21.
[10] 楊開杰,劉秋菊,徐汀榮.線程池的多線程并發控制技術研究[J].計算機應用與軟件,2010,27(1):168-169.
{
FD_SET(nSocket,&set);
neSlect=select(nSocket+1,NULL,&set,NULL,&tv);if(neSlect>0)
{
nSend=send(nSocket,(char*)pWriteDate,nDataLen,0);
}
if(nDataLen==READ_REGISTERS_HEAD
ER_LEN)
{
RecvReadData();
}
else
{
RecvWriteReturn();
}
}
FD_ZERO(&set);
}
若客戶端要讀取06號設備起始地址為4的連續2個寄存器,讀取保持寄存器的功能碼function為3。服務器通信結果見圖4。
2.2 Modbus/TCP幀與RTU幀轉換設計
當客戶端需要查詢當前的實時數據,而服務器還未進行存儲,客戶端向服務器發送Modbus/TCP請求幀并等待服務器應答,服務器接收Modbus/TCP請求幀對其進行分析處理,轉化成Modus RTU串行鏈路響應幀并發送到與數據采集層相連的串行鏈路中去,監聽等待數據采集層的應答。若服務器收到串行鏈路上的RTU應答幀,則將該應答幀重新封裝成Modbus/TCP應答幀,發送給客戶端。因此,在服務器端需要進行Modbus/TCP與串行鏈路RTU的轉換。
ModToRtu()函數實現Modbus/TCP幀與串行鏈路RTU幀的轉換功能,轉換過程見圖5。
Modbus/TCP幀與串行鏈路RTU幀相比,增加了MBAP報文,減少了CRC校驗碼。Modbus/TCP轉串行鏈路RTU過程:首先從MBAP報文頭中解析出地址段,并將MBAP的各字段保存。然后從Modbus/TCP幀中分別解析出功能碼和數據段,并計算CRC校驗碼,最后封裝成串行鏈路RTU幀。
串行鏈路RTU幀轉換成Modbus/TCP幀:首先利用已保存MBAP字段重新封裝成MBAP,然后從RTU幀中讀取數據段和功能碼,分別填充到Modbus/TCP幀的數據段和功能碼,封裝成Modbus/TCP幀。
2.3 線程池
在服務器整個工作過程中,系統通過線程與客戶端和與數據采集層進行通信。傳統多線程方案的服務器,多個線程在同一時間內并發運行執行相應的任務[10],采用“及時創建,及時銷毀”的策略。當服務器接收到請求之后創建一個線程,由該線程執行具體任務,任務結束之后線程退出。若大量用戶同時訪問服務器,在短時間內,服務器將處于不停地創建線程、銷毀線程的狀態,容易導致消耗系統內存。因此,系統增加了線程池,大大減少了線程的開銷。
線程池采用預創建技術。程序啟動之后,首先創建一定數量(NUM個)的線程,這些線程處于阻塞狀態,并不消耗CPU。當系統有任務需要執行時,程序喚醒一個空閑線程執行任務。任務完成之后,該線程再次回到阻塞狀態,等待下次任務的到來。在線程池的數量設計上,程序所創建的線程總數不能高于THREAD_MAXNUM,當系統中的空閑線程數量低于THREAD_Max時,程序將創建一些線程,使得空閑線程維持在THREAD_AvailLow之上。當系統中的空閑線程數量高于THREAD_AvailHigh時,線程池會自動銷毀一些線程,保持空閑線程的數量在一個合理的范圍內。
3 服務器到數據采集層的通信
服務器通過串口定期向數據采集層發送RTU請求幀,并等待接收數據采集層的RTU返回幀,將收到的農田信息存儲在數據庫中。
服務器端首先打開串口,調用CreatData()準備要發送的請求數據,執行CreatCRC()生成函數獲取CRC校驗碼,通過CreatRtu()封裝程序組織生成RTU報文,發送RTU信息幀,檢測串口等待返回幀。若等待超過Modbus協議規定的4個字符延時等待時間,則進行超時處理。否則,接收數據采集層的返回幀之后,返回到數據準備階段,繼續檢測串口。服務器端界面采用qt設計,如圖6所示。
4 小結
分析了Modbus協議,將應用在工業控制中的Modbus協議引入到農田信息采集系統,Modbus幀格式簡單、緊湊、高效,同時Modbus/TCP具有實時通信的特點,更適合嵌入式設備,實現遠程數據的交互,從而達到遠程監測的目的。設計了基于Modbus協議的ARM農田信息采集服務器,實現了服務器與應用層、服務器與數據采集層的通信接口,提出了Modbus/TCP幀與串行鏈路RTU幀的轉換方法,增加了線程池完成每一次的通信任務。服務器可訪問數據采集端進行田間信息存儲,客戶端可隨時訪問服務器瀏覽田間信息。但是服務器還存在不足,如何健全服務器功能,發揮Modbus嵌入式服務器的綜合優勢,仍需進一步的研究。
參考文獻:
[1] 劉西廣.用于西門子Insight軟件的Modbus協議通用網關設計[D].成都:電子科技大學,2011.
[2] 陸 晶.基于Modbus的數據采集系統[D].江蘇無錫:江南大學,2011.
[3] 任清娟.基于Modbus和GPRS的高爐渣粒化配電監控系統的設計[D].內蒙古包頭:內蒙古科技大學,2012.
[4] 林勇堅.基于Modbus現場總線的水處理流程控制的工程設計[J].廣西民族大學學報(自然科學版),2013,19(1):79-81.
[5] 陳 輝.基于Modbus協議灌區遠程智能測控系統研究[D].蘭州:蘭州理工大學,2012.
[6] 王 諦.基于Modbus協議的PC機與dsPIC6014處理器的通信[D].呼和浩特:內蒙古大學,2012.
[7] 景柏豪,沈孟良,唐曄鈞.CAN-Modbus/TCP協議轉換的設計與實現[J].計算機工程與設計,2013,34(5):1552-1556.
[8] 李振江.Linux系統下Modbus主協議棧設計與實現[D].合肥:安徽大學,2012.
[9] 吳寅華,趙 敏.基于ARM Cortex-M3的Modbus協議實現及其應用[J].電子科技,2011,24(6):19-21.
[10] 楊開杰,劉秋菊,徐汀榮.線程池的多線程并發控制技術研究[J].計算機應用與軟件,2010,27(1):168-169.
{
FD_SET(nSocket,&set);
neSlect=select(nSocket+1,NULL,&set,NULL,&tv);if(neSlect>0)
{
nSend=send(nSocket,(char*)pWriteDate,nDataLen,0);
}
if(nDataLen==READ_REGISTERS_HEAD
ER_LEN)
{
RecvReadData();
}
else
{
RecvWriteReturn();
}
}
FD_ZERO(&set);
}
若客戶端要讀取06號設備起始地址為4的連續2個寄存器,讀取保持寄存器的功能碼function為3。服務器通信結果見圖4。
2.2 Modbus/TCP幀與RTU幀轉換設計
當客戶端需要查詢當前的實時數據,而服務器還未進行存儲,客戶端向服務器發送Modbus/TCP請求幀并等待服務器應答,服務器接收Modbus/TCP請求幀對其進行分析處理,轉化成Modus RTU串行鏈路響應幀并發送到與數據采集層相連的串行鏈路中去,監聽等待數據采集層的應答。若服務器收到串行鏈路上的RTU應答幀,則將該應答幀重新封裝成Modbus/TCP應答幀,發送給客戶端。因此,在服務器端需要進行Modbus/TCP與串行鏈路RTU的轉換。
ModToRtu()函數實現Modbus/TCP幀與串行鏈路RTU幀的轉換功能,轉換過程見圖5。
Modbus/TCP幀與串行鏈路RTU幀相比,增加了MBAP報文,減少了CRC校驗碼。Modbus/TCP轉串行鏈路RTU過程:首先從MBAP報文頭中解析出地址段,并將MBAP的各字段保存。然后從Modbus/TCP幀中分別解析出功能碼和數據段,并計算CRC校驗碼,最后封裝成串行鏈路RTU幀。
串行鏈路RTU幀轉換成Modbus/TCP幀:首先利用已保存MBAP字段重新封裝成MBAP,然后從RTU幀中讀取數據段和功能碼,分別填充到Modbus/TCP幀的數據段和功能碼,封裝成Modbus/TCP幀。
2.3 線程池
在服務器整個工作過程中,系統通過線程與客戶端和與數據采集層進行通信。傳統多線程方案的服務器,多個線程在同一時間內并發運行執行相應的任務[10],采用“及時創建,及時銷毀”的策略。當服務器接收到請求之后創建一個線程,由該線程執行具體任務,任務結束之后線程退出。若大量用戶同時訪問服務器,在短時間內,服務器將處于不停地創建線程、銷毀線程的狀態,容易導致消耗系統內存。因此,系統增加了線程池,大大減少了線程的開銷。
線程池采用預創建技術。程序啟動之后,首先創建一定數量(NUM個)的線程,這些線程處于阻塞狀態,并不消耗CPU。當系統有任務需要執行時,程序喚醒一個空閑線程執行任務。任務完成之后,該線程再次回到阻塞狀態,等待下次任務的到來。在線程池的數量設計上,程序所創建的線程總數不能高于THREAD_MAXNUM,當系統中的空閑線程數量低于THREAD_Max時,程序將創建一些線程,使得空閑線程維持在THREAD_AvailLow之上。當系統中的空閑線程數量高于THREAD_AvailHigh時,線程池會自動銷毀一些線程,保持空閑線程的數量在一個合理的范圍內。
3 服務器到數據采集層的通信
服務器通過串口定期向數據采集層發送RTU請求幀,并等待接收數據采集層的RTU返回幀,將收到的農田信息存儲在數據庫中。
服務器端首先打開串口,調用CreatData()準備要發送的請求數據,執行CreatCRC()生成函數獲取CRC校驗碼,通過CreatRtu()封裝程序組織生成RTU報文,發送RTU信息幀,檢測串口等待返回幀。若等待超過Modbus協議規定的4個字符延時等待時間,則進行超時處理。否則,接收數據采集層的返回幀之后,返回到數據準備階段,繼續檢測串口。服務器端界面采用qt設計,如圖6所示。
4 小結
分析了Modbus協議,將應用在工業控制中的Modbus協議引入到農田信息采集系統,Modbus幀格式簡單、緊湊、高效,同時Modbus/TCP具有實時通信的特點,更適合嵌入式設備,實現遠程數據的交互,從而達到遠程監測的目的。設計了基于Modbus協議的ARM農田信息采集服務器,實現了服務器與應用層、服務器與數據采集層的通信接口,提出了Modbus/TCP幀與串行鏈路RTU幀的轉換方法,增加了線程池完成每一次的通信任務。服務器可訪問數據采集端進行田間信息存儲,客戶端可隨時訪問服務器瀏覽田間信息。但是服務器還存在不足,如何健全服務器功能,發揮Modbus嵌入式服務器的綜合優勢,仍需進一步的研究。
參考文獻:
[1] 劉西廣.用于西門子Insight軟件的Modbus協議通用網關設計[D].成都:電子科技大學,2011.
[2] 陸 晶.基于Modbus的數據采集系統[D].江蘇無錫:江南大學,2011.
[3] 任清娟.基于Modbus和GPRS的高爐渣粒化配電監控系統的設計[D].內蒙古包頭:內蒙古科技大學,2012.
[4] 林勇堅.基于Modbus現場總線的水處理流程控制的工程設計[J].廣西民族大學學報(自然科學版),2013,19(1):79-81.
[5] 陳 輝.基于Modbus協議灌區遠程智能測控系統研究[D].蘭州:蘭州理工大學,2012.
[6] 王 諦.基于Modbus協議的PC機與dsPIC6014處理器的通信[D].呼和浩特:內蒙古大學,2012.
[7] 景柏豪,沈孟良,唐曄鈞.CAN-Modbus/TCP協議轉換的設計與實現[J].計算機工程與設計,2013,34(5):1552-1556.
[8] 李振江.Linux系統下Modbus主協議棧設計與實現[D].合肥:安徽大學,2012.
[9] 吳寅華,趙 敏.基于ARM Cortex-M3的Modbus協議實現及其應用[J].電子科技,2011,24(6):19-21.
[10] 楊開杰,劉秋菊,徐汀榮.線程池的多線程并發控制技術研究[J].計算機應用與軟件,2010,27(1):168-169.