第一篇:自動售貨機系統程序
Coin類:
#include
using namespace std;
class Coin { public: /** Constructs a coin with a given name and value @param n the coin name @param v the coin value */ Coin(string n, double v);/** Gets the coin name.@return the name */ string get_name()const;/** Gets the coin value @return the value */ double get_value()const;private: string name;double value;};
Coin::Coin(string n, double v){ name = n;value = v;}
string Coin::get_name()const { return name;}
double Coin::get_value()const { return value;}
Product類: #include
using namespace std;
class Product { public: /** Constructs a product with a given name, price and quantity @param n the product name @param p the price @param q the quantity */ Product(string n, double p, int q);/** Gets the product name @return the name */ string get_name()const;/** Gets the product price @return the price */ double get_price()const;/** Gets the product quantity @return the quantity */ int get_quantity()const;/** Adds to the product quantity @param amount the amount to add */ void add_quantity(int amount);private: string name;double price;int quantity;};
Product::Product(string n, double p, int q){ name = n;price = p;quantity = q;}
string Product::get_name()const { return name;}
double Product::get_price()const { return price;}
int Product::get_quantity()const { return quantity;}
void Product::add_quantity(int amount){ quantity = quantity + amount;}
VendingMachine類:
class VendingMachine { public: /** Constructs a vending machine with no current product selection.*/ VendingMachine();/** Adds product to the machine.@param p the product to add */ void add_product(Product p);/** Sets the currently selected product @param name the product name @return true if the machine has a product with the given name */ bool select_product(string name);void chaxun_product();//查詢當前售貨機內的商品
/** Adds a coin to pay for the currently selected product.@param c the coin to add @return true if sufficient coins have been added to pay for the selected product.*/ bool add_coin(vector
double return_yiyoucoins();//統計售貨機中已有的貨款 void setcurrent_product();//把當前選擇的商品代號置為-1 int getcurrent_product();//得到當前選擇的商品代號 private: vector
products;int current_product;vector
VendingMachine::VendingMachine(){ current_product =-1;}
void VendingMachine::add_product(Product p)//添加商品 { for(int i = 0;i < products.size();i++){ if(products[i].get_name()== p.get_name()&& products[i].get_price()== p.get_price()){ products[i].add_quantity(p.get_quantity());cout<<“添加成功!”< { cout<<“已存在該商品,與您輸入的價格不同!”< return; } } products.push_back(p);cout<<“添加成功!”< bool VendingMachine::select_product(string name)//選擇商品 { int i;for(i = 0;i < products.size();i++){ if(products[i].get_name()== name && products[i].get_quantity()> 0){ current_product = i;return true;} else { if(products[i].get_name()== name && products[i].get_quantity()== 0){ cout << “對不起,該商品已售完!n”;return false;} } } if(i==products.size()){ cout<<“對不起,不存在該商品!”< double VendingMachine::return_yiyoucoins()//統計售貨機當前的金錢總額 { double total = 0;for(int i = coins.size()1;i >= 0;i--){ coins.push_back(current_payment[i]);current_payment.pop_back();} products[current_product].add_quantity(-1);current_product =-1;cout<<“交易成功!”< { return false;} } double VendingMachine::add_coinbijiao(vector } double m=products[current_product].get_price()-total;if(m>0)return m;else return-1;} double VendingMachine::return_coins()//統計當前投入的金錢總額 { double total = 0;for(int i = current_payment.size()1;i >= 0;i--){ total = total + coins[i].get_value();coins.pop_back();} return total;} void VendingMachine::chaxun_product(){ if(products.size()==0){ cout<<“暫時沒有添加商品!”< int VendingMachine::getcurrent_product(){ return current_product;} Main函數: #include void main(){ vector VendingMachine machine;bool more = true;machine.chaxun_product();while(more){ cout << “a)添加商品 x)查詢商品 s)選擇商品 p)投幣 c)取消 e)查詢當前金額 r)取款 q)退出: ”;string command;cin>>command;if(command == “a”){ cout << “商品名: ”;string name;cin>>name; cout << “價格: ”;double price;cin >> price;cout << “數量: ”;int quantity;cin >> quantity;machine.add_product(Product(name, price, quantity));} else if(command == “s”){ double total1; total1=machine.return_yiyoucoins(); if(total1>=5000)//當售貨機中的貨款大于等于5000時,暫停售貨 { cout<<“對不起,現在暫停售貨!”< } else { machine.setcurrent_product();cout << “商品名: ”;string name;cin>>name;machine.select_product(name); } } else if(command == “p”){ if(machine.getcurrent_product()!=-1)//如果當前已選擇商品,才可以投幣 { bool panduan=false;while(!panduan)//多次投幣的實現 { cout << “所投錢幣名稱(以 # 結束投幣過程):”;string name;cin>>name;while(name!=“#”){ bool found = false;for(int i = 0;!found && i < coins.size();i++){ if(coins[i].get_name()== name){ current_pay.push_back(coins[i]);found=true;} } if(!found){ cout << “不存在該貨幣,請重新投入:n”;} cin>>name; } double k=machine.add_coinbijiao(current_pay);if(k==-1) { machine.add_coin(current_pay);for(int i = current_pay.size()1;i >= 0;i--){ total = total + current_pay[i].get_value();current_pay.pop_back();} cout << “Returned(退還)” < else cout<<“您還沒有選擇商品!”< { machine.setcurrent_product(); double total=0; for(int i = current_pay.size()1;i >= 0;i--){ total = total + coins[i].get_value();coins.pop_back();} return total;} void VendingMachine::chaxun_product(){ if(products.size()==0){ cout<<“暫時沒有添加商品!”< int VendingMachine::getcurrent_product(){ return current_product;} } JAVA import Input.touqian;import java.*;class shangpin { } class fenpeiqi { } class xianshichanpin { fenpeiqi fpq[]=new fenpeiqi[3];public xianshichanpin(){ fpq[0]=new fenpeiqi(3.0);fpq[0].sp[0]=new shangpin(“玉米烤腸 ”,10);fpq[0].sp[1]=new shangpin(“可口可樂 ”,15);fpq[0].sp[2]=new shangpin(“百事可樂 ”,10);fpq[1]=new fenpeiqi(5.0);fpq[1].sp[0]=new shangpin(“哈德門香煙”,10);fpq[1].sp[1]=new shangpin(“將軍香煙 ”,15);fpq[1].sp[2]=new shangpin(“紅梅香煙 ”,10);fpq[2]=new fenpeiqi(10.0);fpq[2].sp[0]=new shangpin(“一支筆香煙”,10);fpq[2].sp[1]=new shangpin(“紅塔山香煙”,10);fpq[2].sp[2]=new shangpin(“泰山香煙 ”,15);double price;shangpin sp[]=new shangpin[3];public fenpeiqi(double price){ } this.price=price;String name;int num;public shangpin(String name,int num){ } this.name=name;this.num=num; #“);#”);#“);#”);#“); } } void show(){ System.out.println(”=============== System.out.println(“# System.out.println(”# System.out.println(“# 歡迎使用自動售貨機 System.out.println(”# System.out.println(“# =================”);System.out.println(“=============== System.out.println();System.out.println(”編號tt“+”名稱ttt“+”價格tt“+”數量t“);for(int i=0;i } if(fpq[i]!=null){ } for(int j=0;j } } if(fpq[i].sp[j]!=null){ =================”);System.out.println((i+1)*10+j+1+“tt”+fpq[i].sp[j].name+“tt”+fpq[i].price+“tt”+fpq[i].sp[j].num);System.out.println(“=============== } =================”);class panduan { boolean ying() } { } boolean zhi(){ } int z=touqian.in(); if(z==5||z==10){ } else { } return false;return true;double y=touqian.dou();if(y==1||y==0.5){ } else { } return false;return true;class jiabi { switch(touqian.in())void ceshi(){ System.out.println(“請選擇投放錢的類型 ”);System.out.println(“1 表示投放 硬幣”);System.out.println(“2 表示投放 紙幣”);System.out.println(“請輸入您選擇的錢的類型 :”); panduan pd=new panduan(); { case 1: System.out.println(“請您投入有效的面值”); if(pd.ying()) { System.out.println(“您投入的是有效地硬幣”); System.out.println(); // System.out.println(“^_^ 請選擇您所需要的物品^_^”); } else } class chanpin { { System.out.println(“您投入的不是有效地硬幣,請您重新投入”); } break; case 2 : System.out.println(“請您投入有效的面值”); if(pd.zhi()) { // } else { } break; default : System.out.println(“請您重新投入有效地貨幣”); } } System.out.println(“您投入的不是有效的紙幣,請您重新投入”);System.out.println(“您投入的是有效的紙幣”);System.out.println();System.out.println(“^_^ 請選擇您所需要的物品^_^”); } } public static void main(String args[]){ System.out.println(“請輸入您想要產品的編碼:”);int bianma;bianma=touqian.in();System.out.println(“請輸入您想要產品的數量:”);int shuliang;shuliang=touqian.in();System.out.println(“您一共要付:”);double sumjine;sumjine= xianshichanpin xscp=new xianshichanpin();xscp.show(); 自動售貨機 信息1101 施敏宇 18號 下面是自動售貨機系統的需求陳述,試建立它的對象模型、動態模型和功能模型: 自動售貨機系統是一種無人售貨系統。售貨時,顧客把硬幣投入機器的投幣口中,機器檢查硬幣的大小、重量、厚度及邊緣類型。有效的硬幣是一元幣、五角幣、五分幣、二分幣、一分幣。其他貨幣被認為是假幣。機器拒絕接受假幣,并將其從退幣孔退出。當機器接受了有效的硬幣之后,就把硬幣送入硬幣儲藏器中。顧客支付的貨幣根據硬幣的面值進行累加。自動售貨機裝有貨物分配器。每個貨物分配器中包含零個或多個價格相同的貨物。顧客通過選擇貨物分配器來選擇貨物。如果貨物分配器中有貨物,而且顧客支付的貨幣值不小于該貨物的價格,貨物將被分配到貨物傳送孔送給顧客,并將適當的零錢返還到退幣孔。如果分配器是空的,則和顧客支付的貨幣值相等的硬幣將被送回到退幣孔。如果顧客支付的貨幣值少于所選擇的分配器中貨物的價格,機器將等待顧客投進更多的貨幣。如果顧客決定不買所選擇的貨物,他投放進的貨幣將從退幣孔中退出。 面向對象的分析 面向對象分析方法的核心思想是利用面向對象概念和方法為軟件需求構造一組相關模型(對象模型,動態模型和功能模型),來獲得關于問題域的全面認識。 這三個模型從不同的角度對系統進行描述,其中:對象模型描述了系統靜態的、結構化的數據性質;動態模型描述了系統順勢的、行為化的控制性質;功能模型描述了變化的系統的功能性質。這三個模型都涉及到數據。控制和操作等共同的概念,但每種模型描述的側重有所不同。它們各自以不同側面反應系統的實質內容,綜合起來則全面反映了目標系統的需求。 對象模型是三個模型中最關鍵的。它的作用是描述系統的靜態結構,包括構成系統的類和對象、它們的屬性和操作以及它們之間的聯系。UML中類圖適用于建立對象模型,狀態圖適用于建立動態模型。每個類的動態行為用一張狀態圖來表示,各個類的狀態圖通過事件合并起來,構成系統的動態模型。也就是說,動態模型是基于事件共享而相互關聯的一組狀態圖的集合。建立對象模型大體上按照下列順序進行:尋找問題域內的對象,識別出對象間的關系、定義屬性和服務。事實上,分析工作不可能嚴格按照預定順序進行,系統的模型往往需要反復構造多遍才能建成。 注:對象硬幣計算器和對象硬幣檢測器可以作為對象自動售貨器的一部分,它們的屬性作為自動售貨器的屬性。 建立動態模型 對于僅存數靜態數據的系統來說,動態模型并沒有什么實際意義。然而在開發交互式系統時,動態模型卻起著很重要的作用。如果收集輸入信息是目標系統的一項主要工作,則在開發這類應用系統時建立正確的動態模型是至關重要的。 建立動態模型的步驟: (1)編寫典型的對話腳本; (2)從腳本中提取出事件,聯系該事件與其目標對象; (3)組織事件的順序和狀態(采用狀態圖描繪); (4)比較各個不同對象的狀態圖,檢查對象之間的一致性,確保事件之間的匹配。 提示投幣投幣購買提示是假幣,退幣假幣檢查硬幣否真幣存儲硬幣,計算貨幣總值確認投完硬幣是請求選擇貨物選擇貨物檢測貨物存量無貨提示無貨計算比較貨幣總值和貨物價格確認確認顧客購買小于提示貨物不足,確認顧客購買不購買送出貨物,請求取貨不購買退幣請求取退幣提示顯示交易完畢 功能模型 功能模型描述了系統的所有計算。功能模型指出發生了什么,動態模型確定什么時候發生,而對象模型確定發生的客體。功能模型表明一個計算如何從輸入值得到輸出值,它不考慮計算的次序。功能模型由多張數據流圖組成。數據流圖用來表示從源對象到目標對象的數據值的流向,它不包含控制信息,控制信息在動態模型中表示,同時數據流圖也不表示對象中值的組織,值的組織在對象模型中表示。 數據流圖中包含有處理、數據流、動作對象和數據存儲對象。 1.處理 數據流圖中的處理用來改變數據值。最低層處理是純粹的函數,一張完整的數據流圖是一個高層處理。 2.數據流 數據流圖中的數據流將對象的輸出與處理、處理與對象的輸入、處理與處理聯系起來。在一個計算機中,用數據流來表示一中間數據值,數據流不能改變數據值。 3.動作對象 動作對象是一種主動對象,它通過生成或者使用數據值來驅動數據流圖。 4.數據存儲對象 數據流圖中的數據存儲是被動對象,它用來存儲數據。它與動作對象不一樣,數據存儲本身不產生任何操作,它只響應存儲和訪問的要求。 有效幣特征假幣退假幣假幣檢查硬幣有效幣硬幣送入硬幣儲藏器計算面值貨物價格有貨貨幣總值硬幣顧客投幣顧客不足等待顧客投幣顧客取消購買,退幣顧客判斷貨幣是否足夠足夠選擇貨物判斷分配器貨物存量無貨分配貨物,找零貨物,硬幣硬幣退幣 常工院畢業設計論文 自動售貨機的PLC系統設計 摘要:本文介紹了自動售貨機的基本原理以及工作流程,然后以一次交易過程為例,把交易過程分為了幾個程序塊,然后分別對程序塊進行編程。具體說明了可編程序控制在自動售貨機忠的作用。程序涉及到了自動售貨機工作的絕大部分過程。利用PLC控制的自動售貨機提高了系統的穩定性,保證自動售貨機能夠長期穩定運行。 關鍵字 自動售貨機;可編程控制器;梯形圖 Abstact: This articke introduced vending machine?s basic principle as well as the work flow, then take a transaction process as examples, divides into several blocks the transaction process, the carries on the programming separately to the block.Explained the programmable controller?s in vending machine function specifically.The procedure involved the vending machine work major part process.Enhanced system?s stability using the PLC control?s vending machine, the guarantee vending machine has been able the long-term stability movement.Key word vending machine;programmable controller;trapezoidal chart 常工院畢業設計論文 目錄 ·摘要…………………………………………………………………………………1 ·前言…………………………………………………………………………………3 ·第一章 自動售貨機的介紹………………………………………………………...4 ·1.1自動售貨機功能分析…………………………………………………………..4 ·1.1.1自動售貨機的基本功能……………………………………………………...4 ·1.2 PLC的選型原理………………………………………………………………..5 ·1.3 PLC的概論……………………………………………………………………..6 ·1.3.1 PLC的產生…………………………………………………………………...6 ·1.3.2 PLC的定義…………………………………………………………………...6 ·1.3.3 PLC的發展趨勢……………………………………………………………...7 ·1.3.4 PLC的特點…………………………………………………………………...8 ·1.3.5 PLC的基本功能……………………………………………………………...9 ·1.4 PLC的基本結構和原理………………………………………………………10 ·1.4.1 PLC的系統結構…………………………………………………………….10 ·1.4.2 PLC各部分的作用………………………………………………………….10 ·1.5 松下電工可編程序控制器產品—FP1-C24介紹……………………………12 ·1.5.1 FP1-C24的組成各部分……………………………………………………..13 ·1.5.2 技術性能……………………………………………………………………14 ·第二章 PLC系統設計………………………………………………………….14 ·2.1 可編程序控制系統設計的基本原則………………………………………...14 ·2.1.1 控制系統設計原則…………………………………………………………14 ·2.1.2 控制系統設計的基本內容…………………………………………………14 ·2.1.3 控制系統設計的一般步驟…………………………………………………15 ·2.1.4 編寫梯形圖的注意事項……………………………………………………15 ·2.1.5 程序設計的步驟……………………………………………………………15 ·第三章 自動售貨機PLC程序設計……………………………………………16 ·3.1 仿真實驗中的售貨機的分析………………………………………………...16 ·3.2 設計任務的確定……………………………………………………………...18 ·3.3 程序設計部分………………………………………………………………...18 ·3.3.1 程序設計說明………………………………………………………………19 ·3.3.2 PLC 程序設計………………………………………………………………19 ·3.4 仿真界面與PLC……………………………………………………………...28 ·3.5 數據連接……………………………………………………………………...32 ·3.5.1 定義I/O設備……………………………………………………………….32 ·3.5.2 設計…………………………………………………………………………34 ·3.5.3 運行…………………………………………………………………………37 ·4 結束語…………………………………………………………………………38 ·致謝………………………………………………………………………………..39 ·參考文獻…………………………………………………………………………..39 常工院畢業設計論文 前言 從自動售貨機的發展趨勢來看,它的出現是由于勞動密集型的產業構造向技術密集型社會轉變的產物。大量生產、大量消費以及消費模式和銷售環境的變化,要求出現新的流通渠道;而相對的超市、百貨購物中心等新的流通渠道的產生,人工費用也不斷上升;再加上場地的局限性以及購物的便利性等因素的制約,無人自動售貨機作為一種必須的機器便應運而生了。 從廣義來講投入硬幣、紙幣、信用卡等后便可以銷售商品的機械,從狹義來講就是自動銷售商品的機械。從供給的條件看,自動售貨機可以充分補充人力資源的不足,適應消費環境和消費模式的變化,24小時無人售貨的系統可以更省力,運營時需要的資本小、面積小,有吸引人們購物的好奇心的自身性能,可以很好地解決人工費用上升的問題等各項優點。 據說世界上最早的自動售貨機出現在公元前3世紀,那是埃及神殿里的投幣式圣水出售機。17世紀,英國的小酒吧里設有了香煙的自動售貨機。在自動售貨機歷史的長河里,日本開發出實用型的自動售貨機,那是在進入本世紀后的事。日本第一臺自動售貨機是1904年問世的“郵票明信片自動售貨機“,它是集郵票明信片的出售和郵筒投函為一體的機器。自動售貨機的真正普及是在第二次世界大戰以后。50年代,”噴水型果汁自動售貨機“大手歡迎,果汁杯注入在紙杯里出售。后來,由于美國的飲料大公司進入日本市場,1962年,出現了以自動售貨機主體的流通領域的革命。1967年,100日元單位以下的貨幣全改為硬幣,從而促進了自動售貨機產業的發展。現在,自動售貨機產業正走向信息化并進一步實現合理化。例如實行聯機方式,通過電話線路將自動售貨機內的庫存信息及時地傳送到各營業點的電腦中,從而確保了商品的發送、補充以及商品選定的順利進行。并且,為防止地球暖化,自動售貨機的開發致力于能源的節省,節能型清涼飲料自動售貨機成為該行業的主流。在夏季電力消費高峰時,這種機型的自動售貨機即使在關掉冷卻器的狀態下也能保持低溫,與以往的自動售貨機相比,它能夠節省10—15%的電力。進入21世紀時,自動售貨機也將進一步向節省資源和能源以及高功能化的方向發展。因經濟復蘇緩慢,社會對擴大就業與工作場所所提供的茶點飲料的福利事業更為關注。自動售貨機不僅保障了愜意的工作時間,也是最廉價、提高職工工作效率最有效的手段。特別是在24小時無休工作狀態中的辦公場所,使用獨具魅力的迷你型飲料沖飲機解決了不間斷提供咖啡飲料服務的問題,這種服務加速了自動售貨機與咖啡飲品服務的融合。1999年的全美自動售貨機協會和全美咖啡服務協會的合并使人們更直觀地看到了這種融合的現象。 日本是自動售貨機的天堂。出了雞蛋、米飯之外,報紙、雜志、一次性相機、干電池、磁帶、刮胡刀、襪子、花及寵物食品等各種商品都通過自動售貨機進行銷售。連熟知自動售貨機的美國游客在日本看到10臺自動售貨機排成一列的景象后,也是連聲稱奇。 韓國大約有78萬臺自動售貨機,是除了日本、美國、英國之外自動售貨機使用數量最多的國家。從不同的種類來看,咖咖啡茶的自動售貨機約占全部售貨機的40%以上;另外,還有冰飲料自動售貨機、聽裝飲料自動售貨機、成人用品自動售貨機、生活用品自動售貨機、煙、方便面自動售貨機等多種。主要的設置場所包括學校、樓房、公共機關、地鐵、公共汽車站、公園、體育場、展示場、工廠等。運營自動售貨機產業的公司全國大約有800余個,而銷售自動售貨機原料、商品流通、機械銷售的公司大約達到了1150個。 常工院畢業設計論文 第一章 自動售貨機的介紹 1.1自動售貨機功能分析 這部分闡述了自動售貨機的各種動作功能和控制要求,給出了完整的自動售貨機操作規章,并介紹了自動售貨機運行系統所包括的人工操作步驟。 1.1.1自動售貨機的基本功能 在進行上、下位機程序編寫之前,首先要做的工作是確定自動售貨機本身所具備的功能及在進行某種操作后具有的狀態。 在實際生活照,我們見到的售貨機可以銷售一些簡單的日用品,如飲料、常用藥品和小的生活保健用品等。售貨機的基本功能就是投入的貨幣進行運算,并根據貨幣數值判斷是否能夠買某種商品,并做出相應的反應。舉一個簡單的例子來說明,列如:售貨機中有8種商品,其中01號商品(代表第一種商品)價格為2.60元,02號商品為3.50元,其余類推。現投入1個1元銀幣,當投入的貨幣超過01商品的價格時,01商品的選擇按鈕處應有變化,提示可以購買,其他商品同比。當按下選擇01商品的價格時,售貨機進行減法運算,從投入的貨幣總值中減去01商品的價格同時啟動相應的電機,提取01號商品到出貨口。此時售貨機繼續進行等待外部命令。如繼續交易,則同上。如果此時不在購買而按下退幣按鈕,售貨機則要進行退幣操作,退回相應的貨幣,并在程序中清零,完成此次交易。由此看來,售貨機一次交易要涉及加法運算、減法運算以及在退幣時的 出發運算,這是它內部功能。還要有貨幣識別系統和貨幣的傳動來實現完整的收獲、退幣功能。自動售貨機的工作流程圖如圖1所示。 常工院畢業設計論文 1.2 PLC的選型原則 當某一個控制任務決定由PLC來完成后,選擇PLC就成為最重要的事情。一方面要選擇多大容量的PLC,另一方面是選擇哪個的PLC及外設。 對第一個問題,首先要對控制任務進行詳細的分析,把所有的I/O點找出來,包括開關量I/O和模擬量I/O以及輸出是用繼電器還是晶體管或者是可控硅型。控制系統輸出點的類型非常關鍵,如果他們之間既有交流220V的接觸器、電磁閥、又有24V的指示燈,則最后選用的PLC的輸出端數有可能呢大于實際點數。因為PLC的輸出點一般是幾個一組公用一個公共端,這一組輸出只能有一種電源的種類和等級。所以一旦它們是交流220V的負載負載使用,則直流24V的負載只能使用其他的輸出端了。這樣有可能造成輸出點浪費,成本增加。所以要盡可能所則相同等級和種類的負載,比如使用交流220V的指示燈等。一般情況下繼電器輸出的PLC使用最多,但對于要求高速輸出的情況,就要使用無觸點的晶體管輸出的PLC了。 對于第二問題,則有以下幾個方面的考慮:(1)功能方面 所有PLC一般都具有常規的功能,但對某些特殊要求,就要知道所選用的PLC是否有能力控制任務。如對PLC與智能儀表及上位機之間有靈活方便的通信要求;或對PLC的計算速度、用戶程序容量等有特殊要求‘或對PLC的位置控制有特殊要求等。這就要求用戶對市場上流行的PLC品種有一個詳細的了解,以便做出正確的選擇。 (2)價格方面 不同廠家的PLC產品價格相差很大,有些功能類似、質量相當、I/O點數相當的PLC的價格能相差40%以上。在使用PLC較多的情況下,這樣的差價當然是必須考慮的因素。 (3)PLC主機選定后,如果控制系統需要,則相應的配套模塊也就選定了。 常工院畢業設計論文 1.3 PLC的 概述 1.3.1 PLC的產生 20世紀20年代起,人們把各種繼電器、定時器、接觸器及其觸點按一定的邏輯關系聯系起來組成控制系統,控制各種生產機械,這就是大家所熟悉的傳統繼電接觸器控制機系統。由于它結構簡單,容易掌握,價格便宜,在一定范圍內能滿足控制要求,因而使用面甚廣,在空也控制領域中一直占主導地位。但是繼電接觸器控制系統有明顯的缺點:設備體積大,可靠性差,動作速度慢,功能少,難與實現較復雜的控制,特別是由于它是靠硬連線邏輯構成的系統,接線復雜,當生產工藝或對象改變時,原有的接線和控制盤就要更換,所以通用性和靈活性較差。 20世紀60年代末期,美國的汽車制造業競爭激烈,各生產廠家的汽車型號不斷更換,它必要求生產線的控制系統亦隨之改變,以及對整個開展系統重新配置,為拋棄傳統的繼電接觸器控制系統的束縛,適應白熱化的市場競爭要求。1968年美國通用汽車公司向社會招標,對汽車流水線控制系統提出具體要求,歸納起來是: (1)編程方便,可現場修改程序(2)維修方便,采用插件式結構(3)可靠性高于繼電接觸器控制系統(4)體積小于繼電器控制盤 (5)數據可直接送人管理計算機(6)成本可與繼電器控制盤競爭(7)輸入可以是交流150V以上 (8)輸出為交流115V容量要求在2A以上,可直接驅動接觸器、電磁閥等(9)擴展時原系統改變最小 (10)用戶存儲器至少能擴張到4KB(適應當時汽車裝備過程的需要) 十項指標的核心要求是采用軟布線(編程)方式代替繼電控制的硬接線方式,實現大規模生產線的流程控制。 1.3.2 PLC的定義 美國國際電工委員會(IEC)在1987年對可編程序控制器做出以下定義:可編程序控制器是一類專門為在工業環境下應用而設計的數字式電子系統,它采用了可編程序的存儲器,用來在其內部進行存儲執行邏輯運算等功能的面向用戶的指令,并通過數字式或模擬式的輸入或輸出,控制各種類型的機械或者生產過程。可編程序控制器及其相關外部設備,都應按照易于與工業控制系統聯成一個整體,易于擴展其功能的原理而設計。 定義強調了PLC應直接應用于工業環境,它必須具有很強的抗干擾能力,廣泛的適應能力和應用范圍。這也是去唄與一般微機控制系統的一個重要特征。定義還強調了PLC是“數字運算操作的電子系統”,它也是一種計算機,它是“專門在工業環境下應用而設計的”工業計算機。這種工業計算機采用“面向用戶的指令”,因此編程方便。它能完成邏輯運算、順序運算、定時、記數和算術運算 常工院畢業設計論文 等操作,它還具有“數字量和模擬量輸入和輸出”的能力,并且非常容易與“工業控制系統聯成一體”,易于“擴充”。 1.3.3 PLC的發展趨勢 PLC總的發展趨勢是向高集成度、小體積、大容量、高速度、易使用、高性能方向發展。具體表現在以下方面: (1)向小型化、專業化、低成本方向發展 隨著微電子技術的發展,新型器件大幅度的提高功能和降低價格,使PLC結構更為緊湊,相當于一本精裝書本的大小,操作使用十分方便。PLC的功能不斷增加,將原來大、中型PLC才有的功能部分地移植到小型PLC上。(2)向大容量、高速度方向發展 大型PLC多采用微處理器系統,有的采用32位微處理器,可同時進行多任務操作,處理速度提高,特別是增強了過程控制和數據處理的功能。另外,存儲容量大大增加。 (3)智能型I/O模塊的發展 智能型I/O模塊是以微處理器和存儲器為基礎的功能部件,它們的CPU與PLC的主CPU并行工作,占用主CPU的時間很少,有利于提高PLC的掃描速度。(4)基于PC的編程軟件取代編程器 隨著計算機的日益普及,越來越多的用戶使用基于計算機上的編程軟件。編程軟件可以對PLC控制系統的硬件組態,即設置硬件的結構和參數,例如設置各框架各個插槽上的模塊的型號、模塊的參數、各串行通用接口的參數等。(5)PLC編程語言的標準化 與個人計算機相比,PLC的硬件、軟件的體系結構都是封閉的而不是開放的。在硬件方面,各廠家的CPU模塊和I/O模塊互不通用。PLC的編程語言和指令系統的功能和表達式也不一致,因此各廠家的可編程序控制器互不兼容。為了解決這一問題,IEC制定了可編程序控制器標準。標準中共有5種編程語言,允許編程者在同一程序中使用多種編程語言,這使編程能夠選擇不同的語言來適應特殊的工作。 (6)PLC通信的易用化 PLC的通信聯網功能使它能與個人計算機和其他智能控制設備交換數字信號,使系統形成一個統一的整體,實現分散控制和集中控制。(7)組態軟件與PLC的軟件化 個人計算機(PC)的價格便宜,有很強的數學運算、數據處理、通信和人機交互的功能。 (8)PLC與現場總線相結合 現場總線I/O與PLC可以組成功能強大的、廉價的DCS系統。(9)開發新型特殊功能模塊 I/O組件可以提高PLC的智能化、高密集度和增大處理能力。(10)CPU的處理速度進一步加快 目前,PLC的處理速度與計算機相比還比較慢,其中高的CPU也不過80486,將來會全面使用64位的RISC芯片,采用多CPU進行處理、分時處理或者分任務處理方式,將各種模塊智能化,部分系統程序用門陣列電路固化,這樣可使PLC的處理速度達到納秒級。 常工院畢業設計論文 1.3.4 PLC的特點 (1)抗干擾能力強,可靠性好 PLC在電子線路、機械結構以及軟件上都吸取了生產廠家長期積累的生產控制經驗,主要模塊均采用大規模與超大規模集成電路。I/O系統設計有完善的通道保護與信號調理電路;在結構上對耐熱、防潮、防塵、抗震等都有周到的考慮。具體措施主要有以下幾個方面: 1)隔熱:這是抗干擾的主要措施之一。PLC的輸入、輸出接口電路一般采用光電耦合器來傳遞信號。這種光電隔離措施,是外部電路與內部電路之間避免了電的聯系,可有效的抑制外部干擾對于PLC的影響,同時防止外部高電壓串入,從而減少故障和誤操作。 2)濾波:這是抗干擾的另一個主要措施。在PLC的電源電路和輸入/輸出電路中設置了多種濾波電路,用以對高頻干擾信號進行有效的抑制。 3)對內部電源采用了屏蔽、穩壓等保護措施,以減少外界干擾,保護供電質量。另外使輸入輸出接口電路電源彼此獨立,以避免電源之間的干擾。4)內部設置了連鎖、環境檢測與診斷、WATCHDOG(看門狗)等電路,一旦發現故障或程序循環執時間超過了警戒時鐘(WDT)規定時間(預示程序進入了死循環),立即報警,以保證CPU可靠運行。 5)利用系統軟件定期進行系統狀態、用戶程序、工作環境和故障檢測,并采用信息保護和恢復措施。 6)對用戶程序及動態工作數據進行電池備份,以保障停電后有關狀態或者信息部丟失。 7)采用密封、防塵、防震的外殼封裝結構,以適應工作現場的惡劣環境。8)以集成電路為基礎元件,內部處理過程不依賴于機械觸點,以保障高可靠性。而采用循環掃描的工作循環方式,也提高了抗干擾能力。(2)控制系統結構簡單,通用性強 PLC及外圍模塊品種多,可由各種組件靈活組合成各種大小和不同要求的控制系統。 (3)編程方便,易于使用 PLC是面向用戶的設備,PLC的設計者充分考慮到現場工程技術人員的技能和習慣,PLC程序的編程,采用梯形圖或面向工業控制的簡單指令形式。梯形圖與繼電器原理圖類似,這種編程語言現象直觀,容易掌握,不需要專門的計算機知識和語言,只要具有一定的電工和工藝的知識的人員都可以在短時間內學會。(4)功能完善 PLC的I/O功能完善,性能可靠,能適應于任何形式和性質的開關量和模擬量的I/O。在PLC內部具有許多控制功能,諸如時序、計算機、主控繼電器以及位移寄存器、中間寄存器等。由于采用了微處理器,它能夠很方便地實現延時、鎖存、比較、跳轉和強制I/O等諸多功能,不僅具有邏輯功能、算術運算、數制轉換以及順序控制功能,而且還具備模擬預算、顯示、監控、掃描以及報表生成等功能。 (5)設計、施工、調試的周期短 用繼電接觸器控制完成一項控制工程,必須首先按工藝要求畫出電氣原理圖,然后畫出繼電器屏的布置和接線圖等,進行安裝調試,以后修改起來十分方便。而采用PLC控制,由于其硬軟件齊全,為模塊化積木式結構,且以商品化,故 常工院畢業設計論文 僅需按性能、容量等選用組裝,而大量具體的程序編制工作也可在PLC到貨前進行,因而縮短了設計周期,使設計和施工可同時進行。(6)體積小,維護操作方便 PLC體積小,質量輕,便于安裝。PLC的I/O系統能夠直接的反映現場總線信號的變化狀態,還能通過各種方式直觀地反映控制系統的運行狀態。(7)易于實現網絡化 PLC可連成功能很強的網絡系統。(8)可實現三電一體化 PLC將電控(邏輯控制)、電儀(過程控制)和電結(運動控制)這三電集于一體,可以方便、靈活的組合成各種不同規模和要求的控制系統,以適應各種工業控制的需要。 1.3.5 PLC的主要功能 (1)條件控制功能 條件控制(或稱邏輯控制或順序控制)功能是指用PLC的與、或、非指令取代繼電器接觸的串聯、并聯及其他各種邏輯連接,進行開關控制。(2)定時/記數控制功能 定時/記數控制功能是指用PLC提供的定時器、記數器指令實現對某種操作的定時或記數控制,以取代時間繼電器和記數繼電器。(3)數據處理功能 數據處理功能是指PLC能進行數據傳輸、比較、位移、數制轉換、算術運算、邏輯運算以及編碼和譯碼等操作。(4)步進控制功能 步進控制功能是指用步進指令來實現在有多道加工工序的控制中,只有前一道工序完成以后,才能進行下一道工序的操作的控制,以取代由硬件構成的步進控制器。 (5)A/D與D/A轉換功能 A/D與D/A轉化功能是指通過A/D、D/A模塊完成模擬量和數字量之間的轉換。 (6)運動控制功能 運動控制功能是指通過高速記數模塊和位置控制模塊等進行單軸或者多軸運動控制。 (7)過程控制功能 過程控制功能是指通過PLC的PID控制指令或模塊實現對溫度、壓力、速度、流量等物理參數的閉環控制。(8)拓展功能 拓展功能是指通過連接輸入輸出拓展單元(即I/O拓展單元)模塊來增加輸入輸出點數,也可通過附加各種智能單元及特殊功能單元來提高PLC的控制功能。(9)遠程I/O功能 遠程I/O功能是指通過I/O單元將分散在遠距離的各種輸出、輸入設備與PLC主機相連接,進行遠程控制,接收輸入信號、傳出輸出信號。(10)通信聯網功能 通信聯網功能是指通過PLC之間的聯網、PLC與上位機的鏈接等,實現遠程 常工院畢業設計論文 I/O控制或數據交換,以完成較大規模系統的復雜控制。(11)監控功能 監控功能是指PLC能監視系統各部分地進行狀態和進程,對系統中出現的異常情況進行報警和記錄,甚至自動終止運行;也可在線調整、修改控制程序中的定時器、記數器等設定值或強制I/O狀態。 1.4 PLC的基本結構及原理 1.4.1 PLC的系統結構 目前PLC種類繁多,功能和指令系統也都各不相同,但都是以微處理器為核心用做工業控制的專用計算機,所有其結構和工作原理都大致相同,硬件結構與微機相似。主要包括中央處理單元CPU、存儲器RAM和ROM、輸入輸出接口電路、電源、I/O拓展接口、外部設備接口等。其內部也是采用總線結構進行數據和指令的傳輸。 如同2所示,PLC控制系統由輸入量—PLC—輸出量組成,外部的各種開關信號、模擬信號、傳感器檢測的各種信號均作為PLC的輸出量,它們經PLC外部輸入端子,作為PLC的輸出量對外圍設備進行各種控制。由此可見,PLC的基本結構由控制部分輸入和輸出組成。 1.4.2 PLC各部分的作用 (1)中央處理器 CPU是由控制器和運算器組成的。運算器也稱為算術邏輯單元,它的功能就是進行算術運算和邏輯運算。控制器的作用是控制整個計算機的各個部件有條不紊地工作,它的基本功能是從內存中取出指令和執行指令。他的重要功能如下: ① 診斷PLC電源、內部電路的工作狀態及編程中的語法錯誤。 ② 采集由現場輸入裝置送來的狀態或數據,并送入PLC的寄存器中。③ 按用戶程序存儲器中存放的先后順序逐條讀取指令,進行編譯解釋后,按指令規定的任務完成各種運算和操作。④ 將存于寄存器中的處理結果送至輸出端。⑤ 應各種外部設備的工作請求。 常工院畢業設計論文 (2)存儲器 PLC的存儲器分為兩大部分: 一大部分是系統存儲器,用來存放系統管理程序、監控程序及其系統內部數據。二大部分是用戶存儲器,包括用戶程序存儲區及工作數據存儲區。(3)輸入輸出接口電路 PLC通過輸入輸出(I/O)接口電路實現與外圍設備的連接。輸入接口通過PLC的輸入端子接受現場輸入設備的控制信號,并將這些信號轉換成CPU所能接受和處理的數字信號。(4)電源 PLC的電源是指將外部輸入的交流電經過整流、濾波、穩壓等處理后轉換成滿足PLC的CPU、存儲器、輸入輸出接口等內部電路工作所需要的直流電源電路或電源模塊。 (5)輸入輸出I/O拓展接口、若主機單元的I/O點數不能滿足輸入輸出點數需要時,可通過此接口用扁平電纜線將I/O拓展單元與主機單元相連接。(6)PLC的基本工作原理 PLC采用的是循環掃描工作方式。對每個程序,CPU從第一條指令開始執行,按指令步序號做周期性的程序循環掃描,如果無跳轉指令,則從第一條指令開始逐條順序執行用戶程序直至遇到結束信號后又返回第一條指令,如此周而復始不斷循環,每一個循環稱為一個掃描周期。PLC的掃描全過程如圖3所示。 ① 輸入刷新階段 在輸入刷新階段,CPU掃描全部輸入端口,讀取其狀態并寫入輸入狀態寄存器。完成后關閉輸入端口,轉入程序執行階段。② 程序執行階段 在程序執行階段,根據用戶輸入的控制程序,從第一條開始逐條執行,并將相應的邏輯運算結果存入對應的內部輔助寄存器和輸出狀態寄存器。③ 輸出刷新階段 常工院畢業設計論文 當所有指令執行完畢后,將輸出狀態寄存器中的內容,依次送到輸出鎖存電路,并通過一定輸出方式輸出,驅動外部相應執行元件工作,這才形成PLC的實現輸出。 顯然掃描周期的長短取決于程序的長短。掃描周期越長,響應速度越慢。由于每一個掃描周期只進行一次I/O刷新,即每一個掃描周期PLC只對輸入、輸出狀態寄存器更新一次,故使系統存在輸入、輸出滯后現象,這在一定程度上降低了系統的響應速度。由此可見,若輸入變量在I/O刷新期間狀態發生變化,則本次掃描期間輸出會相應地繁盛變化。反之,若在本次刷新之后輸入變量才發生變化,則本次掃描輸出不變,而要到下一次掃描的I/O刷新期間輸出才會發生變化。這對于一般的開關量控制系統來說是完全允許的,不但不會造成不利影響,反而可以增強系統的抗干擾能力。這是因為輸入采樣僅在輸入刷新階段進行,PLC在一個工作周期的大部分時間里實際上是設隔離的。而工業現場的干擾常常是脈沖式的、短時的,由于系統相應較慢往往要幾個掃描周期菜響應一次,而多次掃描后,因瞬間干擾而引起的誤操作將會大大減少,從而提高了系統的抗干擾能力。但是對于控制時間要求較為嚴格、響應速度要求較快的系統,就需要精心編制程序,必要時采用一些特殊功能,以減少因掃描周期造成的響應滯后等不良影響。 1.5 松下電工可編程序控制器產品—FR1-C24介紹 經過從功能和價格兩個方面的考慮,發現松下電工可編程序控制器產品—FR1-C24比較適合自動售貨機。因為它是一種功能很強的小型機,在設計的過程中采用先進的方法及組件使其通常只有在大型PLC中才具有的功 常工院畢業設計論文 能,且具有其他控制器所不具備的功能。雖然是小型機,但是其功能較完善,性能價格比高,較適合自動售貨機。 現在就對FR1-C24的組成各部分和技能做一個簡單介紹。在松下電工公司生產的FR系列產品中,FR1屬于小型的PLC產品,其中C24是具有高級處理功能的型號。從型號可以看出FR1-C24可編程序控制器的輸入輸出點數(即I/O)之和為24.1.5.1 FR1-C24的組成各部分 (1)RS232 該端口能于PC機通信編程,也可連接其他外圍設備。(2)運行監視指示燈 ① 當運行程序時,“RUN”指示燈亮; ② 當控制單元終止執行程序時,“PROG”指示燈亮; ③ 當發生自診斷錯誤時,“ERR”指示燈亮; ④ 當檢測到異常的情況時或出現“Watchdog”時,“ALARM”指示燈亮。(3)工作方式選擇開關 ①“RUN”工作方式 當開關扳到這個檔位時,控制單元運行程序。②“REMOTE”工作方式 在這個工作方式下,可以使用編程工具改變可編程序控制器的工作方式為“RUN”或“PROG”工作方式。③“PROG”工作方式 在此方式下可以編輯程序。若在“RUN”工作方式下編輯程序,則按出錯對待。可編程控制器鳴響報警,提示編程者將方式選擇開關切換至“PROG”工作方式。④輸出端子 C24型的輸出端子有8點。該端子板為兩頭帶螺釘可拆卸的板。⑤直流電源輸出端子 在FP1系統主機內部均配有一個供輸入端使用的24V直流電源。⑥輸入端子 C24型的輸入端子有16點。輸入電壓范圍為直流12~24V。該端子板為兩頭帶螺釘可拆卸的板。⑦編程工具連接插座(RS422口) 可用此插座經專用外設電纜連接編程工具。⑧波特率選擇開關 有19 200bp和9 600sbps兩檔,當可編程控制器與外部設備進行通信時,應根據不同的外設選定波特率。⑨電位器(V0、V1) 電位器(V0、V1)這兩個電位器可用螺絲刀進行手動調節,實現外部設定。當調節該點位器時,PLC內部對應的特殊數據寄存器DT9040和DT9041的內容在0~255之間變化,相當于輸入外部可調的模擬量。C24有兩個(V0、V1)。 常工院畢業設計論文 ⑩ I/O點狀態指示燈和拓展單元接口插座 用來指示輸入/輸出的通斷狀態,當某個輸入觸點閉合時,對應于這份觸點編號的輸入指示發光二極管點亮(下一排);當某個輸出繼電器接通時,對應這個輸出繼電器編號的輸出只是發光二極管點亮(上一排)。拓展單元接口插座用以連接FP1拓展元件及A/D、D/A轉換單元、鏈接單元。 1.5.2 技術性能 FP1—C24的主機I/O點數為16/8;最大I/O點數為104;運行速度為1.6μs/步;容量為2720步;基本指令數為80;高級指令數為111;內部繼電器為1008點;特殊內部繼電器為64點;定時器/記數器為144點;數據寄存器為1660字;特殊數據寄存器為70字;索引寄存器為2字;主控指令為32點;跳轉標記數為64點;步進數為128級;子程序個數為16個;中斷個數為9個程序;輸入濾波時間為1—128ms。 第二章 PLC系統設計 2.1 序控制系統設計的基本原則 2.1.1 控制系統設計原則 任何一種電氣控制系統都是為了實現被控對象(生產設備或生產過程)的工藝要求,以提高生產效率和產品質量。因此,在設計PLC控制系統時,應遵循以下基本原則: (1)最大限度地滿足被控對象的控制對象。設計前,應深入現場進行調查研究,收集資料,并與機械部分的設計人員和實際操作人員密切配合,共同擬定電氣控制方案,協同解決設計中出現的各種問題。 (2)在滿足控制系統要求的前提下,力求使控制系統簡單、經濟、使用及維修方便。 (3)保證控制系統的安全、可靠。 (4)考慮到生產的發展和工藝的改進,在選擇PLC容量時,應適當留有余量。 2.1.2 控制系統設計的基本內容 PLC控制系統是由PLC與用戶輸入、輸出設備連接而成的,因此,PLC控制系統設計的基本內容應包括: (1)用戶輸入設備(按鈕、操作開關、限位開關、傳感器等)、輸出設備(繼電器、接觸器、信號燈等執行元件)以及有輸出設備驅動的控制對象(電動機、電 常工院畢業設計論文 磁閥等)。這些設備屬于一般的電氣元件,其選擇的方法在其他有關數據中已有介紹。 (2)PLC的選擇。PLC是PLC控制系統的核心部件,正確選擇PLC對于保證整個控制系統的技術經濟性能指標起到重要作用。選擇PLC,應包括機型選擇、容量的選擇、I/O模塊的選擇、電源模塊的選擇等。(3)分配I/O點,繪制I/O梯形圖。 (4)設計控制程序。包括設計梯形圖、語句表(即程序清單)和控制系統流程圖。控制系統程序是控制整個系統工作的軟件,是保證系統工作安全、可靠的關鍵。因此,控制程序的設計必須經過反復調試、修改,知道滿足要求為止。(5)必要時還需要設計控制臺。(6)編制程序系統的技術文件。 2.1.3 控制系統設計的一半步驟 (1)根據生產的工藝過程分析控制要求。 (2)根據控制要求確定所需的用戶輸入、輸出設備,以此確定PLC的I/O點數。(3)選擇PLC系統。 (4)分配PLC的I/O點,設計I/O接線圖。 (5)進行PLC程序設計,同時可進行控制大的設計和現場施工。 2.1.4 編寫梯形圖的注意事項 (1)輸入/輸出繼電器、內部輔助繼電器、定時器。記數器等器件的觸點可以多次重復使用,無需復雜的程序結構來減少觸點的使用次數。 (2)梯形圖每一行都是從左母線開始,線圈終止于右母線。觸點不能放在線圈的右邊。除步進程序外,任何線圈、定時器、記數器、高級指令等不能直接與左母線相連。如果需要任何時候都被執行的程序段,可以通過特殊內部常閉繼電器或者一個沒有使用過的內部繼電器的常閉觸點來連接。(3)在程序中,不允許同以編號的線圈兩次輸出。(4)不允許出現橋式電路。 程序的編寫順序應該按照自上而下、從左至右的方式編寫。為了減少程序的執行步數,程序應為“左大右小,上大下小”。 2.1.5 程序設計的步驟 (1)對于較復雜的控制系統,需繪制系統控制流程圖,用以清楚地表明動作的順序和條件。 (2)設計梯形圖。是程序設計的關鍵一步,也是比較困難的一步。(3)根據梯形圖編制程序清單。(4)用編程器將程序輸入到PLC的用戶存儲器中,并檢查輸入的程序是否正確。(5)對程序進行調試和修改,知道滿足要求為止。 常工院畢業設計論文 (6)帶控制臺及現場施工完成后,就可以進行聯機調試。若未滿足要求,再從新修改程序或檢查接線,知道滿意為止。(7)編寫技術文件。(8)交付使用。 控制系統設計步驟流程圖如圖4所示。 第三章 自動售貨機PLC程序設計 3.1 仿真實驗系統中售貨機的分析 由于售貨機的全部功能時在上位機上模擬的,所以售貨機的部分硬件是由計算機軟件來模擬 常工院畢業設計論文 圖4 PLC 控制系統設置 替代的。如錢幣識別系統可以用按壓某個“仿真對象”輸出一個脈沖直接給PLC發布命令而傳動系統也是由計算機來直接模擬的,這些并不會影響實際程序的操作,完全能模擬現實中自動飲料售貨機的運行。(1)試驗狀態假設 由于是在計算機上模擬運行,試驗中有一些區別于實際情況的假設,本試驗中假設: ① 自動飲料售貨機只可售8種商品。 ② 自動飲料售貨機可識別10元、5元、1元、5角、1角硬幣。 ③ 自動飲料售貨機可退幣10元、5元、1元、5角、1角硬幣。 常工院畢業設計論文 ④ 自動飲料售貨機有液晶顯示功能 ⑤ 實驗中售貨機忽略了各種故障以及缺貨等因素。(2)一次交易過程分析 為了方便分析,我們以一次交易過程為例。 ① 初始狀態。由電子標簽顯示各種商品價格,顯示屏顯示友好界面,此時不能購買任何商品。 ② 投幣狀態。按下投幣按鈕,顯示投幣框,按下所投幣值顯示屏顯示投入、消費、余額數值,當所投幣值超過商品價格時,相應價格選擇按鈕發生變化,提示可以購買。 ③ 購買狀態。按下可以購買的選擇按鈕,所選的商品出現在出貨框中,同時顯示屏上的金額數字根據消費情況相應變化。取走商品后出貨框消失。 ④ 退幣按鈕。按下退幣按鈕,顯示退幣框,同時顯示出應退幣值及數量。按下確認鈕,則恢復初始狀態。 到此為止,飲料自動售貨機的一個完整工作過程結束。 3.2 設計任務的確定 在清楚飲料自動售貨機運行工作過程的基礎上,制定出設計方案,確定任務的目標,以設計出合理的仿真系統。 首先,應該做上位機與下位機的任務分工:上位機主要用來完成仿真界面的制作過程,而下位機則主要用來完成PLC程序的編寫。其次,要分別對上位機和下位機進行資料的查找與收集。例如在進行仿真界面的設計時可以去觀看一下真正售貨機的外觀,必要時可以借助一些宣傳圖片來設計飲料自動售貨機的外型:在進行PLC程序的編寫時需要先分配PLC的I/O點,確定上、下位機的接口。然后,對上、下位機分別進行設計工作。最后,進行上位機設計結果與下位機設計結果的配合工作,經調試后完成整個系統的設計。 另外,上位機與下位機的設計工作是緊密配合的。它們無論在通信中使用的變量,還是在仿真中控制的對象都應該是一致的。總體上講,仿真界面是被控對象,利用PLC來控制這個仿真的飲料自動售貨機,仿真的飲料自動售貨機接受PLC的控制指令并完成相應的動作;另一方面,仿真界面中的仿真飲料自動售貨機的運行,都是由組態界面所提供的命令語言來完成的。這是整個仿真系統內部各大部件之間的內在關系。 我主要是對飲料自動售貨機中的下位機,也就是主要是對PLC在其中的程序進行設計。仿真程序只做了解,雖然只做了解,但是也將在下面有所介紹。清楚了仿真試驗的整體設計思路,下面就可以開始著手設計了。 3.3 程序設計部分 這個部分內容是整個系統設計的主體部分。所要完成的任務是仿真系統的上位機與下位機的程序設計,即在上述功能分析的基礎上,有針對地進行設計。 常工院畢業設計論文 3.3.1 程序設計說明 下位機程序的編制則是利用松下PLC專用編程軟件FPWIN-GR完成的。 在設計的過程中,就像上面所敘述的那樣,并非孤立的分別進行上位機和下位機的設計工作,而是互相配合的。因此在以下的詳細設計過程中,并沒有將上位機的設計與下位機的設計整體分開來寫,而是相互交替,同時盡量清晰的敘述,在相應的設計部分中注明是上位機的設計還是下位機的設計。 3.3.2 PLC程序設計 可以把一次交易過程分為幾個程序塊:運行初期電子標簽價格的內部傳遞;投幣過程;價格比較過程;選擇商品過程;退幣過程。(1)運行初期電子標簽價格的內部傳遞程序的設計 仿真系統運行初期,要由PLC向仿真畫面相應對象傳遞已存儲好的價格,還要給投入顯示、消費顯示以及余額顯示存儲器清零,同時也要給存儲退幣幣值的存儲器清零。程序編制過程中,要用到運行初期閉合繼電器R9013、16位數據傳送指令F0,同時在上位機上ForceControl中,必須定義相應的變量,來實現與PLC程序的對接。所定義的變量如表1所示。 表1初始狀態變量表 根據表1編制PLC程序如圖5所示。 常工院畢業設計論文 圖5 運行初期電子標簽價格的內部傳遞程序 在梯形圖程序圖5中,系統初始化時,通過運行初期閉合繼電器R9031在第一次掃描時將數值傳遞給上位機。給WR1-WR11及SV0-SV4賦初值,賦值功能通過高級指令F0實現,至于為什么要加入WR13、WR15、WR17、WR19及WR20,在以后的程序中將介紹他們的作用。(2)投幣過程 在投幣過程中,每投下一枚硬幣,投入顯示將增加相應的幣值,余額也增加同樣幣制。先建立變量表,在編寫程序。變量表如表2所示。對應的梯形圖程序如圖7所示。 表2 投幣過程變量表 在圖中,當按下投入1角時,相當于讓R200接通,之所以用一個微分指令,就是要只在接通時檢測一次,不能永遠加下 去。投入1角要投入顯示、余額顯示 常工院畢業設計論文 都相應增加相同數值,加法是由16位加法指令E20來實現的。投入5角、1元、10元,原理同上。(3)價格比較過程 價格的比較要貫穿實驗的始終,只要余額大于某種商品價格時,就需要輸出一個信號,圖7 投幣過程梯形圖 提示可以購買。這里只要選擇燈代表此信號。所建立的變量表如表3所示。 表3 價格比較過程變量表 常工院畢業設計論文 根據變量表和控制要求編寫程序如圖8所示。 在梯形圖8中,為了實現數據的實時比較,用了一個特殊內部繼電器R9010,在程序執行過程中,R9010始終保持閉合,F60是16位數據比較指令,用它來比較余額和商品價格,R900A是大于價格,R900B是等于標志。當余額大于等于某種商品價格時,程序使相應的指示燈閃爍表示可以購買該種商品。 常工院畢業設計論文 圖8 價格比較過程梯形圖 (4)選擇商品過程 當投入的幣值可以購買某種商品時,按下相應的“選擇”按鈕即可在出貨框中出現該種商品,同時消費顯示欄中顯示出已經消費掉的金額,余額也將扣除已消費的幣值,接著余額繼續與價格相比較,判斷是否能繼續 購買。出現在出貨口的商品在沒有取走之前,一直保持顯示狀態,用鼠標點擊該商品代表已經取走,出貨口的商品隱藏。建立的變量表如表4所示。對應的梯形圖程序如圖9所示。 常工院畢業設計論文 表4 選擇商品過程變量表 在梯形圖9中,一是要使商品出現在出貨框中,而是要實現內部的貨幣運算。以第一步為例,按下選擇01 商品鍵,相當于給R205加一個信號(只接受一次脈沖,所以用DF微分指令),當Y0接通(01商品燈亮)時,則系統顯示可以購買01商品,購買成功。當按下取01商品按鈕時,R230斷開,不能輸出Y8,代表01商品被取走。內部幣值的計算和是否取走商品無關,只要按下選擇按鈕,并且可以購買此商品就要從余額中扣除相應的金額,顯示消費的幣值。加法由F20指令實現,減法由F25實現。 常工院畢業設計論文 常工院畢業設計論文 (5)退幣過程 常工院畢業設計論文 在退幣過程中,最主要的是完成退幣的運算過程,根據結果輸出相應的錢幣,退幣結束時還要使用到的某些寄存器重新賦零,所建立的變量如表5所示,對應的梯形圖程序如圖10所示。 表5 退幣過程變量表 整個退幣過程在按下按鈕(即R20F接通時)時執行,同樣也用到一個微分指令,在接收到信號時產生一次開關脈沖,進而執行一次其下面的指令。F32是除法指令,第一次將余額的幣值除以1000,商存儲于SV0中,作為退幣10的輸出值。余數則存儲于特殊數據寄存器DT9015中,下次將不能被1000(10元)整除的余數除以100(5元),商且存儲于SV1中,余數繼續下傳,直至被1角除過,由于所投幣值最小是1角,并且商品價格也確定在整角,所以最終能被1角整除。在程序的初始化時曾給WR13、WR15、WR17、WR19和WR20賦零,WR13、WR15、WR17、WR19和WR20是程序的中間量,為的只是程序在使用過程中能穩定執行,避免出現退幣錯誤。 為什么要除以1000呢?這主要是考慮到PLC的主要特點是執行過程穩定可靠,但執行速度較慢,在計算時盡量將數值作為整數計算,因為是在計算機上模擬,可以把一部分功能交由計算機來實現,這里把1角當作 10、把5角當作50、1元當作100、5元當作500、10元當作1000,可以避免把這些數據當作有小數點的實數計算,這同前面的加1角等于10(K10)是相同的道理。至于交由計算機的任務將在以后敘述。 退幣過程結束后,PLC要將寄存器中的數值置回原定得初值0,完成一次交易,防止下一次交易時出錯,還將中間量WR13、WR15、WR17、WR19和WR20清零。完成了以上5個過程,自動售貨機的PLC控制程序基本完成,程序可以控制售貨機實現各種要求的功能。 常工院畢業設計論文 圖10 退幣過程梯形圖 3.4 仿真界面與PLC的配合定 在這一段中,將仔細分析仿真界面各部分是如何與PLC連接的。分析過程是按照一次交易的實際情況來進行的,即有初始狀態、投幣狀態、購買狀態、退幣狀態到交易結束。(1)初始狀態 通過分析得知,當電子標簽顯示各商品的價格、顯示屏顯示友好界面時,不能購買任何商品。因此先讓變量poiwindows=0(系統默認)。 電子標簽中的字符?J.01?(以01商品為例)對應的變量JG01.PV與PLC程序中的地址WR4相匹配,WR4中的存儲器據為250,即讓字符顯示2.5元。對應的梯形圖如 常工院畢業設計論文 圖11所示。(2)投幣狀態 當投幣時,按下“投幣”提示字,出現投幣框。如何定義“投幣”呢?雙擊漢字“投幣”來到“動畫連接”畫面,選擇“觸敏動作”框中作如下定義:按下鼠標時,poiwinJB=1,poiwinJB這個變量是控制投幣框的,當poiwinJB=1時,出現錢幣和提示框:poiwinJB=0時,錢幣和提示框隱藏。 圖11 數據初始化梯形圖 下面分別定義提示框和錢幣以及“確認”按鈕,雙擊提示框,來到“動畫連接”畫 常工院畢業設計論文 面,定義poiwinJB=1時顯示,各硬幣也用同樣的方法定義,這樣就使在按下漢字“投幣”時,變量poiwinJB=1,從而出現投幣框,以及硬幣等。我們只是定義了投幣框的顯示狀態,用鼠標點擊代替 了實際過程中的錢幣投入動作,最重要的任務是錢幣運算,下面介紹錢幣的定義方法。 以10為例:雙擊10硬幣,開到“動畫連接”畫面,選擇“觸敏動作”中的“左鍵動作”,在動作描述中如下定義:按下鼠標時,poiwinJB=1;TR$100.PV=1時給PLC發出一個接通信號,由于TR$100.PV對應的PLC地址是R204,使得204繼電器導通,轉而執行相應的加10元程序。同樣定義其他錢幣,注意其對應的PLC軟繼電器。最后還要定義“確認按鈕”。要實現的功能是按下“確認”按鈕時,所有的錢幣以及提示框均消失。當投幣以后,顯示屏要及時反映出投幣情況,同時“選擇”指示也要相應變化。下面來定義顯示屏和“選擇”按鈕。 顯示屏要顯示3種數據,分別為:投入顯示、消費顯示、余額顯示。三種顯示均用力控軟件自帶的附件—數碼管來顯示。現在工具箱中點擊“選擇子圖框”,在子圖框中找到儀表中的數碼管,放在顯示屏中,作為投入顯示,再復制兩個,分別作為消費顯示、余額顯示。雙擊數碼管來到數碼管屬性設置畫面,在表達式中作如下定義:poiTR001.PV/100,poiTR001.PV連接的是PLC程序中的WR1軟繼電器,是用來存儲投入顯示數據的,除以100同樣是為了PLC數據計算的方便。這樣就可以用數碼管來顯示投入中的幣值。同樣定義消費顯示、余額顯示。“選擇”按鈕要根據余額的數值發生閃爍和變色。定義過程如下:雙擊“選擇”按鈕,來到“動畫連接”畫面,在“顏色相關動作”中選擇“閃爍”項,分別定義屬性和頻率,在變量選擇中選擇相應的指示燈變量。以01商品的選擇指示燈為例,在變量選擇中選擇D01.PV=1,滿足條件時指示燈變色。這樣就定義好了投幣狀態的上位機仿真變量,配合PLC程序可以實現投幣功能。(3)購買狀態 定義了投幣狀態,就可以購買商品了。當選擇指示燈以后,按下它,在出貨口處出現我們要買的商品。這樣定義“選擇”按鈕:雙擊“選擇”按鈕,來到“動畫連接”畫面,選擇“觸敏動作”中的“左鍵動作”,在動作描述中如下定義:按下鼠標時,XZ01.PV=1;釋放鼠標時,XZ01.PV=0.XZ01.PV與PLC程序中的R205相對應,按下可以購買商品的選擇鍵,轉而執行相應的PLC程序,同時消費顯示增加相應的幣值,余額顯示減少相應的幣值,此時還要在出貨口出現相應的商品,這是用“顯示/隱藏”功能來定義在出貨口中出現相應的商品。以01為例,雙擊出貨口處的小商品,來到“動畫連接”,選擇“顯示/隱藏”項,定義CX01.PV=1時顯示。出貨口框架的隱藏/顯現是用程序來控制的。當有一種商品出現在出貨口,就會顯示 常工院畢業設計論文 框架;當全部商品均消失后框架隱藏。程序如圖12所示。圖中R210是控制出貨口框架是否出現的繼電器。(4)退幣狀態 當按下“退幣”按鈕時,PLC進行退幣運算,所以按下“退幣”按鈕就要與PLC通信,執行退幣計算。下面來定義退幣按鈕,出現“動畫連接”畫面,選擇“觸敏動作”中的“左鍵動作”,動作描述為:按下鼠標,poiwinJB=0;poiwinTB=1;Tenter.PV=1.釋放鼠標,Tenter.PV=0;內部變量poiwinJB=1是讓投幣框消失,poiwinTB=1是讓退幣框出現,Tenter.PV與PLC程序中的R20F對應。退幣框中要有5種硬幣,還要有表示硬幣個數的數字。由于計算中采用的算法使得退幣時按照幣值大小順序退幣,例如退5元,只退一個5元,而不是5個1元。定義表示硬幣個數的變量只用一位數即可。在退幣時,要退出的硬幣及個數顯式,而不退的硬幣隱藏。 圖12 出貨口框架的隱藏/顯現梯形圖 定義錢幣時(以10為例),雙擊10元硬幣,出現“動畫連接”畫面,選擇“顯示/隱藏”項,在“可見性定義”對話框中作出的表達式為TB$100.PV=0。其他硬幣定義方法同上。定義錢幣個數:雙擊10硬幣個數字符“a”,出現“動畫連接”畫面,選擇“數值輸出”中的“模擬”項,做出表達式為TB$100.PV。同時錢幣個數也要定義是否隱藏,定義方法和定義錢幣相同。定義“確認”鍵時,按下“確認”鍵,代表取走了所有硬幣,完成此次交易,因此退幣“確認”的定義很重要。雙擊“確認”鍵,出現“動畫連接”畫面,選擇“觸敏動作”中的“左鍵動作”,在動作描述欄中定義如下:按下鼠標 常工院畢業設計論文 poiwinTB=0; 功能:退幣框消失 TuiBiok.PV=1; 功能:給PLC信號,閉合R0,完成數據的初始化 Poiwindows=0 功能:顯示屏顯示友好界面時 為了防止在未取走商品時退幣,按下“確認”鍵又不能返回原始狀態,在描述過程中加入以下一段程序,強行拋掉以購買的商品。CX01.PV=0 CX02.PV=0 CX03.PV=0 CX04.PV=0 CX05.PV=0 CX06.PV=0 CX07.PV=0 CX08.PV=0 釋放鼠標時,TuiBiok.PV=0.只是一個微分信號,不能將R0永遠置為1。還有一點要注意,“確認”鍵也要有隱藏的時候定義方法如錢幣。 定義退幣框架:按下“退幣”按鈕后就會出現退幣框架。可以這樣定義:雙擊退幣框架,來到“動畫連接”畫面,選擇“顯示/隱藏”項,在“可見性定義”中定義poiwinTB=1時顯現即可。 3.5 數據連接 3.5.1 定義I/O設備 數據庫是從I/O驅動程序中獲取過程數據的,而數據庫同時可以與多個I/O驅動程序進行通信,一個I/O驅動程序也可以連接一個或多個設備。下面創建I/O設備。(1)在Draw導航器中雙擊“實時數據庫”項使其展開,在展開項目中選擇“PLC”項雙擊使其展開后,選擇項目雙擊并定義。(2)單擊“完成”按鈕返回,在“松下電工”項目下增加一項“PLC001”,如果要對I/O設備“PLC001”的配置進行修改,雙擊項目“PLC001”,會再次出現PLC001的“I/O設備定義”對話框。若要刪除I/O設備“PLC001”,用鼠標右鍵單擊項目“PLC001”,在彈出的右鍵菜單中選擇“刪除”。 ① 數據連接 剛剛創建了一個名為“PLC001”的I/O設備,而且它連接的正是假想的PLC設備。現在的問題是如何將已經創建的多個數據庫點與PLC聯系起來,以使這些點的PV參數值能與I/O設備PLC進行實時數據交換,這個過程就是建立數據連接的過程。由于數據庫可以與多個I/O設備進行數據交換,所以必須指定哪些點與哪些個I/O設備建立數據鏈接。為方便起見,我們將數據列整理成如表 6、表7所示。 表6 數字I/O 常工院畢業設計論文 續表 6 常工院畢業設計論文 表7 模擬I/O表 3.5.2 設計 飲料自動售貨機控制要求 (1)該自動售貨機可以同時投入5角、1元或5元硬幣,自動銷售汽水、果汁和咖啡。 (2)當投入的硬幣總值等于或超過1.5元時,汽水按鈕指示燈亮;當投入的硬幣總值等于或超過3元時,汽水按鈕和果汁按鈕同時亮;當投入的硬幣總值等于或超過5元,汽水按鈕、果汁按鈕和咖啡按鈕同時亮。 常工院畢業設計論文 (3)當汽水按鈕燈亮時,按汽水按鈕,則汽水排出10s后自動停止,同時汽水按鈕指示燈閃爍10s。 (4)當果汁按鈕燈亮時,按果汁按鈕,則果汁排出10s后自動停止,同時果汁按鈕指示燈閃爍10s。 (5)當咖啡按鈕燈亮時,按咖啡按鈕,則咖啡排出10s后自動停止,同時咖啡按鈕指示燈閃爍10s。 (6)若投入的硬幣總值超過所購商品的價格(汽水1.5元,果汁3元,咖啡5元),則找錢指示燈亮,同時進行找錢動作。 圖13 飲料自動售貨機示意圖 I/O地址定義表 此控制系統可采用自動工作方式,輸入信號為汽水、果汁和咖啡按鈕,5角、1元或5元硬幣投入識別口記數手動復位按鈕;出入信號為汽水、果汁和咖啡排出電磁閥、找錢電磁閥及相應指示燈,共7個輸入點,8個輸出點,均為開關量。I/O地址定義如表8所示。 表8 飲料自動售貨機控制系統I/O地址定義表 常工院畢業設計論文 程序設計 常工院畢業設計論文 3.5.3 運行 保存所有組態內容,然后關閉所有力控程序。將飲料自動售貨機的PLC程序下傳到PLC裝置中,在切換到離線狀態,然后再次啟動力控工程管理器,選擇本工程,并單擊“進入運行”按鈕啟動整個運行系統。 常工院畢業設計論文 結束語 經過幾個月的學習、研究以及吳老師的指導,終于按時完成了畢業設計。設計主要研究的是自動售貨機有關PLC的部分。自動售貨機是由于勞動密集型的產業構造向技術密集型社會轉變的產物。自動售貨機可以充分補充人力資源的不足,適應消費環境和消費模式的變化,24小時無人售貨的系統可以更省力,運營時需要的資本少、面積小,有吸引人們購物好奇新的自身性能,可以很好地解決人工費用的上升的問題等各項優點。所以說,自動售貨機是今后飲料銷售方式的一個很好的發展趨勢。它的出現將極大的方便人們購買所需的飲品。 常工院畢業設計論文 致謝 經過幾個月的努力工作,畢業設計在指導老師吳金的悉心指導下終于順利完成了,吳老師他待人和藹可親,在這幾個月里我們相處的非常融洽,吳老師他社會實踐經驗豐富,工作認真踏實,治學態度嚴謹,而且他深厚的理論功底及設計能力更令我感到欽佩。設計期間,吳老師對我悉心的指導,認真查閱我的草圖和設計說明書,令我十分感動。總之,吳老師的人品及治學態度是我學習的楷模和榜樣,在此,我要向指導老師吳金表示感謝。 在此次設計中,也需要感謝的是我的同學。大家在一起共同奮斗,互相討論,對我的畢業設計有很大幫助,并且,我們在一起共同營造了一個融洽的學習生活環境,建立了良好的友誼。 參考文獻 程周·可編程序控制器原理與應用·北京:高等教育出版社,2003年 2王永華·現代電機控制及PLC應用技術·北京:北京航空航天大學出版社,2000年 周美蘭、周封、王岳宇·PLC電氣控制與組態設計·北京:科學出版社,2003年 吳建強、蔣三勇·可編程控制器原理及應用·哈爾濱工業大學出版社,2000年 吳中俊、黃永紅·可編程序控制器原理及應用·北京:機械工業出版社,2003年 張萬忠、劉明芹·電器與PLC控制技術·北京:化學工業出版社,2003年 7 王兆義·可編程序控制器教程·北京:機械工業出版社,2001年 《軟件工程》課程設計報告 一、問題描述 (一)關于自動售貨機 自動售貨機像磁卡電話、銀行柜員機一樣,以方便、新穎、文明、晝夜服務等特點,成為發達國家不可缺少的便民配套設施。如今的自動售貨機可以為顧客提供多種服務。顧客可以根據自己的需要選擇商品并投入錢幣,售貨機接收錢幣,售出商品。 (二)自動售貨機的設計 自動售貨機系統是一種無人售貨系統。售貨時,顧客把硬幣投入機器的投幣口中,機器檢查硬幣的大小、重量、厚度及邊緣類型。有效的硬幣是一元幣、五角幣、一角幣、五分幣和一分幣。其它貨幣都被認為是假幣。機器拒收假幣,并將其從退幣孔退出。當機器接收了有效的硬幣之后,將之送入硬幣儲藏器。顧客支付的貨幣根據硬幣的面值進行累加。 自動售貨機裝有貨物分配器,每個分配器中包含0 個或多個價格相同的貨物。顧客通過選擇貨物分配器來選擇貨物。如果有貨,且顧客支付的貨幣值不小于該貨物的價格,貨物將被分配到貨物傳送孔送給顧客,并將找零返回到退幣孔。如果無貨,則和顧客支付的貨幣值相等的硬幣將被送到退幣孔。如果顧客支付的貨幣值小于所選貨物的價格,機器將等待顧客投進更多的貨幣。如果顧客決定不買所選擇的貨物,他投放進的硬幣將從退幣孔中退出。 二、需求分析 (一)UML自動售貨機系統功能需求: 自動售貨機系統是一種無一元等3個硬幣投幣口。顧客確認購貨后,售貨機可根據硬幣的面值進行累加。 自動售貨機裝有貨物分配器。每個貨物分配器中包含零個或多個價格相同的貨物。顧客通過 1 選擇貨物分配器來選擇貨物。如果貨物分配器中有貨物,而且顧客支付的貨幣值不小于該貨物的價格,貨物將被分配到貨物傳送孔送給顧客,并將適當的零錢返回到退幣孔。如果分配器是空的,則和顧客支付的貨幣值相等的硬幣將被送加到退幣孔。如果顧客支付的貨幣值少于所選擇的分配器中的貨物的價格,機器將等待顧客投進更多的貨幣。如果顧客決定不買所選擇的貨物,將所投硬幣從退幣孔退出。 (二)UML自動售貨機系統控制要求: 根據售貨機自動控制系統的流程可以知道自動售貨機的主要系統包括:計幣系統、比較系統、選擇系統、飲料供應系統、退幣系統和報警系統。 1.計幣系統: 當有顧額色買飲料時,投入的錢幣經過感應器,感應器記憶投幣的個數關且傳送到檢測系統(即電子天平)和計幣系統。只有當電子天平測量的重量少于誤差值時,允許計幣系統進行疊加錢幣,疊加的錢幣數據存放在數據寄存器中。如果不正確時,認為是假幣。既定出投幣,既定出系統,等待新顧客。 2.比較系統: 投入完畢后,系統會把錢幣數據和可以購買飲料的價格進行區間比較,當投入的錢幣小于2元時,指示燈亮,顯示投入的錢幣不足。此時可以再投幣或選擇退幣。當投稿的錢幣在2~3元之間時,汔水選擇指示燈長亮。當大于3元時,汔水和咖啡的指示燈同時長亮。此時可以選擇飲料或選擇退幣。 3.選擇系統: 比較電路完成后選擇電路指示燈是長亮的,當按下汽水或咖啡選擇時,相應的選擇指示燈由長亮轉為以1秒為周期閃爍。當飲料供應完畢時,閃爍同時停止。 4.飲料供應系統: 當按下選擇按鈕時,相應的電磁閥(Y4或Y6)和電機(Y3或Y5)同時啟動。在飲料輸出的同時,減去相應的購買錢幣數。當飲料輸出達到8秒時,電磁閥首先關斷,小電機繼續工作0.5秒后停機。此小電機的作用是:在輸出飲料時,加快輸出。在電磁閥關斷時,給電磁閥加壓作用,加速電磁閥的關斷。(注:由于該售貨機是長期使用,電磁閥使用過多時,返回彈力減少,不能完全關斷會出現漏飲料的現象。此時電機Y3和Y5延長工作0.5秒起到電磁閥加壓的作用,使電磁閥可以完好的關斷。) 5.退幣系統: 當顧客購完飲料后,多余的錢幣只要按下退幣按鈕。系統就會把數據寄存器D2內的錢幣數首先除以10得到整數部分,是1元錢需要退回的數量,存放在D10里。余數存放在D11里。再用D11除以5得到的整數部分是5角錢需要退回的數量,存放在D12里。余數存放在D13里。最后D13里面的數值,就是1角錢需要退回的數量。在選擇退幣的同時啟動3個退幣電機。3個感應器開始計數,當感應器記錄的個數等于數據寄存器退回的幣數時,退幣電機停止運轉。 6.報警系統: 報警系統如果是非故障報警,只要通過網絡通知送液車或者送幣車即可。但是如果是故障報警則需要通知維修人員到現聲進行維修。同時停止服務,避免造成顧客的損失。 (三)業務流程圖 錢幣記錄儀對錢幣前端接受顧客投的進行識別幣判斷退出錢幣發送信息到分配器判斷沒有貨物時發送信息到前端發送貨物4 (四)數據流程圖 錢幣錢幣記錄儀對分配器反錢幣錢幣進行計算與貨物價格進貨物發放行比較取走零錢與購買的貨物 三、各種UML圖型及其分析 (一)用例圖 1.顧客的用例圖 inputCoinchooseSodaCustomer 2.自動售貨機的用例圖 RegisterDispenserFrontSodaMachine (二)類圖 (三)序列圖 理想狀態(不找零錢)的序列圖 :Front:Register:Dispenser : Customer1: inputCoin()2: accept()3: getCustomerInput()4: checkForSoda()5: returnSodaFree()6: displayPrompt()7: chooseSoda()8: sendChooseToDis()9: checkAvailability()10: releaseSoda()11: releaseSoda()8 1.沒有貨物的序列圖 :Front:Register:Dispenser : Customer1: inputCoin()2: accept()3: getCustomerInput()4: checkForSoda()5: returnSodaFree()6: displayPrompt()7: chooseSoda()8: sendChooseToDis()9: checkAvailability()10: releaseSoda()11: displayPrompt()12: sendReturnCoin()13: returnCoinToFront()14: returnCoin()9 2.3.需找零錢的序列圖 :Front:Register:Dispenser : Customer1: inputCoin()2: accept()3: getCustomerInput()4: checkForSoda()5: returnSodaFree()6: displayPrompt()7: chooseSoda()8: sendChooseToDis()9: checkAvailability()10: releaseSoda()11: sendSodaPrice()12: checkForChange()13: releaseChange()14: receiveSoda()15: receiveChange()10 沒有零錢找給顧客 :Front:Register:Dispenser : Customer1: inputCoin()2: accept()3: getCustomerInput()4: checkForSoda()5: returnSodaFree()6: displayPrompt()7: chooseSoda()8: sendChooseToDis()9: checkAvailability()10: releaseSoda()11: sendSodaPrice()12: checkForCharge()13: returnNoCharge()14: returnCoinToFront()15: displayPrompt()16: returnSodaToDispenser()17: returnCoin()11 4.5.完整的序列圖 :Front:Register:Dispenser : Customer1: inputCoin()2: accept()3: getCustomerInput()4: checkForSoda()5: returnNoCharge()6: returnCoinToFront()7: displayPrompt()8: returnCoin()9: End()10: returnSodaFree()11: displayPrompt()12: chooseSoda()13: sendChooseToDispenser()14: checkAvailability()15: returnUnavailability()16: displayPrompt()17: sendReturnCoin()18: returnCoinToFront()19: returnCoin()20: End()21: releaseSoda()22: sendSodaFrice()23: checkForCharge()24: returnNoCharge()25: returnCoinToFront()26: displayPrompt()27: returnSodaToDispenser()28: returnCoin()29: End()30: releaseCharge()31: receiveSoda()32: receiveCharge()33: End()34: receiveSoda()35: End()12 (四)協作圖 1.理想狀態的協作圖 3: getCustomerInput()9: checkAvailability()4: checkForSoda():Registe:Dispensrer8: sendChooseToDis()2: accept()5: returnSodaFree()1: inputCoin()10: releaseSoda()7: chooseSoda():Front : Customer6: displayPrompt()11: releaseSoda()2.沒有貨物的協作圖 1: inputCoin()7: chooseSoda():Front : Customer6: displayPrompt()11: displayPrompt()14: returnCoin()13: returnCoinToFront()8: sendChooseToDis()2: accept()5: returnSodaFree()12: sendReturnCoin()10: releaseSoda()3: getCustomerInput()9: checkAvailability()4: checkForSoda():Registe:Dispensrer 3.需找零錢的協作圖 1: inputCoin()7: chooseSoda():Front : Customer6: displayPrompt()14: receiveSoda()15: receiveChange()13: releaseChange()8: sendChooseToDis()2: accept()5: returnSodaFree()10: releaseSoda()3: getCustomerInput()12: checkForChange()9: checkAvailability()4: checkForSoda():Registe:Dispensrer11: sendSodaPrice()4.沒有零錢找給顧客的協作圖 1: inputCoin()7: chooseSoda():Front : Customer6: displayPrompt()15: displayPrompt()17: returnCoin()13: returnNoCharge()14: returnCoinToFront()8: sendChooseToDis()16: returnSodaToDispenser()2: accept()5: returnSodaFree()3: getCustomerInput()10: releaseSoda()12: checkForCharge()9: checkAvailability()4: checkForSoda():Registe:Dispensrer11: sendSodaPrice() 完整的協作圖 29: End()33: End()35: End()1: inputCoin()12: chooseSoda():Front : Customer7: displayPrompt()8: returnCoin()11: displayPrompt()16: displayPrompt()19: returnCoin()26: displayPrompt()28: returnCoin()31: receiveSoda()13: sendChooseToDispenser()32: receiveCharge()27: returnSodaToDispenser()34: receiveSoda()10: returnSodaFree()5: returnNoCharge()15: returnUnavailability()6: returnCoinToFront()21: releaseSoda()18: returnCoinToFront()24: returnNoCharge()14: checkAvailability()25: returnCoinToFront()30: releaseCharge()2: accept()17: sendReturnCoin():Dispenser4: checkForSoda()3: getCustomerInput()22: sendSodaFrice()23: checkForCharge():Register15 5.(五)狀態圖 提示投幣do/ 請求投幣do/ 提示是假幣假幣do/ 檢查硬幣真幣否購買do/ 存儲硬幣,計算貨幣總值do/ 確認投完硬幣有do/ 請求選擇商品選擇貨品do/ 提示無貨無貨do/ 檢測貨品存量有貨計算小于do/ 比較貨幣總值和貨物價值do/ 提示貨幣不足不小于確認do/ 確認顧客購買do/ 送出貨品,請求取貨有零錢退幣無零錢do/ 請求退幣不購買顯示do/ 提示交易完成17 (六)活動圖 1.投幣的活動圖 投幣確認投幣完成2.選擇貨物的活動圖 請求選擇輸入貨物確認選擇貨物ID 3.前端的活動圖 接受貨幣顯示可購顯示面值貨物過小顯示沒有該貨物接受飲料顯示沒有零錢找零錢退貨幣 19 貨幣記錄儀的活動圖 接受從前端來的錢幣判斷錢幣發送信息給分配儀發送貨物金額給前端返回錢幣計算零錢20 4.5.分配器的活動圖 接受貨幣啟示錄儀的信息發送貨物提示沒有該貨物 21 (七)組件圖 CustomerSodaMachineFrontRegisterDispenserDB_0 (八)配置圖 Clint數據庫 (九)數據模型圖 畢業設計說明書 自動售貨機控制系統的設計與仿真 自動售貨機控制系統的設計與仿真 摘 要 隨著社會的進步,科學的發展,生活水平的提高,單一傳統的生活方式已經不能滿足現代居民對高品質生活的追求,在這種現象下,許多自動化設備應時代應潮流而生。自動售貨機作為自動化設備中的最常見的設備之一,由于其眾多的優點,已經在世界各地得到了普遍的發展并且還在不斷地發展。自動售貨機掀起了繼百貨商店和超市之后的又一零售狂潮,這種智能售貨系統在車站、教學樓、辦公樓等公共場所有著廣闊的發展前景。 本文在對自動售貨機的背景歷史和發展趨勢進行了研究介紹之后,對課題中的自動售貨機系統進行了整體的設計及規劃。該自動售貨機控制系統是基于EDA技術來實現的,同時,利用Altera公司的QuartusⅡ14.0作為其軟件開發平臺,利用VHDL編程語言輸入的方式完成了軟件設計。本設計方案對整個控制系統進行了層次化的編寫。把整個系統劃分為6個子模塊,分別是找零計算模塊、確認取消控制模塊、找零控制模塊、總錢數加和模塊、顯示模塊、鎖定模塊,并且對每一個子模塊進行了詳細的軟件設計。在頂層文件中通過調用各個子模塊來完成vhdl程序的設計。 最后在對每一個子模塊完成了功能仿真測試驗證,同時也對整個系統進行頂層設計和仿真測試,測試結果表明了整個控制系統的合理性以及正確性。整個控制系統設計簡單合理,操作簡單,滿足售貨機的基本要求,具有一定的實用意義。關鍵詞:自動售貨機、VHDL、EDA、QuartusⅡ 自動售貨機控制系統的設計與仿真 Abstract Abstract: With the progress of the society, the development of the scientific, and the improvement of living standards, single traditional way of life has not meet modern residents' pursuit of high quality life, under this kind of phenomenon, a number of automation equipment should come into being.Vending machine as one of the most common equipment in the automation equipment, has been develop all over the world and develop constantly because it has many advantages.Vending machines set off after department stores and supermarkets in another retail frenzy, this intelligent vending system has broad prospects for development in the station, school buildings, office buildings and other public places.Based on the background of the vending machine, the article designs and plans the project of vending machine system after introducing the history and development trend.The vending machine control system is based on the EDA technology to realize, at the same time, it used Quarter Ⅱ 14.0 of the Altera corporation as the software development platform, taking advantage of VHDL programming language input completed the software design.The design scheme is hierarchical write for the whole hierarchical control system.The whole system is divided into six sub modules, change calculation module, confirming cancellation control module, the change control module, total amount module, display module, locking module, and each child module software design is design in detail.On the top floor file by calling each module to complete the VHDL program design.Finally, The design scheme completed the function simulation test to verify for each child modules, and conducts Top-level design and simulation test for the whole system, the test results show the rationality and validity of the whole control system.The design of the whole control system is simple and reasonable, the operation is simple, it meets the basic requirement of the vending machine and has certain practical significance.keywords :The vending machine、EDA、VHDL、QuqrtusⅡ 自動售貨機控制系統的設計與仿真 緒論 1.1課題研究背景 早在20世紀30年代,出售香煙的自動售貨機就在美國被研制出來了,此后,各類自動售貨機也相繼被研究出來。到了20世紀的70年代,自動售貨機在歐美地區和日本的發展已經相當的普遍。早在1998的數據統計中,日本就已經有了550萬臺各式各樣各種功能的自動售貨機,而美國所擁有的自動售貨機的數量更是高達700萬臺,也就是說在上個世紀末在日本平均23個人就擁有一臺自動售貨機,而美國則是平均35個人就擁有一臺。 自動售貨機的優點之一就是無需人工看守,這點在當今世界人工勞動力成本普遍急劇上升的年代成為了各商家最看重的一點,它可以24小時不斷的進行自動售貨操作,在為商家降低成本的同時大大的增加了收益。同時,其操作方便簡單、占地面積小、全自動化等優點使其迅速在全世界各地普及開來。日本作為使用自動售貨機最普遍的國家,其國內的罐裝飲料有大約70%是通過自動售貨機來出售的,銷售額為世界第一;在西班牙,全國零售業的銷售額一半以上是由自動售貨機來完成的,并且每年的速度都在不斷增長。從這些數據可以看出自動售貨機所涉及的行業在零售行業中占據著不可替代的重要作用。 1.2課題研究的目的與意義 隨著社會的不斷發展與進步,城鎮居民的收入日漸增多,生活條件也越來越好,城鎮居民的消費方式和消費心理也正慢慢發生改變。快捷自動化的生活方式正是快節奏生活下人們所追求的一種高品質的生活方式。而自動售貨機作為商業自動化的一種常見設備,無論是在國內還是國外,都深受消費者的喜愛,時代的發展為自動售貨機提供了良好的發展條件。然而,我國的自動售貨機行業的發展卻遠遠及不上歐美和日本等國家,究其原因一個方面是因為我國的自動售貨機行業發展比較晚,另外一方面是因為我國要普遍發展自動售貨機也有著技術的瓶頸。自動售貨機是一種內部集成度高、技術復雜的高科技設備,而現在我國多數企業都缺乏自主研發自主創新的精神,使得自動售貨機的很多關鍵零件都要從國外進口,因此想要在國內發展這一行業,解決相關技術問題自主開發自動售貨機是最重要的。 我國引進自動售貨機已有差不多二十年的時間,然而至今在國內運營和自主研發制造自動售貨機的企業少之又少,國外的自動售貨機還毫無疑問的占據著我國絕大部分的的市場。這種現象嚴重阻礙了我國發展自動售貨機行業。因此,加快腳步和加大力度去自主研制自動售貨機是很有必要的,同時,更要時時關注最先進的科學技術,盡可能的把這些高科運用到自動售貨機行業中去,只有這樣才能讓該行業在我國得到更好更快的的發展。 自動售貨機控制系統的設計與仿真 1.3 國內外研究現狀及趨勢 目前,自動售貨機已經在發達國家得到了廣泛的運用,而我國由于行業起步較晚的原因使得各方面技術還不夠成熟,還需要加大力度去積極發展這一行業。在2012六月份,我國各式各類的自動售貨機的總量只有三萬臺,而在2013六月份,該數量已經上升至五萬臺,增長幅度高達差不多50%,當然由自動售貨機帶來的營業額也是非常龐大的。隨著科技的不斷發展,如今的自動售貨機也越來越先進,其中設備的科技含量也日漸增高。自動售貨機的發展歷程如圖所示: 目前我國生產自動售貨機主要有以下幾家比較知名的廠家:上海艾絲明自動售貨機有限公司,主要生產咖啡機;天津歌德公司,主要生產咖啡機;大連富士冰山公司,主要生產飲料機。除此之外還有青島澳柯瑪自動商用設備有限公司、天津奧萊特自動售貨機有限公司等公司生產的自動售貨機也是比較常見的。 自動售貨機的發展趨勢是由于社會的產業結構發生變化的產物。由于社會的消費方式、銷售環境等的變化,自動售貨機的售貨方式作為一種新的流通渠道,自然而然自動售貨機也就應時代發展而生了。自動售貨機從一開始的功能單一結構單一發展到現在的功能多元化個性化,該行業也成為信息化的一種表現。而且自動售貨機的發展為了適應社會的發展也將會更加合理化人性化,它已不僅僅是一臺用來銷售商品的機器,隨著科技的發展,通信的發展,互聯網的發展,它也必將向著相互連通的信息生態圈的方向發展,必將發展成為一種集商品銷售、信息流通等于一體的高科技的終端設備。 1.4 課題研究的主要內容 本文主要研究利用自動售貨機來完成商品處理、貨幣找零、出貨操作、led顯示等功能。完成的工作主要包括以下幾個方面: 1.對自動售貨機的歷史及發展前景做了簡單的陳述。 2.對課題中用的比較多的EDA技術以及VHDL語言、QuarterⅡ軟件開發平臺的相關知識做了簡單的介紹。 3.在對自動售貨機的整個控制系統進行了一定的研究和分析之后,提出了整體設計方案。 4.對各個子模塊功能的利用vhdl語言程序的輸入的方式進行了詳細的分析設計,并且對每一個子模塊進行了仿真測試,對其相對應的功能進行了驗證。最后對整個系統進行頂層設計,同時也對整個系統進行了仿真,對整個自動售貨機的功能進行了驗證。 自動售貨機控制系統的設計與仿真 相關技術簡介 2.1 EDA技術 電子設計自動化技術就是常見的EDA技術的簡稱,這種技術在現代電子設計中有著非常重要的作用。EDA技術以強大的計算機為依賴,在相應的軟件開發平臺上,利用硬件描述語言(HDL)來完成系統的各項功能的邏輯描述。 EDA技術有著豐富的內容,與電子技術很多領域有著密不可分的聯系,所以其發展同計算機輔助工程、電子設計技術以及集成電路的大規模設計技術等都是同步發展的。就近30多年來其發展可分為以下階段: ? 上世紀70年代可編程邏輯器件開始問世,集成電路得到廣泛應用,CAD技術也開始發展,EDA技術也就是在這個時候開始出現。 ? 上世紀80年代進入商用的復雜可編程邏輯器件、FPGA器件的出現、CAD技術廣泛的應用、各類硬件描述語言的相繼出現,這些解決EDA技術要廣泛運用過程中所遇到的各種問題,為其規范應用奠定了基礎。 ? 上世紀90年代,CAD、CAE等技術已經被廣泛應用在電子領域方面。同時,通信技術的發展、計算機技術的發展使得EDA技術有了更大的發展空間。 發展至現在的EDA技術,CPLD和FPGA等可編程邏輯器件是被應用得最多的,這些器件是利用硬件編程語言來進行軟件設計以完成功能設計,這樣的設計方式簡單方便,有著非常大的靈活性。可編程邏輯器件和可編程語言的發展改變了傳統的電子設計的設計方法和設計理念,同時也讓EDA技術有了更快的發展。EDA技術在現代社會的發展及應用范圍是非常廣泛的,不僅在農業、醫學、軍事等領域被應用,在通信、化學、交通、航天等領域更是有著不可替代的重要作用。(EDA技術與VHDL P1) 2.2 VHDL VHDL的全稱是Very High Speed Circuit Language,與另一種VerilogHDL語言是現在電子設計自動化中用的最多的兩種硬件描述語言,現在用的比較多的EDA工具基本都支持這兩種語言,在電子領域中已經成為了通用的硬件描述語言。 VHDL是一種無關設計平臺、無關具體的硬件電路的語言。跟一般的高級語言類似,不過卻有著一般高級語言沒有的具有硬件特性的語句,能很好的描述數字電路的功能和結構。VHDL的結構特點是設計一項工程或實體,一個元件、一個系統或者一個電路模塊都可以設計成為一個實體,被設計好的實體可以很方便的被調用,這是VHDL很大的一個特點。 與其他的硬件描述語言相比,VHDL有以下特點: ? 設計好的模塊可以任意無數次的被調用,很好的做到了資源共享和重復利用這一點,大大減少了設計人員的工作量和工作時間。 自動售貨機控制系統的設計與仿真 ? 語言的設計描述與器件無關,設計人員在進行電路的設計的時候,可以把精力放在優化電路上而不用先去考慮器件的選擇,VHDL可以采用不同的器件來實現已經描述好的電路設計。 ? 語言功能強大,設計方法靈活,支持各式各樣的設計方法,無論是自頂向下還是自底向上的設計方式在VHDL中都可以靈活的被運用。同時,模塊化設計,層次化設計等設計方法也是被支持的。 ? 具有很強的移植能力,對于同一個VHDL程序,它可以在不同的工作平臺、綜合器、模擬器之間相互移植。 一個完整的VHDL程序代碼結構包括4個模塊,庫和程序包的模塊、實體模塊、結構體模塊、配置結構模塊。其結構圖如圖所示: 2.3 QuartusⅡ軟件 QuartusⅡ是由Altera公司開發的一種EDA工具,是經過A+plus、然后到MAX+plus,再到MAX+plusⅡ發展而來的。QuartusⅡ支持多種輸入方式,例如原理圖輸入,硬件編程語言輸入等,在使用QuartusⅡ軟件時,它會將設計人員設計好的硬件編程語言或者原理圖等自動轉換目標文件,最后將目標文件下載到器件中。通過DSP Builder工具,QuartusⅡ能很好的跟Matlab、Simulink等結合起來,從而能夠方便快捷的實現不同的DSP系統的設計。因為有著簡單直接的入口和很強的設計能力,以及使用靈活、方便快捷的優點,所以很受廣大設計者的青睞。 QuartusⅡ軟件有以下特點: 自動售貨機控制系統的設計與仿真 ? 支持多平臺的設計輸入,結合其處理和驗證功能使其成為一個全集化的開發平臺,讓開發周期變短。 ? 是一個與結構無關的開發工具,QuartusⅡ通過把Cyclone、APEX、Mercury等設計環境轉化為所需要的格式,真真正正的成為唯一一個與結構無關的開發工具。 ? 具有很具有全面的可設計開發資源,是一個集系統設計、軟件開發、邏輯設計于一體的綜合性開發平臺。QuartusⅡ的編程設計流程圖所示: 2.4 Modelsim仿真工具 Modelsim提供了可以與其他EDA工具(如QuartusⅡ)的接口工具。Modelsim支持Verilog、vhdl或者二者相結合的混合。針對不同的使用環境,Modeislm分為不同的版本,常見的版本有:Modelsim AE、Modelsim ASE、Modelsim SE等。在本文的設計的版本是Modelsim ASE10.1版本。VHDL的仿真流程如圖所示,首先在VHDl仿真器中對已設計好的VHDL源代碼進行編譯,等到代碼被編譯正確后就會被轉換為中間格式,中間數據的結果將會保存在仿真數據庫中,一般來說,VHDL源代碼在編譯好的仿真庫就是WORK庫。設計者通過編寫TestBeach文件來干預仿真的過程,在本文的設計中,計時通過編寫不同的TestBeach文件來對不同的模塊代碼進行仿真測試。 自動售貨機控制系統的設計與仿真 系統總體方案 3.1 設計要求 ? 本文設計的售貨機系統中只有一種,價格為13元; ? 可以投入三種不同的貨幣來購買商品,分別是1元、5元、10元; ? 每次只允許購買一個商品,若想要購買多個商品,則需要重復執行購買操作; ? 售貨機的顯示器會實時更新顯示總共投入的貨幣的總額; ? 當投入貨幣后,如果不想購買商品了則可以通過按取消鍵來退還投入的貨幣,否則就按確定鍵來獲取商品; ? 設置兩個指示燈,分別是購買指示燈和取消指示燈,當顧客按下確定鍵后購買指示燈亮起;若顧客按下取消鍵,則取消指示燈亮起; 3.2 總體設計 通過分析系統的設計要求以及考慮到系統本身,本文對整個總動售貨機系統采用自頂向下的設計方法,自頂向下的設計方法如圖所示,采用自頂向下的設計方法的優點是很明顯的。由于系統設計從頂層開始,所以在進行設計時就清楚實現整個系統的性能狀況。隨著設計向下一級進行,系統的性能就能進一步得到細化和表達,并且可以根據個人需要隨時修改和調整,縮短了設計周期。 對整個系統的頂層文件進行如下端口設計: ? 輸入端口:clk,輸入時鐘信號;rst,復位信號;C1,投入一張1元貨幣;C5,投入一張5元貨幣;C10,投入一張10元貨幣;ok_in,確認信號;cancel_in,取消信號。 ? 輸出端口:led_buy,確認購買指示燈;led_cancel,取消購買指示燈;en_deliver,出貨信號;led1,投入貨幣總數的個位數(單位是元);led10,投入貨幣總數的十位數(單位是元)。 ? 內部可讀輸出端口:RC1,1元退幣控制信號;RC5,5元退幣控制信號;RC10,10元退幣控制信號。 自動售貨機控制系統的設計與仿真 端口原理圖如圖所示: 在確定了整個系統的輸入輸出端口后,給出自動售貨機的系統內部的工作原理: 當系統接收到復位信號后,其他所有的控制信號和標識信號都清空為零,系統處于等待指令的狀態。 當系統接收到相關信號輸入時,系統開始工作。顧客確定購買商品時,開始投入貨幣,當投入貨幣為1元、5元、10元時,將分別產生一個時鐘寬度的信號C1、C5、C10。所投入的貨幣總額會實時計算并通過顯示器顯示出來。 當顧客確定購買商品并按下確認鍵的時候,自動售貨機會產生一個時鐘信號ok_in,而且由led_buy控制的代表確認購買的指示燈會閃爍。如果投入貨幣的總額大于商品價格時,則送出商品并計算出余額操作退出余額,此時出貨指示燈閃爍。如果投入的貨幣不足以支付商品價格,自動售貨機會退還所有貨幣。 當顧客投入貨幣又不想購買商品時,就可以通過按下取消鍵來取消購買,這時系統會產生一個時鐘信號cancel_in,同時通過找零控制模塊來執行相應操作退還貨幣。如果確認鍵或者取消鍵被按下后,自動售貨機會產生一個lock_out_entry內部信號,當發出信號后,所有的操作都是無效的。 當完成所有的操作后,將產生一個clear清除信號,此時所有的信號都會被清除,自動售貨機開始等待下一次操作。 整個系統的投幣購物流程如圖所示: 自動售貨機控制系統的設計與仿真 將整個系統劃分成六個模塊,分別是購買余額計算模塊、找零控制模塊、確認取消模塊、總額加和模塊、鎖定模塊和顯示模塊。各模塊的功能: 余額計算模塊:當顧客確認購買商品并按下了售貨機的確認鍵后,找零模塊就開始計算出應該退還的余額。 找零控制模塊:在顧客確定購買商品后執行找零操作,或者是在顧客取消購買后執行退還原款操作。 確認取消模塊:顧客在選擇購買商品或者取消購買商品后,將輸入的確認信號或者取消信號分別轉換成單時鐘周期的控制信號,并且控制相對應的信號燈的亮和不亮。 總額加和模塊:不斷的更新并計算售貨機收到的總貨幣數量。 鎖定模塊:可以按下確認鍵或者取消鍵,當其中任意一個鍵被按下后,整個自動售貨機系統的按鍵的輸入都是無效的。 顯示模塊:通過控制兩個顯示器(led1和led10)來顯示所投入貨幣的總額。整個自動售貨機的內部工作過程的總體框圖如圖所示: 對每一個子模塊進行VHDL設計,然后對其進行編譯,再編譯沒有錯誤后,通過編寫TestBeach文件來對其進行仿真測試來驗證每一個模塊的功能是否正確。在頂層文件的 自動售貨機控制系統的設計與仿真 vhdl程序設計中,通過特定的例化語句將已經設計好的6個子模塊進行例化,然后直接對各個模塊進行調用,整個頂層程序的設計就是通過調用底層的6個模塊來實現的,完成頂層設計后再對整個系統進行仿真測試。 自動售貨機控制系統的設計與仿真 軟件設計及仿真測試 4.1確認取消模塊(ok_cancel模塊) 4.1.1設計思想及工作原理 在確認取消模塊中,顧客可以在投幣之后選擇繼續購買商品或者取消購買商品,若確定購買則會產生一個確認信號,而該模塊可以把該信號轉換成單時鐘的控制信號,同時確定購買led_buy顯示燈會亮;同樣,若顧客按下取消健,則該模塊會將輸入的取消信號轉換單時鐘周期的控制信號,同時確定購買cancel_buy顯示燈會變亮。 確認取消模塊有以下輸入端口: ? 輸入端口:clk,輸入時鐘信號;rst,復位信號;clear,清除信號;lock_out_entry,鎖定信號;ok_in,確認信號;cancel_in,取消信號。? 輸出端口:ok,內部時鐘確認控制信號;cancel,內部時鐘取消控制信號;led_buy,確認購買指示燈控制信號;led_cancel,取消購買指示燈控制信號。電路原理圖如圖所示: 該模塊的工作過程如下:首先系統復位,等待確認購買信號或者取消購買信號的輸入,當收到信號后,系統會根據接收到的信號立即生成一個相對應的內部控制信號ok信號或者cancel信號。同時,指示燈會根據接收到的控制信號led_buy或者led_cancel來顯示燈的亮和滅。此過程中,當系統第一次接收到確認購買信號或者取消信號后,將會岸上產生一個鎖定信號lock_out_entry,當接收到此信號后,整個系統的所有操作都會無效,直到系統執行完畢,模塊接收到清零信號后,所有信號都會被清空歸零。 由QuqrtusⅡ軟件內部生成的RTL電路圖如圖所示: 自動售貨機控制系統的設計與仿真 4.1.2仿真測試 對確認取消模塊進行仿真測試后,得到如圖所示的仿真波形圖: 對所得到的仿真波形圖進行分析:在15ns前,系統復位;在30ns的時候,系統接收到一個確認購買的信號,此時會生成ok信號,即一個時鐘的內部控制信號,同一時間,會發出一個控制信號led_buy,以此來控制購買指示燈亮。在時間為31ns時,可以看到系統發出了一個鎖定信號lock_out_entry,當系統接收到該信號后,其他所有的按鍵操作都將被視為無效,所以在40ns時輸入的cancel信號不會被響應;在60ns時操作執行完畢,系統接收到一個clear的控制信號,此時鎖定信號歸零,同時led_buy控制信號歸零。 4.2找零控制模塊(refund模塊) 自動售貨機控制系統的設計與仿真 4.2.1設計思想及工作原理 找零控制模塊有以下輸入端口: ? 輸入端口:clk,輸入時鐘信號;rst,復位信號;clear,清除信號;ok,接收到確認信號;cancel,接收到取消信號;sum1,表示接收到的投入1元貨幣的信號;sum_5,接收到的投入5元貨幣的信號;sum10,表示接收到的投入10元貨幣的信號;sum,投入貨幣總和信號;Rsum1,退出1元貨幣的數量;Rsum5,退出5元貨幣的數量;Rsum10,退出10元貨幣的數量; ? 輸出端口:en_deliver,給貨控制信號;RC1,退幣1元的信號;RC5,退幣5元的信號;RC10,退幣10元的信號。電路原理圖如圖所示: 當系統接收到確認取消模塊發來的確認購買信號時,則該模塊開始執行找零過程,同時發出給貨控制信號en_deliver,當找零操作完成后系統發出清零信號;當系統接收到其他模塊發出的取消購買信號后,則該模塊開始執行退幣操作,模塊會根據投入的貨幣發出不同的退幣控制信號,從而完成所有貨幣的退還,操作完成后系統發出清零信號。 由QuqrtusⅡ軟件內部生成的RTL電路圖如圖所示: 自動售貨機控制系統的設計與仿真 4.2.2仿真測試 對找零控制模塊的仿真有2種情況: 1、確認購買操作; 系統執行取消購買操作,得到如圖所示的仿真波形圖: 分析上圖中的波形圖可以看出:在5ns前,系統復位;在10ns時,系統接收到確認購買信號ok,同時接收到信號sum,表示系統收到投入貨幣為15元,在同一時刻發出給貨信號en_deliver;在11ns的時候,就收到了其他模塊發來的退幣信號Rsum_10,可以看出當投入貨幣依次是15、14、13元時,退幣金額分別為2、1、0元;當給貨信號完畢后,該模塊立即產生退幣信號,系統開始執行找零操作,操作 自動售貨機控制系統的設計與仿真 完成后系統清零。 2、取消購買操作; 對系統執行取消購買操作,得到如圖所示的仿真波形圖: 對該波形圖進行分析可以看出:在5ns前,系統處于復位狀態;在10ns的時候,系統接收到其他模塊發出的投幣信號,分別投入了一張5元貨幣和一張10元貨幣,同時,接收到別的模塊發出的信號sum;在30ns時,系統接收到確認取消模塊發出的取消信號,則該模塊開始執行退幣過程,退幣控制信號RC50、RC100分別發出一個高電平信號,每個退幣控制信號代表退出行對應的一種貨幣;在操作完成后系統發出清零信號。 4.3總額加和模塊(sum_cash模塊) 4.3.1設計思想及工作原理 總額加和模塊有以下輸入端口: ? 輸入端口:clk,輸入時鐘信號;rst,復位信號;clear,清除信號;C1,投入一元貨幣信號;C5,投入五元貨幣信號;C10,投入十元貨幣信號;RC1,退幣1元的信號;RC5,退幣5元的信號;RC10,退幣10元的信號;lock_out_entry,鎖定信號。 ? 輸出端口:sum_1,表示發出1元貨幣的信號;sum_5,發出5元貨幣的信號;sum_10,發出10元貨幣的信號;sum,投入貨幣總和信號; 電路原理圖如圖所示: 自動售貨機控制系統的設計與仿真 當系統輸入不同的投幣信號時,則sum1,sum5,sum10就會記錄相對應的貨幣的數量,而sum則記錄了投入貨幣的總額。當貨幣投入完畢后,顧客會選擇確認購買商品或者取消購買,系統會根據接收到的不同的信號來執行相應的操作,當找零模塊執行完找零操作或者退幣操作后總數加和模塊就會收到系統的清零信號,所有的內部信號和表示都會被清除。 由QuqrtusⅡ軟件內部生成的RTL電路圖如圖所示: 自動售貨機控制系統的設計與仿真 4.3.2仿真測試 對總額加和模塊進行仿真測試得到如圖所示的波形圖: 對圖中波形進行分析可以發現,在5ns之前,系統在復位狀態;在時間為20ns的時候,系統接收到C1、C5、C10發出的3個投幣信號,30ns時又收到1個1元投幣信號,對應的sum1、sum5、sum10記錄了相對應不貨幣的數量,sum則記錄了投入貨幣的總額;在時間為40ns時,lock_out_entry信號變為高電平,此時其他按鍵都會無效;當系統開始接收到退幣信號后,相應的sum1、sum5、sum10也會發生變化,找零結束后系統發出清零信號,系統內的表示和內部信號都被清除。 4.4余額計算模塊(calculator模塊) 4.4.1設計思想及工作原理 余額計算模塊有以下輸入端口: ? 輸入端口:rst,復位信號;clear,清除信號;ok,確認購買信號;輸出端口:sum1,投入1元貨幣的信號;sum5,投入5元貨幣的信號;sum10,投入10元貨幣的信號;sum,投入貨幣總和信號。 ? 雙向端口R:sum1,退還1元貨幣的信號;Rsum5,退還5元貨幣的信號;Rsum10,退還10元貨幣的信號。電路原理圖如圖所示: 自動售貨機控制系統的設計與仿真 余額計算模塊在收到其他模塊發出的確認購買信號后,就會開始執行操作。根據所投入的貨幣總額,可以分為3種情況:投入貨幣小于商品價格,該情況下售貨機會退還所有貨幣;投入貨幣剛好等于商品價格,該情況下退還余額為零;投入貨幣大于商品價格,該情況則根據商品的價格和顧客投入總額的差額來計算應找余額。由QuqrtusⅡ軟件內部生成的RTL電路圖如圖所示: 4.4.2仿真測試 對余額計算模塊的仿真有3種情況: 1、投入貨幣小于商品價格; 2、投入貨幣等于商品價格; 自動售貨機控制系統的設計與仿真 3、投入貨幣大于商品價格; 對于第1種情況,得到如圖所示的仿真波形: 對于上面的波形圖,可以看出在時間為5ns前,系統復位;在10ns的時候,系統接收到投入一張10元貨幣的信號和一張1元貨幣,接著在20ns的時候,系統接收到控制確認購買的信號ok,經過計算最后得到投入的貨幣總額11元小于商品的設定價格13元,所以系統將發出退款信號,Rsum10和Rsum1均被賦值為1,表示要退還10元貨幣和一元貨幣,當系統的找零控制模塊接收到此信號后會執行相應操作;在時間40ns時,發出清零信號。 對于第2種情況,得到如圖所示的仿真波形: 對于上面的波形圖,可以看出在時間為5ns前,系統復位;在10ns的時候,系統接收到投入一張10元貨幣和3張一元貨幣的信號,接著在20ns的時候,系統接收到控制確認購買的信號ok,經過計算最后得到投入的貨幣總額13元剛好等于商品的設定價格13元,所以系統將發出退款信號,Rsum10、Rsum5、Rsum1均被賦值為0,表示要退還貨幣均為0,當系統的找零控制模塊接收到此信號后會執行相應操作;在時間40ns時,發出清零信號,清除系統內部信號。 對于第3種情況,得到如圖所示的仿真波形: 自動售貨機控制系統的設計與仿真 對于上面的波形圖,可以看出在時間為5ns前,系統復位;在10ns的時候,系統接收到投入2張貨幣的信號,接著在20ns的時候,系統接收到控制確認購買的信號ok,經過計算最后得到投入的貨幣總額20元大于價格13元,所以系統將發出退款信號,Rsum10、Rsum5、Rsum1分別被賦值為2、1、0,表示要退還貨幣均為2張1元,1張5元,當系統的找零控制模塊接收到此信號后會執行相應操作;在時間40ns時,發出清零信號,清除系統內部信號。 4.5鎖定模塊(lock模塊) 4.5.1設計思想及工作原理 鎖定模塊有以下輸入輸出端口: ? 輸入端口:rst,復位信號;clear,清除信號;ok,確認購買信號;cancel,取消購買信號。 ? 輸出端口:lock_out_entry,鎖定信號。 端口原理圖如圖所示: 當該模塊接收到確認取消模塊發出的無論是確認信號還是取消信號,都會發出一個鎖定信號,從而鎖定整個系統的其他任何操作。由QuqrtusⅡ軟件內部生成的RTL電路圖如圖所示: 自動售貨機控制系統的設計與仿真 4.5.2仿真測試 對鎖定模塊進行仿真測試,得到如圖所示波形: 對該波形圖進行分析:在5ns前,系統復位;在20ns時,系統接收到確認取消模塊發出的cancel控制信號,此時該模塊會立即產生lock_out_entry信號,即按鍵鎖定信號;在40ns時,系統操作結束,發出清零信號。 4.6顯示模塊 4.6.1設計思想及工作原理 ? 輸入端口:din,表示收到貨幣總額信號。 ? 輸出端口:led1,顯示貨幣的個位數;led10,顯示貨幣的十位數。 顯示模塊會實時顯示售貨機收到的貨幣總額,并且通過led1來顯示投入貨幣的個位數,led2來顯示投入貨幣的十位數。在該模塊中,調用了一個數碼管顯示的元件disp7。 Lock模塊的端口原理圖如圖所示: 自動售貨機控制系統的設計與仿真 由QuqrtusⅡ軟件內部生成的TRL電路圖如圖所示: 4.6.2七段數碼管顯示器設計 在元件disp7程序設計中,有一個輸入端口din,一個輸出端口led。disp7程序的端口原理圖如圖所示: 該元件設計的主要目的是具體定義了從0~9中每一個數值所對應的字符串賦值。由QuqrtusⅡ軟件內部生成的RTL電路圖如圖所示: 自動售貨機控制系統的設計與仿真 4.6.3仿真測試 顯示模塊仿真波形圖如圖所示: 對該波形圖進行分析:當顯示模塊接收到用來控制貨幣總額的信號din時,兩個led顯示器會馬上將貨幣總額顯示出來。圖中可以看出,投入貨幣總額為15元,則led1應顯示為5,led2應顯示為1,根據vhdl程序的設計,led信號用字符串“"1111001”來顯示1,用字符串“0010010”來顯示數字5,圖中的波形圖說明了顯示器顯示是正確的。 4.7頂層設計與分析 頂層的設計就是對整個自動售貨機系統進行設計,為了在整個系統中達到連接底層元件從而形成更高層次的電路設計,在頂層文件的vhdl程序設計中使用了例化語句。在程序中利用component語句對準備調用的元件做了聲明,并利用net1~net11十一個信號作為系統的內部連線。 顯然,元件例化的實質就是引用一種連接關系,將之前已經設計好的設計實體定義為一個元件,然后把元件與當前的設計實體的端口通過特定的語句連接起來,從而為當前的設計實體引進新的低一級的設計層次。元件例化是vhdl設計實體完成自上而下層次化設計的一種途徑。 4.7.1設計思想及工作原理 由QuqrtusⅡ軟件內部生成的RTL電路圖如圖所示: 自動售貨機控制系統的設計與仿真 4.7.2仿真測試 對整個系統進行功能仿真測試,對仿真的結果的其中一部分進行分析,對以下兩種仿真情況進行分析: 1、確認購買但余額不足 2、確認購買且需要找零 對第1種情況進行仿真得到如圖的仿真圖: 在該波形圖中可以看出,在5ns的時候,系統復位;在時間為30ns的時候,系統收到一個1元貨幣投入信號和一個5元貨幣投入信號,緊接著在50ns的時候又收到一個一元貨幣投入信號;兩個顯示器顯示了投入貨幣的總額;在時間為80ns的時 自動售貨機控制系統的設計與仿真 候,系統收到確認信號ok_in,投幣結束,開始執行找零或者退幣操作;系統內部通過判斷發現所投入貨幣總額小于商品價格,所以開始進行全額退幣過程;在90ns的時候系統發出同時退出一元貨幣和五元貨幣的信號RC1和RC5。系統操作完成,等待下一次的操作。 對第2種情況進行仿真得到如圖的仿真圖: 在該波形圖中,在時間為30ns的時候,系統接收到一個投入一元貨幣的信號,在70ns的時候,同時收到一個五元貨幣和一個十元貨幣的投入信號,顯示器實時顯示所投入貨幣的總額;在80ns的時候收到確認購買信號ok_in,由于所投貨幣總額大于商品價格,則系統開始執行找零過程,并且產生一個出貨信號en_deliver和一個確認購買信號led_buy;,在時間為90ns至120ns,連續3個產生退幣信號退幣信號RC1;退幣完成后,本次操作完成,等待下一次的操作。 自動售貨機控制系統的設計與仿真 總結 隨著計算機技術和通信技術的發展,自動售貨機的發展方向也必將向著更加智能化和人性化的礎上,從顧客的實際需要出發,本文在分析了自動售貨機的特點后,完成了自動售貨機控制系統的設計,在設計的過程中,主要完成了以下幾個方面的工作;(1)對自動售貨機的發展技術進行了總結和歸納,經過總結可以發現節能環保是現在起發展的一個重要方向,同時,移動商務也是其發展的一個目標方向。(2)完成了整個系統方案的設計,并且對整個系統進行了模塊的劃分,將整個系統劃分成6個子模塊,對每個模塊都單獨進行了功能設計。 (3)利用vhdl語言輸入的方式,對子模塊進行了詳細的軟件的設計,并且對其完成了相應的功能仿真測試,并且對每次的仿真結果進行分析。最后在頂層文件中將各個子模塊進行例化并對子模塊進行了調用,并且對整個控制系統的仿真,經過仿真測試的結果可以看出,整個控制系統的設計達到了最初的所有設計要求,完成了各項功能。 通過對整個系統的功能測試發現該自動售貨機的工作是比較穩定和可靠的,而且操作簡單明了,具有很大的實用性。由于經驗不足和時間原因,本文中對該自動售貨機系統的設計也存在了一些不足之處。在本系統中,只設定了一種商品,商品選擇功能不完善;購買商品后的結算方式比較單一,只能現金支付,缺少例如IC卡支付等智能支付方式。所有這些問題會對在相關知識進行更深入的學習后逐一解決,努力對該控制系統進行改進,使其更加完善。 自動售貨機控制系統的設計與仿真 致謝 回首大學四年,雖有遺憾卻也無悔。在四年的求學期間,雖然也曾迷茫彷徨,卻因為身邊一群誨人不倦的老師的引導以及真誠、熱心助人的同學的幫助,重新找到了前進的方向以及努力的目標。 在此,要首先感謝在本次畢業設計過程中從選題開始到論文的完成一直給我很大幫助的段老師,正是因為段老師耐心的幫助,我才能更好的完成課題中的設計及論文的編寫。同時,也要感謝本次在畢業設計過程中給與我幫助的其他老師和同學。最后,祝愿所有老師身體健康,桃李天下;祝愿所有同學前程似錦,工作順利。 大學生活即將結束,我也即將步入社會這個人生大舞臺,要學習的東西還有很多。在以后的日子里,我將會更加的努力去面對生活中所遇到的各種挑戰。 自動售貨機控制系統的設計與仿真 參考文獻第二篇:軟件工程_自動售貨機
第三篇:自動售貨機的PLC系統設計
第四篇:軟件工程課程設計(自動售貨機)
第五篇:畢業論文-自動售貨機匯總