GPRS無線數(shù)傳模塊編程方法(VB)
一、在不同組網(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為無線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ī)由無線Modem可以登錄到數(shù)據(jù)服務(wù)器所在的網(wǎng)絡(luò)內(nèi)。 a、 無線Modem(調(diào)制解調(diào)器)有幾種? 一般情況下,我們使用的有兩種,一種為USB連接的,一種為串口連接的。 b、 怎樣設(shè)置可以使無線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ù)中心(無線Modem)的IP,方法有多種: 先撥號(hào)連接,待撥號(hào)連接成功后, 在任務(wù)欄中右擊”撥號(hào)連接”的圖標(biāo),選擇’狀態(tài)’,在彈出的畫面中選擇’信息’,看一下’客戶端IP’就行了。 選擇開始—運(yùn)行(輸入cmd回車)—輸入ipconfig回車,便可以看到撥號(hào)連接的IP了。 e、 怎樣讓無線Modem掉線后自動(dòng)重?fù)埽?br>無線Modem在使用的過程中會(huì)出現(xiàn)掉線的情況,因?yàn)橛脩舨豢赡芸偸顷P(guān)注此時(shí)的無線Modem是否掉線了,為了使無線Modem不耽誤數(shù)據(jù)傳輸,可以將其設(shè)置成掉線后自動(dòng)重?fù)艿墓δ堋?br>具體操作為: 先查找到‘撥號(hào)連接’(在撥號(hào)網(wǎng)絡(luò)中)—屬性—選項(xiàng) 在‘撥號(hào)選項(xiàng)’中去掉所有的選項(xiàng),選中‘重?fù)苓x項(xiàng)’中的斷線重?fù)芗纯伞?br>在設(shè)置時(shí)也可以將重?fù)艽螖?shù)設(shè)置的更大一些,比如說10次,不設(shè)置也可,用戶可根據(jù)實(shí)際情況來定。 在‘重?fù)苓x項(xiàng)’中有一項(xiàng)為‘掛斷前的空閑時(shí)間’,我們一般設(shè)置為“從不”。如果設(shè)置為某個(gè)時(shí)間,則連接時(shí)間到了該值時(shí)便出現(xiàn)掉線的狀況。 二、一般控件的編寫: 控件實(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ū)傩?br>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 語句 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)用本方法來完成GPRS服務(wù)的初始化,否則GPRS模塊將無法正確登陸網(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ù)方法,用來停止GPRS服務(wù),在系統(tǒng)結(jié)束退出時(shí),調(diào)用本方法停止GPRS服務(wù)。 成功返回Ture,失敗則返回False. 示例: StopServer() C、SendDataGPRS(DtuId As String, CmdData As Variant) 發(fā)送數(shù)據(jù)方法 本方法用來與GPRS模塊進(jìn)行通訊,核心方法,參數(shù)比較復(fù)雜. DtuID,Gprs模塊標(biāo)識(shí)號(hào),用來表明與那塊模塊進(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)一塊傳上來,這樣用戶能夠分辨出是哪個(gè)設(shè)備傳上來的,而且上傳數(shù)據(jù)時(shí),會(huì)將ASCII方式的數(shù)據(jù)和HEX方式的數(shù)據(jù)一塊傳上來,用戶想用什么數(shù)據(jù)自己決定。 四、 具體的內(nèi)部編程思路: GPRS控件的編寫,我們用到的是Winsock控件,所以首先要先了解一下Winsock控件的使用. 1、Winsock控件的使用: Winsock控件對(duì)用戶來說是不可見的,我們?cè)诰帉懣蛻舳嘶蚍?wù)器程序時(shí),通過設(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é)議??梢允褂玫膮f(xié)議包括 TCP 和 UDP。兩種協(xié)議之間的重要區(qū)別在于它們的連接狀態(tài): • TCP 協(xié)議控件是基于連接的協(xié)議,可以將它同電話系統(tǒng)相比。在開始數(shù)據(jù)傳輸之前,用戶必須先建立連接。 • UDP 協(xié)議是一種無連接協(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。也可以使用程序代碼來設(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)用程序來說,RemotePort 屬性最重要,它設(shè)置要連接的遠(yuǎn)程端口號(hào)。 對(duì)于服務(wù)器程序來說,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í)才激活事件??呻S時(shí)用 BytesReceived 屬性檢查可用的數(shù)據(jù)量。 4、Winsock控件的常用方法 a、Accept 方法 接受新連 |