GPRS無(wú)線數(shù)傳模塊編程方法(VB)_第1頁(yè)
GPRS無(wú)線數(shù)傳模塊編程方法(VB)_第2頁(yè)
GPRS無(wú)線數(shù)傳模塊編程方法(VB)_第3頁(yè)
GPRS無(wú)線數(shù)傳模塊編程方法(VB)_第4頁(yè)
GPRS無(wú)線數(shù)傳模塊編程方法(VB)_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、gprs無(wú)線數(shù)傳模塊編程方法(vb)發(fā)布時(shí)間:2006年6月25日 一、在不同組網(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)

2、為數(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為64,輸入ping 64)回車。模塊的apn名稱設(shè)為 lichuang. lw. sd3、 撥號(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)行安裝:控

3、制面板添加新硬件從列表中選擇“調(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)連接才

4、可以。詳細(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ù)??無(wú)線modem在使用的過(guò)程中會(huì)出現(xiàn)掉線的情況,因?yàn)橛脩舨豢赡芸偸顷P(guān)注此時(shí)的無(wú)線modem是否掉線了,為了使無(wú)線modem不耽誤數(shù)據(jù)傳輸,可以將其

5、設(shè)置成掉線后自動(dòng)重?fù)艿墓δ?。具體操作為:先查找到撥號(hào)連接(在撥號(hào)網(wǎng)絡(luò)中)屬性選項(xiàng)在撥號(hào)選項(xiàng)中去掉所有的選項(xiàng),選中重?fù)苓x項(xiàng)中的斷線重?fù)芗纯伞T谠O(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)掉線的狀況。二、一般控件的編寫:控件實(shí)際上就是類的封裝,一個(gè)類中可以定義自己的結(jié)構(gòu)、屬性、方法、事件。1、 結(jié)構(gòu): private type 結(jié)構(gòu)名myname as string 結(jié)構(gòu)中的參數(shù)myage as integerend type2、 屬性:dim m

6、_gprslong as longpublic property let gprslong (byval newgprslong as long) 將表達(dá)式的值賦給變量或?qū)傩詍_gprslong = newgprslongpropertychanged gprslong propertychanged方法是通知屬性的值已經(jīng)發(fā)生變化end propertypublic property get gprslong() as long 讀屬性值gprslong = m_gprslongend property3、 方法(函數(shù)):public function startserver(ip as st

7、ring, port as long) as boolean 這種方法用戶可以使用end functionprivate sub tcpserver_close(index as integer) as boolean這種方法用戶不可以使用,控件本身自己使用end sub4、 事件:public event getuserid(byval user_id as string, byval userdeal_id as string)激活事件時(shí)用raiseevent 語(yǔ)句raiseevent getuserid(m_id, deal_id)5、 用戶用到的一些常用事件:usercontrol_r

8、esize 當(dāng)控件第一次顯示或狀態(tài)改變時(shí)發(fā)生,調(diào)節(jié)控件大小的。比如可以在這里面設(shè)置一下控件的高度和寬度usercontrol.height = 525usercontrol.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,

9、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(“”,2020)b、stopserver() 停止服務(wù)方法停止服務(wù)方法,用來(lái)停止gprs服務(wù),在系統(tǒng)結(jié)束退出時(shí),調(diào)用本方法停止gprs服務(wù)。成功返回ture,失敗則返回false.示例: stopserver()c、senddatagprs

10、(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)所組成的字符串。u

11、serdeal_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ù);

12、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ō)是不可見(jiàn)的,我們?cè)诰帉懣蛻舳嘶蚍?wù)器程序時(shí),通過(guò)設(shè)置控件的屬性并調(diào)用其方法即可實(shí)現(xiàn)數(shù)據(jù)的雙向交換。如果創(chuàng)建客戶應(yīng)用程序,就必須知道服務(wù)器計(jì)算機(jī)名或者 ip 地址(remote

13、host 屬性),還要知道進(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

14、控件的常用屬性:a、協(xié)議在使用winsock控件時(shí),首先需要考慮使用什么協(xié)議??梢允褂玫膮f(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ī),但是兩者之間沒(méi)有明確的連接。另外,單次傳輸?shù)淖畲髷?shù)據(jù)量取決于具體的網(wǎng)絡(luò)。 在設(shè)計(jì)時(shí),可以按如下方式設(shè)置應(yīng)用程序使用的協(xié)議:在“屬性”窗口中單擊“協(xié)議”,然后選擇 scktcpprotocol 或者 sckudpprotocol。也

15、可以使用程序代碼來(lái)設(shè)置 protocol 屬性,如下所示:winsock1.protocol = scktcpprotocolb、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ì)

16、算機(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á)

17、時(shí),可以用getdata方法接收數(shù)據(jù)。如果沒(méi)有獲取一個(gè) getdata 調(diào)用中的全部數(shù)據(jù),則事件不會(huì)出現(xiàn)。只有存在新數(shù)據(jù)時(shí)才激活事件??呻S時(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 方法指

18、定用于 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ì)

19、算機(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 = 02無(wú)線modem的ip地址(撥號(hào)上網(wǎng)方式)plngtcplocalport = 2020 tcp服務(wù)器的監(jiān)聽端口號(hào)winsock.

20、bind (port ,ip)winsock.listen需要注意的是如果計(jì)算機(jī)上既有本地連接又有無(wú)線modem,在運(yùn)行程序(啟動(dòng)服務(wù))時(shí)有可能失敗,所以,在編寫代碼的時(shí)候一定要注意自己使用的是哪種方式。因?yàn)閘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接

21、收新連接end sub原理為如果現(xiàn)在有連接請(qǐng)求,先把請(qǐng)求連接的gprs模塊的ip地址記錄下來(lái)(用的是winsock控件的remotehostip屬性),再判斷保存所有g(shù)prs模塊信息的數(shù)組中是否出現(xiàn)過(guò),如果沒(méi)有出現(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, v

22、bbyte用 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.getda

23、ta 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)=&h4ccmd(2)=&h57cmd(3)=&h01cmd(4)=&h00cmd(5)=&h20cmd(6)=&h21cmd(7)=&h0dwinsock.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ò),如果沒(méi)有收到過(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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論