《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 串口轉(zhuǎn)以太網(wǎng)模塊配置軟件設(shè)計(jì)及實(shí)現(xiàn)
串口轉(zhuǎn)以太網(wǎng)模塊配置軟件設(shè)計(jì)及實(shí)現(xiàn)
2015年微型機(jī)與應(yīng)用第22期
孫曉曄1,2,成 彬2,3
(1.石家莊開發(fā)區(qū)冀科雙實(shí)科技有限公司,河北 石家莊 050081; 2.河北省科學(xué)院應(yīng)用數(shù)學(xué)研究所,河北 石家莊 050081; 3.河北省信息安全認(rèn)證工程技術(shù)研究中心,河北 石家莊 050081)
摘要: 采用串口轉(zhuǎn)以太網(wǎng)模塊使現(xiàn)有串口設(shè)備具備聯(lián)網(wǎng)功能是一種低成本實(shí)用的解決方案。在使用之前,需要根據(jù)具體應(yīng)用環(huán)境對串口轉(zhuǎn)以太網(wǎng)模塊的串口參數(shù)以及網(wǎng)絡(luò)參數(shù)進(jìn)行設(shè)置。對上位機(jī)與串口轉(zhuǎn)以太網(wǎng)模塊間的通信協(xié)議進(jìn)行了詳細(xì)闡述,采用UDP廣播通信方式,由上位機(jī)通過網(wǎng)口對模塊進(jìn)行參數(shù)配置。在Visual Studio 2012下,用C#編程實(shí)現(xiàn)了一套配置軟件。配置過程中,上位機(jī)和模塊可以跨網(wǎng)段通信,避免需預(yù)知模塊初始IP以及更改上位機(jī)IP地址的麻煩,使用更方便。
Abstract:
Key words :

  摘  要: 采用串口轉(zhuǎn)以太網(wǎng)模塊使現(xiàn)有串口設(shè)備具備聯(lián)網(wǎng)功能是一種低成本實(shí)用的解決方案。在使用之前,需要根據(jù)具體應(yīng)用環(huán)境對串口轉(zhuǎn)以太網(wǎng)模塊的串口參數(shù)以及網(wǎng)絡(luò)參數(shù)進(jìn)行設(shè)置。對上位機(jī)與串口轉(zhuǎn)以太網(wǎng)模塊間的通信協(xié)議進(jìn)行了詳細(xì)闡述,采用UDP廣播通信方式,由上位機(jī)通過網(wǎng)口對模塊進(jìn)行參數(shù)配置。在Visual Studio 2012下,用C#編程實(shí)現(xiàn)了一套配置軟件。配置過程中,上位機(jī)和模塊可以跨網(wǎng)段通信,避免需預(yù)知模塊初始IP以及更改上位機(jī)IP地址的麻煩,使用更方便。

  關(guān)鍵詞通用同步/異步串行接收/發(fā)送器;以太網(wǎng);通信協(xié)議

0 引言

  長期以來,串行通信方式在數(shù)據(jù)采集、數(shù)據(jù)監(jiān)控、安防、醫(yī)療等很多領(lǐng)域應(yīng)用普遍,但隨著Internet的發(fā)展和應(yīng)用需求的提升,其局限性也日益凸顯:通信距離短、速率低、網(wǎng)絡(luò)特性差等[1]。同時(shí),物聯(lián)網(wǎng)的迅猛發(fā)展,使得嵌入式設(shè)備聯(lián)網(wǎng)的需求越來越迫切。

  淘汰現(xiàn)有串口設(shè)備,研發(fā)能聯(lián)網(wǎng)的新產(chǎn)品需要投入大量的時(shí)間和人力物力,相比之下,采用串口轉(zhuǎn)以太網(wǎng)技術(shù),只需增加串口轉(zhuǎn)以太網(wǎng)模塊,而無需淘汰原先的串口設(shè)備,不僅可以提高設(shè)備利用率,還可以降低開發(fā)成本、縮短開發(fā)周期,輕松實(shí)現(xiàn)串口設(shè)備聯(lián)網(wǎng)。

  串口轉(zhuǎn)以太網(wǎng),實(shí)際就是將串口數(shù)據(jù)作為TCP/IP的應(yīng)用層數(shù)據(jù),用TCP/IP封裝傳輸[2-3]。本文主要完成串口轉(zhuǎn)以太網(wǎng)模塊上位機(jī)配置軟件的設(shè)計(jì),根據(jù)上位機(jī)和串口轉(zhuǎn)以太網(wǎng)模塊間的通信協(xié)議,利用UDP廣播方式,完成模塊的參數(shù)配置,方便用戶對模塊的使用。

1 串口轉(zhuǎn)以太網(wǎng)模塊簡介

  串口轉(zhuǎn)以太網(wǎng)實(shí)際上就是將串行通信數(shù)據(jù)轉(zhuǎn)化為網(wǎng)絡(luò)數(shù)據(jù)包發(fā)出,將收到的網(wǎng)絡(luò)數(shù)據(jù)包用串行通信的方式發(fā)出,從而實(shí)現(xiàn)串口與網(wǎng)口之間數(shù)據(jù)的透明傳輸[4-5]。

  本文采用USR-TCP232-E45串口轉(zhuǎn)以太網(wǎng)模塊。該模塊搭載ARM處理器,采用Cortex-M3內(nèi)核,內(nèi)部集成了LWIP協(xié)議棧,速度快,功耗低,工作穩(wěn)定可靠[6]。模塊在使用之前需配置的參數(shù)包括:串口參數(shù)[7](波特率、數(shù)據(jù)位、校驗(yàn)位、停止位)和網(wǎng)絡(luò)參數(shù)(工作模式、IP地址、端口號(hào)、子網(wǎng)掩碼、網(wǎng)關(guān)等)。

2 通信協(xié)議

  對串口轉(zhuǎn)以太網(wǎng)模塊進(jìn)行參數(shù)配置,需要上位機(jī)按照一定的通信協(xié)議向模塊發(fā)送相應(yīng)命令(數(shù)據(jù)報(bào)文)。

  通信協(xié)議由報(bào)文頭、報(bào)文長度、報(bào)文內(nèi)容組成,上位機(jī)發(fā)送的報(bào)文在末尾還帶1 B的校驗(yàn)碼,模塊對上位機(jī)的響應(yīng)不帶校驗(yàn),如表1所示。在通信協(xié)議中加入校驗(yàn)?zāi)軌蚝芎玫亟鉀Q傳輸誤碼的問題;接收方對收到的數(shù)據(jù)進(jìn)行校驗(yàn),如果校驗(yàn)值不正確,則丟棄本包數(shù)據(jù),并通知發(fā)送方。

003.jpg

  報(bào)文頭值為0xFF;報(bào)文長度為報(bào)文內(nèi)容所占的字節(jié)數(shù),由于報(bào)文內(nèi)容不同報(bào)文長度也會(huì)不同;校驗(yàn)碼取報(bào)文長度和報(bào)文內(nèi)容各字節(jié)之和。報(bào)文內(nèi)容中只有控制碼是必需的,用來標(biāo)識(shí)不同的命令操作,MAC地址、用戶名密碼、參數(shù)由于控制碼的不同可能不是必需的。

  下位機(jī)返回的報(bào)文與上位機(jī)發(fā)送的報(bào)文格式類似,但是不帶校驗(yàn),響應(yīng)報(bào)文中控制碼字段表示本報(bào)文是對上位機(jī)發(fā)出的哪條命令的響應(yīng)。

  發(fā)送搜索命令,模塊會(huì)返回36 B的數(shù)據(jù),包括模塊的IP地址、MAC地址,之后可以利用MAC地址對該模塊進(jìn)行其他參數(shù)的設(shè)置。

  讀取設(shè)置,返回256 B,包括基礎(chǔ)參數(shù)(IP地址、網(wǎng)關(guān)、子網(wǎng)掩碼、用戶名、密碼、MAC地址等)和串口參數(shù)(串口波特率、數(shù)據(jù)位、校驗(yàn)位、停止位、流控、本地端口、工作協(xié)議等)。

  響應(yīng)報(bào)文除了上述必須返回上位機(jī)要求的相應(yīng)參數(shù)情況外,還包括對上位機(jī)命令的校驗(yàn)及命令的執(zhí)行情況。

  校驗(yàn)錯(cuò)誤:′E′+正確的校驗(yàn)值;

  命令正確執(zhí)行:FF 01 CMD′K′;

  用戶名密碼錯(cuò)誤:FF 01 CMD′P′;

  其他錯(cuò)誤:FF 01 CMD ′E′

3 上位機(jī)配置軟件設(shè)計(jì)

  為了方便跨網(wǎng)段進(jìn)行配置,所有通信協(xié)議的操作均采用UDP廣播方式完成。

  3.1 UDP廣播原理

  廣播:一個(gè)節(jié)點(diǎn)發(fā)送數(shù)據(jù)包,網(wǎng)絡(luò)中的所有節(jié)點(diǎn)都可以收到。如果網(wǎng)絡(luò)中兩個(gè)主機(jī)上的應(yīng)用程序要相互通信,其一要知道彼此的IP;其二要知道程序可監(jiān)聽的端口,因?yàn)橥恢鳈C(jī)上的程序使用網(wǎng)絡(luò)是通過端口號(hào)來區(qū)分的。

  如果想在整個(gè)網(wǎng)絡(luò)中廣播數(shù)據(jù),要向255.255.255.255發(fā)送數(shù)據(jù)包,這種數(shù)據(jù)包不會(huì)被路由,它只能到達(dá)本物理網(wǎng)絡(luò)中的所有主機(jī),因?yàn)槿绻酚善鬓D(zhuǎn)發(fā)了廣播信息,那么勢必會(huì)引起網(wǎng)絡(luò)癱瘓。廣播需要指明接收者的端口號(hào),因?yàn)椴豢赡芙邮照叩乃卸丝诙加脕硎章爮V播,所以通信時(shí)必須保證目標(biāo)端口號(hào)和本地端口號(hào)不被占用。

  3.2 配置軟件的功能設(shè)計(jì)

  配置軟件的功能比較單一,需要讀取模塊的當(dāng)前設(shè)置(IP地址、網(wǎng)關(guān)、子網(wǎng)掩碼、MAC地址、串口波特率、數(shù)據(jù)位、校驗(yàn)位、停止位、流控、本地端口、工作協(xié)議等)予以顯示,并能對這些參數(shù)進(jìn)行設(shè)置。

  3.3 程序設(shè)計(jì)及實(shí)現(xiàn)

  上位機(jī)配置軟件在Visual Studio 2012開發(fā)環(huán)境下,采用C#編程實(shí)現(xiàn)。C#中對UDP的編程有兩種方式:直接使用Socket類和使用UdpClient類[8]。UdpClient類對基礎(chǔ)的Socket進(jìn)行了封裝,發(fā)送和接收數(shù)據(jù)時(shí)不必考慮底層套接字收發(fā)時(shí)必須處理的一些細(xì)節(jié)問題,開發(fā)簡單、效率較高。因此,本文使用UdpClient類實(shí)現(xiàn)對UDP協(xié)議的編程。

  本文采用了多線程技術(shù),用主線程發(fā)送數(shù)據(jù),專門啟動(dòng)一個(gè)線程用于接收數(shù)據(jù),同一個(gè)進(jìn)程中的兩個(gè)線程可以獨(dú)立運(yùn)行并相互通信。

  3.3.1 利用UdpClient對象實(shí)現(xiàn)UDP通信——數(shù)據(jù)發(fā)送

  利用UdpClient對象發(fā)送數(shù)據(jù)的流程如圖1所示。

001.jpg

  private UdpClient udpClient;

  //創(chuàng)建UdpClient對象,這里使用1901端口

  udpClient=new UdpClient(1901);

  //遠(yuǎn)程主機(jī)及端口號(hào)

  IPEndPoint iep=new IPEndPoint(IPAddress.Broadcast,1901);

  //發(fā)送緩沖區(qū)

  byte[]searchDeviceCommand=new byte[]{0xff,0x01,0x01,0x02};

  //通過udpClient將發(fā)送緩沖區(qū)中的內(nèi)容發(fā)送到遠(yuǎn)程節(jié)點(diǎn)

  udpClient.Send(searchDeviceCommand,

  searchDeviceCommand.Length,iep);

  3.3.2 利用UdpClient對象實(shí)現(xiàn)UDP通信——數(shù)據(jù)接收

  利用UdpClient對象接收數(shù)據(jù)的流程如圖2所示。

002.jpg

  UdpClient對象的Receive方法用于在指定的本地IP地址和端口上接收遠(yuǎn)程主機(jī)發(fā)送的數(shù)據(jù)報(bào)[9]。

  private byte[]rBuffer=new byte[256];

  //根據(jù)通信協(xié)議中響應(yīng)報(bào)文的長度,設(shè)置合適大小的接收緩沖區(qū)(接收緩沖區(qū)的大小不能小于模塊響應(yīng)報(bào)文的最大長度)

  private UdpClient udpClient;

  private void FrmConfig_Load(object sender,EventArgs e)

  {

  udpClient=new UdpClient(1901);//創(chuàng)建接收數(shù)據(jù)的線程

  t=new Thread(startThread);//線程后臺(tái)運(yùn)行

  t.IsBackground=true;//啟動(dòng)線程

  t.Start();

  }

  //在接收線程中從遠(yuǎn)程節(jié)點(diǎn)接收數(shù)據(jù),對數(shù)據(jù)進(jìn)行分析處理

  private void startThread()

  {

  while(true)

  {

  IPEndPoint iepRemote=new IPEndPoint(IPAddress.Broadcast,1901);

  rBuffer=udpClient.Receive(ref iepRemote);

  //對接收緩沖區(qū)中的內(nèi)容進(jìn)行分析,針對不同命令予以處理

  }

  }

  3.4 程序調(diào)試

  程序調(diào)試過程中用到了Wireshark工具。Wireshark是一個(gè)網(wǎng)絡(luò)封包分析軟件,通過簡單的設(shè)置就可以擷取網(wǎng)絡(luò)封包,并盡可能顯示出最為詳細(xì)的網(wǎng)絡(luò)封包資料。通過該軟件,可以方便地看到上位機(jī)配置軟件與串口轉(zhuǎn)以太網(wǎng)模塊之間數(shù)據(jù)包的各種信息。

4 結(jié)論

  采用串口轉(zhuǎn)以太網(wǎng)模塊對現(xiàn)有串口嵌入式設(shè)備進(jìn)行升級(jí)聯(lián)網(wǎng),只需一根網(wǎng)線將模塊與PC相連,通過該配置軟件就能方便地對模塊參數(shù)進(jìn)行設(shè)置,操作簡單、實(shí)用。本文介紹的通信協(xié)議以及UDP通信的實(shí)現(xiàn)對其他通信應(yīng)用具有一定的參考價(jià)值。

參考文獻(xiàn)

  [1] 蔡長安,鐘銳,王盈瑛.串行通信轉(zhuǎn)網(wǎng)絡(luò)通信數(shù)據(jù)模塊的設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用與軟件,2010,27(1):88-91.

  [2] 李毅.嵌入式串口服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京交通大學(xué),2012.

  [3] 曾廣圣,曾維清,徐冉.一種基于ARM的以太網(wǎng)串口服務(wù)器的設(shè)計(jì)[J].科技廣場,2012,25(5):248-253.

  [4] 陳政石,秦紅波,李鐵鷹.基于MSP430F149的串口服務(wù)器設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2009,35(1):95-97.

  [5] 成彬,王冬艷,韓憲生,等.密碼算法中的循環(huán)移位“異或”運(yùn)算實(shí)質(zhì)性研究[J].微型機(jī)與應(yīng)用,2011,30(11):79-80.

  [6] Jinan USR IOT Technology Co.,Ltd. Multifunctional serial to Ethernet module user manual[EB/OL].(2012-07-18)[2014-04-16]. http://www.usriot.com/Down/E45/USR-TCP232- E45-EN%20V1.3.2.pdf.

  [7] 朱英翔,朱福民,劉炎鳴.C#下串口通信編程的開發(fā)和擴(kuò)展[J].微型機(jī)與應(yīng)用,2014,33(6):89-91.

  [8] 周有杰.Visual C#.Net網(wǎng)絡(luò)核心編程[M].北京:清華大學(xué)出版社,2002.

  [9] ROBINSON S.C#高級(jí)編程[M].北京:清華大學(xué)出版社,2002.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
主站蜘蛛池模板: 人妻人人澡人人添人人爽人人玩| 中文国产日韩欧美视频| 成人永久免费福利视频网站| 欧美与黑人午夜性猛交久久久| 正在播放高级会所丰满女技师| 欧美XXXXX高潮喷水麻豆| 欧美人与性动交α欧美精品 | 欧美黄三级在线观看| 精品精品国产高清a级毛片| 香蕉精品视频在线观看| 娇小性色xxxxx中文| 99国产精品自在自在久久| 一本大道加勒比久久| 中文国产在线观看| 久久97久久97精品免视看秋霞| 九九精品视频在线| 久久综合噜噜激激的五月天 | 国产精品www| 天天爱天天做天天爽夜夜揉| 好男人社区神马在线观看www| 日产欧产va高清| 日韩av高清在线看片| 久久机热这里只有精品无需| 亚洲欧美中文日韩二区一区| 国产传媒在线观看| 国产一级大片在线观看| 制服丝袜自拍偷拍| 亚洲成年人网址| 亚洲二区在线视频| 亚洲人成亚洲精品| 久久这里精品国产99丫e6| 亚洲国产综合无码一区| 亚洲国产成人久久99精品| 亚洲伊人久久网| 国产精品国产三级国产普通话| 国产男女视频在线观看| 国产无套粉嫩白浆| 国产一区二区久久精品| 印度精品性hd高清| 国产精品第6页| 国产精品99久久久久久董美香|