• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      供熱換熱站預(yù)付費(fèi)系統(tǒng)通信技術(shù)應(yīng)用研究

      2016-11-19 11:00:30羅丹厲虹周淑一
      中國(guó)新通信 2016年20期
      關(guān)鍵詞:讀卡器

      羅丹 厲虹 周淑一

      [摘要]Windows CE人機(jī)界面是面向移動(dòng)計(jì)算機(jī)和嵌入式應(yīng)用的操作系統(tǒng),具有友好的用戶界面和強(qiáng)大的通信能力,RS-232串行通信是WinCE支持的最基本通信方式。本文將RS-232串行通信技術(shù)應(yīng)用于供熱領(lǐng)域換熱站的預(yù)付費(fèi)智能控制系統(tǒng),設(shè)計(jì)了在WinCE操作系統(tǒng)下,實(shí)現(xiàn)RS-232人機(jī)界面與讀卡器之間以及$50非接觸射頻卡與讀卡器之間的通信程序,較好地解決了串口之間的通信問(wèn)題,最終利用S8讀卡器軟件平臺(tái)對(duì)編寫程序做以驗(yàn)證,為從事串口程序開發(fā)者提供了參考。

      [關(guān)鍵詞]Windows CE 串行通信 讀卡器 S50非接觸射頻卡

      目前,國(guó)內(nèi)供熱領(lǐng)域?qū)▎挝还芾砟J接兴倪M(jìn),形成一種換熱站預(yù)付費(fèi)智能控制系統(tǒng)解決方案,而預(yù)付費(fèi)智能控制系統(tǒng)離不開人機(jī)界面與讀卡器、讀卡器與IC卡之間的通信。串行通信是計(jì)算機(jī)通信的重要方式,以其設(shè)備價(jià)格低廉、連接簡(jiǎn)單、技術(shù)成熟等優(yōu)點(diǎn)得到廣泛應(yīng)用。Windows CE是微軟推出的一個(gè)多任務(wù)、有友好界面、強(qiáng)大通信能力的32位開放實(shí)時(shí)操作系統(tǒng),WinCE系統(tǒng)以其良好的性能得到越來(lái)越廣泛的應(yīng)用。

      二、WinCE環(huán)境下的串行通信

      串行端口和應(yīng)用程序的溝通是通過(guò)串行裝置驅(qū)動(dòng)程序完成的,即通過(guò)操作系統(tǒng)中文件系統(tǒng)的應(yīng)用程序開發(fā)接口存取串行裝置驅(qū)動(dòng)程序,以傳送/接收信息和控制串行裝置。一般通信串口軟件結(jié)構(gòu)如圖1所示:

      串行設(shè)備被視為用于打開、關(guān)閉、讀寫串行端口的常規(guī)、可安裝的流設(shè)備。WinCE的通信函數(shù)和其他大多數(shù)Windows的通信函數(shù)相同,但WinCE不支持直接對(duì)串行端口的寄存器進(jìn)行編程。所使用串行端口部分函數(shù)有:

      2.1打開和關(guān)閉串口通信端口

      打開串行端口使用函數(shù)CreateFile,若打開端口不存在,則CreateFile回傳“ERROR_FILE_NOT_FOUND”信息,且用戶被通知這個(gè)端口不存在。

      打開串行通信端口的步驟如下:

      (1)使用參數(shù)IpzPortName傳入指定的串行端口名稱。

      (2)將參數(shù)dwShareMode設(shè)為0,表示不允許此COM口被其他應(yīng)用程序同時(shí)打開。

      (3)將參數(shù)dwCreationDisposition設(shè)為OPEN_EXISTING。

      (4)將參數(shù)dwFlagsAndAttributes設(shè)為0,Windows CE只支持非交錯(cuò)式輸入/輸出。

      //打開串行端口

      hPort=CreateFile(Serealcom,//指定串口名稱

      0,//共享模式

      OPEN_XISTING//打開方式

      0);//串口屬性

      當(dāng)應(yīng)用程序使用串行通信端口通信完畢后,使用函數(shù)CloseHandle關(guān)閉串行通信端口。CloseHandle被呼叫之后,在串行端口通信被關(guān)閉和資源釋放之前,會(huì)有2秒的延遲。

      2.2設(shè)定串行通信端口

      以DCB(device-control block)結(jié)構(gòu)設(shè)定好串行通信端口,呼叫CreateFile函數(shù)打開一個(gè)有默認(rèn)串行端口設(shè)定值的串行端口,使用GetCommState函數(shù)取得默認(rèn)值,再使用SetCommState函數(shù)完成新值的設(shè)定,使用COMMTIMEOUTS結(jié)構(gòu)設(shè)定讀寫操作的逾時(shí)值。

      DCB PortDCB;//創(chuàng)建DCB

      PortDCB.DCBlength=sizeof(DCB);//初始化

      GetCommState(hPort,&PortDCB;);//取得默認(rèn)port設(shè)置

      PortDCB.BaudRate=1 15200;//傳輸波特率

      PortDCB.Parity=NOPARITY;//校驗(yàn)位

      PortDCB.StopBits=ONESTOPBIT;//停止位

      對(duì)于串口通信端口,應(yīng)用程序必須使用COMMTIMEOUTS結(jié)構(gòu)來(lái)設(shè)定串口端口的逾時(shí)值。通常,配置超時(shí)值和配置串口類似。首先用Get CommTimeots函數(shù)獲得當(dāng)前串口的超時(shí)值,然后可以修改COMMTIMEOUT成員,最后用SetCommTimeouts函數(shù)設(shè)定超時(shí)值。

      COMMTIMEOUTS CommTimeouts;//聲明結(jié)構(gòu)

      GetCommTimeouts(hPort,&CommTimeouts;);//獲得當(dāng)前的超時(shí)值

      //變更COMMTIMEOUT結(jié)構(gòu)的設(shè)定值

      SetCommTimeouts(hPort,&CommTimeouts;);//設(shè)定讀寫動(dòng)作的逾時(shí)值

      2.3讀取/寫入通信串口

      讀取通信端口使用ReadFile函數(shù)接收從其他末端的串聯(lián)連接裝置來(lái)的信息,需要注意的是WinCE不支持重疊I/O,所以如果在主線程進(jìn)行大量讀寫串口操作時(shí),有可能使整個(gè)程序陷入緩慢的串口等待中去,因此一般都采用多線程來(lái)進(jìn)行讀寫串口操作。WinCE不支持交錯(cuò)式I/O,故其參數(shù)設(shè)置為NULL。讀取串行通信端口程序如下:

      ReadFile(hPort,&Byte;,//指向讀取的信息存放之處

      1,//欲讀取的字節(jié)個(gè)數(shù)

      &dwBytesTransferred;,//實(shí)際讀取的字節(jié)個(gè)數(shù)

      NULL//不支持交錯(cuò)式I/O

      串行通信端口使用WriteFile函數(shù)連接到另外的裝置傳輸信息,由于WinCE串行通信不支持交錯(cuò)式I/O,故應(yīng)用程序的主要線程或建立任何窗口的線程不應(yīng)寫進(jìn)大量信息到串行端口,否則這些線程會(huì)被阻塞等待輸入/輸出完成無(wú)法管理其他相關(guān)信息隊(duì)列,寫入串行通信端口的程序如下:

      WriteFile(hPort,&Byte;,//指向欲寫入的信息

      1,//欲寫入數(shù)據(jù)的字節(jié)個(gè)數(shù)

      &dwBytesWritten;,//實(shí)際寫入的字節(jié)個(gè)數(shù)

      NULL//不支持交錯(cuò)式I/O

      三、S50非接觸射頻卡與讀卡器通信

      3.1硬件組成

      本預(yù)付費(fèi)智能控制系統(tǒng)讀卡器采用峰華科技S8型雙界面讀卡,通過(guò)RS232串行接口與人機(jī)界面連接,工作頻率為13.56MHz,支持非接觸卡MIFARE系列/DESFIRE/ICODE2等常見IC卡和CPU卡,本次測(cè)試與PC采用COM3連接,IC卡采用廣泛應(yīng)用的S50卡,容量8k,分16個(gè)扇區(qū),每個(gè)扇區(qū)4塊,每塊16個(gè)字節(jié),每個(gè)扇區(qū)有獨(dú)立的一組密碼及訪問(wèn)控制;IC卡有唯一的32位序列號(hào),具有防沖突機(jī)制,可對(duì)數(shù)據(jù)塊進(jìn)行初始化、讀、寫操作,每個(gè)扇區(qū)的塊3為控制塊,包括密碼A、存取控制以及密碼B,結(jié)構(gòu)為:A0 A1 A2 A3 A4 A5 FF 07 80 69 B0 B1 B2 B3 B4 B5,圖2為S50卡讀寫單元結(jié)構(gòu)。

      3.2軟件設(shè)計(jì)

      目前用匯編語(yǔ)言開發(fā)串行通信程序的應(yīng)用較多,通常利用Mscomm控件、第3方動(dòng)態(tài)鏈接庫(kù)和調(diào)用API函數(shù)三種方式編寫串行通信程序,Win32中使用API函數(shù)開發(fā)通信程序時(shí)串口和其他通信設(shè)備均被作為文件處理,串口的打開、關(guān)閉等操作使用的API函數(shù)與操作文件的函數(shù)相同。本文基于VC開發(fā)串行通信程序,利用第3方提供的動(dòng)態(tài)鏈接庫(kù)以及調(diào)用API函數(shù)編寫通信程序。

      系統(tǒng)使用umf.dll動(dòng)態(tài)鏈接文件,在讀取IC卡以及讀卡器上所存放的電壓數(shù)據(jù)時(shí),調(diào)用實(shí)現(xiàn)串口通信。其中iport參數(shù)是串口號(hào),系統(tǒng)采用的是COM3串口通信,iBaud參數(shù)是傳輸波特率,根據(jù)用戶需求,傳輸波特率設(shè)定為115200,iSerialNo參數(shù)是讀卡器的序列號(hào),系統(tǒng)規(guī)定為0。具體的傳輸協(xié)議使用動(dòng)態(tài)鏈接庫(kù)的函數(shù)來(lái)實(shí)現(xiàn)數(shù)據(jù)通信,所以不再設(shè)置。

      使用WinAPI進(jìn)行串口通信程序設(shè)計(jì)具有很強(qiáng)的靈活性,Windows的API函數(shù)存放在動(dòng)態(tài)鏈接庫(kù)中,調(diào)用函數(shù)API可以實(shí)現(xiàn)串口通信,圖3為$50卡與讀寫器的通信流程簡(jiǎn)圖。

      對(duì)于復(fù)位應(yīng)答來(lái)說(shuō),通信協(xié)議和通信波特率已經(jīng)是定義好的,當(dāng)有卡片進(jìn)入讀寫器操作范圍時(shí),讀卡器與之通信來(lái)確定是否為本系統(tǒng)卡片類型,本系統(tǒng)設(shè)定一次只能選擇一張卡進(jìn)行操作,故防沖突機(jī)制就是當(dāng)有多張卡進(jìn)入讀卡范圍時(shí)從中選擇一張進(jìn)行操作,其他的等待下次讀卡,同時(shí)返回選中射頻卡的序列號(hào)。選定要處理的卡片對(duì)扇區(qū)密碼進(jìn)行校驗(yàn)確保無(wú)誤進(jìn)行后續(xù)讀寫操作。

      根據(jù)通信協(xié)議約定在主機(jī)控制單元對(duì)射頻卡讀寫控制時(shí)需要握手連接,利用如下代碼,若三次均成功則數(shù)據(jù)開始傳送,否則關(guān)閉端口。

      Serial.SendData(&STX;_request,1);//發(fā)送聯(lián)絡(luò)信號(hào)

      Sleep(1000);//等待回應(yīng)

      Serial.Read_Data(&read;_Buffer,1);//讀取射頻卡讀寫模塊響應(yīng)信號(hào)

      if(read_Buffer==DLE)

      //在此進(jìn)行命令數(shù)據(jù)傳送

      else

      Serial.Close();//操作完成后關(guān)閉端口

      若握手成功則對(duì)卡片進(jìn)行密碼驗(yàn)證等系列命令,以下為部分源程序:

      fw_getver(icdev,linchar);//獲取設(shè)備號(hào)

      fw_request(indev,0,tagtype);//發(fā)出尋卡請(qǐng)求

      fw_anticoll(icdev,0,&snr;);//防碰撞控制,返回卡序列號(hào)

      show(“Find Card Ok!”1:

      linstr.Format(“%u”,cardsnr;

      show(linstr);

      fw_select(icdev,snr,&size;);//選擇某一序號(hào)的卡,size返回卡的容量大小

      if(fw_authentication(icdev,0,key)!=0)//核對(duì)扇區(qū)密碼

      printf(“Authentication error!”);

      else

      show(“Auth Card Ok!”):

      fw_read(icdev,4,data)//讀IC卡塊4數(shù)據(jù)

      fw_changed3(iedev,1,keya,ctrlword,0,keyb);∥修改一扇區(qū)塊3密碼

      fw_halt();//讀寫一次后掛起,直到卡重新進(jìn)入有效范圍

      本系統(tǒng)采用S8型讀寫器軟件平臺(tái)對(duì)編寫程序進(jìn)行測(cè)試,首先連接數(shù)據(jù)通信線并打開S8.exe,對(duì)程序中部分功能進(jìn)行驗(yàn)證,圖4為連接成功后顯示的設(shè)備型號(hào)F#W-FMl702-V1.00,序號(hào)為預(yù)先設(shè)置的0。

      本系統(tǒng)通信線連接使用COM3接口,故在初始化端口時(shí)選COM3端口并設(shè)置波特率為115200,圖5為初始化端口并設(shè)置參數(shù)。

      S50卡分16個(gè)扇區(qū),每個(gè)扇區(qū)由4塊組成,共有0-63塊,其中第0扇區(qū)的塊O存放廠商代碼,已經(jīng)固化不可更改。系統(tǒng)對(duì)扇區(qū)3進(jìn)行密碼驗(yàn)證,如果不成功則返回重新尋卡操作,讀寫卡測(cè)試隨機(jī)選扇區(qū)4進(jìn)行讀寫卡操作,點(diǎn)擊讀卡可看到扇區(qū)4里面的數(shù)據(jù)均讀出,且可改變數(shù)值進(jìn)行寫卡操作。圖6、7分別為驗(yàn)證扇區(qū)3密碼以及讀寫卡操作。

      四、結(jié)論

      基于VC語(yǔ)言實(shí)現(xiàn)在Windows CE平臺(tái)上的串行端口通信應(yīng)用于換熱站智能預(yù)付費(fèi)系統(tǒng)。利用調(diào)用WIN32 API函數(shù)的方式設(shè)計(jì)并開發(fā)S50卡與讀卡器的通信程序,在s8讀卡器上進(jìn)行驗(yàn)證,能接收到來(lái)自S50非接觸射頻卡上的數(shù)據(jù),實(shí)現(xiàn)了讀卡器與IC卡之間的通信,該方法對(duì)實(shí)現(xiàn)基于WinCE的串口通信有一定參考價(jià)值,此串口程序的設(shè)計(jì)及開發(fā)為也為更多通信工程師提供了參考。

      猜你喜歡
      讀卡器
      煤礦井下人員定位系統(tǒng)設(shè)計(jì)與應(yīng)用研究
      煤炭與化工(2021年8期)2021-09-26 02:51:26
      與淘汰命運(yùn)抗?fàn)帯】炊P記本的讀卡器
      讀卡器
      影像視覺(2019年9期)2019-09-10 07:22:44
      讀卡器
      iPhone讀卡器
      顏值與功能并重
      世界博覽(2017年13期)2017-07-31 16:03:21
      基于EMV非接通信規(guī)范的非接觸讀卡器設(shè)計(jì)
      多合一讀卡器
      為二維碼識(shí)別的獻(xiàn)禮之作——評(píng)測(cè)平治二維碼門禁讀卡器
      雷克沙讀卡器帶Lightning端口的讀卡器
      CHIP新電腦(2016年6期)2016-06-21 12:12:44
      台东市| 客服| 蓝田县| 遂宁市| 北京市| 永寿县| 嫩江县| 墨竹工卡县| 朔州市| 四子王旗| 葫芦岛市| 霍邱县| 商河县| 蕲春县| 图木舒克市| 平山县| 民丰县| 班玛县| 石嘴山市| 榆中县| 西充县| 公安县| 金华市| 连江县| 泊头市| 德钦县| 天柱县| 连平县| 天长市| 拜城县| 汉川市| 霍州市| 尚义县| 曲靖市| 永善县| 邵阳县| 尚义县| 遵化市| 称多县| 金昌市| 襄樊市|