樊新乾,潘存海
(天津科技大學(xué) 機(jī)械工程學(xué)院,天津 300222)
在工業(yè)控制中,基于PLC控制的工程在上/下位機(jī)通訊上普遍采用RS-232/RS-485串口或者Ethernet通信模塊進(jìn)行通訊。串行通信是工業(yè)控制領(lǐng)域應(yīng)用最為廣泛的通信方式,它的數(shù)據(jù)和控制信息是逐位地傳送出去,因此對(duì)于數(shù)據(jù)量較大,通訊距離較遠(yuǎn),實(shí)時(shí)性要求高的控制系統(tǒng),很難滿足通訊需要[1]。近年來,工業(yè)以太網(wǎng)得到了快速發(fā)展,越來越多的受到工業(yè)控制用戶的青睞,其穩(wěn)定性、準(zhǔn)確性和實(shí)時(shí)性的特點(diǎn),廣泛應(yīng)用于電力、水利、冶金、化工、機(jī)械和制造業(yè)等控制系統(tǒng)[2]。由此產(chǎn)生了人機(jī)界面及各種組態(tài)軟件產(chǎn)品,這些產(chǎn)品的出現(xiàn)簡化了對(duì)PLC的控制和操作,使PLC的應(yīng)用更加方便。但也有其共同的缺點(diǎn),價(jià)格普遍偏高和可二次開發(fā)性較差[3]?;赩isual Basic(VB)平臺(tái)的上位機(jī)監(jiān)控界面的設(shè)計(jì),克服了以上缺點(diǎn),受到越來越多工業(yè)用戶的關(guān)注[4]。然而利用Visual Basic(VB)自身的串口通信控件與網(wǎng)絡(luò)控件進(jìn)行上位機(jī)監(jiān)控程序的設(shè)計(jì),由于控件的局限性,程序開發(fā)難度較大。由此,本文通過深入研究Windows API函數(shù)的結(jié)構(gòu),通過調(diào)用Windows API函數(shù),設(shè)計(jì)出一種可同時(shí)進(jìn)行串行通信與Ethernet通信的解決方案,大大提高了上位機(jī)監(jiān)控軟件的開發(fā)效率,打破了串行通信控件與網(wǎng)絡(luò)控件對(duì)編程人員的限制。使得程序開發(fā)人員不用過多關(guān)注通信控件的屬性設(shè)計(jì),把更多的精力放到監(jiān)控界面的開發(fā)上來。最后,本文以臺(tái)達(dá)DVPEN01-SL模塊為Ethernet通信載體,以及工控機(jī)自帶的COM口為串行通信載體,設(shè)計(jì)了PLC與上位機(jī)串行與Ethernet整合通信的解決方案,為工業(yè)現(xiàn)場用戶提供更多的通信選擇方式,簡化了上位機(jī)監(jiān)控界面的編制過程,提高了工業(yè)通信的可靠性與準(zhǔn)確性。
Modbus是一種應(yīng)用層報(bào)文傳輸協(xié)議,Modbus報(bào)文傳輸服務(wù)提供設(shè)備之間的客戶機(jī)/服務(wù)器通信,而這些設(shè)備聯(lián)接在一個(gè)以太網(wǎng)上,信息傳遞分4類報(bào)文:Modbus請(qǐng)求、Modbus證實(shí)、Modbus指示和Modbus響應(yīng)。Modbus請(qǐng)求是服務(wù)器在網(wǎng)絡(luò)上發(fā)送用來啟動(dòng)事務(wù)處理的報(bào)文;Modbus指示是客戶機(jī)接收的請(qǐng)求報(bào)文;Modbus響應(yīng)是客戶機(jī)發(fā)送的響應(yīng)報(bào)文;Modbus證實(shí)是服務(wù)器接收的響應(yīng)報(bào)文[5]。如圖1所示。
圖1 Modbus報(bào)文類型
Modbus/TCP協(xié)議是Modbus家族中應(yīng)用于自動(dòng)控制裝置上的開放的通訊協(xié)議,用于實(shí)現(xiàn)不同類型的總線或網(wǎng)絡(luò)連接的設(shè)備之間的C/S(客戶機(jī)/服務(wù)器)通信,通過通用的網(wǎng)絡(luò)部件在Intranet/Internet上傳輸。物理層和數(shù)據(jù)鏈路層是標(biāo)準(zhǔn)的以太網(wǎng)協(xié)議,網(wǎng)際層是標(biāo)準(zhǔn)的IP協(xié)議,傳輸層是標(biāo)準(zhǔn)的TCP協(xié)議,應(yīng)用層嵌入Modbus協(xié)議。其網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。
圖2 Modbus/TCP協(xié)議網(wǎng)絡(luò)結(jié)構(gòu)模型
API函數(shù)[6](全稱為Application Programming Interface)也稱為應(yīng)用程序編程接口,Windows API顧名思義就是Windows平臺(tái)下的應(yīng)用程序編程接口。它是操作系統(tǒng)預(yù)留給應(yīng)用程序的一個(gè)調(diào)用接口,應(yīng)用程序可通過調(diào)用操作系統(tǒng)提供的相關(guān)API函數(shù)來使操作系統(tǒng)使用應(yīng)用程序區(qū)執(zhí)行一些命令(動(dòng)作)。API函數(shù)是構(gòu)筑整個(gè)Windows框架的基礎(chǔ)。在API函數(shù)下面是Windows 操作系統(tǒng)核心,而它的上面則是華麗的Windows系統(tǒng)的操作界面和各種應(yīng)用程序。Windows系統(tǒng)結(jié)構(gòu)如圖3所示。
圖3 Windows結(jié)構(gòu)
Visual Basic(VB)就是Windows平臺(tái)上優(yōu)秀的可視化編程應(yīng)用程序,其主要特點(diǎn)為操作簡單,界面友好,所見即所得。提供了大量的類庫和控件(這些類庫或控件就是對(duì)API函數(shù)封裝的結(jié)果),例如MSComm(Microsoft Communications Control)控件和Winsock控件,它們替代了API函數(shù)。但是它們的應(yīng)用具有一定的局限性,編程人員需要花很大精力來設(shè)計(jì)控件的各個(gè)屬性。因此我們可以在Visual Basic(VB)中調(diào)用自主開發(fā)的API函數(shù)的集合,省略掉上位機(jī)監(jiān)控程序中通信控件的屬性設(shè)計(jì),簡化成為簡單地函數(shù)調(diào)用過程,可大大提高程序開發(fā)效率,拓展更多的功能。
DMT函式庫就是以Windows Winsock API(WSA)為開發(fā)基礎(chǔ)的API函數(shù)的集合。用來開發(fā)支持以Modbus格式連結(jié)的工業(yè)產(chǎn)品,開發(fā)者可以通過匯入函式庫的方式來連結(jié)串行口及工業(yè)Ethernet的通訊。DMT函式庫提供標(biāo)準(zhǔn)C/C++動(dòng)態(tài)及靜態(tài)連結(jié)方式,并支持Microsoft Visual C++/Visual Basic、Borland C++Builder等軟體開發(fā)環(huán)境。其協(xié)議堆疊圖如圖4所示。
圖4 協(xié)議堆疊圖
本系統(tǒng)所應(yīng)用的Ethernet通信模塊為臺(tái)達(dá) DVPEN01-SL,PLC主 機(jī) 為DVP32EH-L。DVPEN01-SL是臺(tái)達(dá)系列產(chǎn)品Ethernet通訊模塊[7],支持Modbus/TCP通訊協(xié)議,可使用圖控軟件或人機(jī)界面,做遠(yuǎn)程的監(jiān)控。DVPEN01-SL也可以作為Modbus/TCP的主端,可發(fā)送 Modbus/TCP指令,控制周邊設(shè)備。另外在MDI/MDI-X自動(dòng)檢測功能下,在選擇網(wǎng)絡(luò)線時(shí)不需跳線。通過DVPEN01-SL Ethernet通訊模塊,可實(shí)現(xiàn)上位計(jì)算機(jī)與PLC主機(jī)的通信。D而串口通信則可通過DB9轉(zhuǎn)8針圓頭RS-232串口線纜直接連接PLC與上位機(jī)。由于篇幅所限,DVPEN01-SL的具體設(shè)置以及PLC主機(jī)的程序設(shè)計(jì)在此就不再贅述。系統(tǒng)硬件連接方式如圖5所示。
圖5 硬件連接示意圖
我們通過VB6.0,編寫上位機(jī)監(jiān)控程序人機(jī)交互界面。在VB6.0中使用DMT2.0函式庫,必須首先匯入模塊(module),步驟如下。
1)將DMT.bas添加進(jìn)項(xiàng)目。
2)復(fù)制DMT.dll到項(xiàng)目目錄下。如圖6所示。
圖6 模塊匯入
在臺(tái)達(dá)PLC中[8],M1072為特殊輔助寄存器,M1072標(biāo)志設(shè)置為ON,可使主程序?yàn)镽UN狀態(tài),以下按照DMT2.0函式庫使用步驟,并以此為范例,來說明上位機(jī)監(jiān)控界面代碼的設(shè)計(jì)。如圖7所示。
圖7 寄存器動(dòng)作示意圖
以Modbus功能碼0x05寫入單一線圈M1072為例,其Modbus起始位址0C30,設(shè)定線圈狀態(tài)為FF00,PLC主程序?yàn)镽UN,若設(shè)定0000則為STOP。程序編寫過程如下:
首先聲明WIN32 API函數(shù)
Private Declare Function inet_addr Lib "wsock32.dll" (ByVal s As String) As Long。
1)設(shè)定通信參數(shù)
2)開啟串行通信
3)數(shù)據(jù)存取
Modbus數(shù)據(jù)請(qǐng)求
4)關(guān)閉通訊 Call CloseSerial(conn_num)
1)設(shè)定通信參數(shù)
2)開啟通信
3)數(shù)據(jù)存取
4)關(guān)閉通信 Call CloseSocket(conn_num)
本監(jiān)控系統(tǒng)主要包括通信模式選擇,PLC運(yùn)行指示,X軸運(yùn)動(dòng)監(jiān)控,Y軸運(yùn)動(dòng)監(jiān)控,輸入運(yùn)行監(jiān)控,以及報(bào)錯(cuò)信息界面,能夠滿足本項(xiàng)目的基本調(diào)試運(yùn)行要求。程序運(yùn)行界面如圖8所示。
圖8 監(jiān)控程序運(yùn)行界面
為了對(duì)工業(yè)設(shè)備進(jìn)行實(shí)時(shí)有效的管理與監(jiān)控,完善的兼容性,可靠的穩(wěn)定性,對(duì)惡劣環(huán)境的適應(yīng)性,強(qiáng)大的冗余能力和方便的可管理性,是人們越來越多地在Visual Basic(VB)平臺(tái)下開發(fā)上位機(jī)監(jiān)控程序的設(shè)計(jì)的原因,而這也勢必成為本文所述通信方案在越來越多的工業(yè)控制網(wǎng)絡(luò)環(huán)境里大顯身手的重要契機(jī)。本方案的提出成功的整合了串口通信與Ethernet通信,使得上位機(jī)監(jiān)控程序的開發(fā)更為簡單和方便,程序員從繁雜的通信控件設(shè)計(jì)編程工作中解放出來,也為工業(yè)現(xiàn)場實(shí)現(xiàn)冗余設(shè)計(jì)以及應(yīng)急通信方面提供了安全可靠的方案,應(yīng)用前景廣泛。本文所述程序已成功應(yīng)用于臺(tái)達(dá)PLC運(yùn)動(dòng)控制系統(tǒng)的監(jiān)控界面部分中,實(shí)驗(yàn)證明,該程序安全可靠,運(yùn)行正常穩(wěn)定。
[1]張輝, 李榮利, 王和平.Visual Basic串口通信及編程實(shí)例[M].北京: 化學(xué)工業(yè)出版社, 2011.
[2]關(guān)學(xué)進(jìn), 劉娟.基于Modbus/TCP工業(yè)以太網(wǎng)的自動(dòng)化控制系統(tǒng)[J].電子測試, 2011(4): 4-8.
[3]馮冬芹, 金建祥, 褚健等.工業(yè)以太網(wǎng)關(guān)鍵技術(shù)初探[J].信息與控制, 2003, 32(3): 219-224.
[4]魏慶福.現(xiàn)場總線技術(shù)發(fā)展的新動(dòng)向[J].工業(yè)控制計(jì)算機(jī), 2000(1): 11-12.
[5]霍恒裕.一種Modbus/TCP工業(yè)以太網(wǎng)協(xié)議的結(jié)構(gòu)[J].Computer Knowledge And Technology電腦知識(shí)與技術(shù),2008(4): 855-856.
[6]楊本倫, 等.Visual Basic開發(fā)技術(shù)大全[M].北京: 清華大學(xué)出版社, 2010.
[7]臺(tái)達(dá)DVPEN01-SL Ethernet通訊模塊操作手冊.
[8]DVP-PLC應(yīng)用技術(shù)手冊.