freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)論文-modbus通信協(xié)議在tcpip上的實現(xiàn)-在線瀏覽

2025-01-10 20:59本頁面
  

【正文】 r L e n g t h U n i t I d e n t i f i e r2 b y t e 2 b y t e 2 b y t e1 b y t eM B A P 報 文 頭 結(jié) 構(gòu) MBAP 報文頭包括的各個域的功能描述如下表: 域 長度 描述 客戶機 服務(wù)器 事務(wù)處理標(biāo)識符 2 byte MODBUS 請求 /響應(yīng)事務(wù)處理的識別碼 客戶機啟動 服務(wù)器從接受的請求中重新復(fù)制 協(xié)議標(biāo)識符 2 byte 0=MODBUS協(xié)議 客戶機啟動 服務(wù)器從接受的請求中重新復(fù)制 長度 2 byte 隨后字節(jié)的數(shù)量 客戶機啟動 服務(wù)器啟動(響應(yīng)) 單元標(biāo)識符 1 byte 串行鏈路或其他總線上連接的遠程從站的識別 客戶機啟動 服務(wù)器從接受的請 求中重新復(fù)制 套接字簡介 套接字的概念與文件句柄類似,一個套接字就是一個通信標(biāo)識,由一個短整數(shù)表示,實際上就是一個句柄,代表網(wǎng)絡(luò)協(xié)議中的一組數(shù)據(jù),該數(shù)據(jù)包含了通信雙方的 IP 地址和當(dāng)前的連接狀態(tài)等信息。 套接字存在于通信區(qū)域中,由協(xié)議、地址、端口來描述并惟一確定,根據(jù)傳輸協(xié)議的不同,套接字可分為 3 種類型:流式套接字、數(shù)據(jù)報套接字和原始套接字。數(shù)據(jù)報套接字提供了一個無連接服務(wù),不提供無錯保證,數(shù)據(jù)可能丟失或重復(fù),且接受順序混亂,該套接字所對應(yīng)的是無連接傳輸協(xié)議,如 TCP/IP 協(xié)議簇中的 UDP。 WinSock 提供了許多套接字函數(shù),它們并不代表協(xié)議的某一個層次,其實質(zhì)就是一組編程接口,用戶利用這些函數(shù)可以很容易地進行編程。 返回的一個套接字號被創(chuàng)建者用來訪問該套接字。直到一個端口被綁定到該套接字時,方可接受數(shù)據(jù)。 語法: SOCKET socket ( Int af , Int type, Int protocol )。 type:標(biāo)識套接字類型,如果為 SOCK_STREAM,表示流式套接字;如果 為SOCK_DGRAM,表示數(shù)據(jù)報套接字。 ( 2) bind() 函數(shù) Bind()函數(shù)用于將套接字綁定到一個已知的地址上。 語法: int bind ( SOCKET s, const struct sockaddr FAR* name, int namelen )。 name:是一個 sockaddr 結(jié)構(gòu)指針,該結(jié)構(gòu)中包含了要綁定的地址和端口號。 在定義一個套接字后,需要調(diào)用 bind 函數(shù)為其指定本機地址、協(xié)議和端口號。 SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP)。 = AF_INET。 //端口號 = htonl(INADDR_ANY)。addr,sizeof(addr))==0) { MessageBox(成功 )。 語法: int connect ( SOCKET s, const struct sockaddr FAR* name, int namelen )。 name:套接字 s 想要連接的主機地址和端口號。 ( 4) listen 函數(shù) listen 函數(shù)用于將套接字置入監(jiān)聽模式。 s:套接字。例如,如果 backlog 被設(shè)置為 3,此時有 4 個客 戶端同時發(fā)出連接請求,那么前 3 個客戶端連接會放置在等待隊列中,第 4 個客戶端會得到錯誤信息。一個新的套接字被創(chuàng)建,并具有與初始套接字相同的特性。于是,釋放出示套接字,以便為其他欲與該服務(wù)器連接的客戶機使用。 s:是一個套接字,它應(yīng)處于監(jiān)聽狀態(tài)。 addrlen:用于接收參數(shù) addr 的長度。將 send()和 recv()函數(shù)專門設(shè)計成和已經(jīng)連接的套接字一起使用。 應(yīng)用程序與套接字關(guān)系 系統(tǒng)調(diào)用 大多數(shù)操作 系統(tǒng)使用系統(tǒng)調(diào)用 (system call)的機制在應(yīng)用程序和操作系統(tǒng)之間傳遞控制權(quán)。如下圖所示: 應(yīng)用程序 1 應(yīng)用程序 2 應(yīng)用程序 n由應(yīng)用程序調(diào)用的系統(tǒng)函數(shù)系統(tǒng)調(diào)用接口用戶地址空間中的應(yīng)用程序系統(tǒng)地址空間中的協(xié)議軟件包括 T C P / IP 軟件協(xié)議的操作系統(tǒng)內(nèi)核? ? 應(yīng)用編程接口 API (Application Programming Interface) 如上圖所示,當(dāng)某個應(yīng)用進程啟動 系統(tǒng)調(diào)用 時,控制權(quán)就從應(yīng)用進程傳遞給了 系統(tǒng)調(diào)用接口 。此調(diào)用轉(zhuǎn)給某個內(nèi)部過程,并執(zhí)行所請求的操作。 由上可知, 系統(tǒng)調(diào)用接口實際上就是 應(yīng)用進程的控制權(quán)和操作系統(tǒng)的控制權(quán)進行轉(zhuǎn)換的一個接口,即 應(yīng)用編程接口 API。 套接字( Socket)的作用 如下圖所示,應(yīng)用進程通過套接字接入到網(wǎng)絡(luò) 。要編寫真正的 Windows 應(yīng)用程序,就必須對 OOP 有一定了解。 面向?qū)ο缶幊碳夹g(shù)不只是一種程序設(shè)計的方法,而是客觀建立事物模型,分析復(fù)雜事物思想的方法。 利 面向?qū)ο蟮某绦蛟O(shè)計的核心為: 設(shè)計思路:對客觀事物的抽象。 類提供簡單的對外接口。 封裝性:封裝性是指把數(shù)據(jù)和方法放在同一個對象中,對數(shù)據(jù)的存取只能通過該對象本身的方法來進行。 Visual C++ /MFC 開發(fā)程序 庫( library)是可以重復(fù)使用的源代碼和目標(biāo)代碼的集合。這些類可以提供程序框架、進行文件和數(shù)據(jù)庫操作、建立網(wǎng)絡(luò)連接、進行繪圖和打印等各種通用的應(yīng)用程序操作。 MFC 借助 C++的優(yōu) 勢為 Windows 開發(fā)開辟了一片新天地,同時也借 助ApplicationWizzard 使開發(fā)者擺脫離了那些每次都必寫基本代碼,借 ClassWizard2和消息映射使開發(fā)者擺脫了定義消息處理時那種混亂和冗長的代碼段。 編程語言 正因為 MFC 是建立在 C++的基礎(chǔ)上,所以我強調(diào) C/C++語言基礎(chǔ)對開發(fā)的重要性。而且 C++本身所具備的超越 C語言的特性都可以使開發(fā)者編寫出更易用,更靈活的代碼。 C++支持 C 語言的幾乎全部功能,在語法上與 C 語言僅有極微妙的差別。 C++首先作為一門面向?qū)ο蟮恼Z言而聞名,這個特點在這里不再詳述。 C++強大模板功能使它能在編譯期完成許多工作,從而大大提高運行期效率 。隨著 STL 的不斷發(fā)展,它已經(jīng)逐漸成為 C++程序設(shè)計中不可或缺的部分,其效率可能比一般的 na239。 套接字實現(xiàn)流程 1 、 套接字工作原理 (1) 當(dāng)應(yīng)用進程需要使用網(wǎng)絡(luò)進行通信時就發(fā)出系統(tǒng)調(diào)用,請求操作系統(tǒng)為其創(chuàng)建 “套接字 ”,以便把網(wǎng)絡(luò)通信所需要的系統(tǒng)資源分配給該應(yīng)用進程。應(yīng)用進程所進行的網(wǎng)絡(luò)操作都必須使用這個號碼。 創(chuàng)建套接字 (流程把文字改成程序流程圖) 服務(wù)器端: 當(dāng)套接字被創(chuàng)建后,它的端口號和 IP 地址都是空的,因此應(yīng)用進程要調(diào)用 bind(綁定) 來指明套接字的本地地址。這就叫做 把本 地地址綁定到套接字 。 UDP4服務(wù)器由于只提供無連接服務(wù),不使用 listen 系統(tǒng)調(diào)用 。系統(tǒng)調(diào)用 accept 的一個變量就是要指明從哪一個套接字發(fā)起的連接。 if(!Chatsend. Create(nPort)){//初始化 socket. MessageBox ( “ SendSocket create failed!”, MB— ICONSTOP); Return ; else ChatSend. Bind(nPort, strAddr);//把本地址和 socket綁定 ,其中 nPort是 socket的端口號, strAddr是機器的 IP地址。 具體客戶端進程代碼如下所示: if(!AfxSocketlnit()){ MessageBox( “WindowsSocket initial failed!” , “Receive”, MB— ICONSTOP); Return; }//套接字初始化 bcket ChatReceive;//構(gòu)建一個 Socket對象 if(!ChatReceive. Geste(nPort)){//初始化 socket. MessageBox(“Receive. Socket create failed !” , “Receive”, MB— ICONSTOP); Return; } else{ChatReceive. Connect(strAdamp。 hCom=CreateFile(COM1, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL)。 } BOOL error=SetupComm(hCom,1024,1024)。 error=GetCommState(hCom,amp。 if(!error) MessageBox(getmstate,error)。 =8。//NOPARITY。 error=SetCommState(hCom,amp。 (二) CRC 校驗碼計算 UINT crc void calccrc(BYTE crcbuf) { BYTE i。 for(i=0。i++) { BYTE TT。1。 crc=crcamp。 if (TT==1) crc=crc^0xa001。0xffff。//讀取地址為 11 的巡檢表數(shù)據(jù) zxnum=10。 writebuf2[1]=3。 writebuf2[3]=0。 writebuf2[5]=zxnum。 calccrc(writebuf2[0])。 calccrc(writebuf2[2])。 calccrc(writebuf2[4])。 writebuf2[6]=crc amp。 writebuf2[7]=crc/0x100。num,NULL)。num,NULL)。 第五章 對程序?qū)崿F(xiàn)結(jié)果的分析 程序?qū)崿F(xiàn)結(jié)果演示 (這個實現(xiàn)有點悲?。? 該課題的實現(xiàn)包括客戶端和服務(wù)器兩部分,而兩部分的實現(xiàn)有 異曲同工之妙,由于都是采用嵌入 MODBUS 協(xié)議的應(yīng)用層,在 MODBUS 編程上沒有差異。因為該模型要求服務(wù)器端完成更多的工作,包括端口的綁定和監(jiān)聽,而客戶端只是得到端口號并建立連接。在表 1 中 , 9個包是寫單 個寄存器命令 ,單次完成一個命令操作通信雙方需交換 9個數(shù)據(jù)包 , 基中前三個包完成 TCP 連接 , 后續(xù)二個包完成命令操作的請求和響應(yīng) , 最后 4個包完成 TCP 的關(guān)閉。表 1如下所示: No Source Destination Protocol Info 1 TCP 3047502[SYN]Seq=0 Ack=0 Win=65535 Len=0 MSS=1460 2 TCP 5023047[SYN,ACK]Seq=0 Ack=1Win=65535Len=0MSS=1400 3 TCP 3047502[ACK]Seq=1Ack=1Win=65535Len=0 4 MODBUS/TCP query[1pkt(s)]:trans: 0。until: 1,func: 6,Write single register 6 TCP 3047502[FIN,ACK]Seq=13Ack=13 Win=65523 Len=0 7 TCP 5023047[ACK]Seq=13 Ack=14 Win=65523Len=0 8 TCP 5023047[FIN,ACK]Seq=13 Ack=14 Win=65523 Len=0 9 TCP 3047502[ACK]Seq=14Ack=14 Win
點擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1