


摘 要:本文介紹了一種將激光打標(biāo)機(jī)與工業(yè)現(xiàn)場的流水線設(shè)備PLC進(jìn)行互聯(lián)互通,實現(xiàn)自動控制的一種方法。這種方法充分利用了打標(biāo)軟件對外部動態(tài)庫插件的支持功能,通過動態(tài)庫實現(xiàn)打標(biāo)軟件對Excel文件的讀取與RS232串口通訊功能的實現(xiàn),PLC通過串口通訊功能,實現(xiàn)了對PC機(jī)數(shù)據(jù)的實時讀取,實現(xiàn)了對流水線移動距離的實時控制,很好地滿足了工業(yè)生產(chǎn)現(xiàn)場的自動化控制要求,達(dá)到了增產(chǎn)增效,降低成本的目的。
關(guān)鍵詞:激光打標(biāo) 動態(tài)庫 Excel 串口通訊 PLC
一、概述
激光打標(biāo)是一種利用激光的高能量在物體上進(jìn)行燒蝕,從而在物體表面上刻畫出各種文字、符號及各種各樣的圖案。它的特點是:字跡清晰、不易擦除,標(biāo)刻時工作速度快,一致性好,而且是非接觸的工作方式,可保證工件不會被損壞。振鏡式激光打標(biāo)的基本工作原理是,激光通過X、Y振鏡鏡片的反射,經(jīng)平場透鏡聚焦后在工件表面形成高能量激光點,通過控制X、Y振鏡的不同位置及激光的開關(guān),實現(xiàn)激光點在工件表面上的移動,從而形成圖案。X、Y振鏡的運(yùn)動及激光的開關(guān),都是通過計算機(jī)上的激光打標(biāo)控制軟件進(jìn)行控制的。
本次流水線的控制采用三菱FX2N系列PLC,流水線上的控制功能包括:①一個伺服電動機(jī)及伺服電動機(jī)驅(qū)動器,用于控制流水線的運(yùn)動。②三個電磁閥,其中兩個電磁閥用于控制兩個汽缸,一個電磁閥用于控制切割吹氣。③兩個汽缸,每個汽缸上各有2個位置傳感器,用于檢測汽缸抻出到位與縮回到位信號。④流水線位置傳感器有位置傳感器1,用于檢測流水線上是否有工件(紙帶),若是從無到有,則說明有工件上了流水線,若是從有到無,則說明流水線上沒有工件,當(dāng)最后一個工件完成后,需要發(fā)出警示。
本次系統(tǒng)要將兩個設(shè)備聯(lián)動起來,控制過程為:當(dāng)用戶選用不同打標(biāo)數(shù)據(jù)后,打標(biāo)機(jī)開始打標(biāo),完成后流水線自動移動與打標(biāo)數(shù)據(jù)相對應(yīng)的距離,到位后,自動切斷工件(紙帶),開始下次打標(biāo)數(shù)據(jù)選擇。要實現(xiàn)打標(biāo)工件與流水線的全自動控制,關(guān)鍵要解決的問題包括:①打標(biāo)軟件對不同打標(biāo)數(shù)據(jù)的動態(tài)讀取,②打標(biāo)軟件與PLC之間的數(shù)據(jù)通信。
二、上位PC機(jī)中打標(biāo)軟件對不同打標(biāo)數(shù)據(jù)的讀取
根據(jù)打標(biāo)要求,要實現(xiàn)的打標(biāo)數(shù)據(jù)與流水線移動距離的關(guān)系可用表1所示的方式來建立數(shù)據(jù)關(guān)系,打標(biāo)圖形的中心距離前端指定的距離為B,總字帶的長度為A。
A和B值由客戶自己填寫,相對應(yīng)的打標(biāo)文件內(nèi)容由客戶自己定義。當(dāng)客戶要做1號產(chǎn)品時,點擊1號后,相對應(yīng)的A、B以及文件內(nèi)容都傳送給PLC和打標(biāo)機(jī),完成1號的產(chǎn)品。當(dāng)客戶要做3號產(chǎn)品時,點擊3號后,相對應(yīng)的A、B以及文件內(nèi)容都傳送給PLC和打標(biāo)機(jī),完成3號的產(chǎn)品。
為了實現(xiàn)這樣的要求,這個數(shù)據(jù)關(guān)系采用Excel格式來存放,并編寫一個動態(tài)鏈接庫,以插件的形式嵌入到打標(biāo)軟件中,實現(xiàn)對Excel文件的讀取。
動態(tài)庫采用VC6.0作為開發(fā)工具,Excel文件的讀取過程如下:
①利用VC6.0中類向?qū)е械淖詣踊ぞ撸ˋutomation)加載一個新類,指向Microsoft Office的安裝目錄中的excel.exe,然后從列表中選取_Application、_Workbook、_WorkSheet、Range、Workbooks、Worksheets 共6項。
②直接在類函數(shù)里定義Excel表格操作所需要的上步加載的六個函數(shù)變量:
ApplicationExcelApp; Workbooks wbsMybooks; _workbookwbMyBook;
Worksheets wssMySheets; Worksheet wsMySheet; Range MyRange
③實現(xiàn)對Excel文件讀取的主要操作:
CoUninitialize();//初始化COM支持庫
ExcelApp.CreateDispatch(\"Excel.Applic-ation\",NULL)///啟動EXCELL
ExcelApp.SetVisible(FALSE);
///利用模板文件建立新文檔
strPath1.Format(\"%s\\11.xls\",strPath);///要操作的EXCEL文件名11.xls
wbsMybooks.AttachDispatch(ExcelApp.GetWork-books(),TRUE);
wbMyBook.AttachDispatch(wbsMybooks.Add(_variant_t(strPath1)));
wssMySheets.AttachDispatch(wbMyBook.GetWorksheets(),true);
wsMySheet.AttachDispatch(wssMySheets.GetItem(_variant_t(\"sheet1\")),true);
MyRange.AttachDispatch(wsMySheet.GetCel-ls(),true);
CString sMsg;
ExcelToString(row,1,sMsg);///讀取Row行Column列的數(shù)據(jù)到 sMsg中。
此時,sMsg中的數(shù)據(jù)即為指定行列中的數(shù)據(jù),可由打標(biāo)軟件使用,實現(xiàn)指定數(shù)據(jù)的讀取調(diào)用。
三、PC機(jī)與PLC之間的通訊實現(xiàn)
打標(biāo)軟件讀取Excel文件中指定數(shù)據(jù)后,要實現(xiàn)打標(biāo)機(jī)與PLC之間的聯(lián)動,就要實時進(jìn)行相互通訊。在本系統(tǒng)中,PLC采用FX2N-232-DB通訊模塊與PC機(jī)的串口通過RS232C協(xié)議進(jìn)行通訊。
PC機(jī)上的串口通訊采用調(diào)用Windows的API函數(shù)的方式通過四個步驟來實現(xiàn)通訊。
1.打開串口
用API函數(shù)CreateFile來打開串口COM1;
mCOM1=CreateFile (\"COM1,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if(hCom== INVALID_HANDLE_VALUE)
{AfxMessageBox(\"打開COM失??!\"); return FALSE; }
2.配置串口
在打開通訊設(shè)備句柄后,需要通過一個DCB結(jié)構(gòu)對串口進(jìn)行一些初始化配置工作。DCB結(jié)構(gòu)包含了諸如波特率、數(shù)據(jù)位數(shù)、奇偶校驗和停止位數(shù)等信息。同時還需設(shè)置I/O緩沖區(qū)的大小和超時。Windows用I/O緩沖區(qū)來暫存串口輸入和輸出的數(shù)據(jù)。主要實現(xiàn)函數(shù)如下:
SetupComm(hCom,1024,1024); //輸入輸出緩沖區(qū)大小都是1024
SetCommTimeouts(hCom,TimeOuts); //設(shè)置超時
SetCommState(hCom,dcb);//設(shè)置BCD結(jié)構(gòu)
PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR); //清空緩沖區(qū),準(zhǔn)備讀寫
3.讀寫串口
使用API函數(shù)ReadFile和WriteFile讀寫串口:
(1)串口讀函數(shù)主要實現(xiàn)如下所示。
char str[100];
DWORD wCount;//讀取的字節(jié)數(shù)
BOOL bReadStat;
bReadStat=ReadFile(hCom,str,100,wCount,NULL);
if(!bReadStat)
{AfxMessageBox(\"讀串口失敗!\");return FALSE;}
(2)串口寫函數(shù)的主要實現(xiàn)如下所示。
char lpBuffer[100];
DWORD dwBytesWrite=100;
COMSTAT ComStat;
DWORD dwErrorFlags;
BOOL bWriteStat;
ClearCommError(hCom,dwErrorFlags,ComStat);
bWriteStat=WriteFile(hCom,lpOutBuffer,dwBytesWrite, dwBytesWrite,NULL);
if(!bWriteStat)
{ AfxMessageBox(\"寫串口失敗!\"); }
PurgeComm(hCom, PURGE_TXABORT|PURGE_RXABORT |PURGE_TXCLEAR|PURGE_RXCLEAR);
4.關(guān)閉串口
當(dāng)整個程序退出使用時,要關(guān)閉打開的串口,串口關(guān)閉通過調(diào)用CloseHandle來實現(xiàn):
if(mCOM1) CloseHandle(mCOM1); //如串口COM1打開,則關(guān)閉。
四、PLC串口的通訊命令及設(shè)置
FX2N系列PLC中,對于串口通訊的設(shè)定有專門的數(shù)據(jù)寄存器D8120—D8129,其中需要用戶設(shè)定的寄存器有:D8120用于設(shè)定通信形式,D8121用于設(shè)定局號,D8129用于設(shè)定超時時間。PLC對于通訊的數(shù)據(jù)格式也有嚴(yán)格的要求,PC向PLC進(jìn)行數(shù)據(jù)的讀寫要嚴(yán)格按照其要求進(jìn)行。
1.4個通信命令
FX系列PLC有4個通信命令,它們是讀命令(30H)、寫命令(31H)、強(qiáng)制通命令(37H)、強(qiáng)制斷命令(38H)。
2.5個通信控制字符
FX系列PLC采用面向字符的傳輸規(guī)程,常用的5個通信控制字符為:STX(02H)為數(shù)據(jù)塊的起始標(biāo)志,ETX(03H)為數(shù)據(jù)塊的結(jié)束標(biāo)志,ENQ(05H)為計算機(jī)的查詢信號,ACK(06H)為無校驗錯誤時的應(yīng)答信號,NAK(15H)為有校驗錯誤時的應(yīng)答信號。
3.地址初始值分配
PLC中各軟元件地址在讀寫狀態(tài)時地址初始值分配為:輸入繼電器X:0080H;輸出繼電器Y:00A0H;狀態(tài)寄存器S:0000H;輔助繼電器M:0100H;數(shù)據(jù)寄存器D:1000H。此地址就是PC機(jī)要通過串口進(jìn)行數(shù)據(jù)讀取或?qū)懭霑r的入口。
4.報文格式
PC機(jī)向PLC發(fā)送信息必須按照PLC所規(guī)定的格式發(fā)送,PLC才可以接收,PC機(jī)發(fā)送信息的報文格式為:STX+CMD+數(shù)據(jù)+ETX+SUMH+SUML,其中數(shù)據(jù)段的格式為:字節(jié)1~4表示軟繼電器首地址,字節(jié)5~6表示讀寫的字節(jié)數(shù),后面接要收發(fā)的數(shù)據(jù)位,高位在前,低位在后。當(dāng)寫命令時數(shù)據(jù)段中的數(shù)據(jù)位有數(shù)據(jù),當(dāng)讀命令時數(shù)據(jù)段的數(shù)據(jù)位則無數(shù)據(jù);讀寫字節(jié)數(shù)最大為40H(64)個。
根據(jù)如上所述FX2N的命令格式,PC機(jī)要寫數(shù)據(jù)給PLC,則按通訊格式及寫命令格式調(diào)用串口寫函數(shù),即可將數(shù)據(jù)放入指定PLC地址。
如要讀取PLC數(shù)據(jù),則按通訊格式及讀命令調(diào)用串口寫命令,則會觸發(fā)PLC向PC發(fā)送數(shù),實現(xiàn)PC機(jī)對PLC數(shù)據(jù)的讀取。
五、PLC對流水線的控制編程
PLC對流水線的控制有嚴(yán)格的順序要求,所以在編程方面采用步進(jìn)順序控制指令STL來實現(xiàn)編程,由于篇幅所限,在此僅列出主要PLC控制程序的狀態(tài)流程圖,如圖1所示。
六、結(jié)論
以上介紹的控制系統(tǒng),充分利用了PC機(jī)與PLC的串口通訊功能,實現(xiàn)了上位主控PC機(jī)打標(biāo)軟件與下位PLC之間的數(shù)據(jù)傳遞,達(dá)到了對工件的智能化、自動化的控制要求。兩個系統(tǒng)的完善融合,在實際生產(chǎn)過程中,極大提高了生產(chǎn)效率,產(chǎn)生了極好的經(jīng)濟(jì)效益。
(作者單位:廣東省機(jī)械技師學(xué)院)