前言:中文期刊網精心挑選了通信軟件范文供你參考和學習,希望我們的參考范文能激發你的文章創作靈感,歡迎閱讀。
通信軟件范文1
【關鍵詞】 PowerPC DSP 雙口存儲器 故障管理
PowerPC處理能力強,性能優異、體積小、重量輕、散熱量小,在航空航天、石油、水利、交通運輸、工業控制、數控采集等領域獲得了廣泛的應用。DSP它不僅具有可編程性,而且實時運行速度可達每秒數以千萬條復雜指令程序,遠遠超過通用微處理器。將PowerPC和FPGA結合的相控陣雷達波束控制系統能夠充分利用PowerPC的高性能處理能力和FPGA的定制電路設計能力,同時兼顧功耗、成本、設計周期等因素,是對體積要求小、負載要求輕、計算能力要求高的相控陣雷達波束控制系統的有效解決方法。
一、總線通信系統架構
總線通信系統由一個CPU(PowerPC)模塊、一個DSP模塊以及電源模塊組成。CPU模塊采用PowerPC750處理器,同時集成了網卡和大容量FLASH,具有高速的數據采集及處理、仿真任務調度以及數據存儲等功能。DSP模塊采用TMS320F240系列芯片,通過局部總線,與外界設備通過RS422、ARINC429等數據交換總線相連。用戶通過PowerPC發送和接收任務數據,PowerPC再通過雙口存儲器與DSP相連接,進行數據交換,DSP則負責RS422串行通信總線和ARINC429總線通信的控制管理、數據接收和發送等,以上整個系統完成了總線的通信功能。主處理器為P2020通用嵌入式雙核處理器,從處理器為XC7K325T FPGA,主處理器基本功能是根據天線波束指向要求,計算各天線單元移相器所要求的波控碼,傳輸至每一個移相器,控制每一個移相器相位狀態的轉換。從處理器主要完成波控碼值的分發,可以通過并行或者串行的方式,以減少碼值分發的時間。
二、總線通信系統軟件設計
軟件設計層次結構包括Bootrom、VxWorks操作系統、應用程序三個部分。BootRom:主要用于操作系統映像、應用程序的加載,運行在目標機上,可以通過網絡RJ45接口、串行RS232接口與宿主計算機板卡建立連接這種方式,把操作系統的映像、應用程序更新到系統的FLASH存儲設備中,同時提供相關的功能,設置BOOTROM的啟動方式、啟動參數、自身更新BootRom程序。Vxworks操作系統:主要提供嵌入式系統所需要的任務調度、同步機制、中斷處理、文件管理等基本功能、與目標機相關的設備驅動。嵌入式VxWorks操作系統內核和相關組件是由WindRiver公司提供的,在波控軟件設計中,需提供與操作系統相關的硬件驅動程序。應用程序:應用程序為運行在VxWorks操作系統之上的波控程序。
三、總線通信系統軟件設計
1、總線通信系統軟件概述??偩€通信系統軟件由驅動軟件和控制軟件組成,是實現RS422串行通信和ARINC429總線通信的專用軟件。其中,驅動軟件實現DSP與主機應用軟件間的接口控制與數據傳遞,它可提供各類消息數據的讀、寫支持,對DSP內程序的調度??刂栖浖撠烺S422串行通信和ARINC429總線通信的控制、數據接收和發送等。
2、驅動軟件。驅動軟件運行在PowerPC模塊上,是應用軟件與控制軟件的接口軟件,為實現應用軟件的管理功能,驅動軟件控制DSP模塊的初始化、啟動、停止、自測試,監控DSP模塊狀態,控制DSP模塊和主機的數據交換。當DSP在處在停止狀態,調用DSP_Bit進行DSP自檢測,調用DSP_Initialize進行DSP初始化。驅動軟件按其功能分為:模塊控制程序、RS422控制程序、ARINC429總線控制程序、操作信息控制程序。模塊控制程序的主要功能是啟動DSP模塊上的初始化程序,使DSP初始化,然后啟動DSP上的啟動程序使DSP開始工作,還可以停止DSP運行以及啟動DSP上的BIT程序進行自檢測。RS422控制程序的主要功能包括對RS422各通道進行初始化(各通道的接收/發送數據緩沖區劃分,每個數據塊的新數據、錯誤、中斷等標志字的設置,波特率、奇偶校驗位、數據位和停止位的設置),接著從雙口存儲器讀DSP端RS422接收到的消息,并將要通過RS422發送的消息數據寫入雙口存儲器,最終由DSP上的RS422進行數據發送。
通信軟件范文2
關鍵詞:嵌入式 網絡終端 通信軟件設計
中圖分類號:TP311 文獻標識碼:A 文章編號:1003-9082(2015)11-0001-01
前言
嵌入式網絡終端的通信軟件設計,是以計算機技術為基礎,將可用于通信系統的軟件以嵌入式的方式與通信系統融合,實現通信系統的智能化和技術化,滿足當下人們的通信需求。隨著計算機技術、信息技術、網絡技術的發展,嵌入式網絡終端系統得到了前所未有的發展和進步,其在通信系統的應用,更是促進了網絡通信系統的發展,對傳統通信行業帶來了巨大的沖擊。本文著重分析了嵌入式系統的構成,并就其系統程序進行了相關闡述,最后分析了利用嵌入式網絡終端如何實現通信軟件設計。
一、入式系統分析
嵌入式系統的核心是應用,通過利用嵌入式硬件,對應用體系中的相關功能加以改制,形成以嵌入式硬件為核心的計算機系統。嵌入式系統具有較強的可靠性和穩定性,能夠滿足系統的成本、功耗、體積等多方面的要求,在信息領域和通信領域得到了較為廣泛的應用。嵌入式系統由以下幾個部分構成:硬件設備、驅動設備、應用軟件設備。起重硬件設備包括嵌入式處理器以及嵌入式的設備,驅動設備主要指的是嵌入式系統軟件。應用軟件則是具體的系統軟件,是嵌入式系統與嵌入對象之間實現的功能[1]。
嵌入式網絡終端構成:
1.網絡終端核心板:這一設備是嵌入式網絡終端的核心部分,主要采用了S3C6410微處理器,具有較強的多媒體處理功能,并且具備256M存儲器,可以實現信息存儲功能;
2.電源模塊:主要以直流電源供電模式為主,并且配備電源適配器,保證系統電源穩定性;
3.串口模塊:串口模塊是實現設備連接的關鍵部位,是嵌入式網絡終端實現其功能的重要組成部分,方便用戶利用交叉串口線與PC機進行通訊連接;
4.以太網模塊:以太網模塊能夠更好地適應10/100M網絡,并可以與路由或是交換機實現自由連接;
5.音頻輸入、輸出模塊:嵌入式網絡終端應用的音頻輸入輸出模塊具有高度集成的性能,主要應用于移動設備和移動通信領域,采用了雙重編碼解碼操作,更加有利于信息的傳輸;
6.系統模塊:系統模塊主要包括LED、PWN形式的蜂鳴器、利用調試的接口、線路串口、音頻輸入、輸出口、紅外接收口等,實現數據傳輸的方便性。
二、基于嵌入式網絡終端的通信軟件設計
本文對嵌入式網絡終端的通信軟件設計的研究,以網絡聊天軟件設計與實現為例,通過分析網絡即時消息的傳播系統設計,我們可以更加直觀地看出嵌入式網絡終端是如何實現通信軟件設計的[2]。
1.網絡聊天軟件設計分析
網絡聊天軟件的設計,就是即時通信的一種現實表現形式,在設計過程中,主要包括用戶界面模塊、通信模塊、好友管理模塊。網絡聊天軟件的設計,是嵌入式網絡終端的一種具體應用,它方便了信息的傳輸,通過友好性界面的設計,實現了即時通信目標。嵌入式模塊在網絡聊天中的具體應用,主要是將應用程序的數據包通過傳輸層協議送到IP網絡上,并且利用TCP/IP協議傳輸層協議,將數據進行傳播。在數據傳輸過程中,需要利用UDP端口。UDP端口更加適用于一次性小批量數據傳輸,可以在很大程度上縮減數據包封包和傳輸的延遲時間,完成信息的即時傳播。
2.基于嵌入式網絡終端通信模塊設計與功能實現
網絡聊天的通信模塊采用Socket套接字編程,并且由UDP進行數據傳輸和接收。在傳輸和接受過程中,數據發送以定向模式進行傳輸,具體實現步驟如下:(1)UDP協議啟動函數程序,在數據傳輸過程中,利用IPV4的地址,將程序進行套接字類型轉化,并且利用UDP協議進行表示,將程序編碼翻譯過來,實現數字傳輸目標;(2)Bind函數綁定個人計算機的IP地址和終端,采用網絡數據的異步接收方法,將數據信息進行接收,并且進行回調方法將數據再傳輸出去;(3)數據信息到了傳輸目的地后,依舊靠UDP協議進行信息翻譯,從而實現雙方的通信交流。嵌入式網絡終端模塊進行信息傳輸過程中,具有一定的指向性,設備中的聊天系統可以通過廣播進行數據發送,通知好友,與好友進行聊天。在實際應用過程中,可以先進性Soket數據設置,使套接字允許發送廣播信息,并且根據異步接收方法,進行數據設置和調整,滿足數據傳輸需要。網絡聊天通信軟件的設計和實施,主要得益于嵌入式系統的串口模塊、以太網口模塊、音頻輸入輸出模塊的功能,完成數據、信息的傳播和接收,從而實現通信目標[3]。
結束語
隨著我國社會經濟的發展和進步,人們對通信的要求越來越高,如何加強嵌入式系統在通信軟件中的應用,滿足人們的通信需求,將是嵌入式系統應用于通信軟件中的日后發展方向。對此,在日后的應用過程中,我們應該注重嵌入式系統的改進,使之與通信軟件更好地融合,從而實現二者共同發展目標。
參考文獻
[1]何花. 基于嵌入式網絡終端的通信軟件設計[D].福建師范大學,2012.
[2]何花,王平,施文灶,徐世武. 基于WINCE5.0的通信軟件設計[J]. 電子測量技術,2010,11:117-123.
通信軟件范文3
1 多站遠程無線控制系統組成
多站遠程無線控制系統是以計算機作為中心控制站,用多個信號源作為下位機,通過無線模塊進行數據通信的。系統中的上位機作為數據接收和數據處理的中心站,當下位機實時采集到上位機發送的數據后,便可進行簡單的數據處理并向上位機回送數據。
上位機無線通訊接口使用串行端口與無線數傳模塊相連,數字信號通過天線調制后送到下位機的一臺外置無線模塊,然后通過串口送入單片機進行處理。系統組成框圖如圖1所示。
2 串行通訊控件
利用VB開發通信程序主要有兩種方法,一是利用VB本身提供的控件(CONTRALS),另一種是利用WINDOWS API應用程序接口。在實際應用中,用VB 控件實現通訊的方法比調用SDK的API動態連接庫的方法更加方便和快捷,而且可以用較少的代碼實現相同的功能,這就是用VB 控件實現通訊的優點所在,下面主要介紹一下利用VB 控件實現無線通訊的方法。
VB控件工具箱中提供了一個使用非常方便的串行通訊控件MSComm,它提供了使用RS-232串行通訊上層開發的所有細則。通過它完成串行通訊既可以使用查詢方式,又可以使用事件驅動方式??丶囊恍┲匾獙傩约捌湔f明如表1所列。
表1 MSComm控件的屬性說明
屬 性設定值說 明
ComPort1串口號,如果串口1已所用,改用串口2InBufferSize1024接收緩沖區大小InputLen0從接收緩沖區讀取的字節數,0表示全部讀取InputMode1接收數據的類型,0表示文本類型,1表示二進制類型OutBufferSize1024發送緩沖區大小RThreshold1設定接收幾個字符時觸發OnComm事件,0表示不產生事件,1表示每接收一個字符就產生一事件SThreshold0設定在觸發OnComm事件前,發送緩沖區所允許的最少的字符數,0表示發數據時不產生事件,1表示當發送緩沖區空時產生OnComm事件Settings1200,n,8,1串口的參數設置,依次為波特率、奇偶校驗(n-無校驗,e-偶校驗,o-奇校驗)、數據位數、停止位數3 應用實例
本系統的通訊網絡并非點對點的通訊,而是采用一點對多點的廣播式通訊方式。由于無線通訊可能會有空間的噪聲干擾,因此,需要采取一些抗干擾措施。首先是身份識別碼,因為給下位機編碼可以保證網絡通訊的有序性,因此,每個站都應有身份碼。其次是包頭識別碼,由于在發送了傳輸命令之后,下位機開始以打包的形式傳輸數據,因而每一包都有一個包頭和包尾識別碼,假如識別碼有誤,則表明該次傳輸為不正常數據。因此,應使用1200波特率、無奇偶校驗位、8 個數據位、1 個停止位的較穩定狀態。
上位機向下位機發送的參數有站號、狀態(開機、關機)、頻率、重復周期、脈寬、天線轉速、天線掃描方式、天線狀態、天線角度等。發送命令有手動方式和自動方式兩種。自動方式是由定時器自動完成的。為了及時知道分站的狀態和運行情況,還應設計定時查詢和即時查詢。
在無線通訊過程中,除了規定合理的協議之外,為了保證通訊的正確性,在數據發送時還應適當地增加延時,特別是當速度較慢的計算機向速度較快的計算機發送數據時,更應適當增加延時。
由于該項目的軟件源代碼較長,故只給出和串口通訊有關的程序片段供大家參考。筆者在工作中實踐了三種通訊方式,即查詢方式、事件驅動方式、事件驅動轉查詢方式。這三種方式各有利弊,其中查詢方式具有方便可靠的特點,可利用協議或設定時鐘來進入和退出查詢狀態,但它不是資源的有效利用方式;事件觸發方式對于定長通訊非常有效,但其定長通訊在有些場合不適用;而事件驅動轉查詢方式既有事件驅動的特點又有轉查詢方式的特點,可以說是匯集了前二者之長,故可有效利用資源。下面著重介紹事件驅動轉查詢方式。
由于在通訊中,RTS電平可置高或置低,如果用事件驅動,計算機就會進入中斷,資源就沒有有效利用,所以在程序中添加了一個接收函數。為了保證程序的可靠性和靈活性,可以運用設置身份碼等方法來保證各個子站互不干擾,具體實現過程的主程序流程圖如圖2所示。
除以上處理外,還可以使用以下方法來增加系統的可靠性、靈活性和效率。
(1)設置身份碼和目的地址
每個數傳模塊均有表示其唯一身份的身份碼,身份碼長為兩個字節共十六位。第一字節表示組碼,第二字節表示組內識別碼,身份碼可用D7H?F5H?XXH?YYH設置,可設置于模塊內的EEROM中,掉電后不丟失。在數據傳送前,應設置目的地址,以便確定由哪個來接收數據。采用此方法可以有效地防止干擾。
(2)使用動態數組
接收字節數據時,必須使用動態數組。一個動態數組被聲明后,可以利用Input屬性將串行端口輸入緩沖區內的數據指定到該動態數組中。被接收到的數據的實際大小必須利用Lbound及Ubound才能取得最大及最小索引值,同時也只有這樣,才能利用程序將內部的值一一顯示出來。另外,利用最大和最小索引值還可以判斷是否為一次成功接收。
(3)最優化TimeDelay
在每次傳輸指令后,一定要等待一段時間才可能從串行端口的輸入緩沖區中取得信號源傳回的數據,這個時間有多久是項目的關鍵,太長了效率太低,太短了,數據有可能接收不全,所以有必要進行最佳化測試。具體代碼如下:
Public Declare Function GetTickCount Lib ″ker-nel32″ ()?As Long
Dim Buf$
Dim T1&?T2&
Comm1.Output=Trim(Ucase(txtsend..Text)) & vbcr
T1=GetTickCount?()
Do
Buf=Buf & Comm1.Input
Loop Unitl Instr(1,Buf,vbCr)>0
T2=GetTickCount()
LblTime.Caption=CStr(T2-T1) & “ms”
該程序中使用GetTickCount來取得系統自開機后每千分之一秒更新的Tick值,在接收的前后加上取Tick值的敘述,自然就可以得到傳輸的時間了。從測試的結果來看,傳輸單個數據的時間為100ms,10個群組的時間約為500ms。
(4) 增加程序的效率
利用下面的程序可在無線通訊受到干擾或對方設備電源沒有打開等原因造成對方數據不能上傳時,避免程序一直在等待。如果在規定時間內還沒等到規定的字節數時就跳出循環,并出現一個重新發送對話框。此時如果還是不對,就彈出一個對話框“請檢查系統?。ⅰ>唧w程序如下:
Public Sub ReceiveData()
′On Error Resume Next
Dim start, dend As Integer
Dim byin() As Byte
Dim byindata(11) As Byte
Dim I%? buf$
′根據事件分發處理
Do While frmMSCommDemo.MSComm1.CommEvent = 2
Exit Do
Loop
Timedelay 850 ′適當延時
byin = frmMSCommDemo.MSComm1.Input
′接收串行端口內的數據至動態數組中
dend = UBound(byin) ′得到最大值
start = LBound(byin) ′得到最小值
If dend < 5 Then
MsgBox RadarNoOut & “信號源出現系統
故障,請求檢修!”? vbOKOnly
Exit Sub
End If
′接收串行端口內的數據至動態數組中
′ReDim Preserve byin(11) As Byte
If byindata(0) = &H55 And byindata(1) = &HAA
Then ′包頭正確,接收到包頭進行數據處理
.
.
.
End sub
′延時程序
Sub Timedelay(TT As Long)
Dim t As Long ′聲明一個長整數,記錄計數值
t = GetTickCount() ′取得系統計數值
Do ′開始循環
DoEvents
If GetTickCount - t < 0 Then t = GetTick-Count ′歸零
Loop Until GetTickCount - t >= TT ′計算延遲是否到達
End Sub
4 結論
根據本系統的研制經驗,利用MSCOMM控件開發無線通信要把握好以下三條:
(1) 收發之間應延時適當,這需要在測試中不斷地調試,以達到最佳效果。
通信軟件范文4
關鍵詞: TCP/IP;TCP協議; UDP協議;Winsock;遠程監測
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2013)04-0731-06
Design of TCP and UDP Communication Test Software
TU Jin-long
(Nanjing Communications Institute of Technology, Nanjing 211188, China)
Abstract: TCP and UDP are two protocols of TCP/IP transmission layer protocol. They use IP routing function to send packets to destinations, thus provide network services for applications and application layer protocols. TCP and UDP both have their advantages and disadvantages, the mai n difference between them lies in the connection state. Applications choose accord to the actual usage. Winsock can be used to write client and server applications without the need of knowing details of the TCP/IP. By setting Winsock attributes and call its control methods, connection to remote computers and two-way data exchange can be easily achieved.
Key words: TCP/IP; TCP protocol; UDP protocol; Winsock; remote monitoring
根據國家有關標準,各地應加強對客運車輛燃料消耗量檢測和監督管理,加快淘汰、更新高耗能的老舊營運車輛。但迄今為止,我國客運行業的能耗統計一直采用手工填寫統計報表的方式,不僅投入的人力物力大、數據誤差大,而且不能實時了解能耗情況。為此,需要研發一種客車能耗遠程監測系統,以便實時快速地采集客車運營過程中的有關信息,實現全自動的客車能耗數據分析、處理、評估,從而改變現行的由人工按月或年度填寫報表的統計方式,提高工作效率及數據的準確性,為管理部門對高能耗高污染車輛實施強制淘汰或報廢提供數據支持。
隨著計算機技術及網絡技術的不斷發展,人們的生活和工作越來越離不開網絡,尤其是網絡遠程控制技術已經廣泛地應用于網絡自動化管理、實時監控等方面。針對移動運行的客車,要實時獲取有關數據,就需要憑借無線網絡將采集到的數據傳到監控中心。在眾多的網絡通信中,以TCP/IP協議最為流行,為了測試遠程無線通信在具有防火墻的系統中的有效性,針對應用的特殊性,以及為了順利進行軟硬件的配接,需要先編寫一個測試通信鏈路的TCP和UDP通信測試軟件。
TCP和UDP是TCP/IP體系結構中的兩個傳輸層協議,它們使用IP路由功能把數據包發送到目的地,從而為應用程序及應用層協議提供網絡服務。TCP提供的是面向連接的可靠的端到端傳送服務,它可以在低層不可靠的情況下(如出現分組傳輸的丟失、亂序等)提供可靠的傳輸機制。而UDP提供的是無連接的、不可靠的傳輸服務,在數據傳輸之前,不需要建立連接,而且收方收到UDP數據報文之后,也不需要給出任何應答信息。顯然,UDP減少了很多的為保證可靠傳輸而附加的額外開銷,因而它的效率高[1]。因此,TCP與UDP各有其優缺點,要根據實際應用進行選擇。
1 TCP和UDP測試軟件的設計
使用TCP和UDP通信的方法有多種,在VB開發平臺上使用Winsock控件來設計軟件可以說是最方便的。Winsock即Windows Sockets規范的簡稱,是目前最流行的網絡通信應用程序接口之一。Socket通常也稱作“套接字”,用于描述IP地址和端口,是一個通信鏈的句柄。應用程序通常通過“套接字”向網絡發出請求或者應答網絡請求。
Winsock控件對用戶是不可見的,但它提供了訪問TCP/IP網絡的捷徑,使用它可以通過UDP協議或TCP協議方便地連接到遠程的機器并進行數據交換。用Winsock控件編寫客戶和服務器應用程序,不需要了解TCP/IP或調用底層Winsock API的具體細節。通過設置Winsock控件的屬性和調用該控件的方法,可以很容易地連接到遠程計算機并進行雙向的數據交換。
使用WinSock控件時,首先要確定的是使用TCP還是UDP協議,它們之間主要的區別在于連接狀態。
1.1 TCP測試軟件設計
TCP協議是面向連接的協議,在數據傳輸前就建立好了點到點的連接。TCP網絡程序工作原理如圖1所示[2]。
圖1 TCP網絡程序工作原理
基于 TCP/IP 協議網絡通信主要模式就是客戶機/服務器模式(Client/Server 模式,簡稱 C/S),即客戶端提出請求,服務器在監聽時接收到請求后就提供請求服務。遠程控制是基于 C/S 模式來實現的,所以程序分為服務器和客戶端程序??蛻舳撕头掌鞫诉B接成功后,通過信息交換取得相應的服務。因此,在進行編程時,服務器端程序應設置Winsock控件的LocalPort屬性和調用 Listen 方法來監聽,客戶機端程序則要設置 Winsock 控件的 RemoteHost 和 RemotePort 屬性、調用 Connect 方法請求連接[3]。一旦建立了連接,兩臺計算機之間就可以發送和接受數據了。要發送數據,調用SendData方法。當接受數據時,產生DataArrival事件。在DataArrival事件中調用GetData方法來接收數據。
在VB6開發平臺上可以方便地使用Winsock控件來設計網絡通信軟件,為了測試的方便,將客戶端和服務器端的軟件設計在同一軟件中,通過標簽來選擇是客戶端還是服務器端,或是UDP測試,也可以在同一臺電腦中運行軟件完成測試。在設計階段,添加好必要的窗體和按鈕、文本框并設置所需的名稱、屬性后,在窗體中放置Winsock控件,在屬性窗口里的協議,選擇sckTCPProtocol,也可以在代碼里配置協議,例如:
Winsock1.Protocol=sckTCPProtocol
1.1.1服務器端程序
為了能接受多個連接請求,需要創建新的控件實例,調用新的實例中的接受方法。下面是創建一個服務器端程序的主要內容:
1)設置端口并偵聽(監聽)。雙擊“開始偵聽”按鈕,在代碼中加入要設置的LocalPort,并開始監聽,代碼如下:
Private Sub cmdListen_Click()
If TCP_Server(0).State sckClosed Then TCP_Server(0).Close
TCP_Server(0).LocalPort = txtLocalPort(2).Text
TCP_Server(0).Listen
End Sub
2)監聽連接請求。監聽方法在控件中被調用,每個連接請求到來時,代碼會測試看它的索引(Index)是否為0(監聽控件的值),根據其值是否為0執行不同的操作。代碼如下:
Private Sub TCP_Server_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Dim i As Long
If Index = 0 Then '主Winsock——Winsock(0)發生消息
i = 1
If maxConnext > 0 Then
While i
i = i + 1
DoEvents
Wend
End If
If i
TCP_Server(i).LocalPort = txtLocalPort(2).Text
TCP_Server(i).Accept requestID
nowconnext(i) = True 'Winsock(i)被占用
Else
If maxConnext > 50 Then
MsgBox "已經達到最大用戶數!", vbExclamation + vbOKOnly, "提示"
Exit Sub
End If
maxConnext = maxConnext + 1
Load TCP_Server(maxConnext)
TCP_Server(maxConnext).LocalPort = txtLocalPort(2).Text
TCP_Server(maxConnext).Accept requestID
ReDim Preserve nowconnext(maxConnext + 1)
nowconnext(maxConnext) = True
ReDim Preserve saveServerData(maxConnext + 1)
ReDim Preserve saveServerIndex(maxConnext + 1)
i = maxConnext
End If
End If
End Sub
3)服務器端發送數據。若選中發送回車符,則在代碼中增加發送回車符,若選中發送換行符,則在代碼中增加發送換行符。若是廣播,則逐個發送,否則需要選擇發送目標。主要代碼如下:
Private Sub cmdSend3_Click()
Dim i As Integer
Dim sendresult As Long
Dim sendsrc() As Byte
Dim sendsrclen As Long
Dim sendmess(1 To 1024) As Byte
Dim outByte() As Byte
If Me.ckHex(2).Value = 1 Then '十六進制發送
sendsrclen = Len(txtSend(2).Text) / 2 - 1
ReDim sendsrc(0 To sendsrclen)
For i = 0 To sendsrclen
sendsrc(i) = Val("&H" & Mid(txtSend(0).Text, i * 2 + 1, 2))
Next
Else
outByte = StrConv(txtSend(2).Text, vbFromUnicode)
sendsrc = outByte
sendsrclen = UBound(outByte)
End If
If chkGB.Value = 1 Then
For i = 1 To maxConnext
If TCP_Server(i).State = sckConnected Then
TCP_Server(i).SendData sendsrc
End If
DoEvents
Next
Else
Dim findSerVer As Boolean
For i = 1 To maxConnext
If saveServerIndex(i) = Val(Combo1.Text) Then
findSerVer = True
Exit For
End If
Next
If i > 0 And findSerVer = True Then
If TCP_Server(i).State = sckConnected Then
TCP_Server(i).SendData sendsrc
End If
Else
MsgBox "請選擇發送目標!", , "提示:"
End If
End If
End Sub
4)服務器端接收數據,數據到達后,先調用TCP_Server控件的getdata方法,將接收的數據以vbstring數據類型,存放在strdata變量之中,然后再加到txtReceive(2)控件之中。主要代碼如下:
Private Sub TCP_Server_dataarrival(Index As Integer, ByVal bytestotal As Long)
Dim strdata As String
TCP_Server(Index).GetData strdata, vbString
txtReceive(2).Text = txtReceive(2).Text & Index & ":" & TCP_Server(Index).RemoteHostIP & ":" & TCP_Server(Index).RemotePort & ":" & strdata & vbCr
End Sub
以上是創建一個服務器端程序的主要內容,為了方便使用,還可適當增加一些輔助的功能,運行后的服務器端界面如圖2所示。
圖2 TCP協議服務器端測試軟件運行界面
1.1.2 客戶端程序
1)設置遠程主機端口并連接。雙擊“建立連接”按鈕,在代碼中指定遠程主機的ip地址,并調用TCP_Client控件的connect方法,來初始化與主機的連接請求,代碼如下:
Private Sub cmdConnect_Click()
On Error GoTo connectErr
If Tcp_Client.State sckClosed Then Tcp_Client.Close
Tcp_Client.RemoteHost = txtRemoteHost(1).Text
Tcp_Client.RemotePort = txtRemotePort(1).Text
Tcp_Client.Connect
TimerConnect.Enabled = True
Exit Sub
connectErr:
StatusBar1.Panels.Item(2).Text = "未能成功連接。" & Err.Number
End Sub
2)客戶端發送數據。若選中發送回車符,則在代碼中增加發送回車符,若選中發送換行符,則在代碼中增加發送換行符。主要代碼如下:
Private Sub cmdSend2_Click()
Dim i As Integer
Dim sendresult As Long
Dim sendsrc() As Byte
Dim sendsrclen As Long
Dim sendmess(1 To 1024) As Byte
Dim outByte() As Byte
On Error Resume Next
If Me.ckHex(1).Value = 1 Then '十六進制發送
sendsrclen = Len(txtSend(1).Text) / 2 - 1
ReDim sendsrc(0 To sendsrclen)
For i = 0 To sendsrclen
sendsrc(i) = Val("&H" & Mid(txtSend(0).Text, i * 2 + 1, 2))
Next
Else
outByte = StrConv(txtSend(1).Text, vbFromUnicode)
sendsrc = outByte
sendsrclen = UBound(outByte)
End If
If chk13(1).Value = 1 Then
sendsrclen = sendsrclen + 1
ReDim Preserve sendsrc(0 To sendsrclen)
sendsrc(sendsrclen) = 13
End If
If chk10(1).Value = 1 Then
sendsrclen = sendsrclen + 1
ReDim Preserve sendsrc(0 To sendsrclen)
sendsrc(sendsrclen) = 10
End If
If Tcp_Client.State = sckConnected Then
Tcp_Client.SendData sendsrc
Else
MsgBox "請先建立連接!", , "提示:"
End If
End Sub
3)客戶端接收數據,先調用TCP_Client控件的getdata方法,將接收的數據以vbstring數據類型存放strdata變量之中,然后將strdata變量的內容,加到txtReceive(1)控件之中。主要代碼如下:
Private Sub TCP_Client_dataarrival(ByVal bytestotal As Long)
Dim strdata As String
Tcp_Client.GetData strdata, vbString
txtReceive(1).Text = txtReceive(1).Text & strdata
End Sub
本部分是創建一個客戶端程序的主要內容,運行后的界面如圖3所示。
1.2 UDP測試軟件
UDP是無連接的協議。與TCP操作不同,計算機并不建立一個連接。并且,UDP應用程序可以是用在客戶端,也可以用在服務器端。使用UDP協議,在兩個Winsock控制間進行數據的發送,在連接的兩端必須完成以下三步:
1)設置RemoteHost屬性;
2)設置RemotePort屬性;
3)申請Bind方法。
通過使用方法Bind,則可將該Winsock捆綁到一個本地端口,以便該Winsock使用該端口來進行類似TCP的“監聽”功能,并防止其它應用使用該端口。
使用UDP協議傳送數據,首先設置客戶計算機的LocalPort屬性。而作為服務器的計算機僅需要設置RemoteHost屬性為客戶計算機的IP地址或域名,并將其RemotePort屬性設置成客戶計算機上的LocalPort屬性。主要代碼如下:
WinsockUDP.RemoteHost = txtRemoteHost(0).Text
WinsockUDP.RemotePort = txtRemotePort(0).Text
WinsockUDP.LocalPort = txtLocalPort(0).Text
WinsockUDP.Bind txtLocalPort(0)
然后就可通過SendData方法來開始信息發送,客戶計算機則可在其DataArrial事件中使用方法GetData來獲取發送的信息,發送和接收數據的代碼與TCP通信的代碼類似。UDP測試程序運行后的界面如圖4所示。
圖4 UDP協議測試軟件運行界面
2 結束語
TCP和UDP是TCP/IP體系結構中的兩個傳輸層協議,它們使用IP路由功能把數據包發送到目的地,從而為應用程序及應用層
協議提供網絡服務。TCP提供的是面向連接的可靠的端到端傳送服務,而UDP提供的是無連接的傳輸服務,在數據傳輸之前,不需要建立連接,因而它的效率高。TCP與UDP各有其優缺點,它們之間主要的區別在于連接狀態,應用時要根據實際應用進行選擇。
使用TCP和UDP通信的方法有多種,在VB開發平臺上使用Winsock控件來設計軟件可以說是最方便的。用Winsock控件編寫客戶和服務器應用程序,不需要了解TCP/IP的具體細節。通過設置Winsock控件的屬性和調用該控件的方法,可以很容易地連接到遠程計算機并進行雙向的數據交換。
參考文獻:
[1] 天津電氣傳動設計研究所.電氣傳動自動化技術手冊[M].北京:機械工業出版社,2011.
通信軟件范文5
以“軟”碰“硬”
實際上,微軟非常重視統一通信市場,在研發和市場營銷方面均投入了很多的資源,并給Office Communications Server(OCS)取了一個更短的名字――Lync,也聚集了更多的合作伙伴。微軟準備在統一通信領域和思科、Avaya和IBM等硬件廠商打一場硬仗。
Lync 2010雖然是OCS的繼任者,不過與OCS有很大不同。Lync 2010使用同一個用戶界面來管理多種通信,包括即時通信、語音呼叫、視頻呼叫、視頻會議、Web會議,還新增了即時動態、通訊錄名片變更和720p高清視頻通話等功能。
對企業來說,Lync 2010的誘惑是:它有能力取代傳統的PBX(程控交換機)和會議系統,可以為公司節省可觀的硬件和許可成本。但企業在考慮Lync 2010時不能只看到其優點。雖然它使溝通更容易,更節省成本,但也會造成工作人員分心,并且語音和視頻也會消耗掉企業大部分網絡帶寬。
Lync 2010除了為人們的溝通方式帶來革命性的變化外,企業IT部門還期待通過Lync 2010改進基礎設施,消除傳統的PBX系統以節省時間和資金。孫建東表示:“在Lync 2010正式前,我們在全球已經有60多個客戶做過了先期的體驗,有100多個客戶做了技術體驗。在中國也已經有5個客戶率先把Lync 2010在他們的公司中?!?/p>
改變溝通方式
Lync 2010繼承了即時通信、在線狀態、音頻、視頻、網絡會議和話音功能。通過Lync 2010人們可以根據時機情況選擇最合適的方式進行溝通。Lync 2010支持用戶所熟悉和常用的應用程序,包括Microsoft Office、Microsoft SharePoint和Microsoft Exchange等。
孫建東對記者說:“在微軟我們已經不用電話了,這對我們來說是額外的成本節省?,F在每個人都有一個耳機,我平常在23層辦公,但有時候我到20層跟我的團隊一起辦公,我要做的事情就是把電腦搬下去。擴展性強是基于軟件的解決方案帶來的最大好處?!?/p>
中國人壽再保險股份有限公司副總經理成小平說:“我們對微軟系統做了全面的了解,它的有些功能確實很適合我們的需求。2005年,我們就部署了OCS,它把即時通信以及在線感知、快速溝通、人員狀態情況集成到OA系統中。那時開始,大家就覺得使用起來比較順手。今天Lync 2010更吸引人的地方,就是它可以實現多點溝通?!?/p>
通信軟件范文6
關鍵詞:模擬I2C總線多主機系統通用軟件包
引言
I2C是由Philips公司推出的芯片間串行傳輸總線。它以規范嚴謹、使用簡單靈活、支持的器件繁多等特點而被廣泛應用。對于不具備I2C接口的主器件(通常指MCU),可利用普通的I/O口來模擬I2C總線,但由于無法解決多主競爭問題而只能應用在單主機系統中。本文提供了一種解決方案,可將模擬I2C總線應用在多主機系統中,實現模擬I2C的多主通信。
1模擬I2C多主通信的設計原理
在I2C總線系統中,可以有多個主器件節點。當多個主器件節點都企圖控制總線時,就會出現多主競爭。這時就需要進行仲裁,裁決的結果只允許其中一個主器件節點成為主控器。而硬件I2C系統之所以支持多主系統,是因為其具有的三個特性:①接口的線“與”邏輯功能;②內部沖突檢測電路;③I2C中斷和狀態處理程序。這使其能夠自動完成多主競爭時的時鐘同步與總線仲裁,無須用戶介入。而在模擬I2C系統中,如果能通過軟硬件設計模擬出上述的三個特性,就等于解決了競爭仲裁與同步問題,那么模擬I2C總線就完全可以應用于多主機系統中。
首先,經過理論分析與實驗驗證,得知并聯在一起的MCU的普通I/O口線本身就具有線“與”特性。其次,為了避免主節點在總線繁忙時啟動總線而引起的沖突,需要增加一條握手線,即BUSY線來代表總線的忙/閑狀態。因為數據線(SDA)和時鐘線(SCL)上的信號是變化的,所以不能用它們充當BUSY線。另外,當多個MCU都檢測到總線空閑,同時企圖控制總線時,將形成多主競爭狀態,同樣會引起沖突。這時就需要引入時間片,用劃分的時間片來決定競爭時各MCU占用I2C總線的優先次序。結合SDA的線“與”特性,檢測SDA上是否已經存在啟動信號(即SDA是否為0),如果直到相應的時間片結束都沒有檢測到SDA上的啟動信號,自己就可以控制總線。最后,由于模擬系統中沒有硬件I2C中斷,MCU作為從器件時不知何時開始接收總線上的數據,所以,需要提供一根I2C中斷信號線,使MCU在中斷程序中處于從接收狀態,中斷線可以與BUSY線合用。
通過上述分析,利用三根信號線就能模擬出硬件I2C的競爭仲裁過程,實現模擬I2C的多主通信。
2系統連接示意圖
三線模擬I2C總線系統的連接框圖如圖1所示。
模擬I2C多主系統中,要參與競爭的主器件節點采用三級連接方式,如MCU(A)、MCU(B)、MCU(C);對于器件節點如24C64等,因不具備主動控制I2C總線的能力,不會參與總線的競爭,所以仍可采用通用的兩線連接方式。三線模擬I2C總線中的時鐘線SCL和數據線SDA可由MCU的任意兩個I/O口線模擬;BUSY線因還要充當中斷信號線,則必須與MCU的外部中斷引腳INT0或INT1連接。
3時序分析及流程設計
在檢測到BUSY=0(忙)時,不會出現競爭;但當檢測到BUSY=1(閑)到將BUSY設為0,需要的典型時間為3個機器周期。在這段時間內,別的MCU仍會檢測到BUSY=1,也認為總線空閑到企圖占用,這時就出現了競爭與沖突。競爭的時間范圍為2×3個機器周期。仲裁的方法是為每一個MCU分配一個仲裁時間片,在規定的時間片內MCU反復檢測總線中的數據線SDA是否有信號,直到時間片結束。如果沒有信號就可馬上占用I2C總線,發送起始信號;如果有信號則表示有別的高優先級的MCU要占用,該MCU退出競爭。仲裁時序圖如圖2所示。
將BUSY設為0后的一段時間規定為仲裁時間。仲裁時間長度為(N-1)×Δt。N為I2C總線上參與競爭的MCU個數;Δt為一個時間片的長度,典型值為4個機器周期。按優先級順序給MCU分配不同個數的時間片。仲裁時序如圖2所示:假設MCU(A)優先級最高,它不必進行時間片測試,在檢測到總線空閑時直接發送起始位;MCU(B)優先級為次高,在檢測到總線空閑后,它需要等待檢測一個時間片周期Δt,在Δt期間內SDA線上沒有變化,即等待確認比它高優先級的MCU(A)不使用總線后,MCU(B)才能占用總線,發送起始信號;MCU(C)優先級最低,它需要測試等待周期2Δt,只有當MCU(A)、MCU(B)都不占用總線時(SDA一直保持為1),MCU(C)才能占用總線發送起始信號。
在實際應用中,還要注意BUSY線所用的中斷腳INT0/INT1需初始化為開中斷,并設定為下跳沿觸發。當各MCU需控制總線進行主發送或主接收時,需先關掉INT0/INT1需初始化為開中斷,并設定為下跳沿觸發。當各MCU要控制總線進行主發送或主接收時,需先關掉INT0/INT1中斷,再檢測BUSY線是否為空閑(=1)。若是空閑就將BUSY設為0,進行競爭仲裁,流程圖如圖3所示。如果在仲裁時間片內SDA始終為1,說明沒有高優先級的MCU要占據總線,自己可以發動起始信號控制總線,直到通信結束后,再釋放BUSY線將其置為1。此時其它的MCU就只能作為從器件。如果在仲裁時間片內檢測到SDA=0,則表明I2C總線已被占用,立刻將自己的BUSY設為1,并打開中斷轉為從接收,其流程圖如圖4所示。在中斷程序中接收尋址字節,以判明是否呼叫自己。若是,就進行相應的讀寫操作;若不是,就放棄退出中斷程序。注意:為了使總線上的MCU都能檢測到I2C上的起始信號,并使從器件能夠同步接收,SDA=0的時間要維持一定的寬度,至少應大于9個機器周期。