西門子s7-1200 緊湊型plc在當(dāng)前的市場(chǎng)中有著廣泛的應(yīng)用,由于其性價(jià)比高,所以常被用作小型自動(dòng)化控制設(shè)備的控制器,這也使得它經(jīng)常與modbus儀表(掃描槍、打印機(jī)等設(shè)備進(jìn)行通訊。因?yàn)闆]有第三方modbus儀表,這里就以s7-200作為第三方的儀表為例介紹modbus通訊。
1.控制系統(tǒng)原理
圖1:通訊系統(tǒng)原理
2.硬件需求
s7-1200 plc目前有3種類型的cpu:
1)s7-1211c cpu。
2)s7-1212c cpu。
3)s7-1214c cpu。
這三種類型的cpu最多都可以連接三個(gè)串口通信模版。
本例中使用的plc硬件為:
1)pm1207電源 ( 6ep1 332-1sh71 )
2) s7-1214c ( 6es7 214 -1be30 -0xb0 )
3) cm1241 rs485 ( 6es7 241 -1ch30 -0xb0 )
4)cpu224xp (6es7 214-2ad23-0xb0)
3.軟件需求
1) 編程軟件 step7 basic v10.5 ( 6es7 822-0aa0-0ya0)
2)編程軟件 step 7 microwin; modbus庫(kù)軟件選項(xiàng)包
4.組態(tài)
我們通過下述的實(shí)際操作來介紹如何在step7 basic v10.5 中組態(tài)s7-1214c 和s7-200的modbus通信。
4.1 s7-1200作modbus主站,s7-200作modbus從站
s7-1200作為modbus主站的配置步驟如下:
點(diǎn)擊桌面上的“totally integrated automation portal v10”圖標(biāo),打開如下圖:
圖2: 新建s7 -1200項(xiàng)目
首先需要選擇“create new project”選項(xiàng),然后在“project name:”里輸入modbus_master;在“path:”修改項(xiàng)目的存儲(chǔ)路徑為“c:\”;點(diǎn)擊“create”,這樣就創(chuàng)建了一個(gè)文件modbus的新項(xiàng)目。創(chuàng)建后的窗口如下圖所示:
圖3: 新建項(xiàng)目后
點(diǎn)擊門戶視圖左下角的“project view”切換到項(xiàng)目視圖下,如下圖:
圖4: 切換到項(xiàng)目視圖
打開后,在“devices”標(biāo)簽下,點(diǎn)擊“add new device”,在彈出的菜單中輸入設(shè)備名“plc_1”并在設(shè)備列表里選擇cpu的類型。選擇后如下圖:
圖5: plc硬件組態(tài)
插入cpu后,點(diǎn)擊cpu左邊的空槽,在右邊的“catalog ”里找到“communication”下的rs485模塊,拖拽或雙擊此模塊,這樣就把串口模塊插入到硬件配置里,接下來就需要配置此rs485模塊硬件接口參數(shù),選擇rs485模塊,在其下方會(huì)出現(xiàn)該模塊的硬件屬性配置窗口, 在屬性窗口里有下面五個(gè)選項(xiàng), “general”; “port configuration”;“transmit message configuration”;“receive message configuration”;“io address/hw identify”。在“general”里包括了此模塊的“項(xiàng)目信息”;而在“port configuration”里可以對(duì)端口的進(jìn)行參數(shù)配置,
波特率為:9600 ;
校驗(yàn)方式:無 ;
數(shù)據(jù)位為:8 ;
停止位: 1;
硬件流控制:無;
等待時(shí)間: 1ms
設(shè)置參數(shù)如下圖:
圖6: rs485端口配置
在“transmit message configuration”和“receive message configuration”里保持默認(rèn)設(shè)置,在“io address/hw identify”里確認(rèn)一下“硬件識(shí)別號(hào)”為11。
此時(shí),完成了硬件的組態(tài),接下來需要編寫modbus通訊程序。
在plc中編寫發(fā)送程序。在項(xiàng)目管理視圖下雙擊“device”—》“program block”—》“add new block”在彈出的窗口中選擇“organizations block(ob)”,然后在其右邊的窗口里選擇“startup”,去除“symbolic access only”的選項(xiàng)勾。如下圖所示:
圖7: 添加啟動(dòng)ob塊
點(diǎn)擊“ok”后會(huì)打開此ob塊,然后在啟動(dòng)ob塊里用mb_comm_load(注:mb_comm_load和mb_master功能塊是在“project library”下的“l(fā)ibrary”選項(xiàng)卡里,如下圖所示:)
圖8: library
調(diào)用后如下圖所示:
圖9: 調(diào)用mb_comm_load塊
在調(diào)用mb_comm_load功能塊時(shí) ,都會(huì)自動(dòng)彈出創(chuàng)建相應(yīng)背景數(shù)據(jù)塊的界面,如下圖:
圖10:創(chuàng)建背景數(shù)據(jù)塊
按上面的步驟在ob1中插入mb_master功能塊如下圖:
圖11:調(diào)用mb_master塊
在插入功能塊的過程,相應(yīng)的生成mb_comm_load_db和mb_master_db,兩個(gè)背景數(shù)據(jù)塊。然后再創(chuàng)建一個(gè)發(fā)送或接收的數(shù)據(jù)緩沖區(qū),點(diǎn)擊plc_1項(xiàng)目下的“program block”下的“add new block”,在彈出的窗口中選擇db類型為“global db”,并去掉“symbolic access only”選項(xiàng)勾(這樣可以對(duì)該db塊進(jìn)行直接地址訪問),并取名該db塊為mb_comm_db。建好這個(gè)db塊后,雙擊打開mb_comm_db預(yù)先定義數(shù)據(jù)區(qū)的大小,如下圖所示:
圖12:數(shù)據(jù)區(qū)的定義
完成數(shù)據(jù)區(qū)的定義后,接下來就可以對(duì)mb_comm_load功能塊和mb_master功能塊進(jìn)行參數(shù)賦值,賦值的參數(shù)見圖9和圖11。 在上面的編程塊里需要注意的是,在mb_master功能塊中的參數(shù)mb_addr參數(shù)是從站的modbus的站地址。這里要讀取的從站的站地址為2;關(guān)于mode、data_addr、data_len可在下表中查看,data_ptr存放發(fā)送或接收到的數(shù)據(jù)。
表1:mb_master modbus功能表
上面就完成了程序的編寫,對(duì)項(xiàng)目進(jìn)行編譯;右擊plc_1項(xiàng)目在彈出的菜單里選擇“complies all”選項(xiàng),這樣就對(duì)硬件與軟件進(jìn)行編譯,如下圖:
圖13:編譯項(xiàng)目
編譯且沒有錯(cuò)誤后就可以下載程序到plc中,同樣右擊plc_1項(xiàng)目,在彈出的菜單選擇“download to device”。
s7-200作為modbus從站的配置步驟如下:
點(diǎn)擊桌面上的“v4.0 step 7 microwin sp6”圖標(biāo)(因?yàn)閟tep 7 microwin安裝時(shí)并沒有安裝modbus的庫(kù)程序,所以modbus的庫(kù)程序是需要單獨(dú)安裝的,安裝后才可以在庫(kù)程序中調(diào)用modbus的通訊功能塊,關(guān)于庫(kù)程序可以咨詢西門子熱線或訪問西門子的官方網(wǎng)站),打開后并編寫modbus從站程序如下圖:
圖14:s7-200 modbus從站編程
在上面調(diào)用的是端口0的程序,所以在連接通訊線時(shí),需要連接到端口0上,編譯并下載項(xiàng)目到s7-200的plc中。下載后運(yùn)行plc。
用dp電纜連接s7-1200與s7-200。
在線監(jiān)控s7-200中的程序,并監(jiān)控變量表,修改vb1000到vb1011的值為1到12(vb1000到vb1011對(duì)應(yīng)的modbus的地址為40001-40006)。監(jiān)控到的值如下圖所示:
圖15:s7-200監(jiān)控變量值
在線監(jiān)控 s7-1200變量表如下圖:
圖16:s7-1200監(jiān)控變量值
4.2 s7-200作modbus主站,s7-1200作modbus從站
s7-1200作為modbus從站的配置步驟如下:
點(diǎn)擊桌面上的“totally integrated automation portal v10”圖標(biāo),打開如下圖:
圖17:s7-1200監(jiān)控變量值
首先需要選擇“create new project”選項(xiàng),然后在“project name:”里輸入modbus_slave在“path:”修改項(xiàng)目的存儲(chǔ)路徑為“c:\backup file”;點(diǎn)擊“create”,這樣就創(chuàng)建了一個(gè)文件modbus_slave的新項(xiàng)目。創(chuàng)建后的窗口如下圖所示:
圖18: 新建項(xiàng)目后
點(diǎn)擊門戶視圖左下角的“project view”切換到項(xiàng)目視圖下,如下圖:
圖19:切換到項(xiàng)目視圖
打開后,在“devices”標(biāo)簽下,點(diǎn)擊“add new device”,在彈出的菜單中輸入設(shè)備名“plc_1”并在設(shè)備列表里選擇cpu的類型。選擇后如下圖:
圖20: plc硬件組態(tài)
插入cpu后,點(diǎn)擊cpu左邊的空槽,在右邊的“catalog ”里找到“communication”下的rs485模塊,拖拽或雙擊此模塊,這樣就把串口模塊插入到硬件配置里,接下來就需要配置此rs485模塊硬件接口參數(shù),選擇rs485模塊,在其下方會(huì)出現(xiàn)該模塊的硬件屬性配置窗口, 在屬性窗口里有下面五個(gè)選項(xiàng), “general”; “port configuration”;“transmit message configuration”;“receive message configuration”;“io address/hw identify”。在“general”里包括了此模塊的“項(xiàng)目信息”;而在“port configuration”里可以對(duì)端口的進(jìn)行參數(shù)配置,
波特率為:9600 ;
校驗(yàn)方式:無 ;
數(shù)據(jù)位為:8 ;
停止位: 1;
硬件流控制:無;
等待時(shí)間: 1ms
設(shè)置參數(shù)如下圖:
圖21: rs485端口配置
在“transmit message configuration”和“receive message configuration”里保持默認(rèn)設(shè)置,在“io address/hw identify”里確認(rèn)一下“硬件識(shí)別號(hào)”為11。
此時(shí),完成了硬件的組態(tài),接下來需要編寫modbus通訊程序。
在plc中編寫發(fā)送程序。在項(xiàng)目管理視圖下雙擊“device”—》“program block”—》“add new block”在彈出的窗口中選擇“organizations block(ob)”,然后在其右邊的窗口里選擇“startup”,去除“symbolic access only”的選項(xiàng)勾。如下圖所示:
圖22: 添加啟動(dòng)ob塊
點(diǎn)擊“ok”后會(huì)打開此ob塊,然后在啟動(dòng)ob塊里用mb_comm_load(注:mb_comm_load和mb_slave功能塊是在“project library”下的“l(fā)ibrary”選項(xiàng)卡里,如下圖所示:)
圖23: library
調(diào)用后如下圖所示:
圖24: 調(diào)用mb_comm_load塊
在調(diào)用mb_comm_load功能塊時(shí) ,都會(huì)自動(dòng)彈出創(chuàng)建相應(yīng)背景數(shù)據(jù)塊的界面,如下圖:
圖25:創(chuàng)建背景數(shù)據(jù)塊
按上面的步驟在ob1中插入mb_slave功能塊如下圖:
圖26:調(diào)用mb_slave塊
在插入功能塊的過程,相應(yīng)的生成mb_comm_load_db和mb_slave_db,兩個(gè)背景數(shù)據(jù)塊。然后再創(chuàng)建一個(gè)發(fā)送或接收的數(shù)據(jù)緩沖區(qū),點(diǎn)擊plc_1項(xiàng)目下的“program block”下的“add new block”,在彈出的窗口中選擇db類型為“global db”,并去掉“symbolic access only”選項(xiàng)勾(這樣可以對(duì)該db塊進(jìn)行直接地址訪問),并取名該db塊為mb_comm_db。建好這個(gè)db塊后,雙擊打開mb_comm_db預(yù)先定義數(shù)據(jù)區(qū)的大小,如下圖所示:
圖27:數(shù)據(jù)區(qū)的定義
完成數(shù)據(jù)區(qū)的定義后,接下來就可以對(duì)mb_comm_load功能塊和mb_slave功能塊進(jìn)行參數(shù)賦值,賦值的參數(shù)見圖24和圖26。 在上面的編程塊里需要注意的是,在mb_slave功能塊中的參數(shù)mb_addr參數(shù)是此從站的modbus站地址。這里定義為此從站的站地址為2;mb_hold_reg是指向modbus保持寄存器db的指針。保持寄存器db必須為典型的全局db。mb_slave所提供給主站的功能見下表:
表3:mb_slave modbus功能表a
表4:mb_slave modbus功能表b
上面就完成了程序的編寫,對(duì)項(xiàng)目進(jìn)行編譯;右擊plc_1項(xiàng)目在彈出的菜單里選擇“complies all”選項(xiàng),這樣就對(duì)硬件與軟件進(jìn)行編譯,如下圖:
圖28:編譯項(xiàng)目
編譯且沒有錯(cuò)誤后就可以下載程序到plc中,同樣右擊plc_1項(xiàng)目,在彈出的菜單選擇“download to device”。
s7-200作為modbus主站的配置步驟如下:
點(diǎn)擊桌面上的“v4.0 step 7 microwin sp6”圖標(biāo)(因?yàn)閟tep 7 microwin安裝時(shí)并沒有安裝modbus的庫(kù)程序,所以modbus的庫(kù)程序是需要單獨(dú)安裝的,安裝后才可以在庫(kù)程序中調(diào)用modbus的通訊功能塊,關(guān)于庫(kù)程序可以咨詢西門子熱線或訪問西門子的官方網(wǎng)站),打開后并編寫modbus主站程序如下圖:
圖29:s7-200 modbus主站編程
在上面調(diào)用的是端口0的程序,所以在連接通訊線時(shí),需要連接到端口0上,編譯并下載項(xiàng)目到s7-200的plc中。下載后運(yùn)行plc。
用dp電纜連接s7-1200與s7-200。
在線監(jiān)控s7-1200中的程序,并監(jiān)控變量表,修改db3.dbb0到db3.dbb20的值為1到21(db3.dbb0到db3.dbb19對(duì)應(yīng)的modbus的地址為40001-40010)。監(jiān)控到的值如下圖所示:
圖30:s7-1200監(jiān)控變量值
在線監(jiān)控 s7-200變量表如下圖:
圖31:s7-1200監(jiān)控變量值
從上面的變量監(jiān)控表里可以看到vb420中沒有數(shù)據(jù),因?yàn)樵谥髡镜膕7-200里的程序里只讀取10個(gè)變量(即40001-40010)對(duì)應(yīng)著的vb400-vb419,所以vb420的數(shù)據(jù)沒有接收。