GPRS無(wú)線數(shù)傳模塊介紹
GPRS無(wú)線數(shù)傳模塊是一款內(nèi)嵌GSM/GPRS核心單元的無(wú)線Modem,具有完備的電源管理系統(tǒng),標(biāo)準(zhǔn)的串行數(shù)據(jù)接口。外觀小巧,軟件接口簡(jiǎn)單易用。可廣泛應(yīng)用于工業(yè)短信收發(fā)、彩信收發(fā)圖片文件、GPRS實(shí)時(shí)數(shù)據(jù)傳輸?shù)戎T多工業(yè)與民用領(lǐng)域。
GPRS無(wú)線數(shù)模塊是針對(duì)工業(yè)級(jí)用戶,采用GSM/GPRS網(wǎng)絡(luò)為傳輸媒介,是一款基于移動(dòng)GSM短消息平臺(tái)和GPRS數(shù)據(jù)業(yè)務(wù)的工業(yè)級(jí)通訊終端。它利用GSM 移動(dòng)通信網(wǎng)絡(luò)的短信息和GPRS業(yè)務(wù)為用戶搭建了一個(gè)超遠(yuǎn)距離的數(shù)據(jù)輸平臺(tái)。標(biāo)準(zhǔn)工業(yè)規(guī)格設(shè)計(jì),提供RS232標(biāo)準(zhǔn)接口,直接與用戶設(shè)備連接,實(shí)現(xiàn)中英文短信功能,彩信功能,GPRS數(shù)據(jù)傳輸功能。
GPRS無(wú)線數(shù)傳模塊特征
◆ 具有短消息功能,支持中英文短信
◆ 針對(duì)GPRS數(shù)據(jù)業(yè)務(wù), 嵌入了TCP/IP協(xié)議棧
◆ 支持域名解析,可以不用固定IP
◆ 支持彩信收發(fā),可以傳輸圖片,文件
◆ 標(biāo)準(zhǔn)RS-232串口,簡(jiǎn)單的AT指令操作
◆ 頻段為雙頻900MHz和1800MHz
◆ 工作溫度:-35~ +75℃
◆ 工業(yè)標(biāo)準(zhǔn)設(shè)計(jì),能工作于各種惡劣環(huán)境
◆ 天線接口 50Ω/SMA(陰頭)
◆ 直流5~12V供電,電流待機(jī)40mA,發(fā)射時(shí)300mA
GPRS無(wú)線數(shù)傳模塊應(yīng)用
◆ 工業(yè)短信收發(fā)、彩信收發(fā)圖片文件
◆ GPRS實(shí)時(shí)數(shù)據(jù)傳輸
◆ 銀行、證券、保險(xiǎn)行業(yè)
◆ 稅務(wù)、公安、交警、交通稽查行業(yè)
◆ 交通監(jiān)控
◆ 工業(yè)控制、遙感、遙測(cè)
◆ 移動(dòng)辦公
GPRS無(wú)線數(shù)傳模塊編程方法解析
一、在不同組網(wǎng)方式下的具體設(shè)置
要使PC機(jī)成為數(shù)據(jù)中心一般用到的有三種方式:(中心采用Intelnet公網(wǎng)連接、中心采用專線接入、撥號(hào)上網(wǎng)方式)
不管哪種方式PC機(jī)都需要一個(gè)固定IP。公網(wǎng)或?qū)>€方式的IP為網(wǎng)卡的IP;撥號(hào)上網(wǎng)方式的IP為無(wú)線Modem的GPRS卡綁定的IP。
1、 公網(wǎng)方式:
因?yàn)镻C機(jī)有了固定的IP,所以在使用的時(shí)候,不需要做什么特別的設(shè)置就行了,只要將模塊的APN名稱設(shè)為CMNET就行。
2、 專線方式:PC機(jī)由網(wǎng)卡可以登錄到數(shù)據(jù)服務(wù)器所在的網(wǎng)絡(luò)內(nèi)。
具體實(shí)現(xiàn)方法:設(shè)置PC機(jī)的本地連接,(主要是IP地址和網(wǎng)關(guān),網(wǎng)關(guān)為數(shù)據(jù)服務(wù)器的網(wǎng)關(guān))設(shè)置完成后,可以用Ping命令測(cè)試網(wǎng)絡(luò)是否通。
步驟:點(diǎn)擊“開始”—“運(yùn)行”,在‘打開’中輸入Ping數(shù)據(jù)服務(wù)器的 IP,(如萊蕪力創(chuàng)的數(shù)據(jù)服務(wù)器IP為192.168.0.164,輸入Ping 192.168.0.164)回車。模塊的APN名稱設(shè)為 LICHUANG. LW. SD
3、 撥號(hào)上網(wǎng)方式:PC機(jī)由無(wú)線Modem可以登錄到數(shù)據(jù)服務(wù)器所在的網(wǎng)絡(luò)內(nèi)。
a、 無(wú)線Modem(調(diào)制解調(diào)器)有幾種?
一般情況下,我們使用的有兩種,一種為USB連接的,一種為串口連接的。
b、 怎樣設(shè)置可以使無(wú)線Modem登錄到數(shù)據(jù)服務(wù)器所在的網(wǎng)絡(luò)?
先將調(diào)制解調(diào)器正確連接到計(jì)算機(jī)上。
對(duì)調(diào)制解調(diào)器進(jìn)行安裝:控制面板—添加新硬件—從列表中選擇“調(diào)制解調(diào)器”—選擇此調(diào)制解調(diào)器所使用的端口—在區(qū)號(hào)中輸入‘086’,選擇音頻,撥打外線區(qū)號(hào)可以不輸入。
調(diào)制解調(diào)器安裝完成后,還要診斷一下是否安裝正確,安裝的調(diào)制解調(diào)器是否可用。步驟為:控制面板—調(diào)制解調(diào)器—屬性—診斷。
對(duì)調(diào)制解調(diào)器進(jìn)行配置:控制面板—調(diào)制解調(diào)器—屬性—高級(jí),在額外的初始化命令中,
如果是使用東營(yíng)的GPRS卡,則在附加設(shè)置中輸入(“AT+CGDCONT=1,”IP”,”DYSHL.SD””)
如果使用的是力創(chuàng)的GPRS卡,則在附加設(shè)置中輸入(“AT+CGDCONT=1,”IP”,”LICHUANG.LW.SD””)
c、 怎樣建立撥號(hào)連接?
正確連接調(diào)制解調(diào)器后,還要建立撥號(hào)連接才可以。詳細(xì)步驟為:
右擊‘網(wǎng)上鄰居’—屬性—建立新連接—選擇撥號(hào)到專用網(wǎng)絡(luò)—在輸入電話號(hào)碼時(shí)輸入‘*99***1#’,其于情況默認(rèn)點(diǎn)擊‘下一步’即可。
d、 撥號(hào)上網(wǎng)方式的IP怎樣獲得?
判斷數(shù)據(jù)中心(無(wú)線Modem)的IP,方法有多種:
先撥號(hào)連接,待撥號(hào)連接成功后,
在任務(wù)欄中右擊”撥號(hào)連接”的圖標(biāo),選擇’狀態(tài)’,在彈出的畫面中選擇’信息’,看一下’客戶端IP’就行了。
選擇開始—運(yùn)行(輸入cmd回車)—輸入ipconfig回車,便可以看到撥號(hào)連接的IP了。
e、 怎樣讓無(wú)線Modem掉線后自動(dòng)重?fù)埽?/p>
無(wú)線Modem在使用的過(guò)程中會(huì)出現(xiàn)掉線的情況,因?yàn)橛脩舨豢赡芸偸顷P(guān)注此時(shí)的無(wú)線Modem是否掉線了,為了使無(wú)線Modem不耽誤數(shù)據(jù)傳輸,可以將其設(shè)置成掉線后自動(dòng)重?fù)艿墓δ堋?/p>
具體操作為:
先查找到‘撥號(hào)連接’(在撥號(hào)網(wǎng)絡(luò)中)—屬性—選項(xiàng)
在‘撥號(hào)選項(xiàng)’中去掉所有的選項(xiàng),選中‘重?fù)苓x項(xiàng)’中的斷線重?fù)芗纯伞?/p>
在設(shè)置時(shí)也可以將重?fù)艽螖?shù)設(shè)置的更大一些,比如說(shuō)10次,不設(shè)置也可,用戶可根據(jù)實(shí)際情況來(lái)定。
在‘重?fù)苓x項(xiàng)’中有一項(xiàng)為‘掛斷前的空閑時(shí)間’,我們一般設(shè)置為“從不”。如果設(shè)置為某個(gè)時(shí)間,則連接時(shí)間到了該值時(shí)便出現(xiàn)掉線的狀況。
圖示為圖1:
圖1
二、一般控件的編寫
控件實(shí)際上就是類的封裝,一個(gè)類中可以定義自己的結(jié)構(gòu)、屬性、方法、事件。
1、 結(jié)構(gòu): Private Type 結(jié)構(gòu)名
MyName as String 結(jié)構(gòu)中的參數(shù)
MyAge as Integer
End Type
2、 屬性:
Dim m_GPRSLong As Long
Public Property Let GPRSLong (ByVal NewGPRSLong As Long) 將表達(dá)式的值賦給變量或?qū)傩?/p>
m_GPRSLong = NewGPRSLong
PropertyChanged “GPRSLong” PropertyChanged方法是通知屬性的值已經(jīng)發(fā)生變化
End Property
Public Property Get GPRSLong() As Long 讀屬性值
GPRSLong = m_GPRSLong
End Property
3、 方法(函數(shù)):
Public Function StartServer(Ip As String, Port As Long) As Boolean
這種方法用戶可以使用
End Function
Private Sub tcpServer_Close(Index As Integer) As Boolean
這種方法用戶不可以使用,控件本身自己使用
End Sub
4、 事件:
Public Event GetUserID(ByVal User_Id As String, ByVal UserDeal_Id As String)
激活事件時(shí)用RaiseEvent 語(yǔ)句
RaiseEvent GetUserID(m_Id, Deal_Id)
5、 用戶用到的一些常用事件:
UserControl_Resize 當(dāng)控件第一次顯示或狀態(tài)改變時(shí)發(fā)生,調(diào)節(jié)控件大小的。
比如可以在這里面設(shè)置一下控件的高度和寬度
UserControl.Height = 525
UserControl.Width = 525
這樣在用戶使用的時(shí)候向窗體中添加該控件時(shí),大小就不可以改變了。
三、GPRS控件的主要屬性、方法、事件:
有了前面介紹的一般控件的知識(shí),下面主要針對(duì)GPRS的工作原理,介紹一下其控件的編程:
1、 屬性:
GPRS控件的主要屬性就是IP地址、端口號(hào)、接收到的數(shù)據(jù)長(zhǎng)度。
LocalIP 屬性 / Localport 屬性 / GPRSLong屬性
2、 方法:
A、StartServer(Ip As String, Port As Long) 啟動(dòng)服務(wù)方法
本方法用于啟動(dòng)GPRS服務(wù),在系統(tǒng)初始化時(shí)必須調(diào)用本方法來(lái)完成GPRS服務(wù)的初始化,否則GPRS模塊將無(wú)法正確登陸網(wǎng)絡(luò),進(jìn)行通訊。
IP參數(shù)為服務(wù)器Ip地址, 字符串型
Port參數(shù)為服務(wù)器通訊端口, 長(zhǎng)整型,通常為2020端口。
成功返回Ture,失敗則返回False。
示例: StartServer(“192.168.0.1”,2020)
B、StopServer() 停止服務(wù)方法
停止服務(wù)方法,用來(lái)停止GPRS服務(wù),在系統(tǒng)結(jié)束退出時(shí),調(diào)用本方法停止GPRS服務(wù)。
成功返回Ture,失敗則返回False.
示例: StopServer()
C、SendDataGPRS(DtuId As String, CmdData As Variant) 發(fā)送數(shù)據(jù)方法
本方法用來(lái)與GPRS模塊進(jìn)行通訊,核心方法,參數(shù)比較復(fù)雜。
DtuID,Gprs模塊標(biāo)識(shí)號(hào),用來(lái)表明與那塊模塊進(jìn)行通訊。
CmdData,要傳送的數(shù)據(jù),變體變量,可接受字符串或者數(shù)組類型。
示例: SendDataGPRS(“6900000196”,Cmd)
3、 事件:
A、 GetUserID(ByVal User_Id As String, ByVal UserDeal_Id As String)
’’收到GPRS模塊的ID號(hào)或者是上線的ID的時(shí)觸發(fā)的事件
User_Id 為所有在線GPRS模塊ID號(hào)所組成的字符串。
UserDeal_Id為所有離線GPRS模塊ID號(hào)所組成的字符串。
如果下面的GPRS模塊上傳ID號(hào)時(shí),系統(tǒng)會(huì)以事件的方式進(jìn)行接收,用戶可以在事件中對(duì)ID號(hào)做處理,想以什么格式顯示ID的信息有用戶自己做決定。
B、ReceiveData(ByVal User_Id As String, ByVal User_GetDataASC As Variant, ByVal User_GetDataHEX As Variant) ’’ 收到數(shù)據(jù)時(shí)觸發(fā)的事件
如果下面的設(shè)備有數(shù)據(jù)上傳時(shí),就會(huì)觸發(fā)該事件,該事件包括3個(gè)參數(shù):
User_Id 為 設(shè)備的ID號(hào);
User_GetDataASC 為 以ASCII方式顯示的數(shù)據(jù);
User_GetDataHEX 為 以HEX方式顯示的數(shù)據(jù)。
下面的設(shè)備在上傳數(shù)據(jù)的時(shí)候,會(huì)將ID號(hào)一塊傳上來(lái),這樣用戶能夠分辨出是哪個(gè)設(shè)備傳上來(lái)的,而且上傳數(shù)據(jù)時(shí),會(huì)將ASCII方式的數(shù)據(jù)和HEX方式的數(shù)據(jù)一塊傳上來(lái),用戶想用什么數(shù)據(jù)自己決定。
四、 具體的內(nèi)部編程思路:
GPRS控件的編寫,我們用到的是Winsock控件,所以首先要先了解一下Winsock控件的使用。
1、Winsock控件的使用:
Winsock控件對(duì)用戶來(lái)說(shuō)是不可見的,我們?cè)诰帉懣蛻舳嘶蚍?wù)器程序時(shí),通過(guò)設(shè)置控件的屬性并調(diào)用其方法即可實(shí)現(xiàn)數(shù)據(jù)的雙向交換。
如果創(chuàng)建客戶應(yīng)用程序,就必須知道服務(wù)器計(jì)算機(jī)名或者 IP 地址(RemoteHost 屬性),還要知道進(jìn)行“偵聽”的端口(RemotePort 屬性),然后調(diào)用 Connect 方法。
如果創(chuàng)建服務(wù)器應(yīng)用程序,就應(yīng)設(shè)置一個(gè)收聽端口(LocalPort 屬性)并調(diào)用 Listen 方法。當(dāng)客戶計(jì)算機(jī)需要連接時(shí)就會(huì)發(fā)生 ConnectionRequest 事件。為了完成連接,可調(diào)用 ConnectionRequest 事件內(nèi)的 Accept 方法。
建立連接后,任何一方計(jì)算機(jī)都可以收發(fā)數(shù)據(jù)。為了發(fā)送數(shù)據(jù),可調(diào)用 SendData 方法。當(dāng)接收數(shù)據(jù)時(shí)會(huì)發(fā)生 DataArrival 事件。調(diào)用 DataArrival 事件內(nèi)的 GetData 方法就可獲取數(shù)據(jù)。
2、Winsock控件的常用屬性:
a、協(xié)議
在使用Winsock控件時(shí),首先需要考慮使用什么協(xié)議。可以使用的協(xié)議包括 TCP 和 UDP。兩種協(xié)議之間的重要區(qū)別在于它們的連接狀態(tài):
? TCP 協(xié)議控件是基于連接的協(xié)議,可以將它同電話系統(tǒng)相比。在開始數(shù)據(jù)傳輸之前,用戶必須先建立連接。
? UDP 協(xié)議是一種無(wú)連接協(xié)議,兩臺(tái)計(jì)算機(jī)之間的傳輸類似于傳遞郵件:消息從一臺(tái)計(jì)算機(jī)發(fā)送到另一臺(tái)計(jì)算機(jī),但是兩者之間沒有明確的連接。另外,單次傳輸?shù)淖畲髷?shù)據(jù)量取決于具體的網(wǎng)絡(luò)。
在設(shè)計(jì)時(shí),可以按如下方式設(shè)置應(yīng)用程序使用的協(xié)議:在“屬性”窗口中單擊“協(xié)議”,然后選擇 sckTCPProtocol 或者 sckUDPProtocol。也可以使用程序代碼來(lái)設(shè)置 Protocol 屬性,如下所示:
Winsock1.Protocol = sckTCPProtocol
b、IP地址(計(jì)算機(jī)名稱)
客戶應(yīng)用程序在與遠(yuǎn)程計(jì)算機(jī)相連接的時(shí)候,需要知道遠(yuǎn)程計(jì)算機(jī)的 IP 地址或者計(jì)算機(jī)名稱。
我們連接計(jì)算機(jī)時(shí)可以將其作為 RemoteHost 屬性的值。代碼如下:
Winsock1.RemoteHost = 計(jì)算機(jī)名稱 或者為 Winsock1.RemoteHost =IP地址
服務(wù)器程序用到LocalIP 屬性,它返回本地機(jī)器的 IP 地址,格式是 IP 地址加點(diǎn)字符串 (xxx.xxx.xxx.xxx)。
用RemoteHostIP屬性返回遠(yuǎn)程計(jì)算機(jī)的IP。
c、端口號(hào)
對(duì)于客戶應(yīng)用程序來(lái)說(shuō),RemotePort 屬性最重要,它設(shè)置要連接的遠(yuǎn)程端口號(hào)。
對(duì)于服務(wù)器程序來(lái)說(shuō),LocalPort 屬性最重要,它設(shè)置所用到的本地端口。這是用于偵聽的本地端口。如果指定的是端口 0,就使用一個(gè)隨機(jī)端口。在調(diào)用了 Listen 方法后,屬性就包含了已選定的實(shí)際端口。
3、Winsock控件的常用事件
a、Connect 事件
該事件是在到服務(wù)器的連接建立之后發(fā)生。
b、ConnectionRequest 事件
當(dāng)遠(yuǎn)程計(jì)算機(jī)請(qǐng)求連接時(shí)出現(xiàn)。
如果有連接請(qǐng)求時(shí),可以用 Accept 方法接受新連接。
c、DataArrival 事件
當(dāng)新數(shù)據(jù)到達(dá)時(shí)出現(xiàn)。
如果有新數(shù)據(jù)到達(dá)時(shí),可以用GetData方法接收數(shù)據(jù)。如果沒有獲取一個(gè) GetData 調(diào)用中的全部數(shù)據(jù),則事件不會(huì)出現(xiàn)。只有存在新數(shù)據(jù)時(shí)才激活事件。可隨時(shí)用 BytesReceived 屬性檢查可用的數(shù)據(jù)量。
4、Winsock控件的常用方法
a、Accept 方法
接受新連接。
僅適用于 TCP 服務(wù)器應(yīng)用程序。在處理 ConnectionRequest 事件時(shí)用這個(gè)方法接受新連接。在 ConnectionRequest 事件中使用 Accept 方法。ConnectionRequest 事件有一個(gè)對(duì)應(yīng)的參數(shù),即 RequestID 參數(shù)(新連接請(qǐng)求標(biāo)識(shí)),該參數(shù)應(yīng)該傳給 Accept 方法。
b、Bind 方法
指定用于 TCP 連接的 LocalPort(端口號(hào)) 和 LocalIP。(IP 地址)
在調(diào)用 Listen 方法之前必須調(diào)用 Bind 方法。
c、Close 方法
關(guān)閉連接。
d、GetData 方法
獲取當(dāng)前的數(shù)據(jù)塊并將其存儲(chǔ)在變體類型的變量中。
通常總是將 GetData 方法與 DataArrival 事件并用。
e、Listen 方法
偵聽模式。該方法僅適用于 TCP 連接。
當(dāng)有新連接時(shí)就會(huì)出現(xiàn) ConnectionRequest 事件。處理ConnectionRequest 事件時(shí),應(yīng)用程序應(yīng)該(在一個(gè)新的控件示例上)用 Accept 方法接受連接。
f、SendData 方法
將數(shù)據(jù)發(fā)送給遠(yuǎn)程計(jì)算機(jī)。
大體了解了Winsock控件的使用之后,對(duì)理解GPRS通訊的原理來(lái)說(shuō),有一定的幫助。
接下來(lái)我們將根據(jù)Winsock控件的使用來(lái)大體理解GPRS通訊的原理。
1、啟動(dòng)服務(wù)
原理為建立一個(gè)Tcp的連接,首先設(shè)定數(shù)據(jù)業(yè)務(wù)中心的IP地址及監(jiān)聽端口號(hào),將其賦給Winsock控件,并用該控件進(jìn)行連接,連接成功后,進(jìn)行監(jiān)聽。
代碼如下:
myLocalIP = tcpServer(0).LocalIP‘本地機(jī)器的 IP 地址(局域網(wǎng)方式)
myLocalIP = “10.14.87.102”‘無(wú)線Modem的IP地址(撥號(hào)上網(wǎng)方式)
PlngTCPLocalPort = 2020 ‘Tcp服務(wù)器的監(jiān)聽端口號(hào)
Winsock.Bind (Port ,IP)
Winsock.Listen
需要注意的是如果計(jì)算機(jī)上既有本地連接又有無(wú)線Modem,在運(yùn)行程序(啟動(dòng)服務(wù))時(shí)有可能失敗,所以,在編寫代碼的時(shí)候一定要注意自己使用的是哪種方式。因?yàn)長(zhǎng)ocalIP屬性獲取的是本地連接的IP,用無(wú)線Modem的時(shí)候IP最好是直接賦值。
再者就是兩者同時(shí)使用的時(shí)候,如果用的是無(wú)線Modem的撥號(hào)連接,則本地連接只能是同一個(gè)網(wǎng)段內(nèi)使用。
2、GPRS模塊連接請(qǐng)求處理
代碼如下:
Public Sub Winsock_ConnectionRequest(ByVal RequestID As Long)
Winsock.Accept Requested‘接收新連接
End Sub
原理為如果現(xiàn)在有連接請(qǐng)求,先把請(qǐng)求連接的GPRS模塊的IP地址記錄下來(lái)(用的是Winsock控件的RemoteHostIP屬性),再判斷保存所有GPRS模塊信息的數(shù)組中是否出現(xiàn)過(guò),如果沒有出現(xiàn)過(guò),保存該信息;如果出現(xiàn)過(guò),先卸載該控件,然后重新加載該控件,保存信息。
3、GPRS模塊數(shù)據(jù)通訊處理
代碼如下:
Public Sub Winsock_DataArrival(ByVal bytesTotal As Long)
GprsLong = Winsock.BytesReceived‘返回接收到的(當(dāng)前在接收端緩沖區(qū)內(nèi)的)數(shù)據(jù)的數(shù)量
Winsock.GetData TempArr, vbByte‘用 GetData 方法來(lái)獲取數(shù)據(jù),取得的數(shù)據(jù)存放在TempArr中。
End Sub
原理為如果下面的GPRS模塊向數(shù)據(jù)業(yè)務(wù)中心發(fā)送數(shù)據(jù),數(shù)據(jù)業(yè)務(wù)中心用GetData方法將數(shù)據(jù)從接收緩沖區(qū)中讀出來(lái),然后根據(jù)條件進(jìn)行判斷所收到的數(shù)據(jù)是否正確。
在用GetData方法進(jìn)行數(shù)據(jù)接收時(shí)需要注意是用哪種方式進(jìn)行通訊的,收到的數(shù)是Hex還是Ascii,這里接收的方式不一樣。如果是Ascii方式,接收的數(shù)據(jù)要賦給一個(gè)字符串變量,方式為:Winsock.GetData TempStr, vbString;如果是Hex方式,接收的數(shù)據(jù)要賦給一個(gè)以Byte 數(shù)據(jù)類型的數(shù)組,方式為:Winsock.GetData TempArr, vbByte 。
在接收數(shù)據(jù)之后,必須先要進(jìn)行數(shù)據(jù)編譯,如果碰到‘80H和90H’在一塊的將其轉(zhuǎn)換成為‘1AH’,碰到‘8AH和9AH’在一塊的將其轉(zhuǎn)換成為‘8AH’。
將接收到的數(shù)據(jù)進(jìn)行編譯之后,就可根據(jù)條件進(jìn)行數(shù)據(jù)處理了。
4、數(shù)據(jù)中心發(fā)送數(shù)據(jù)
代碼如下:
以十六進(jìn)制發(fā)送數(shù)據(jù)時(shí)為:
Dim Cmd(1 to 7) As Byte
Cmd(1)=&H4C
Cmd(2)=&H57
Cmd(3)=&H01
Cmd(4)=&H00
Cmd(5)=&H20
Cmd(6)=&H21
Cmd(7)=&H0D
Winsock.SendData Cmd
以Ascii方式發(fā)送數(shù)據(jù)為:
dim Cmd as string
Cmd=”#01A”+chr(13)
Winsock.SendData Cmd
原理為發(fā)送數(shù)據(jù)時(shí),要知道該GPRS模塊的ID號(hào)和發(fā)送的數(shù)據(jù)。程序在發(fā)送時(shí),先判斷該ID號(hào)是否收到過(guò),如果沒有收到過(guò),程序就不向外發(fā)送數(shù)據(jù);如果收到過(guò),在發(fā)送的時(shí)候還要判斷GPRS模塊當(dāng)前的狀態(tài)(是否在線),只有所有條件都符合,才進(jìn)行發(fā)送數(shù)據(jù)命令。否則程序會(huì)出現(xiàn)錯(cuò)誤,提示網(wǎng)絡(luò)連接失敗,不能發(fā)送數(shù)據(jù)。
5、停止服務(wù)
代碼如下:
Winsock.Close
原理為如果用戶要關(guān)閉服務(wù)的話,先關(guān)閉所有控件的連接,并把所有加載的控件卸載掉,清空存放GPRS模塊的信息,將數(shù)據(jù)返回長(zhǎng)度置為0。
五、在TCP/UDP兩種方式下的數(shù)據(jù)通訊方法
1、TCP:
數(shù)據(jù)傳輸協(xié)議允許創(chuàng)建和維護(hù)與遠(yuǎn)程計(jì)算機(jī)的連接。連接兩臺(tái)計(jì)算機(jī)就可彼此進(jìn)行數(shù)據(jù)傳輸。
TCP方式下客戶端的連接為:
Winsock.RemoteHost = IP ‘’指定服務(wù)器端的IP和端口號(hào)
Winsock.RemotePort = Port
Winsock.Connect ‘’’連接
如果連接成功后會(huì)響應(yīng)Winsock 的 Connect事件。
TCP方式下服務(wù)器端的監(jiān)聽為:
Dim LocalPort as Long
Dim LocalIP as String
LocalPort =Winsock.LocalPort
LocalIP=Winsock.LocalIP
Winsock.Bind LocalPort, LocalIP ‘’指定連接
Winsock.Listen ‘’’偵聽
如果此時(shí)下面的終端有連接請(qǐng)求時(shí),會(huì)響應(yīng)Winsock 的ConnectionRequest 事件。
2、UDP:
用戶數(shù)據(jù)文報(bào)協(xié)議 (UDP) 是一個(gè)無(wú)連接協(xié)議。跟 TCP 的操作不同,計(jì)算機(jī)并不建立連接。
UDP方式下客戶端通訊為:
Winsock.RemoteHost = IP ‘’指定服務(wù)器端的IP和端口號(hào)
Winsock.RemotePort = Port
Winsock. LocalPort = LocalPort ‘’本地端口
如果有兩個(gè)終端(A / B)之間通訊,則為:
A: B:
Winsock.RemoteHost = B_IP Winsock.RemoteHost = A_IP
Winsock.RemotePort = B_Port Winsock.RemotePort = A_Port
Winsock. LocalPort = A_Port Winsock. LocalPort = B_Port
UDP方式下服務(wù)器端監(jiān)聽為:
Winsock. LocalPort = Port
評(píng)論
查看更多