国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Socket通信的AGV上位機控制系統(tǒng)

2021-11-07 09:49:12張功學(xué)徐耀輝
現(xiàn)代機械 2021年5期
關(guān)鍵詞:端口號服務(wù)端監(jiān)聽

薛 哲,張功學(xué),何 凱,徐耀輝,崔 聰

(1.陜西科技大學(xué)機電工程學(xué)院,陜西 西安 710021;2.中國科學(xué)院深圳先進(jìn)技術(shù)研究院,廣東 深圳 518055)

現(xiàn)在AGV導(dǎo)引技術(shù)正在迅速發(fā)展,很多行業(yè)已經(jīng)開始采用AGV導(dǎo)引技術(shù)[1]。但是部分AGV小車的控制方式為觸摸屏控制,需要人工近距離操作,步驟繁瑣。并且在復(fù)雜實驗環(huán)境下或者AGV小車行駛過程中操作時,存在一定的安全隱患。因此,為了提高AGV小車操控的安全性與方便性,本文使用C#編程語言,結(jié)合Socket通信與串口轉(zhuǎn)WIFI技術(shù),設(shè)計出一款適用于AGV小車的上位機控制系統(tǒng),此系統(tǒng)可使人在較遠(yuǎn)距離使用電腦控制AGV小車,即使在復(fù)雜實驗環(huán)境下也可以很方便的操控AGV小車并且保證了人員的安全。

AGV通訊系統(tǒng)用于實現(xiàn)AGV與地面控制站及地面監(jiān)控設(shè)備之間的信息交換[2]。在本文中AGV的通訊系統(tǒng)采用一問一答式,上位機發(fā)送詢問數(shù)據(jù),AGV控制板在接收到數(shù)據(jù)之后,根據(jù)接收到的數(shù)據(jù)進(jìn)行回應(yīng)或者不回應(yīng),通過詢問數(shù)據(jù)對AGV小車進(jìn)行控制。

1 Socket通信原理

Socket作為進(jìn)程通信機制,是2個程序之間進(jìn)行雙向數(shù)據(jù)傳輸?shù)木W(wǎng)絡(luò)通訊端點,用一個地址和一個端口號標(biāo)識[3]。Socket通常也稱作“套接字”,用于描述IP地址和端口。

1.1 服務(wù)器端和客戶端

在通信過程中,客戶端主動打開連接,服務(wù)器端是被動的[4]。當(dāng)客戶端和服務(wù)端彼此交換數(shù)據(jù)前,必須先在雙方之間建立一個TCP連接之后才能傳輸數(shù)據(jù)[5]。

服務(wù)器端的Socket至少需要兩個,一個負(fù)責(zé)接收客戶端的連接請求,但是不負(fù)責(zé)與客戶端的通信;當(dāng)服務(wù)端接收到客戶端的連接后便會在服務(wù)端產(chǎn)生一個負(fù)責(zé)通信的Socket,這個Socket是在收到客戶端的連接時創(chuàng)建。

客戶端的Socket必須指定要連接的服務(wù)端的IP地址和端口;通過創(chuàng)建一個Socket對象來初始化一個到服務(wù)端的TCP連接。

1.2 Socket通信基本流程

服務(wù)端先初始化Socket,通過bind函數(shù)與端口綁定,調(diào)用listen函數(shù)對端口進(jìn)行監(jiān)聽,再調(diào)用accept函數(shù)等待客戶端的連接。當(dāng)有客戶端初始化一個Socket后,調(diào)用connect函數(shù)與服務(wù)端進(jìn)行連接,服務(wù)端接收到客戶端的連接請求并連接成功后,這時客戶端就可以發(fā)送數(shù)據(jù)請求,服務(wù)端接收并處理請求,然后把回應(yīng)數(shù)據(jù)發(fā)送給客戶端,客戶端讀取數(shù)據(jù),一次服務(wù)端與客戶端的交互結(jié)束。

圖1 AGV小車控制系統(tǒng)通信流程圖

2 系統(tǒng)設(shè)計

2.1 服務(wù)端設(shè)計

當(dāng)打開服務(wù)端軟件后,先是服務(wù)端開始監(jiān)聽并且接受AGV小車發(fā)來的連接請求,連接成功后便可以向AGV小車核心板發(fā)送數(shù)據(jù),如果AGV小車成功接收到數(shù)據(jù)并作出相應(yīng)指令,會向服務(wù)端回應(yīng)信息,顯示在相應(yīng)區(qū)域,回應(yīng)信息分為AGV當(dāng)前實時狀態(tài)和每條詢問指令成功接收的應(yīng)答信息。

2.2 服務(wù)端功能實現(xiàn)

2.2.1 創(chuàng)建一個負(fù)責(zé)監(jiān)聽的Socket

部分代碼如下:

Socket SocketWatch = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

IPAddress ip = IPAddress.Any;

IPEndPoint point = new IPEndPoint(ip,Convert.ToInt32(txtPort.Text));

SocketWatch.Bind(point);

ShowMsg("監(jiān)聽成功/r/n");

SocketWatch.Listen(10);

首先新實例初始化Socket類使用指定的地址族、流式套接字和TCP協(xié)議;

接下來提供Internet協(xié)議(IP)地址,并偵聽所有網(wǎng)絡(luò)接口上的客戶端活動的IP地址;

然后新實例初始化IPEndPoint類具有指定的地址和端口號;

使用Bind()函數(shù)將IP地址、端口號與負(fù)責(zé)監(jiān)聽的Socket相關(guān)聯(lián);

使用SocketWatch對象的Listen()函數(shù)使監(jiān)聽的Socket處于偵聽狀態(tài);

最后當(dāng)打開服務(wù)端軟件時在ShowMsg對話框顯示監(jiān)聽成功。

2.2.2 創(chuàng)建一個負(fù)責(zé)通信的Socket

部分代碼如下:

Socket socketsend = SocketWatch.Accept();

ShowMsg(socketsend.RemoteEndPoint.ToString() + ":" + "連接成功" + "/r/n");

為了接收來自客戶端的連接請求,使用Socket類中的Accept()函數(shù)創(chuàng)建一個新的Socket用于與客戶端進(jìn)行通信;當(dāng)連接成功后則會在ShowMsg對話框顯示連接成功。

2.2.3 接收和發(fā)送消息

int r=socketsend.Receive(buffer);

ShowMsg(socketsend.RemoteEndPoint.ToString() + ":" + str + "/r/n");

使用Socketsend對象中的Receive()函數(shù)接收客戶端發(fā)來的消息并存儲到接收緩沖區(qū)中,最后將其顯示在ShowMsg對話框中。

socketsend.Send(buffer);

使用Socketsend對象中的Send()函數(shù)向客戶端發(fā)送消息。

在本控制系統(tǒng)中,上位機向AGV核心板發(fā)送的為十六進(jìn)制數(shù)據(jù),共14個字節(jié)。其中起始碼占1個字節(jié),為通信開始標(biāo)志位;功能碼占1個字節(jié),代表詢問指令功能;數(shù)據(jù)碼占5個字節(jié),代表對應(yīng)的數(shù)據(jù)碼含義;預(yù)留5個字節(jié),為無效數(shù)據(jù)位;結(jié)束碼占1個字節(jié),為通信結(jié)束標(biāo)志位;校驗碼占1個字節(jié),為前邊所有碼相加除以256的余數(shù)。例如AA C1 00 03 E8 03 E8 00 00 00 00 00 BB 11為14個字節(jié),其所代表的含義為AGV小車向前運行,左右電機轉(zhuǎn)速為1000 rpm/min。

因為要計算校驗碼,所以需要將前邊所有編碼提取出來轉(zhuǎn)化為int類型相加除以256求余,求出來的余數(shù)為校驗碼,再將所有的編碼轉(zhuǎn)換成string類型進(jìn)行相加;由于只能發(fā)送Byte類型的數(shù)據(jù),最后將相加的string類型編碼轉(zhuǎn)換成Byte類型則為最終要發(fā)送的編碼。

部分代碼如下:

int[] suma = new int[8];

suma[0] = Convert.ToInt32(str[0],16);

將所有編碼轉(zhuǎn)化成int類型。

int sum=new int();

for (int i=0;i

{

sum+=suma[i];

}

int check=sum%256;

使用for循環(huán)將所有轉(zhuǎn)化成int類型的編碼相加,最后再求余得出校驗碼。

2.3 服務(wù)端界面設(shè)計

圖2 界面設(shè)計

如圖2所示,TextBox1為服務(wù)端IP地址,TextBox2為端口號,TextBox3顯示AGV小車的返回信息,TextBox4和5可以調(diào)節(jié)AGV小車左右電機的轉(zhuǎn)速,TextBox 6和7可以控制AGV小車升降平臺的升降高度和速度。當(dāng)AGV小車啟動后,PC端連接WIFI,輸入IP地址和端口號再點擊連接按鈕,就會收到AGV小車的連接請求,連接成功后會在TextBox 3顯示連接成功,如果AGV小車行進(jìn)或升降過程中出現(xiàn)異常情況,可以立即點擊停止按鈕就會停止設(shè)備,界面中其他按鈕則實現(xiàn)其相對應(yīng)的功能。

2.4 客戶端模塊

由于AGV核心控制板只預(yù)留了RS232接口,RS232接口支持全雙工、不間斷通信;再使用WIFI串口服務(wù)器將RS232接口轉(zhuǎn)換成WIFI,然后安裝好WIFI天線,就能夠使用筆記本電腦等設(shè)備進(jìn)行連接。

AGV 與上位機采用一問一答式通信,每當(dāng)上位機發(fā)送的指令被AGV成功接收到后會進(jìn)行回應(yīng);每條詢問指令成功接收的應(yīng)答信息共14個字節(jié)。其中起始碼、功能碼、結(jié)束碼和校驗碼各占1個字節(jié);數(shù)據(jù)碼占2個字節(jié),01代表設(shè)置成功,00代表設(shè)置失?。活A(yù)留8個字節(jié)。

3 實際測試

完成所有設(shè)計后,開始進(jìn)行實際實驗。為AGV小車設(shè)計L型路徑,分別進(jìn)行前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)和上升、下降操作,再進(jìn)行停止升降和停止移動操作,最后點擊查詢狀態(tài)按鈕查詢AGV當(dāng)前狀態(tài)。進(jìn)行操作時AGV的應(yīng)答信息如表1所示。

表1 操作時AGV應(yīng)答信息

由應(yīng)答信息可知,所有操作的數(shù)據(jù)碼為01,即證明設(shè)置成功;由查詢狀態(tài)按鈕返回的信息可知當(dāng)前升降板處在720 mm的高度。

從實驗結(jié)果看,上位機控制系統(tǒng)操作AGV小車更加方便,保證了小車行駛過程中人員的安全。在實驗過程中,上位機與AGV小車通信良好,AGV小車能夠?qū)ι衔粰C所發(fā)出的指令迅速做出反應(yīng),Socket服務(wù)端界面中的所有功能均運行正常。AGV小車如圖3所示。

圖3 AGV小車實際圖

4 結(jié)束語

基于Socket通信的AGV小車上位機控制系統(tǒng),其主要優(yōu)點有:在復(fù)雜實驗環(huán)境下,使用Socket無線控制AGV小車,便于操作人員在遠(yuǎn)距離條件下對AGV小車的控制,提高了實驗效率,保證了在實驗環(huán)境下操作人員的安全。

猜你喜歡
端口號服務(wù)端監(jiān)聽
千元監(jiān)聽風(fēng)格Hi-Fi箱新選擇 Summer audio A-401
在Docker容器中安裝應(yīng)用程序
云存儲中基于相似性的客戶-服務(wù)端雙端數(shù)據(jù)去重方法
新時期《移動Web服務(wù)端開發(fā)》課程教學(xué)改革的研究
在Windows Server 2008上創(chuàng)建應(yīng)用
網(wǎng)絡(luò)監(jiān)聽的防范措施
電子制作(2017年20期)2017-04-26 06:58:02
淺談以java為基礎(chǔ)的Socket通信簡介及實現(xiàn)
青春歲月(2017年5期)2017-04-20 18:34:23
應(yīng)召反潛時無人機監(jiān)聽航路的規(guī)劃
Winsock編程在《計算機網(wǎng)絡(luò)基礎(chǔ)》教學(xué)中的應(yīng)用
基于Android系統(tǒng)的互動展示APP的研究與設(shè)計
安多县| 固安县| 平和县| 徐州市| 驻马店市| 元阳县| 鸡西市| 周至县| 嘉兴市| 楚雄市| 凌源市| 石棉县| 铜川市| 博客| 行唐县| 梅河口市| 郁南县| 永仁县| 包头市| 河北省| 上栗县| 富锦市| 家居| 正宁县| 鲁甸县| 资源县| 昆山市| 锡林郭勒盟| 南宁市| 宿迁市| 深泽县| 札达县| 来安县| 镇巴县| 巴彦淖尔市| 布尔津县| 长沙市| 囊谦县| 望都县| 棋牌| 四平市|