朱向榮+馮喬生+施少捷+呂苓芝
摘要:信捷XC系列PLC是完全國產(chǎn)化的產(chǎn)品。若使其上位機程序能用通用高級語言而非只是該機模態(tài)軟件編寫,就能使XC系列PLC上位機控制程序與其它設(shè)備控制程序進行集成,有利于進一步促進PLC推廣應用。本文研究了信捷XC系列PLC與計算機分別通過串口RS232和以太網(wǎng)進行通信的VC++編程技術(shù),使得能在上位機VC++程序中發(fā)送與接收XC系列PLC的數(shù)據(jù),從而實現(xiàn)了PC機通過VC++上位機程序?qū)LC的遠程控制。
關(guān)鍵詞:信捷XC系列PLC;RS232;PC機以太網(wǎng)卡;Modbus協(xié)議
中圖分類號:TP393
文獻標識碼:A
DOI:10.3969/j.issn.1003-6970.2015.06.014
本文著錄格式:朱向榮,馮喬生,施少捷,等,領(lǐng)域模型中關(guān)聯(lián)語義的描述邏輯表示與應用[J].軟件,2015,36(6):75-82TechniquesofCommunicationVC++pr02rammingforXinjiePLCwithPCthroughSerialCommunicationPortandEthernetAdapter
ZHUXiang-rong1,F(xiàn)ENGQiao-sheng1,SHIShao-jie2,LVLing-zhj3
[Abstract]:XinjeXCseriesPLCisakindofcompletedomesticproduct.IftheirupperPCprogramscanbepro-grammedwiththegeneralhigh-levellanguage,ratherthantheirmodalsoftware,itisenabledtointegratetheupperPCcontrolprogramsofthePLCwiththecontrolprogramsofotherdevices,andXCseriesPLCcanthenbefurtherwidelyused.ThispaperproposedthetechniquesofVC++programmingofcommunicationsbetweenPCandXCseriesPLCthroughRS232andEthernetnetworkadapterrespectively,whichenabledtheVC++upperprogramstosenddatatotheXCseriesPLCorreceivethedatafromthem.TheremotecontrolsoftheXCseriesPLCcanthusbeimplementedbytheVC++upperPCprograms.
[Keywords]:XinjieXCseriesPLC;RS232;PCEthernetadapter;Modbusprotocol
0引言
本文的研究來源是針對昆明鑫輝檢測有限公司對于多用途高空爬行器平臺的研發(fā)。多用途高空爬行器平臺具有超聲波檢測功能和對周圍環(huán)境監(jiān)控的功能,這就需要爬行器搭載相應的設(shè)備。信捷XC系列PLC通過模態(tài)軟件開發(fā)控制程序,再與信捷電氣股份有限公司自主研發(fā)的人機界面通信從而達到控制PLC的效果。然而對于多用途高空爬行器平臺就有很大的限制,爬行器上位機監(jiān)控程序不能與其它設(shè)備進行集成。本文研究XC系列PLC上位機監(jiān)控程序的VC編程[1]技術(shù),希望這項技術(shù)能應用于多用途爬行器平臺的研發(fā),實現(xiàn)通過VC程序來控制爬行器的運動,從而實現(xiàn)XC系列PLC上位機監(jiān)控程序[2]與其它設(shè)備用戶界面程序的有效集成。PLC與上位機PC的通信是開發(fā)PLC上位機監(jiān)控程序的關(guān)鍵環(huán)節(jié),按應用環(huán)境的不同,可采用RS-232通信方式,基于無線ZigBee[3]的近距離無線通信方式。和基于以太網(wǎng)的遠距離通信方式。本文針對昆明鑫輝檢測有限公司的應用需求,主要研究基于RS-232的通信與以太網(wǎng)的通信方式的VC編程技術(shù)。
1信捷XC系列PLC通訊功能
1.1概述
XC系列PLC都支持Modbus協(xié)議、自由協(xié)議通訊功能,其中XC5系列中48點與60點機型與XCC系列PLC還具有CANbus總線功能。XC系列PLC有2個通訊口(Portl、Port2)。通訊口1(Portl)為編程口,支持RS232方式,可以用來下載程序以及連接外接設(shè)備,此通訊口的通訊參數(shù)(波特率、數(shù)據(jù)位等)可以通過軟件重新設(shè)置。通訊口2(Port2)為通訊口,可以用來下載程序以及連接外接設(shè)備,此通訊口的通訊參數(shù)(波特率、數(shù)據(jù)位等)可以通過軟件重新設(shè)置,其中port2既支持RS232又支持RS485(RS485端子在輸出端,A為485+、B為485-),但需注意兩者不能同時使用。XC系列PLC通訊參數(shù):站號1-254表示是Modbus通訊方式,255(FF)為自由格式通訊。波特率為300bps-115.2Kbps。數(shù)據(jù)位有8個和7個數(shù)據(jù)位兩種。停止位有2個和1個停止位兩種。有偶校驗、奇校驗、無校驗三種。通訊口默認參數(shù):站號為1、波特率19200bps、8個數(shù)據(jù)位、1個停止位、偶校驗。信捷公司的XCPPro編程軟件中集成了修改通訊口的模塊,通過軟件來修改通訊口參數(shù),方便直觀,且不易出錯,修改完成后,重新上電才能生效。
1.2Modbus協(xié)議簡介[4]
Modbus協(xié)議是應用于電子控制器上的一種通用語言。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)和其它設(shè)備之間可以通信,它已經(jīng)成為一通用工業(yè)標準。有了它,不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進行集中監(jiān)控。此協(xié)議定義了一個控制器能認識使用的消息結(jié)構(gòu),而不管它們是經(jīng)過何種網(wǎng)絡(luò)進行通信的,它描述了一控制器請求訪問其它設(shè)備的過程,如何回應來自其它設(shè)備的請求,以及怎樣偵測錯誤并記錄,它制定了消息域格局和內(nèi)容的公共格式。
當在一個Modbus網(wǎng)絡(luò)上通信時,此協(xié)議決定了每個控制器須要知道它們的設(shè)備地址,識別按地址發(fā)來的消息,決定要產(chǎn)生何種行動。如果需要回應,控制器將生成反饋信息并用Modbus協(xié)議發(fā)出。
1.2.1傳輸方式
通信傳輸方式是一個信息幀內(nèi)一系列獨立的數(shù)據(jù)結(jié)構(gòu)以及用于傳輸數(shù)據(jù)的有限則,Modbus協(xié)議有兩種傳輸方式,RTU方式和ASCII碼字符串方式,以RTU模式在Modbus總線上進行通訊時,信息中的每8位字節(jié)分成2個4位16進制的字符,每個信息必須連續(xù)傳輸下面定義了與Modebus協(xié)議RTU方式相兼容的傳輸方式。用戶選擇想要的模式,包括串口通信參數(shù)(波特率、校驗方式等),在配置每個控制器的時候,在一個Modbus網(wǎng)絡(luò)上的所有設(shè)備都必須選擇相同的傳輸模式和串口參數(shù)。信捷PLC按字符串方式與終端傳感器通信,而按RTU方式與上位機通信,所以本文主要研究RTU方式和PLC通信的VC編程技術(shù)。
1.2.2RTU數(shù)據(jù)幀格式
ModbusRTU信息幀[5]如圖1所示,所允許的最大長度為256個字節(jié),即N的范圍是大于等于零且小于等于252(N{O,252})。
地址域:信息幀地址域在幀的開始部分,由8位組成,有效的從機設(shè)備地址范圍0-247,各從機設(shè)備的尋址范圍為1-247。主機把從機地址放入信息幀的地址區(qū),并向從機尋址。從機響應時,把自己的地址放入響應信息的地址區(qū),讓主機識別已作出響應的從機地址。地址0為廣播地址,所有從機均能識別。
功能域:信息幀功能域代碼告訴了被尋址到的終端執(zhí)行何種功能。有效碼范圍1-225,有些代碼是適用于所有控制器,有些適應于某種控制器,還有些保留以備后用,信捷XC系列PLC功能碼對應的功能及對應的Modbus指令如下表1。當主機向從機發(fā)送信息時,功能代碼向從機說明應執(zhí)行的動作。如讀一組離散式線圈或輸入信號的ON/OFF狀態(tài),瀆一組寄存器的數(shù)據(jù),讀從機的診斷狀態(tài),寫線圈(或寄存器),允許下截、記錄、確認從機內(nèi)的程序等。當從機響應主機時,功能代碼可說明從機正常響應或m現(xiàn)錯誤(即不正常響應),正常響應時,從機簡單返回原始功能代碼;不正常響應時,從機返回與原始代碼相等效的一個碼,并把最高有效位設(shè)定為“1”。
數(shù)據(jù)域:數(shù)據(jù)域包含了終端執(zhí)行特定功能所需要的數(shù)據(jù)或者終端響應查詢時采集到的數(shù)據(jù)。這些數(shù)據(jù)的內(nèi)容可能是數(shù)值、參考地址或者極限值。它由數(shù)據(jù)區(qū)有2個16進制的數(shù)據(jù)位(2的8次方256),數(shù)據(jù)范圍為OO-FF(16進制)。例如:功能域碼告訴終端讀取一個寄存器,數(shù)據(jù)域則需要指明從哪個寄存器開始及讀取多少個數(shù)據(jù),內(nèi)嵌的地址和數(shù)據(jù)依照類型和從機之間的不同能力而有所不同。若無錯誤出現(xiàn),從機向主機的響應信息中包含了請求數(shù)據(jù),若有錯誤出現(xiàn),則數(shù)據(jù)中有一個不正常代碼,使主機能判斷并做出下一步的動作。信捷XC系列PLC線圈空間地址為表2,寄存器空間地址為表3。
CRC-16循環(huán)冗余校驗碼:目前較常用的CRC位數(shù)目有8和16以及32,在這里只講述如何寫CRC位數(shù)目為16的程序。CRC位數(shù)目越大,數(shù)據(jù)的錯誤檢測率則越高,但必須多花一些時間進行數(shù)據(jù)的計算。CRC-16的計算方法有兩種:查表法與計算法,在這里只介紹計算法。生成一個CRC的流程為:
Step1、預置一個16位寄存器為OFFFFH(全1),稱之為CRC寄存器。
Step2、把數(shù)據(jù)幀中的第一個8位字節(jié)與CRC寄存器中的低字節(jié)進行異或運算,結(jié)果存回CRC寄存器。
Step3、將CRC寄存器向右移一位,最高位填以0,最低位移出并檢測。
Step4、如果最低位為0:重復第3步(下一次移位)。如果最低位為1:將CRC寄存器與一個預設(shè)的固定值(OAOOIH)進行異或運算。
Step5、重復第3步和第4步直到8次移位。這樣處理完了一個完整的八位。
Step6、重復第2步到第5步來處理下一個八位,直到所有的字節(jié)處理結(jié)束。
Step7、最終CRC寄存器得值就是CRC的值。
當信息幀到達終端設(shè)備時,它通過一個簡單的“口”進入尋址到的設(shè)備,該設(shè)備去掉數(shù)據(jù)幀的“信封”(數(shù)據(jù)頭),讀取數(shù)據(jù),如果沒有錯誤,就執(zhí)行數(shù)據(jù)所請求的任務,然后,它將白己生成的數(shù)據(jù)加入到取得的“信封”中,把數(shù)據(jù)幀返回給發(fā)送者。返回的響應數(shù)據(jù)中包含了以下內(nèi)容:終端從機地址(Address)、被執(zhí)行了的命令(Function)、執(zhí)行命令生成的被請求數(shù)據(jù)(Data)和一個校驗碼(Check)。發(fā)生任何錯誤都不會有成功的響應。2VC++程序與XC系列PLC串口通信技術(shù)[6]2.1上位端PC機程序的設(shè)計
我們設(shè)計了CSearchDevices類[7]來進行計算機上串口的搜索、PC機與PLC的串口通信連接、命令與數(shù)據(jù)讀寫,即包括下列幾個成員函數(shù):
(1)voidSearchSerialCommPort(void)
該函數(shù)搜索上位機PC可用的串口。
(2)HANDLEOpenCommunicationDevice(intindex,boolwriteFlag,intbaudRate,intbyteSize,intparity,boolsynchrose)
該函數(shù)是打開和設(shè)置串口參數(shù)。第一個參數(shù)是串口的索引號。第二個參數(shù)是指定串口是按哪種方式打開(一種是可瀆、可寫,另一種是可讀)。第三個參數(shù)是指定波特率的大小。第四個參數(shù)是發(fā)送和接收比特的字節(jié)數(shù)。第五個參數(shù)是指定校驗方式(0表示無校驗,1奇校驗,2表示偶校驗),本項目采用的是偶校驗。第六個參數(shù)如果是TRUE,則通過CreateFile函數(shù)允許對文件進行重疊操作。
(3)voidCRCCodeing(BYTE*data,intnumBytes)