国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

紙型檢測器設(shè)計(jì)應(yīng)用

2012-04-29 00:44:03劉毅劉偉
科技資訊 2012年24期

劉毅 劉偉

摘要:本文主要介紹模擬復(fù)印機(jī)生產(chǎn)組裝過程中,在TM與IOT組裝前設(shè)計(jì)一個(gè)檢測裝置,對(duì)TM的各組件狀態(tài)及傳感器進(jìn)行檢測,確保組裝到IOT整機(jī)后,TM均為良品。以此解決原生產(chǎn)方式中的弊端。

關(guān)鍵詞:單片機(jī)串口通信TM(Tray Module)IOT(Image Output Terminal)

中圖分類號(hào):TS261 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3791(2012)08(c)-0030-02

1設(shè)計(jì)構(gòu)想

多功能復(fù)印機(jī)現(xiàn)有工程生產(chǎn)方式如圖1,這種生產(chǎn)方式操作麻煩,且容易造成二次人為故障,生產(chǎn)效率低?;谶@種考慮,將生產(chǎn)過程改良如下,可解決原生產(chǎn)方式的弊端(如圖2)。

2檢測器設(shè)計(jì)

TM與IOT由物理層,數(shù)據(jù)連接層,虛擬命令層構(gòu)成。本設(shè)計(jì)利用虛擬命令層獲取相關(guān)信息,完成檢測目的。綜合考慮成本,設(shè)計(jì)周期,難易度等因素,最終選定單片機(jī)+LCD作為設(shè)計(jì)課題。

檢測器系統(tǒng)如圖3所示,單片機(jī):采用ATMEGA48單片機(jī)完成整個(gè)檢測器的控制;LCD:顯示TM的動(dòng)態(tài)信息,TM內(nèi)部故障發(fā)生時(shí)報(bào)警;電源控制:當(dāng)檢測器檢測到正確連接到TM時(shí),啟動(dòng)按鍵,延時(shí)1秒鐘向TM供電,檢測過程中,一時(shí)發(fā)生故障,系統(tǒng)自動(dòng)供電電源,防止二次故障發(fā)生;LED蜂鳴:LED顯示數(shù)據(jù)的發(fā)送接收狀態(tài),有數(shù)據(jù)傳輸時(shí)LED閃爍,異常時(shí)蜂鳴器報(bào)警。

3程序設(shè)計(jì)

主程序中各子程序通過標(biāo)識(shí)狀態(tài)作相應(yīng)處理。串口數(shù)據(jù)讀取利用單片機(jī)串口中斷函數(shù),非常方便于數(shù)據(jù)的連續(xù)發(fā)送與接收。

3.1 程序代碼

3.1.1 主程序

/************************************** *************************************************

#include "common.h"

………

intmain(void)

{ Sys_Init(); //系統(tǒng)初始化

………….

TIMSK0 |=(1<

sei();

while(1)

{wdt_reset();//喂狗

if(Key_Ctr==1){Key_Control(); Key_Ctr=0;} // 按鍵處理

if(Buzzer_F!=0){Buzzer_On(Buzzer_F);Buzzer_F=0;} // 蜂鳴

if((Error_F!=0)&&(Run_F!=0)){Buzzer_F=1;} // 報(bào)警處理

if(Send_F==1){USART_Data_Send();Send_F=0;} // 數(shù)據(jù)傳送

if(rx_buffer.flag == FLAG_RECEIVE_OK) // 如果串口接收到完整的數(shù)據(jù)幀,則進(jìn)行處理

{USART_CMDProcess();

USART_ClearRXBuffer();

Time_Out=0;//通信超時(shí)計(jì)時(shí)結(jié)束

Time_Out_Sec=0; }

if(tx_buffer.flag == FLAG_SEND_REQUEST) // 如果串口發(fā)送緩沖區(qū)有發(fā)送請(qǐng)求,執(zhí)行發(fā)送

{USART_SendString();

tx_buffer.flag = FLAG_EMPTY;

Time_Out=1; //通信超時(shí)計(jì)時(shí)開始}

if(RefreshLCD_F){ RefreshLCD();RefreshLCD_F=0;} // 如果LCD有刷新請(qǐng)求,則刷新LCD}}

3.1.2 串口中斷程序代碼

#include "common.h"

………

RX_BUFFER rx_buffer;//接收數(shù)據(jù)結(jié)構(gòu)體實(shí)例

TX_BUFFER tx_buffer;//發(fā)送數(shù)據(jù)結(jié)構(gòu)體實(shí)例

static ucharNO_CMD_D5[5]={0xD5,0x00,0x00,0x00,0x55};

…………….

/****************************** ******************************************串口初始化

voidUSART_init(uint baud)

{UBRR0H=baud>>8;

UBRR0L=baud&0x00FF;

UCSR0A=0x00; //U2xn=0,波特率無倍速

UCSR0B=(1<

UCSR0C=(1<

USART_ClearRXBuffer();

USART_ClearTXBuffer();}

/******************************** *****************************************數(shù)組發(fā)送

void USART_Data_Send(void)

{uchar i;

switch(Data_F)

{

case 1:{for(i=0;i

………

case 6:{for(i=0;i

default:; }}

/************************************** *****************************TRAY-STS數(shù)據(jù)處理

void USART_CMDProcess(void)

{if(rx_buffer.buff[1]==0x03)//本組數(shù)據(jù)為TM 版本數(shù)據(jù)

{Ver_D=(rx_buffer.buff[3]>>3)&0x03;; //實(shí)驗(yàn)/恒久

Ver_H=rx_buffer.buff[3]&0x07;//TM版本上位

Ver_L=rx_buffer.buff[2]&0x3F;//TM版本下位

RefreshLCD_F=2;}

else if(rx_buffer.buff[1]==0x04) //本組數(shù)據(jù)為TRAY_STS

{ TM_No=rx_buffer.buff[2]&0x03;//取出TRAY編號(hào) 00->No2 01->No3 10->No4

TM_Status=(rx_buffer.buff[2]>>2)&0x07; //TRAY狀態(tài) 000->準(zhǔn)備好 001->上升 010->Tary拔

出 011->無紙 100->上升NG 101->NC 110->上升3次NG 111->SizeSensor NG

ASize=(rx_buffer.buff[2]>>5)|(rx_buffer.buff[3]<<2); //SizeSensor模擬電壓AD值

DSize=(rx_buffer.buff[3]>>6)&0x01;//SizeSensor數(shù)字位 0,1

RefreshLCD_F=3;}

else; }

/****************************** **************************************清空接收緩沖區(qū)

void USART_ClearRXBuffer(void)

{ uchar i;

for(i=0; i

rx_buffer.rxcount = 0; // 計(jì)數(shù)值清零

rx_buffer.flag = FLAG_EMPTY;}

/************************ *******************************向接收緩沖區(qū)中添加一個(gè)字節(jié)

uchar USART_AddToRXBuffer(uchar ch)

{ if(rx_buffer.rxcount >= RX_MAX){ return ERROR_RXBUFFER_FULL;} // 緩沖區(qū)滿

else

{ rx_buffer.buff[rx_buffer.rxcount] = ch;// 將要添加的字節(jié)保存到當(dāng)前計(jì)數(shù)值指向的位置

rx_buffer.rxcount ++; // 緩沖區(qū)的長度增加1

wdt_reset();//喂狗

return ADD_CHAR_OK; // 返回添加成功信息}}

/**************************** *******************************清空發(fā)送緩沖區(qū)

void USART_ClearTXBuffer(void)

{ uchar i;

for(i=0; i

{ tx_buffer.buff[i] = 0x00; // 緩沖區(qū)當(dāng)前元素清空

wdt_reset();//喂狗}

tx_buffer.txcount = 0; // 計(jì)數(shù)值清零

tx_buffer.flag = FLAG_EMPTY;}

/**************************** *******************************向發(fā)送緩沖區(qū)中添加一個(gè)字節(jié)

uchar USART_AddToTXBuffer(uchar ch)

{if(tx_buffer.txcount > TX_MAX){ return ERROR_TXBUFFER_FULL;} // 緩沖區(qū)滿

else

{wdt_reset();

tx_buffer.buff[tx_buffer.txcount] = ch;// 將要添加的字節(jié)保存到當(dāng)前計(jì)數(shù)值指向的位置

tx_buffer.txcount ++; // 緩沖區(qū)的長度增加1

wdt_reset();//喂狗

if(tx_buffer.txcount == TX_MAX)

{tx_buffer.flag = FLAG_SEND_REQUEST; // 填充完畢指定數(shù)量數(shù)據(jù),設(shè)置發(fā)送請(qǐng)求}

return ADD_CHAR_OK; // 返回添加成功信息}}

/************************ ***************************將發(fā)送緩沖區(qū)的內(nèi)容一次性發(fā)送

void USART_SendString(void)

{ UDR0=tx_buffer.buff[0]; //從結(jié)構(gòu)數(shù)據(jù)的第1個(gè)數(shù)開始發(fā)送

tx_buffer.txcount=0;}

/**************************** ************************串口發(fā)送中斷服務(wù)函數(shù)

SIGNAL(SIG_USART_TRANS)

{ if(++tx_buffer.txcount

else if(tx_buffer.txcount==TX_MAX)

{ USART_ClearTXBuffer(); //發(fā)送完畢

USART_ClearRXBuffer(); //作好接收準(zhǔn)備 }

else;}

/************************** ***************************串口接收完畢中斷服務(wù)函數(shù)

SIGNAL(SIG_USART_RECV)

{rx_buffer.buff[rx_buffer.rxcount] = UDR0;

rx_buffer.rxcount ++;

if(rx_buffer.rxcount >= RX_MAX){ rx_buffer.flag = FLAG_RECEIVE_OK;}}

3.1.3 LCD顯示程序代碼(紙型檢出部份)

void RefreshLCD(void)/*刷新LCD顯示*/

{if(RefreshLCD_F==1)//LCD刷新標(biāo)識(shí) 0:無效 1:框架顯示 2:版本顯示3:數(shù)據(jù)顯示4:刷新機(jī)種

{ if(TM_Status==2){disp_String(x,y,(uchar *)"已取出");}//紙盒拔出

else{

if((199

{disp_String(x,y,(uchar *)"A5 SEF");}

else if((184

{disp_String(x,y,(uchar *)"B5 SEF");}

……………..

else if((0

{disp_String(x,y,(uchar *)"11x17SEF");}

else{disp_String(x,3,(uchar *)" ErrorSize"); }//紙型錯(cuò)誤} }

4結(jié)果測試

只要是TM組件自身的故障都就能檢出,如TM紙型感知傳感器未安裝或接觸不良、TM控制器版本錯(cuò)誤等。目前為止,沒有一件因TM不良而導(dǎo)致整機(jī)拆卸的維修事件,提高了生產(chǎn)效率。

參考文獻(xiàn)

[1] 芯藝.AVR單片機(jī)GCC程序設(shè)計(jì)[J].單片機(jī)技術(shù)應(yīng)用,2005,1,1.

[2] 陳勇.基礎(chǔ)工業(yè)工程[J].工業(yè)技術(shù),2010,7,1.

[3] 吳鍇,郭海霞.單片機(jī)串行口的擴(kuò)展研究[J].單片機(jī)技術(shù),2010,5,19.

巫溪县| 隆昌县| 留坝县| 凤山市| 汤阴县| 鹰潭市| 桃园县| 子洲县| 迁安市| 丹东市| 云安县| 斗六市| 崇文区| 徐汇区| 浠水县| 沅江市| 同心县| 洪洞县| 甘南县| 牙克石市| 敖汉旗| 哈密市| 搜索| 井研县| 团风县| 嘉兴市| 富锦市| 孙吴县| 榆林市| 富阳市| 香格里拉县| 申扎县| 通榆县| 邻水| 灵石县| 沂源县| 白水县| 象山县| 双辽市| 彩票| 拜城县|