西門子200與丹弗斯VLT HVAC暖通空調(diào)系列變頻器的modbus通信
道德三皇五帝(郭德綱來(lái)了是怎地),功名夏候商周。連續(xù)工作好多天,今天休息,來(lái)投稿。
先自我介紹一下,96年初中畢業(yè)進(jìn)入制糖企業(yè)當(dāng)電工,04年春由于單位效益不好決定不干了,于是南下在鄭州學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)工程師,以第一名成績(jī)結(jié)業(yè)。之后的一年多沒(méi)有從事電氣方面工作,也都不是長(zhǎng)期穩(wěn)定的工作,06年下半年接觸PLC編程,07年開始獨(dú)立進(jìn)行電氣設(shè)計(jì),10年10月自己開公司。
從去年12月份到現(xiàn)在一直在做一個(gè)能源管理及設(shè)備監(jiān)控的項(xiàng)目,項(xiàng)目簡(jiǎn)介:工廠內(nèi)所有用電量,壓縮空氣,水,這三種能源的消耗,已經(jīng)做好的十二臺(tái)由西門子200PLC控制的空調(diào)監(jiān)視,已經(jīng)做好的冷凍水,冷卻水,生產(chǎn)水,生活水等水循環(huán)系統(tǒng)內(nèi)的水泵變頻器的電參數(shù)監(jiān)視,今天要講的故事就是這一塊。再說(shuō)一下還沒(méi)開始做的電能管理,所有電量表(有許多塊,具體數(shù)量還沒(méi)計(jì)算)都是已經(jīng)安裝好,并可以在上位機(jī)監(jiān)控的系統(tǒng),電量表和上位機(jī)都是北京愛博精電做的。所有的電量表都支持modbus通信,但是是通過(guò)串口服務(wù)器用以太網(wǎng)與上位機(jī)通信的。而我的系統(tǒng)內(nèi)是s7 315 2PN,這就要求我用315用以太網(wǎng)讀取電量表modbus通信下的各項(xiàng)參數(shù)了,若7號(hào)之前完成通信,再寫篇關(guān)于此方面的文章。工程中除電纜橋及電纜的鋪設(shè)是我指導(dǎo)安裝,其它都是我獨(dú)自完成,包括柜子配線,電氣原理圖設(shè)計(jì),PLC編程,調(diào)試。
最近連續(xù)工作的好多天,每晚加班到八九點(diǎn),昨天給客戶的串口服務(wù)器柜子重新改造一下,是將7處新增加的電能表通過(guò)光纖轉(zhuǎn)485連接到串口服務(wù)器,恢復(fù)客戶原有的通信時(shí),晚上八點(diǎn)了,累壞了,所以今天休息,剛剛我的奶奶給我打電話祝我生日快樂(lè),我都把自己生日給忘了。
下面正題:
簡(jiǎn)介:客戶要求對(duì)變頻器的數(shù)據(jù)只監(jiān)不控?蛻羲械乃米冾l器都是丹弗斯VLT HVAC暖通空調(diào)系列變頻器,功率有大有小,共有29臺(tái),但由于modbus通信上還有4臺(tái)冷水機(jī)組,1個(gè)冷凍水加藥站,這樣從站超過(guò)了32臺(tái),怕通信不會(huì)成功,及其它方面原因,所以在設(shè)計(jì)之初就采用2臺(tái)224分開來(lái)進(jìn)行通信,一臺(tái)帶23臺(tái)變頻器及加藥站,一臺(tái)帶6臺(tái)變頻器及4臺(tái)冷水機(jī)組,每臺(tái)224再掛以太網(wǎng)模塊與上位機(jī)WinCC通信。從200的Micro 'n Powerv1.3幫助上知道200的通信口通信距離為50米,所以設(shè)計(jì)之初就提料買了2臺(tái)西門子485中繼器,這樣實(shí)際電氣隔離。以前在網(wǎng)上看到過(guò)文章,多臺(tái)200通過(guò)通信口通信,沒(méi)使用電氣隔離造成200全部損壞,具體原因就不得而知了
實(shí)施過(guò)程:
1、由于以前沒(méi)有modbus通信經(jīng)驗(yàn),所以過(guò)程是非常的艱難。由于我一直用筆記本,沒(méi)有串口,怕調(diào)試時(shí)出現(xiàn)麻煩事,所以買了摩莎的UPort-1250I USB轉(zhuǎn)雙串口,第一次買回來(lái)新的啊,指示燈就不好用,又換了一次。在現(xiàn)場(chǎng)把兩個(gè)串口連起來(lái),使用Modscan32調(diào)試工具模擬modbus通信,通信成功,這樣有了一個(gè)大致的概念。
2、與現(xiàn)場(chǎng)抄表人員溝通(他們公司規(guī)定變頻器的運(yùn)行數(shù)據(jù)進(jìn)行抄錄),確定讀取變頻器的6個(gè)數(shù)據(jù),如下:
參數(shù)編號(hào)名稱單位轉(zhuǎn)換指數(shù)數(shù)據(jù)類型
1501運(yùn)轉(zhuǎn)時(shí)間0 h74Uint32
1502千瓦時(shí)計(jì)數(shù)器0 kWh75Uint32
1610功率 [kW]0.00 kW1int32
1613頻率0.0 Hz-1Uint16
1614電動(dòng)機(jī)電流0.00 A-2int32
讀取變頻器的運(yùn)行狀態(tài)
線圈01
33控制未就緒控制就緒
34變頻器 未就緒變頻器 就緒
35慣性停止安全功能關(guān)閉
36無(wú)報(bào)警報(bào)警
37未使用未使用
38未使用未使用
39未使用未使用
40無(wú)警告警告
41不在參考值下在參考值下
42手動(dòng)模式自動(dòng)模式
43超出頻率范圍在頻率范圍內(nèi)
44已停止運(yùn)行
45未使用未使用
46無(wú)電壓警告電壓警告
47不在電流極限內(nèi)電流極限
48無(wú)熱警告熱警告
高低字節(jié)互換后,由高到低對(duì)應(yīng)線圈為48----33
關(guān)于丹弗斯modbus通信時(shí)寄存器地址上的問(wèn)題。
通過(guò)在網(wǎng)上搜索,丹弗斯變頻在modbus通信時(shí),寄存時(shí)的地址要功能號(hào)乘以10減1。如,變頻器的頻率地址為1613就是1613乘以10減1等16129 當(dāng)然這也造成了我后面的麻煩。這里假設(shè)你還不知道西門子200讀取時(shí)是只乘以10不用減1,這也坑了我一下。
想著先用Modscan32調(diào)試工具讀取單臺(tái)變頻器試試吧,發(fā)現(xiàn)Modscan32不支持《1613乘以10減1》這么大的地址,這怎么辦?在網(wǎng)上找啊找,找到一個(gè)《CRC16自動(dòng)計(jì)算軟件_MODBUS》軟件,通過(guò)計(jì)算出要發(fā)送的數(shù)據(jù)包,通過(guò)串口調(diào)試軟件發(fā)給變頻器,經(jīng)過(guò)幾次調(diào)試,通過(guò)轉(zhuǎn)換回傳回來(lái)的數(shù)據(jù),發(fā)現(xiàn)可以通過(guò)計(jì)算機(jī)串口與變頻器通信了。這時(shí)用的速率是變頻器最高的115200。
下面就開始在單臺(tái)PLC編程讀取變頻器頻率。
modbus的MBUS_MSG指令的Addr填寫16129,發(fā)現(xiàn)無(wú)法通信,仔細(xì)看那個(gè)網(wǎng)上的文檔才發(fā)現(xiàn)200不需要減1,于是改成16130,發(fā)現(xiàn)還是無(wú)法讀取,這是什么原因?又開始看各種資料。最后在Micro 'n Powerv1.3里找到,《Modbus Master 協(xié)議庫(kù)支持超過(guò) 9999 的保持寄存器地址。地址范圍為 400001 - 465536》,這樣16130肯定是超過(guò)9999了,改成416130后,可以通信了。
問(wèn)題又來(lái)了。
這樣變頻器寄存器的地址就變成了運(yùn)轉(zhuǎn)時(shí)間415010 千瓦時(shí)計(jì)數(shù)器415020 功率 416100,本來(lái)寄存器地址就不連續(xù),讀起來(lái)不方便,這回更是拆成了6個(gè)。唉,先編程再說(shuō)吧。先編的是23臺(tái)變頻器224,編著編著發(fā)現(xiàn)編譯保存時(shí),輸出窗口出現(xiàn)一個(gè)警告,說(shuō)程序太大14000多字節(jié),不適合224,當(dāng)時(shí)就哭了。想想也是23臺(tái)變頻器,每臺(tái)6條指令,再加上數(shù)值的處理,程序量很可觀啊,怎么辦,首先想到的是換226,付款訂226,226在快遞中的時(shí)候。想到了西門子的指針,想著把變頻器的從站地址放入V區(qū),再用指針去讀取V區(qū)里的變頻器的從站地址,讀到地址23就返回到1,這樣就6條讀取指令,可大大減小程序塊。可是指針我從來(lái)沒(méi)用過(guò)啊,于是看指令方面的知識(shí),看看發(fā)現(xiàn)從站地址是字節(jié)型,心想能不能每讀完一臺(tái)變頻器的數(shù)據(jù)后,從站地址加1,就是字節(jié)型加上,發(fā)現(xiàn)STEP-7-MicroWIN沒(méi)有字節(jié)整數(shù)型運(yùn)算指令,無(wú)意中發(fā)現(xiàn)字節(jié)遞增指令I(lǐng)NC_B,這樣就可實(shí)現(xiàn)每次地址加1。程序修改后大小為9400左右。
下載后進(jìn)行通信,使用的速率為115200,無(wú)法通信,又是什么原因?用計(jì)算機(jī)串口在RS485中繼器網(wǎng)絡(luò)2上檢測(cè)不到數(shù)據(jù),網(wǎng)絡(luò)1連接的PLC,網(wǎng)絡(luò)1上有數(shù)據(jù)。一共兩個(gè)中繼器,互換一下看看吧,還是不好用。說(shuō)一個(gè)這兩個(gè)中繼器,一個(gè)是朋友的工程余貨,一個(gè)是在淘寶上淘的二手(這里可以鄙視我一下)。兩個(gè)中繼器的接線,開關(guān)位置都沒(méi)問(wèn)題,就是通信不上,原因還是待查。大膽的將CPU通信直接連入網(wǎng)絡(luò)2,發(fā)現(xiàn)PLC指令還是顯示從站無(wú)響應(yīng),因?yàn)榇藭r(shí)速率還是115200,全部改成9600試試吧,改成后全部都可以讀取啦。非常高興的說(shuō),F(xiàn)在速率運(yùn)行在38400的速度上,輪詢23臺(tái)變頻的總時(shí)間在8秒左右,只監(jiān)不控可以了。
話說(shuō)這樣就結(jié)束了嗎,還沒(méi)有?梢钥瓷厦孀冾l出來(lái)的數(shù)據(jù)不適合上位機(jī)監(jiān)視,所以要經(jīng)過(guò)數(shù)據(jù)轉(zhuǎn)換。我程序的形式是每次讀取一臺(tái)變頻器的數(shù)據(jù)傳出,再進(jìn)行整體的數(shù)據(jù)轉(zhuǎn)換,發(fā)現(xiàn)每次從地址23再地址1時(shí)全部變頻的數(shù)據(jù)會(huì)向后串一臺(tái)變頻器,就是地址1的數(shù)據(jù)是地址23的,只是一個(gè)周期。心里這應(yīng)該是程序中有些指令是多周期的導(dǎo)致數(shù)據(jù)還沒(méi)轉(zhuǎn)換完就讀取下一臺(tái)的數(shù)據(jù)了。接著改程序,改成每次讀取的數(shù)據(jù)傳出,再用sm0.0啟用數(shù)據(jù)轉(zhuǎn)換。不再有上述現(xiàn)象。
還沒(méi)結(jié)束,發(fā)現(xiàn)轉(zhuǎn)換后變頻器的頻率不正確,而從轉(zhuǎn)換前的數(shù)據(jù)是正確的?梢钥醋冾l器的頻率數(shù)據(jù)是Uint16,要變成浮點(diǎn)數(shù)才可以。原程序是將Uint16格式的VW傳出到VW,發(fā)現(xiàn)傳出后的VW里的數(shù)值就和前面的不一樣的,這個(gè)真的不知道為什么了,還請(qǐng)高手解答一下。如何解決的呢,我不再把數(shù)值傳出,傳送指令前要加根據(jù)從站地址接通的上升沿,我直接將Uint16格式轉(zhuǎn)換成雙整數(shù)DI,再轉(zhuǎn)換成浮點(diǎn)數(shù),再用浮點(diǎn)數(shù)乘以0.1,最后成功得到頻率。
最后對(duì)整個(gè)程序進(jìn)行整理,大功告成。
我會(huì)將此程序其它部份刪除,保留modbus部份,供大家下載參考。
這幾天我就要做S7 315通過(guò)開放式IE通信(以太網(wǎng))連接串口服務(wù)器,使用modbus協(xié)議讀取電量表數(shù)據(jù),若在7號(hào)前實(shí)現(xiàn),再來(lái)發(fā)故事,程序也會(huì)供大家下載。
感謝謝活動(dòng)評(píng)委的認(rèn)真閱讀。
感謝西門子論壇這個(gè)平臺(tái)。
也希望閱讀此故事的人能夠?qū)W到更多的自動(dòng)化知識(shí)。