引言
在工業(yè)控制中械兽,可編程控制器(PLC)由于控制能力強(qiáng)、體積小、抗干擾能力強(qiáng)绰上、可靠性高、使用極為方便等優(yōu)點(diǎn)而得到了廣泛的應(yīng)用返乏,已經(jīng)成為現(xiàn)代工業(yè)控制的主要技術(shù)平臺之一框抽。實(shí)際應(yīng)用中往往需要利用PC機(jī)對PLC控制程序中的少量參數(shù)進(jìn)行設(shè)置或修改,這樣就需要解決PC機(jī)與PLC進(jìn)行通信的問題香诽。本文以PLC在罐蒸呢機(jī)控制系統(tǒng)中與上位機(jī)PC之間通信的實(shí)際應(yīng)用為基礎(chǔ)绵扇,探討了PLC與PC機(jī)通信問題。系統(tǒng)框圖如圖1所示:
方案概述
罐蒸呢機(jī)是在紡織行業(yè)當(dāng)中應(yīng)用較多的設(shè)備庐丁,其工作流程為:打開高壓釜的門;小車從高壓釜中退出;梁(軸)裝在星形件上;星形件轉(zhuǎn)動;梁裝在小車上;小車進(jìn)入高壓釜;高壓釜門關(guān)閉;在高壓釜中循環(huán)仓煌。
在罐蒸呢機(jī)的控制當(dāng)中,采用西門子S7-200系列的PLC可滿足要求榨凭,在系統(tǒng)造價(jià)方面要求盡量低熔徊。上位機(jī)方面:需要控制的數(shù)據(jù)不是很多,采用專門的組態(tài)軟件成本太高村参∏钅ǎ基于這種思路,我們在上位機(jī)上采用VC++編制串口通訊程序進(jìn)行數(shù)據(jù)的傳輸梳附、控制获印。
一般S7-200系列通信端口分為四種工作方式:PPI,MPI街州,PROFIBUS和自由口通
由于在自由端口模式下,通信協(xié)議可完全由梯形圖程序控制戴差,還可使用接收中斷送爸、發(fā)送中斷、發(fā)送指令和接受指令來控制通信操作暖释,因而選用自由口通信方式窗蠕。
上位機(jī)(PC)控制程序編程
1 初始化
上位機(jī)的控制程序的編寫按照如下步驟進(jìn)行:
(1) 建立基于對話框的MFC應(yīng)用程序;
(2) 在對話框中插入MSComm控件;
(3) 利用ClassWizard定義CMSComm類控制對象;
(4) 在對話框中添加MSComm控件,并賦予變量;
(5) 打開串口在摔、設(shè)置參數(shù):需要完成的任務(wù)是選擇骏疆、打開串口,規(guī)定波特率啰昧,校驗(yàn)類型魁嚼,數(shù)據(jù)位、停止位等一些控制信息;
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
m_ctrlComm.SetCommPort(1); //選擇com1
if( !m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);
//打開串口
else
AfxMessageBox("cannot open serial port");
m_ctrlComm.SetSettings("9600,n,8,1");
//波特率9600肮顾,無校驗(yàn)舌肝,8個(gè)數(shù)據(jù)位,1個(gè)停止位
//在該處的設(shè)置要同下位機(jī)的通訊參數(shù)相匹配针蜀,一般根據(jù)下位機(jī)的具體情況設(shè)定
m_ctrlComm.SetInputMode(1);
//1:表示以二進(jìn)制方式檢取數(shù)據(jù)
m_ctrlComm.SetRThreshold(1);
//SetRThreshold(1);
//參數(shù)1表示當(dāng)串口接收緩沖區(qū)中有大于等于1個(gè)字符時(shí)將引發(fā)接收數(shù)據(jù)的OnComm事件
m_ctrlComm.SetInputLen(0);
//設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長度為0
m_ctrlComm.GetInput();
//先預(yù)讀緩沖區(qū)以清除殘留數(shù)據(jù)
(6) 添加串口事件消息處理函數(shù)OnComm页更。 這個(gè)函數(shù)是用來處理串口消息事件的,即每當(dāng)串口接收到數(shù)據(jù)捷仓,就會產(chǎn)生一個(gè)串口接收數(shù)據(jù)緩沖區(qū)中有字符的消息事件锹嫌,就會執(zhí)行剛才添加的函數(shù),在OnComm()函數(shù)中加入相應(yīng)的處理代碼就能實(shí)現(xiàn)自己想要的功能图云。
2 控制數(shù)據(jù)的處理
對控制數(shù)據(jù)進(jìn)行存儲操作惯悠,編程時(shí)給控制量賦初值即默認(rèn)值,每次運(yùn)行上位機(jī)控制程序時(shí)將控制數(shù)據(jù)讀出并送給相應(yīng)的控制單元竣况,即使是第一次運(yùn)行該程序克婶,點(diǎn)擊"運(yùn)行"也能將控制數(shù)據(jù)從文件中取出并同步下達(dá)到下位機(jī);以后每次更改控制數(shù)據(jù)時(shí)就將該控制數(shù)據(jù)進(jìn)行保存,作為新的默認(rèn)控制數(shù)據(jù)丹泉,以備以后啟動設(shè)備時(shí)使用情萤。
在這里我們要實(shí)現(xiàn)的功能是控制下位機(jī)的啟動和停止,以及三個(gè)定時(shí)器的定時(shí)長度的給定。所發(fā)送的數(shù)據(jù)包括下位機(jī)的起停標(biāo)志筋岛,3個(gè)定時(shí)器定時(shí)長度和控制信息結(jié)束標(biāo)志娶视。需要注意的是在控制信息的結(jié)尾要添加結(jié)束標(biāo)志,該結(jié)束標(biāo)志在PLC上規(guī)定睁宰,需要上位機(jī)配合肪获,作用是下位機(jī)接收到該標(biāo)志以后產(chǎn)生接收完成中斷,從而響應(yīng)上位機(jī)的控制勋陪。具體操作如下:
發(fā)送數(shù)據(jù):由發(fā)送按鈕觸發(fā)一個(gè)單擊消息贪磺,用以讀取編輯框的內(nèi)容,將讀取的數(shù)據(jù)保存到文件當(dāng)中嘶逝,并向串口發(fā)送數(shù)據(jù)。
UpdateData(TRUE); //讀取編輯框內(nèi)容
CFile OutFile;
OutFile.Open(pFileName,CFile::modeCreate|CFile::modeWrite);
OutFile.SeekToEnd();
CArchive ar(&OutFile,CArchive::store);
UpdateData(true);
ar << m_strTXData<<
ar.Close();
OutFile.Close(); //文件關(guān)閉
CtrlData=MachineState+m_strTXData+m_strTXData2
+m_strTXData3+EndFlag; &
MessageBox("發(fā)送給定數(shù)據(jù)拱削?","發(fā)送提示拄抄!",0+48+512);//添加消息提示框
m_ctrlComm.SetOutput(COleVariant(CtrlData));
//發(fā)送數(shù)據(jù)
CtrlData="";
另外,啟動扎输、停止按鈕也會觸發(fā)單擊消息徽探,處理方法跟上述發(fā)送數(shù)據(jù)的過程相似,只是在處理時(shí)要首先置位MachineState准击,啟動時(shí)置1封豆,停止時(shí)置0,用來啟動或停止設(shè)備;而且不再對保存控制數(shù)據(jù)的文件進(jìn)行操作胸立。
下位機(jī)(PLC)控制程序編程
1 初始化
設(shè)定串口的通訊參數(shù)恢憋。接收完成以及發(fā)送完成都要產(chǎn)生中斷,中斷號分別為9绷觉、23鄙荚。
main:
NETWORK 1
LD SM0.1
MOVB 16#09, SMB30 //自由口參數(shù):無校驗(yàn),8位數(shù)據(jù)位傲茄,波特率9600毅访,自由口通信;
MOVB 16#B0, SMB87
//接收信息控制,啟動接收功能盘榨,檢測信息結(jié)束標(biāo)志;
MOVB 16#2A, SMB89
//定義信息結(jié)束標(biāo)志喻粹,與上位機(jī)配合;
MOVW +5, SMW90
//空閑行時(shí)間期限,單位微秒;
MOVB 100, SMB94 //接收字符數(shù)目最大值
ENI //開中斷
ATCH INT_0, 23 //接收中斷連接
ATCH INT_2, 9 //發(fā)送中斷連接
RCV VB100, 0
2 控制主程序
NETWORK 1
LDB= VB101, 16#31
//檢測到要求起動機(jī)器的控制信息草巡,轉(zhuǎn)入開動操作
LPS
S V10.0,1 //設(shè)置啟動標(biāo)志位
A V10.0 //檢測啟動標(biāo)志位
A I0.1 //檢測輸入是否為1
TON T51, VW600
//若各條件具備守呜,啟動定時(shí)器,其定時(shí)參數(shù)由上位機(jī)給定
A T51
A V10.0
//若定時(shí)到并且下位機(jī)處于啟動狀態(tài)捷犹,置位輸出Q0.4
= Q0.4
NETWORK 2
LDB= VB101, 16#30
A V10.0
S V10.0, 1
這段程序?qū)⒔邮盏降目刂茢?shù)據(jù)的啟動弛饭、停止控制位進(jìn)行判斷,根據(jù)判斷的結(jié)果決定啟動還是停止設(shè)備;在這段程序里面還將上位機(jī)發(fā)送的時(shí)間數(shù)據(jù)送給定時(shí)器;這樣上位機(jī)就能實(shí)時(shí)控制下位機(jī)的起停,并且能實(shí)時(shí)的對定時(shí)器的定時(shí)長度進(jìn)行修改侣颂,實(shí)現(xiàn)遠(yuǎn)程控制档桃。
3 中斷處理
INT_0:
//接收完成中斷如果接收狀態(tài)顯示接受到結(jié)束字符,連接一個(gè)10ms定時(shí)器
// 發(fā)發(fā)送憔晒,同時(shí)將接收到的控制信息中的控制數(shù)據(jù)部分進(jìn)行轉(zhuǎn)換藻肄,以便后續(xù)程序的應(yīng)用
LDB= SMB86,16#20
MOVB 10,SMB34
BTI VB102, VW600
//數(shù)據(jù)轉(zhuǎn)換,由ASCII轉(zhuǎn)換為整型數(shù)據(jù)
-I 16#0030, VW60
//將整型數(shù)據(jù)進(jìn)行運(yùn)算得出操作者見到的數(shù)據(jù)
*I +10, VW600
ATCH 1,10
CRETI
NOT
RCV VB100,0
//如果接收完成高降,然后啟動一個(gè)新的接收
在這段程序中將接收到的數(shù)據(jù)信息部分進(jìn)行轉(zhuǎn)換和運(yùn)算朝棉。因?yàn)槟J(rèn)的下位機(jī)接收和發(fā)送的數(shù)據(jù)都是文本信息,格式為ASCII碼值殷淮,所以如果想得到用戶在上位機(jī)上給定值轉(zhuǎn)換成為整數(shù)沧牧,然后將這些數(shù)據(jù)用于控制。
4 注意事項(xiàng)
在編程時(shí)有一點(diǎn)應(yīng)該注意:那就是接收和發(fā)送兩種模式之間的切換時(shí)間两靖,因?yàn)橛?85通訊口進(jìn)行通訊時(shí)费赋,發(fā)送結(jié)束后不能立即轉(zhuǎn)為接收模式,有一個(gè)反應(yīng)時(shí)間耍俱。所以在接收完成后如果要接著發(fā)送數(shù)據(jù)的話尽瑰,需要設(shè)一個(gè)定時(shí)器,延遲一段時(shí)間以后再進(jìn)行發(fā)送操作馒脏,反之亦然奠拢。主程序及各中斷服務(wù)程序流程圖如圖2所示:
結(jié)束語
上位機(jī)的運(yùn)行界面如圖3所示,在該界面下就能實(shí)現(xiàn)對下位機(jī)的啟動歌淹、停止控制瘟则,以及對控制參數(shù)的修改,并可實(shí)現(xiàn)參數(shù)的在線修改梅桩。
在該工程中控制對象的控制點(diǎn)數(shù)不是很多壹粟,人機(jī)交互也不是很多,功能相對獨(dú)立宿百,能夠獨(dú)立組成一個(gè)小系統(tǒng)趁仙。在這種情況下該方案能有效節(jié)約投資,簡化控制垦页,維護(hù)方便雀费,操作簡單,且能保證控制系統(tǒng)的實(shí)時(shí)性痊焊,在小型控制系統(tǒng)尤其是需要交互的數(shù)據(jù)不太多的情況下盏袄,優(yōu)勢較為明顯。
聲明:本網(wǎng)站所收集的部分公開資料來源于互聯(lián)網(wǎng)薄啥,轉(zhuǎn)載的目的在于傳遞更多信息及用于網(wǎng)絡(luò)分享辕羽,并不代表本站贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé),也不構(gòu)成任何其他建議。本站部分作品是由網(wǎng)友自主投稿和發(fā)布刁愿、編輯整理上傳街赊,對此類作品本站僅提供交流平臺,不為其版權(quán)負(fù)責(zé)宋旭。如果您發(fā)現(xiàn)網(wǎng)站上所用視頻娘介、圖片、文字如涉及作品版權(quán)問題枯橱,請第一時(shí)間告知用载,我們將根據(jù)您提供的證明材料確認(rèn)版權(quán)并按國家標(biāo)準(zhǔn)支付稿酬或立即刪除內(nèi)容,以保證您的權(quán)益粹岁!聯(lián)系電話:010-58612588 或 Email:editor@mmsonline.com.cn披蚕。
- 暫無反饋
編輯推薦
- 2025新年特刊:打造新質(zhì)生產(chǎn)力片吊,智啟未來新篇章
- 定義制造業(yè)未來的數(shù)控加工中心技術(shù)專題
- 航空航天及交通領(lǐng)域先進(jìn)制造技術(shù)應(yīng)用專題
- 解碼消費(fèi)電子產(chǎn)品生產(chǎn)的數(shù)字化之路技術(shù)專題
- 精密智能機(jī)床协屡,助力制造升級技術(shù)專題
- 汽車輕量化驅(qū)動下的零部件加工應(yīng)用專題
- 高性能銑刀實(shí)現(xiàn)高精加工生產(chǎn)技術(shù)專題
- 航空航天發(fā)動機(jī)解決方案專題
- 高效齒輪加工生產(chǎn)技術(shù)方案專題
- 金屬加工液的性能不止?jié)櫥夹g(shù)應(yīng)用專題