


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