用VC++開發(fā)微機(jī)與OMRON PLC間的一種通訊程序
[摘 要]
本文介紹了一個使用Visual C++編寫的通信程序,主要實(shí)現(xiàn)微機(jī)與OMRON PLC間的通信,并對它們間的通信協(xié)議作了闡述。
[關(guān)鍵詞]
PLC 鏈接通信 通訊控制
1、前言
可編程控制器是一種數(shù)字運(yùn)算操作的電子系統(tǒng),專為在工業(yè)環(huán)境下應(yīng)用而設(shè)計。它采用了可編程序的存儲器,用于其內(nèi)部存儲程序,執(zhí)行邏輯運(yùn)算、順序控制、定時、計數(shù)和算術(shù)操作等面向用戶的指令,并通過數(shù)字式或模擬式輸入輸出控制各種類型的機(jī)械的生產(chǎn)過程??删幊炭刂破骷捌溆嘘P(guān)外部設(shè)備,都按易于與工業(yè)控制系統(tǒng)聯(lián)成一個整體、易于擴(kuò)充其功能的原則設(shè)計。早期的PLC以數(shù)字量的順序控制為主,提供了簡單的慢速的通信功能(只支持RS232、RS485、多采用Modbus協(xié)議),現(xiàn)在的PLC不僅具有邏輯運(yùn)算、順序控制、定時、計數(shù)和算術(shù)操作,而且還具有A / D、D / A轉(zhuǎn)換,數(shù)值計算和數(shù)據(jù)處理等功能。它既可以對開關(guān)量進(jìn)行控制,也可以對模擬量進(jìn)行控制,隨著PLC功能不斷擴(kuò)充,它還有通訊聯(lián)網(wǎng)功能,舉例C200HX / HG / HE的OMRON PLC的CPU內(nèi)的RS - 232C端口和外設(shè)端口支持通信功能就有與編程設(shè)備(如編程器,LSS,或SSS (中文版))進(jìn)行通信、與個人計算機(jī)和其它外設(shè)進(jìn)行上位機(jī)鏈接通信、與個人計算機(jī)和其它外設(shè)進(jìn)行RS - 232C、與其它PC進(jìn)行1:1、再有是與裝有NT鏈接接口的可編程終端(PT)進(jìn)行NT鏈接通信(1:1、1:N),本課題就是基于OMRON PLC的鏈接通信(有通信協(xié)議),用VC++開發(fā)的上位機(jī)與PLC間的通信。
2、OMRON PLC的通信協(xié)議
目前,隨著PLC的快速發(fā)展,越來越多的PLC生產(chǎn)廠商開發(fā)了它與計算機(jī)的通信功能(主要是利用計算機(jī)串口進(jìn)行通信),本文是以C200HE PLC為例,作詳細(xì)闡述,本文的通信協(xié)議采用的是上位機(jī)鏈接通信。上位機(jī)鏈接通信通過在上位機(jī)與PLC之間交換命令和應(yīng)答實(shí)現(xiàn)的。在一次交換中傳輸?shù)拿詈蛻?yīng)答數(shù)據(jù)稱為一幀,一個幀最多可包含131個數(shù)據(jù)字符。
命令幀格式
從上位機(jī)發(fā)送一個命令時,按下示的格式排列命令數(shù)據(jù)

@符號必須置于每個命令的開頭,節(jié)點(diǎn)號是用來辨識每一臺PLC的節(jié)點(diǎn),在本文中,它設(shè)置PLC的DM6558單元中,識別碼設(shè)置兩字符的命令代碼,設(shè)置通信是讀寫PLC的哪個寄存器單元,例讀寫IR / SR區(qū)時它的識別碼設(shè)置分別為RR和WR,讀寫DM區(qū)分別為RD和WD。正文設(shè)置命令參數(shù),包括所要讀寫PLC寄存器單元的起始地址和字?jǐn)?shù)。FCS是設(shè)置兩字符的幀檢查順序碼,是一個轉(zhuǎn)換成2個ASCII字符的8位數(shù)據(jù),這8位數(shù)據(jù)為從幀開始到正文結(jié)束(即FCS之前)所有數(shù)據(jù)執(zhí)行“異或”操作的結(jié)果。終止符設(shè)置“*”和回車(CH R $(13))兩字符,表示命令結(jié)束。命令幀可以有最多131個字符長。一個等于或大于132字符的命令必須分成若干幀。命令分段,使用回車定界符(CH R $(13))。
應(yīng)答幀格式

識別碼和正文取決于接收到的上位機(jī)聯(lián)結(jié)命令,結(jié)束碼表示命令完成的狀態(tài)(即是否有錯誤發(fā)生),當(dāng)應(yīng)答超過132字符,它必須分成若干幀。結(jié)束碼是應(yīng)答幀中表示PLC應(yīng)答的信息。例結(jié)束代碼為00表示正常結(jié)束,13表示FCS錯誤,14表示格式錯誤,15表示入口碼數(shù)據(jù)錯誤,18表示幀長度錯誤,A3表示傳輸數(shù)據(jù)時因FCS錯誤引起終止,A8表示傳輸數(shù)據(jù)時因幀長度錯誤引起終止。
本文的上位機(jī)命令幀包括讀寫PLC單元中的數(shù)據(jù)的命令。讀命令幀為:@01RR0100000141* + CH R $(13),意思是上位機(jī)讀取節(jié)點(diǎn)為1的PLC中的IR0100單元中的內(nèi)容。寫命令幀為:@01WR0100000171* + CH R $(13),意思是寫一個數(shù)到節(jié)點(diǎn)為1的PLC的IR0100單元中。
3、系統(tǒng)結(jié)構(gòu)圖
下圖是計算機(jī)與PLC通信的組成系統(tǒng)圖

上位計算機(jī)與多個PLC進(jìn)行通信,必須連接一個RS232 / 422電平轉(zhuǎn)換器,RS422采用平衡發(fā)送接收方式,它具有傳輸距離長、抗干擾能力強(qiáng)和多點(diǎn)通信能力,最多可以接32臺PLC,如圖1所示,每一臺PLC都必須掛一個COM06單元進(jìn)行RS422方式連接,所有的PLC與計算機(jī)間的通訊采用的是PLC上位機(jī)鏈接通信協(xié)議。
3.1 硬件設(shè)置
RS232 / 422轉(zhuǎn)換器的設(shè)置開關(guān)撥到422方式,OMRON PLC上的COM06通信板單元同樣設(shè)置為422方式和四線制。
3.2 參數(shù)設(shè)置
上下位機(jī)的通信波特率設(shè)置為9600,數(shù)據(jù)格式設(shè)置為E,7,2。
3.3 節(jié)點(diǎn)設(shè)置
在PLC的DC6558單元中設(shè)置節(jié)點(diǎn)號00(初始值)~ 31(號機(jī))。
4、用Visual C++6.0編寫串行通信程序
本文的上位機(jī)鏈接通信程序是用Visual C++6.0編寫的,主要是利用VC++中的一個通信控件來實(shí)現(xiàn)的。
首先利用MFC AppWizard ( exe ) 建立一個基于對話框,支持Activex控件,命名為Transcomn的應(yīng)用程序。然后在對話框中加入一些控件,其中那個電話形狀的控件必須是在系統(tǒng)中注冊過的Microsoft Communications Control,由它進(jìn)行通訊時首先得設(shè)置它的一些屬性如下。
屬 性 設(shè) 定 值 說 明
CommPort 1 通訊協(xié)議為 PLC 上位機(jī)鏈接
通信,利用微機(jī)的串口1
InputMode 0 接收數(shù)據(jù)類型為文本形式
Rthreshold 1 每接收一個字符就產(chǎn)生一個事件
Settings 9600, E, 7, 2 參數(shù)依次為波特率、
奇偶檢驗(yàn)數(shù)據(jù)位數(shù)、停止位數(shù)
5、程序編寫
在程序中需添加的代碼如下:
// TranscommDlg.cpp:implementation file
BOOL CTranscommDlg::OnInitDialog ()
{
最后要在ClassWizard中添加變量和響應(yīng)函數(shù)如下。
控制名稱 控制 ID對 應(yīng)變量或函數(shù)
通訊地址文本框 ID - ADDRESS m_address
DM 區(qū)文本框 ID - DM m_dmbox
LR 區(qū)文本框 ID - LR m_lrbox
HR 區(qū)文本框 ID - HR m_hrbox
IR 區(qū)文本框 ID - IR m_irbox
應(yīng)答幀文本框 ID - RESPONSE m_response
通訊控件 ID - MSCOMM M - comm.
發(fā)送命令按鈕 ID - SEND OnSend ( )
// TODO:Add extra initialization here
// 打開通信端口1
m_comm..SetCommPort&n
本文介紹了一個使用Visual C++編寫的通信程序,主要實(shí)現(xiàn)微機(jī)與OMRON PLC間的通信,并對它們間的通信協(xié)議作了闡述。
[關(guān)鍵詞]
PLC 鏈接通信 通訊控制
1、前言
可編程控制器是一種數(shù)字運(yùn)算操作的電子系統(tǒng),專為在工業(yè)環(huán)境下應(yīng)用而設(shè)計。它采用了可編程序的存儲器,用于其內(nèi)部存儲程序,執(zhí)行邏輯運(yùn)算、順序控制、定時、計數(shù)和算術(shù)操作等面向用戶的指令,并通過數(shù)字式或模擬式輸入輸出控制各種類型的機(jī)械的生產(chǎn)過程??删幊炭刂破骷捌溆嘘P(guān)外部設(shè)備,都按易于與工業(yè)控制系統(tǒng)聯(lián)成一個整體、易于擴(kuò)充其功能的原則設(shè)計。早期的PLC以數(shù)字量的順序控制為主,提供了簡單的慢速的通信功能(只支持RS232、RS485、多采用Modbus協(xié)議),現(xiàn)在的PLC不僅具有邏輯運(yùn)算、順序控制、定時、計數(shù)和算術(shù)操作,而且還具有A / D、D / A轉(zhuǎn)換,數(shù)值計算和數(shù)據(jù)處理等功能。它既可以對開關(guān)量進(jìn)行控制,也可以對模擬量進(jìn)行控制,隨著PLC功能不斷擴(kuò)充,它還有通訊聯(lián)網(wǎng)功能,舉例C200HX / HG / HE的OMRON PLC的CPU內(nèi)的RS - 232C端口和外設(shè)端口支持通信功能就有與編程設(shè)備(如編程器,LSS,或SSS (中文版))進(jìn)行通信、與個人計算機(jī)和其它外設(shè)進(jìn)行上位機(jī)鏈接通信、與個人計算機(jī)和其它外設(shè)進(jìn)行RS - 232C、與其它PC進(jìn)行1:1、再有是與裝有NT鏈接接口的可編程終端(PT)進(jìn)行NT鏈接通信(1:1、1:N),本課題就是基于OMRON PLC的鏈接通信(有通信協(xié)議),用VC++開發(fā)的上位機(jī)與PLC間的通信。
2、OMRON PLC的通信協(xié)議
目前,隨著PLC的快速發(fā)展,越來越多的PLC生產(chǎn)廠商開發(fā)了它與計算機(jī)的通信功能(主要是利用計算機(jī)串口進(jìn)行通信),本文是以C200HE PLC為例,作詳細(xì)闡述,本文的通信協(xié)議采用的是上位機(jī)鏈接通信。上位機(jī)鏈接通信通過在上位機(jī)與PLC之間交換命令和應(yīng)答實(shí)現(xiàn)的。在一次交換中傳輸?shù)拿詈蛻?yīng)答數(shù)據(jù)稱為一幀,一個幀最多可包含131個數(shù)據(jù)字符。
命令幀格式
從上位機(jī)發(fā)送一個命令時,按下示的格式排列命令數(shù)據(jù)

@符號必須置于每個命令的開頭,節(jié)點(diǎn)號是用來辨識每一臺PLC的節(jié)點(diǎn),在本文中,它設(shè)置PLC的DM6558單元中,識別碼設(shè)置兩字符的命令代碼,設(shè)置通信是讀寫PLC的哪個寄存器單元,例讀寫IR / SR區(qū)時它的識別碼設(shè)置分別為RR和WR,讀寫DM區(qū)分別為RD和WD。正文設(shè)置命令參數(shù),包括所要讀寫PLC寄存器單元的起始地址和字?jǐn)?shù)。FCS是設(shè)置兩字符的幀檢查順序碼,是一個轉(zhuǎn)換成2個ASCII字符的8位數(shù)據(jù),這8位數(shù)據(jù)為從幀開始到正文結(jié)束(即FCS之前)所有數(shù)據(jù)執(zhí)行“異或”操作的結(jié)果。終止符設(shè)置“*”和回車(CH R $(13))兩字符,表示命令結(jié)束。命令幀可以有最多131個字符長。一個等于或大于132字符的命令必須分成若干幀。命令分段,使用回車定界符(CH R $(13))。
應(yīng)答幀格式

識別碼和正文取決于接收到的上位機(jī)聯(lián)結(jié)命令,結(jié)束碼表示命令完成的狀態(tài)(即是否有錯誤發(fā)生),當(dāng)應(yīng)答超過132字符,它必須分成若干幀。結(jié)束碼是應(yīng)答幀中表示PLC應(yīng)答的信息。例結(jié)束代碼為00表示正常結(jié)束,13表示FCS錯誤,14表示格式錯誤,15表示入口碼數(shù)據(jù)錯誤,18表示幀長度錯誤,A3表示傳輸數(shù)據(jù)時因FCS錯誤引起終止,A8表示傳輸數(shù)據(jù)時因幀長度錯誤引起終止。
本文的上位機(jī)命令幀包括讀寫PLC單元中的數(shù)據(jù)的命令。讀命令幀為:@01RR0100000141* + CH R $(13),意思是上位機(jī)讀取節(jié)點(diǎn)為1的PLC中的IR0100單元中的內(nèi)容。寫命令幀為:@01WR0100000171* + CH R $(13),意思是寫一個數(shù)到節(jié)點(diǎn)為1的PLC的IR0100單元中。
3、系統(tǒng)結(jié)構(gòu)圖
下圖是計算機(jī)與PLC通信的組成系統(tǒng)圖

上位計算機(jī)與多個PLC進(jìn)行通信,必須連接一個RS232 / 422電平轉(zhuǎn)換器,RS422采用平衡發(fā)送接收方式,它具有傳輸距離長、抗干擾能力強(qiáng)和多點(diǎn)通信能力,最多可以接32臺PLC,如圖1所示,每一臺PLC都必須掛一個COM06單元進(jìn)行RS422方式連接,所有的PLC與計算機(jī)間的通訊采用的是PLC上位機(jī)鏈接通信協(xié)議。
3.1 硬件設(shè)置
RS232 / 422轉(zhuǎn)換器的設(shè)置開關(guān)撥到422方式,OMRON PLC上的COM06通信板單元同樣設(shè)置為422方式和四線制。
3.2 參數(shù)設(shè)置
上下位機(jī)的通信波特率設(shè)置為9600,數(shù)據(jù)格式設(shè)置為E,7,2。
3.3 節(jié)點(diǎn)設(shè)置
在PLC的DC6558單元中設(shè)置節(jié)點(diǎn)號00(初始值)~ 31(號機(jī))。
4、用Visual C++6.0編寫串行通信程序
本文的上位機(jī)鏈接通信程序是用Visual C++6.0編寫的,主要是利用VC++中的一個通信控件來實(shí)現(xiàn)的。
首先利用MFC AppWizard ( exe ) 建立一個基于對話框,支持Activex控件,命名為Transcomn的應(yīng)用程序。然后在對話框中加入一些控件,其中那個電話形狀的控件必須是在系統(tǒng)中注冊過的Microsoft Communications Control,由它進(jìn)行通訊時首先得設(shè)置它的一些屬性如下。
屬 性 設(shè) 定 值 說 明
CommPort 1 通訊協(xié)議為 PLC 上位機(jī)鏈接
通信,利用微機(jī)的串口1
InputMode 0 接收數(shù)據(jù)類型為文本形式
Rthreshold 1 每接收一個字符就產(chǎn)生一個事件
Settings 9600, E, 7, 2 參數(shù)依次為波特率、
奇偶檢驗(yàn)數(shù)據(jù)位數(shù)、停止位數(shù)
5、程序編寫
在程序中需添加的代碼如下:
// TranscommDlg.cpp:implementation file
BOOL CTranscommDlg::OnInitDialog ()
{
最后要在ClassWizard中添加變量和響應(yīng)函數(shù)如下。
控制名稱 控制 ID對 應(yīng)變量或函數(shù)
通訊地址文本框 ID - ADDRESS m_address
DM 區(qū)文本框 ID - DM m_dmbox
LR 區(qū)文本框 ID - LR m_lrbox
HR 區(qū)文本框 ID - HR m_hrbox
IR 區(qū)文本框 ID - IR m_irbox
應(yīng)答幀文本框 ID - RESPONSE m_response
通訊控件 ID - MSCOMM M - comm.
發(fā)送命令按鈕 ID - SEND OnSend ( )
// TODO:Add extra initialization here
// 打開通信端口1
m_comm..SetCommPort&n
文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。