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

正文內容

基于sockett和plc的遠程控制系統-文庫吧

2025-04-17 20:15 本頁面


【正文】 SG 圖 23 串口通信結構 有 問題請 EMAIL: 8 3 遠程控制系統軟件部分 服務器端與客戶端通信編程 采用 VC++下的 MFC 框架編程 MFC 框架定義了應用程序的輪廓,并提供了 用戶接口的標準實現方法。所以我們要做的就是通過預定義的接口把具體應用程序特有的東西填入這個輪廓。Microsoft Visual C++提供了相應的工具來完成這個工作: AppWizard 可以用來生成初步的框架文件;資源編輯器用于幫助直觀地設計用戶接口 。ClassWizard 用來幫助添加代碼到框架文件;最后進行編譯 [1]。 MFC 提供了兩個用于 WinSock 編程的類: CAsyncSocket 和 CSocket,它們避免了程序被掛起的可能,使得應用程序更高效。例如:通過套接字發(fā)送一個字符串到另一臺主機,我們可以調 用 socket 的 Send()函數,此函數嘗試發(fā)送數據,但如果套接字沒有準備好并在等待則 Send()就返回;當套接字準備好時,一個消息發(fā)往套接字窗口,并由該窗口捕獲消息并發(fā)送數據,這樣就實現了異步 Winsocket 通信。此外, MFC 還把復雜的 Winsock API 封裝到類里,這使得編寫應用程序更加容易。 客戶端開發(fā)整體流程 Sockets 的大部分工作 是 基于連接的:兩個應用程序在每一端使用一個套接字形成一個連接,此后應用程序沿著此 連 接發(fā)送及接收數據。 WinSock 支持兩種類型的套接字:流式套接字( SOCK_STREAM) 和數據包套接字( SOCK_DGRAM)。流式套接字提供了一個面向連接的,可靠的,數據無錯的,無重復發(fā)送的及按發(fā)送順序接收數據的服務。流式套接字使用傳輸控制協議( TCP)。當用戶想發(fā)送大批量數據時或想讓發(fā)送的數據按順序無重復的到達目的地時,使用流式套接字是最方便的。 客戶端程序的編寫過程如下: (1)創(chuàng)建一個基于對話框的項目 Client。 ( 2)去掉 Ok 和 Cancel 兩個按鈕,增加 IDC_BUTTON_CONNECT(連接 )、IDC_BUTTON_EXIT(關閉)、 IDC_BUTTON_SEND(空調開)等按鈕,增加 Edit 控件IDC_EDIT_IPADDR(用來輸入 IP 地址 )和 IDC_EDIT_PORT(用來輸入端口號)。 ( 3) CAsyncSocket 類用 DoCallBack()函數處理 MFC 消息,當一個網絡事件發(fā)生時, DoCallBack()函數按網絡事件類型: FD_READ、 FD_WRITE、 FD_ACCEPT、FD_CONNECT 分別調用 OnReceive()、 OnSend()、 OnAccept()、 OnConnect()函數。由于 MFC 把這些事件處理函數定義為虛函數,所以要生成 一個新的 C++類以重載這些函數,具體做法如下:以 Public 方式繼承 CAsyncSocket 類,生成新類MySocket;為 MySocket 添加虛函數 OnReceive()、 OnConnect()、 OnSend()。 有 問題請 EMAIL: 9 .3 創(chuàng)建 CAsyncSocket 對象,生成套接字 在使用一個套接字以前必須創(chuàng)建它,這個工作分為兩步:首先構造一個CAsyncSocket 對象,接著調用 CAsycSocket 類的成員函數 Creat()來創(chuàng)建底層的套接字。 CAsyncSocket:: Creat()函數的聲明如下: BOOL Creat( UINT nSocketPort=0, Int nSocketType=SOCKET_STREAM, long lEvent=FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT|FD_CLOSE LPCTSTR lpszSocketAddress=NULL )。 其中,第一個參數 nSocketPort 指定一個分配給套接字的端口號,默認值為 0。在很多情況下,特別是在服務器應用程序中,用戶要明確 地 分配一個公認的的端口號給套接字,這個端口一旦確定就不應該隨意 改動,因為客戶端應用程序可以使用這個端口和服務器應用程序相連接。 本程序中創(chuàng)建套接字的過程如下: 首先創(chuàng)建 CAsyncSocket 對象 m_clientSocket。 再由 m_clientSocket 調用 CAsyncSocket 的成員函數 Creat() 。 (0,SOCK_STREAM,FD_CONNECT)。 套接字與服務器連接 使用流式套接字就存在一個在客戶端和服務器端建立連接的過程,只有在客戶端和服務器端之間建立了連接,套接字才能進行數據傳輸工作。 客戶 端應用程序的流式套接字可以使用 Connect()成員函數來和服務器端進行連接。 Connect()成員函數,實際上是向服務器發(fā)出一個連接請求,這個連接請求如果被服務器接受,則兩端的鏈接順利實現;如果連接請求得不到響應,那么連接無法建立。對于異步事件, CAsyncSocket 對象使用通知回調( notification callback)。在這種情況下,如果 Connect()成員函數不能得到立即響應,它將返回 FALSE。無論 Connect()成員函數調用成功與否,在結束調用之后, OnConnect()事件處理函數 都將被調用。 本程序中套接字與服務器連接的過程如下: (m_szServerAdr,m_szPort)。 其中 m_szServerAdr 表示主機名, m_szPort 指定連接的端口號。 服務器接受客戶端的連接 有 問題請 EMAIL: 10 對于服務器端應用程序,為了能夠獲得客戶端的請求,必須創(chuàng)建一個專門的服務器套接字來監(jiān)聽是否有連接請求。在服務器端,用戶創(chuàng)建了套接字對象后,可以調用 Listen()成員函數來監(jiān)聽連接請求 [14]。 本程序中服務器接受客戶端連接的過程如下: ( 2 ); 其中參數 2指定了 WinSock 在請求被接受以前或 WinSock 開始試圖向請求連接的客戶機返回 WSAENCONNECTREFUSED 之前,等待隊列中最大的連接請求數為 2。 為了接受客戶端的請求,服務器端應用程序可以調用 Accept()成員函數 [11]。 Accept (*pSocket) 對象 pSocket 是一個 CAsyncSocket 對象,它是用來和客戶端套接字建立連接的服務器套接字,在使用這個對象之前,用戶不需要調用 Creat()成員函數來構建底層的套接字,在 Accept()成員函數的調用過程中,函數本身會處理。 Accept()成員函數一般在 OnAccept()事件處理函數中被調用。 發(fā)送并接收流式數據 一旦在服務器和客戶端之間建立了連接,數據就可以通過套接字被傳遞了。從流式套接字發(fā)送數據,使用 CAsyncSocket 類的 Send()成員函數;接受數據則使用 Receive()成員函數 [12]。 本程序中發(fā)送流式數據過程如下: Send( m_szBuffer,m_nLength,0) 。 其中 m_szBuffer 是一個緩沖區(qū)的指針,參數 nBufLen 制定了該緩 沖區(qū)的長度。在 Send()成員函數,該緩沖區(qū)存放了要發(fā)送的數據。 本程序中接收流式數據過程如下: Receive( m_szBuffer, 4096*sizeof( char) ,0) 其中 m_szBuffer 是一個緩沖區(qū)的指針 ,參數 4096*sizeof( char)制定了該緩沖的長度。在 Reiceive()函數,緩沖區(qū)用來存儲將要接收的數據。 關閉套接字 結束了數據傳輸工作之后,在關閉應用程序之前,應該調用 CAsyncSocket 類的成員函數 Close()來釋放與套接字有關的系統資源。 Close()成 員函數也可以在CAsynSocket 對象被刪除時由該類的析構函數來調用 [13]。 本程序中客戶端關閉套接字過程如下: () 。 客戶端運行后如下圖所示 : 有 問題請 EMAIL: 11 圖 31 遠程控制客戶端界面 服務器端運行后如下圖所示: 圖 32 遠程控制服務器端界面 服務器端與 PLC 通 信編程 MSComm( Microsoft Communications Control)控件是 Microsoft 公司提供方有 問題請 EMAIL: 12 的用于簡化 Windows 環(huán)境下串行編程的 ActiveX 控件,它為應用程序提供了通過串行接口收發(fā)數據的簡便方法。 MSComm 控件的常用屬性: SetCommPort:設置并返回通信端口號。 SetSettings: 設置并返回波特率、奇偶校驗、數據位、停止位參數。 其中字符n、 o、 e 分別代表無校驗,奇校驗和偶校驗。 SetPortOpen:設置并返回通信端口的狀態(tài)。設置為 True 時,打開端口 ;設置為 False 時,關閉端口。 SetInputModel:設置從從緩沖區(qū)讀取數據的格式,設為 0 時為字符串格式( Text);設為 1 時為二進制格式( Binary) SetRThreshold:在 MSComm 控件設置 CommEvent 屬性為 EvReceive 并產生OnComm 事件之前,接收緩沖區(qū)接收的最小字節(jié)數。若設為 0,不會產生 OnComm 事件。一般設為 1,接收緩沖區(qū)收到每一個字符都會使 MSComm 控件產生 OnComm 事件。 SetInputLen:設置和返回 Input 每次讀出的字節(jié)數,設為 0 時讀出接 收緩沖區(qū)中的全部內容 [10]。 在本程序中串口編程如下: if(()) (FALSE)。 (1)。 //選擇 1 if( !()) (TRUE)。//打開串口 else AfxMessageBox(cannot open serial port)。 (9600,n,8,1)。 //波特率 9600,無校驗, 8個數據位, 1個停止位 (1)。 //1:表示以二進制方式檢取數據 (1)。 //參數 1 表示每當串口接收緩沖區(qū)中有多于或等于 1 個字符時將引發(fā)一個接收數據的 OnComm 事件 (0)。 //設置當前接收區(qū)數據長度為 0 ()。//先預讀緩沖區(qū)以清除殘留數據 有 問題請 EMAIL: 13 4 實驗 實驗目的 驗證控制信息能否正確無誤 地 從客戶端傳到服務器端,再由服務器端傳到 PLC。 實驗整體流程 運行遠程控制程序,首先打開服務器端,設置監(jiān)聽端口,以便監(jiān)聽來自客戶端的鏈接請求。在客戶端,輸入服務器 IP地址和端口號,來和服務器端進行通信。服務器端和客戶端成功建立通信連接后,客戶端發(fā)出一個控制信息,驗證服務器端是否能正確接收,服務器端再通過串口來和 PLC 進行通信,驗證 PLC 端能否正確就收服務器傳過來的信息。 服務器端通信設置 圖 41 服務器端設置 如上圖所示,在監(jiān)聽端口文本框里輸入端口號: 8888,然后單擊按鈕“監(jiān)聽”按鈕,來監(jiān)聽客戶端的連接請求,與客戶端建立連接做準備。選中數據采集框,以便把建立連接后從客戶端傳來的控制信息,傳送給 PLC。 客戶端通信設置 有 問題請 EMAIL: 14 圖 42 客戶端設置 如上圖所示,首先在 IP 地址文本欄里輸入服務器端 IP地址,在端口號文本欄里輸入服務器正在監(jiān)聽的端口號。然后再單擊連接按鈕。此時服務器端將和客戶端建立連接,如果連接成功
點擊復制文檔內容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1