最近在用1200通過(guò)modbus-rtu采集某流量傳感器的數(shù)據(jù),西門(mén)子側(cè)選擇的是cm1241(rs422/485)(訂貨號(hào)是6es7 241-1ch32-0xb0,固件版本v2.2),cpu是1214c,固件版本是v4.2,自認(rèn)為調(diào)試應(yīng)該很簡(jiǎn)單,但是卻花費(fèi)了很多時(shí)間,并查閱了很多資料、視頻,才實(shí)現(xiàn)了通訊。下面逐步介紹一下步驟,可能的坑及解決辦法。
1、硬件接線(xiàn)
通訊卡9針插座的3和8針用于485通訊(modbus的通訊),西門(mén)子手冊(cè)上標(biāo)識(shí)為:3+(b),8-(a),流量傳感器上標(biāo)識(shí)為a+、b-。通訊不通時(shí),我在這兒折騰了很久,后來(lái)用萬(wàn)用表直接測(cè)量電壓搞定,原則:不用理會(huì)ab,直接測(cè)量電壓,+對(duì)+,-對(duì)-即可。未通訊時(shí),電壓在3-5vdc之間。
2、硬件配置
基本配置(要與從站保持一致),記下硬件標(biāo)識(shí)符:這里是269。
3、端口初始化編程
注意選擇v3.1這一套程序,不要與下面的v2.2程序混用(注意這套程序的版本限制“使用cm1241 自固件版本v2.1起...”)。
初始化程序放置在ob1循環(huán)調(diào)用的子程序里,官方提醒不要放在ob100(啟動(dòng)程序里),設(shè)置好參數(shù)(與硬件里的基本一致),自動(dòng)生成頂部的背景數(shù)據(jù)塊(這里是db1)。
打開(kāi)db1,將里面的mode修改成4,其他保持默認(rèn)值(這也是個(gè)大坑,誰(shuí)會(huì)想著去修改背景數(shù)據(jù)塊?所有需要修改的應(yīng)該都通過(guò)接口參數(shù)開(kāi)放出來(lái)呀?。?/p>
mb_db要與后面的modbus_master的背景數(shù)據(jù)塊保持一致,在創(chuàng)建modbus_master時(shí),會(huì)自動(dòng)生成,然后再回過(guò)頭來(lái)修改,我這邊為db2。
4、創(chuàng)建讀寫(xiě)指令
我這邊用到了輪詢(xún),所以,程序相對(duì)復(fù)雜,會(huì)調(diào)用多個(gè)modbus_master模塊(注意:他們必須用相同的背景數(shù)據(jù)塊,不要每次都新建)。如果只是單站讀取,req端用時(shí)鐘脈沖即可。req是上升沿觸發(fā),如果常置位,則只會(huì)進(jìn)行一次讀取,因此用時(shí)鐘脈沖可以周期讀取。
mb_addr是從站地址,mode是模式,與data_addr配合,在后臺(tái)生成標(biāo)準(zhǔn)的modbus指令,比如,我要實(shí)現(xiàn)傳感器廠(chǎng)家的指令幀:
起始地址是0x800e,轉(zhuǎn)換成十進(jìn)制地址是32782,功能碼是0x03
通過(guò)modbus_master的幫助可以看到,我的mode要選擇0,data_addr填寫(xiě):432782(實(shí)際上由于是否從0開(kāi)始的問(wèn)題,這兒最終填寫(xiě)的是432783)
這樣,就可以讀取了。
5、最快速度輪詢(xún)時(shí)的效果
我用錄波軟件plc-recorder對(duì)于采集回的值、輪詢(xún)指令等進(jìn)行了錄波,以10ms的速度記錄,從這個(gè)波形上可以看到,實(shí)際輪詢(xún)周期能達(dá)到100ms(我這里有兩個(gè)從站):
將其中一個(gè)傳感器斷電,制造單站故障后的輪詢(xún)周期大都加長(zhǎng),達(dá)到了600ms(因?yàn)橐却瑫r(shí)):
6、如果通訊怎么都不通時(shí),怎么判斷?
首先要利用調(diào)試軟件方便測(cè)試plc和傳感器。對(duì)于傳感器,可以用廠(chǎng)家調(diào)試軟件,配合usb轉(zhuǎn)485的接口進(jìn)行測(cè)試,確定通訊參數(shù)和狀態(tài)好壞。
對(duì)于plc,有朋友利用modbus從站模擬軟件進(jìn)行測(cè)試(我沒(méi)有找到),也可以打開(kāi)模塊上部的蓋板,查看發(fā)送燈是否亮來(lái)判斷,模塊是不是已經(jīng)啟用。正常輪詢(xún)時(shí),發(fā)送和接收都會(huì)黃燈閃爍的。