1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      基于MDB/ICP協(xié)議的自動售賣系統(tǒng)的主控制器實現(xiàn)

      更新時間: 2006-03-22 14:33:10來源: 粵嵌教育瀏覽量:2830

        隨著國你經(jīng)濟和技術的發(fā)展,自動售賣系統(tǒng)由于其方便性、易管理性和低成本,正得到越來越廣泛的應用。而自動售賣系統(tǒng)的外設也越來越復雜,從投幣機到讀鈔機到非現(xiàn)金交易(如IC記賬卡),導致對主控制器的要求越來越高。為了簡化設計,采用一個簡單、穩(wěn)定的內(nèi)部通訊總線協(xié)議非常必要。

        本文介紹了歐洲售機制造者協(xié)會(EVMMA)制定的MDB/ICP總線協(xié)議。該協(xié)議簡潔明了,功能強大,可擴展性強,并且對外掛外設備數(shù)目沒有限制,是理想的自動售賣系統(tǒng)內(nèi)部總線協(xié)議。本文從主控制器的角度給出了對MDB/ICP總線進行操作控制的硬件和軟件實現(xiàn)。

        1 MDB/ICP協(xié)議簡介

        MDB/ICP協(xié)議(Multi-Drop Bus / Internal Communication Protocol)是歐洲售貨機制造者協(xié)會制定的一套用于協(xié)調自動售賣機的主控制器(VMC)與多個外設之間通信的協(xié)議。硬幣機和讀鈔機的標準首先是由Coinco在美國可口可樂公司的指定下開發(fā)的。這個標準于1993年被NAMA協(xié)會采用,經(jīng)過一個專門的工作組修訂后,于1994年被EVMMA采用。第二階段的非現(xiàn)金交易標準由Debitek代表NAMA開發(fā),并于1994年被NAMA采用。EVMMA加入了一些兼容的指令后于1994年采用。

        MDB接口實際上是工作于9600波特率的主從型串行總線接口,所外圍設備(例如硬幣機、讀鈔機、讀卡器等)均為主控制器(傳統(tǒng)上稱售貨機控制器——VMC)的從機。所有外圍設備與VMC之間的通信方式都一致。

        MDB協(xié)議的串行位格式為:1個起始位,8個數(shù)據(jù)位,1個方式位與1個停止位,共11位。位傳遞的順序如圖1所示。其中方式位根據(jù)傳遞的方式不同置0或置1。在MDB總線上,VMC通過廣播方式向外發(fā)送命令。字節(jié)為地址字節(jié)(實際上只有高5位尋址信息,低3位為對外設的指令),該字節(jié)被所有的外設讀取,但只有符合地址字節(jié)所指定的外設才處理其后的數(shù)據(jù)字節(jié),并做出反應。在VMC到外設的數(shù)據(jù)中,地址字節(jié)的方式位被置1,數(shù)據(jù)字節(jié)的方式位被置0,外設通過檢驗接收到的方式位確認是地址命令還是數(shù)據(jù)。當數(shù)據(jù)從外設發(fā)送到主機時,送出的字節(jié)方式位被置1,標志著數(shù)據(jù)發(fā)送完畢。

        VMC向外設傳送的指令由一個地址字節(jié)、一些可選的數(shù)據(jù)字節(jié)與一個校驗和(CHK)字節(jié)構成。發(fā)送指令后,外設應答VMC的通信塊可以由一個數(shù)據(jù)塊和一個CHK字節(jié)組成,或者一個應答字節(jié)(ACK),或者一個無應答字節(jié)(NAK)。如果外設應答數(shù)據(jù)塊的話,VMC將通過一個應答字節(jié)(ACK)、無應答字節(jié)(NAK)或得發(fā)字節(jié)(RET)應答外設傳回的數(shù)據(jù)。

        圖2至圖5為幾個典型的會話例子,其中“*”表示傳送時方式位置1,“ADD”表示地址字節(jié),“CHK”表示傳送數(shù)據(jù)的校驗和。


        2 硬件系統(tǒng)結構

        在MDB/ICP總線協(xié)議基礎上,筆者構建了一個實際的自動售賣系統(tǒng),系統(tǒng)原理圖如圖6所示。VMC通過MDB總線與投幣機、讀鈔機和讀卡器交互,控制外設的運轉,并從外設獲得用戶的支持情況。同時,VMC也負責處理與用戶之間的交互,驅動液晶顯示,處理鍵盤輸入,驅動符合用戶需要的電機運轉出貨。在本項目中,VMC還需通過MODEM自動撥號連接公司總線的服務器,將銷售數(shù)據(jù)傳送回公司。

        如圖6所示,所有MDB外設均掛在同一總線上,由總線提供24V和5V的電源,數(shù)據(jù)線與單片機的串口相連。


        本項目中選用的單片機為DALLAS DS5002FP。該單片機代碼級兼容MCS-51系列單片機,在使用外存的情況下仍然可以使用4個PO作為數(shù)據(jù)I/O,帶外設的能力較強。但它只有一個串口,控制MDB總線和控制MODEM都需要使用串口,因此必須將串口進行復用。通過一個譯碼器實現(xiàn)選通功能。

        3 MDB/ICP會話控制

        將VMC與外設之間通過MDB總線的會話分為四個層次:

        (1)串口初始化

        初始化串口時,主要工作是設置波率(9600)和傳輸方式(11位)。為順利獲得9600波特率,單片機采用的晶振為11.0592MHz。源代碼如下(采用Franklin C51語言編寫):

      // 一點常量定義

      #define uchar unsigned char

      #define T_RESPONSE 0xee //*5.0毫秒*/

      #define MAX_BLOCK_SIZF 36 /*數(shù)據(jù)塊長度*/

      #define ERR_TIME_OUT 0x81 /*超時*/

      #define ERR_NO_MODE_BIT 0x82*/未收到字節(jié)*/

      #define ERR_CHECKSUM 0x83 /*校驗和錯*/

      #define ACK 0x00

      #define RET 0xaa

      #define NAK 0xff

      //初始化串口

      void InitSerialPort()

      {

      SCON = 0xd0; //設置串口為方式3(9bit)

      TMOD &=0x0f;

      TMOD I=0x20; //設置定時器1為方式2

      TR1 =1; //定時器1使能

      TH1 = 0xfd; //設定波行率:9600 NRZ

      PCON &=0x7f; //Set SMOD=0

      RI=0;

      TI=0;

      }

        (2)字節(jié)的傳送

        這里需要注意的是:發(fā)送數(shù)據(jù)時要根據(jù)需要設置方式位,而接收數(shù)據(jù)時要返回方式位的值,以判斷是否收完所有數(shù)據(jù)。

      // 傳送字節(jié)

      void TransmitByte(uchar byte,bit mode)

      //形參:byte——準備發(fā)送的字節(jié)

      // mode——預備要設置的方式位

      {

      TB8=mode; //設置方式位

      SBUF = byte; //發(fā)送字節(jié)

      While(!TI); //等待發(fā)送完畢

      TI=0;

      }

      //接收字節(jié)

      #pragma disable

      uchar ReceiveByte(uchar *byte,uchar *bMode)

      //形參:*byte——返回接收到的字節(jié)值

      // *bMode——返回接收到的字節(jié)的方式位

      //返回值:0—超時,1—成功接收

      {

      TMOD &=0xf0;

      TMOD |=0x01; //設置定時器0為方式1(16位)

      TH0=T_RESPONSE;

      TL0=0x00; //設置超時門限

      TF0=0;

      TR0=1; //定時器0使能

      While (!RI && !TF0)

      ; //等待接收字節(jié)直至超時

      TF0=0;

      if(RI){ //已接收字節(jié)

      RI=0;

      *byte=SBUF; //返回字節(jié)值

      *bMode=RB8; //返回方式位

      return 1;

      }else{ //超時

      RI=0;

      return 0;

      }

      }

        (3)數(shù)據(jù)塊的傳送

        這部分與下面的會話部分放在一個函數(shù)體內(nèi)實現(xiàn)。

        (4)會話

        這是MDB會話控制的核心部分。根據(jù)需要傳送數(shù)據(jù)包,計算校驗字節(jié),控制方式位,在時序允許的響應時間內(nèi)接愛外設返回的數(shù)據(jù),做出ACK或NAK等反應。并且按照MDB/ICP標準中堆薦的方式處理異常情況,當接受數(shù)據(jù)超時或校驗和錯時,重復發(fā)送命令多次,以增強容錯性能。將接收到的數(shù)據(jù)返回給調用乾,并返回結果碼。源程序如下:

      //與外設會話,在調用之前確認譯碼器選通MDB總線

      uchar Session(uchar add,uchar dat[],uchar count)

      //形參:add——VMC發(fā)送的地址指令字節(jié)

      // dat[]——VMC發(fā)送的數(shù)據(jù)塊

      // count——數(shù)據(jù)塊的大小

      //返回值:0——外設應答ACK

      //非0且小于0x80——外設應答的數(shù)據(jù)塊的大小

      //大于等于0x80——會話中出錯

      //外設應答的數(shù)據(jù)塊存放在全局數(shù)組uchar recBuff[]

      {

      uchar data check,i,j,err;

      uchar data mode;

      for(j=0;j<5;j++){ //多重復發(fā)送命令5次

      check=0;

      err=0;

      TransmitByte(add,1); //發(fā)送地址字節(jié)

      Check +=add; //計算CHK

      For(i=0;i<count,i++){ //發(fā)送數(shù)據(jù)字節(jié)

      TransmitByte(dat[i],0);

      check +=dat[i];

      }

      TransmitByte(check,0); //發(fā)送CHK

      for (i=0,check=0,mode=0;

      !mode && i<MAX_BLOCK_SIZE && !err;

      i++)

      {//反復接收字節(jié)直到方式位為1或出錯

      //接收到的數(shù)據(jù)存在全局數(shù)組recBuff[]里

      if(!ReceiveByte(recBuff+i,&mode))

      //超時。外設可用超時表示NAK

      err=i?ERR_TIME_OUT:NAK;

      else if (i= =0 && recBuff[i]= =NAK && mode)

      //收到NAK

      err = NAK;

      else if (!mode)

      //方式位為0表示還有數(shù)據(jù)

      check +=recBuff[i];

      } //for i

      if(!err){ //未發(fā)生錯誤

      if (!mode){

      //收完36個字節(jié)還未結束

      TransmitByte(NAK,0);

      err=ERR_NO_MODE_BIT;

      }else if (i>1) {

      //收到數(shù)據(jù)塊

      if(check !=recBuff[i-1]){ //校驗和錯

      TransmitByte(NAK,0);

      err=ERR_CHECKSUM;

      } else{

      //一切正常,發(fā)送ACK后跳出循環(huán)

      TransmitByte(ACK,0);

      break;

      }

      } else

      //收到外設傳來的ACK

      break;

      }//if(!err)

      Wait(T_RESPONSE); //防止與外設數(shù)據(jù)沖突

      }//for j

      //返回接收到的數(shù)據(jù)塊大小或出錯代碼

      return err?err:(i-1);

      }

        本文使用DS5002FP實現(xiàn)了對MDB總線的控制與訪問。通過將MDB/ICP協(xié)議進行分解,很好地實現(xiàn)了總線驅動。實踐證明該驅動程序穩(wěn)定、可靠,大大降低了上層界面開發(fā)的難度,提高了系統(tǒng)的可維護性,節(jié)約了成本。

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲欧美综合国产精品一区 | 中文不卡AV在线播放 | 永久三级网站在线观看 | 日本国产欧美一二区 | 香蕉喷水视频在线观看 | 亚洲欧美日韩看国产 |