近年來,隨著可編程控制器(以下簡稱plc)技術的不斷發(fā)展,速度、功能、可靠性和穩(wěn)定性的不斷提升,其在工業(yè)控制中的運用越來越廣泛。個人計算機(以下簡稱pc)具有人機界面好,編程軟件豐富,數(shù)據(jù)處理快,信息存儲方便,圖像功能完善等優(yōu)點。以plc為下位機,以pc機為上位機的聯(lián)機控制模式,結合了plc與pc各自的優(yōu)點,提高了控制能力和可靠性,不僅操作使用方便,產品造價也較低,因而成為工業(yè)控制中應用較多的模式。本文以電動機正反轉控制為實例,說明松下fp1系列plc與pc實現(xiàn)聯(lián)機控制的方法。
1. 松下fp1系列plc與pc機的通信連接
松下fp1系列plc均設有一個rs422串行通信接口。該接口既可用于plc與pc機聯(lián)機進行梯形圖程序編程與調試,也可用于正常工作時的數(shù)據(jù)通信。pc機一般均設有一個以上的rs232c串行通信接口。由于rs232c和rs422屬于不同的串行通信接口,通信信號的類型和工作方式不一樣,因此,plc與pc進行串行通信連接時,必須在中間安裝一個rs422/rs232c適配器來完成信號的轉換(部分plc也具有rs232c口,此時可直接連接)。fp1系列plc與pc機的通信連接如圖1所示。
2. plc控制電機正反轉電路設計
plc控制電機正反轉的接線如圖2所示,其中sb0、sb1、sb2開關按鈕分別用于控制電機的正轉、反轉和停止;km1、km2分別為電機正反轉控制的接觸器。由于plc直接控制交流接觸器,所以plc應選擇繼電器輸出型,并在接觸器回路采用互鎖來保證電路的安全。
3. pc與plc的聯(lián)機控制程序
按上述圖1完成plc與pc機的通信連接后,還需采用plc聯(lián)機編程軟件或手持編程器對plc內部通信參數(shù)專用的系統(tǒng)寄存器no.410~no.418進行設定,具體為:串口選擇為com1,波特率為9600bps,數(shù)據(jù)位長度為8位,停止位為1位,奇校驗,單元號為1。
4.plc控制程序
plc的控制程序要既能現(xiàn)地控制,又能使pc機通過串口通信實現(xiàn)上位機對電動機的正反轉控制和電機狀態(tài)信息反饋。具體程序如圖3所示。
程
序中為實現(xiàn)pc機對電機的控制使用了r100、r101和r102三個內部繼電器。內部繼電器可由pc機按松下fp1系列plc的newtocol專用通信協(xié)議(具體協(xié)議可參考廠家資料),以發(fā)送特定字符串的形式進行讀寫。為了仿效按鈕操作的效果,三個內部繼電器由上位機置位后啟動對應的定時器,經0.8s后由定時器對內部繼電器自動進行復位。
5. pc機控制程序與界面
作為上位機,pc機通過人機界面,將操作人員的操作指令轉換成相應的通信字符串并經串口發(fā)送至plc,實現(xiàn)對電機的控制;另一方面,pc機定時讀取plc寄存器的數(shù)據(jù),從而可判斷出plc對電動機的控制狀態(tài)并在人機界面上顯示出來。
pc機的程序利用visual basic 6.0進行開發(fā),首先,從菜單“工程”→“部件…”→“控件”中添加串行口通信控件microsofc comm control 6.0到工具箱中,然后從工具箱中往窗體添加下表所列的控件。
序號
控件類型
控件名稱
說 明
1
form
frmmain
程序主窗體
2
frame
frame1
框架
3
mscomm
mscomm1
串口通信控件
4
timer
timer1
定時器
5
commandbutton
cmdzz
正轉按鈕
6
commandbutton
cmdfz
反轉按鈕
7
commandbutton
cmdtj
停機按鈕
8
label
labdjzt
電機狀態(tài)顯示標簽
添加上述控件后的程序窗體如圖4所示。
pc機的控制程序如下:
private sub form_load() '窗體加載過程
mscomm1.commport = 1 '通信控件選用pc機的串口1
mscomm1.settings = 9600,o,8,1 '設定串口1的波特率為9600bps,奇校驗,8位數(shù)據(jù)位,1位停止位
mscomm1.portopen = true '打開串口1
timer1.interval = 1000 '定時器1的定時值為1s
timer1.enabled = true '啟動定時器1
end sub
function com(a as string, b as integer) '向plc讀寫寄存器內容函數(shù)
mscomm1.inbuffercount = 0 '清空串口的接收緩沖區(qū)
mscomm1.output = a '將要發(fā)送的字符串從串口發(fā)送出去
do
doevents
loop until mscomm1.inbuffercount >= b '等待plc的響應字符至一定位數(shù)
com = mscomm1.input '讀入串口接收到的字符串
end function
private sub timer1_timer() '定時讀取y0、y1的值以判斷電機當前狀態(tài)
a = %01#rcp2y0000y0001** + chr(13) '定義讀y0、y1值的通信字符串
s = com((a), 9) '讀y0、y1的當前值
if mid(s, 7, 1) = 1 then '返回字符串中第7位為1表示y0接通,電機正轉
cmdzz.enabled = false '電機已正轉,禁止操作正轉按鈕但可操作反轉按鈕
cmdfz.enabled = true
labdjzt.caption = 電機當前狀態(tài):正轉
elseif mid(s, 8, 1) = 1 then '反轉
cmdfz.enabled = false '電機反轉,禁止操作反轉按鈕但可操作正轉按鈕
cmdzz.enabled = true
labdjzt.caption = 電機當前狀態(tài):反轉
elseif mid(s, 7, 1) = 0 and mid(s, 8, 1) = 0 then '停機
cmdfz.enabled = true '電機已停止,可操作正轉或反轉按鈕
cmdzz.enabled = true
labdjzt.caption = 電機當前狀態(tài):停止
end if
end sub
private sub cmdzz_click() '正轉指令
a = %01#wcsr01001** + chr(13) '定義將r100置1,啟動正轉的通信字符串
s = com((a), 7)
end sub
private sub cmdfz_click() '反轉指令
a = %01#wcsr01011** + chr(13) '定義將r101置1,啟動反轉的通信字符串
s = com((a), 7)
end sub
private sub cmdtj_click() '停機指令
a = %01#wcsr01021** + chr(13) '定義將r102置1使電機停轉的通信字符串
s = com((a), 7)
end sub
運行上述程序,既可在pc機上實現(xiàn)對電機正反轉以及停止的控制,也可在現(xiàn)地通過sb0、sb1和sb2按鈕實現(xiàn)對電機的控制;既可在現(xiàn)地啟動或停止電機轉動,也可在pc機上實現(xiàn)停機或電機轉動控制。由于pc機定時讀取plc內部y0、y1的值,所以在現(xiàn)地操作改變電機的工作狀態(tài)時,在pc機程序中可顯示出當前電機的工作狀態(tài)并禁止相應的操作,真正實現(xiàn)了pc與plc的聯(lián)機控制。
6. 結束語
上述設計已在實踐中應用。經驗證,可在此基礎上,增加聯(lián)機通信故障自動檢測報警功能,利用數(shù)據(jù)讀寫命令實現(xiàn)聯(lián)機大批量數(shù)據(jù)傳送,根據(jù)現(xiàn)地來的狀態(tài)信息增加pc機動畫演示功能,從而使pc與plc的聯(lián)機控制程序更加完善,控制界面更加形象。根據(jù)上述原理,結合pc與plc控制的特點,可在其它控制場合使用上述方法實現(xiàn)雙機甚至多機聯(lián)機控制。