【C#上位機(jī)】西門(mén)子1200PLC實(shí)用定位控制程序案例
引言
本文是一篇綜合性比較強(qiáng)的文章,從PLC輸入輸出及步進(jìn)電機(jī)接線開(kāi)始,到PLC運(yùn)動(dòng)控制程序編寫(xiě),再到后續(xù)的ModbusTCP通信協(xié)議及上位機(jī)編程實(shí)現(xiàn)最終控制,涉及知識(shí)面比較廣,能夠讓我們很好地將所學(xué)知識(shí)結(jié)合起來(lái)。
開(kāi)發(fā)平臺(tái)
采用西門(mén)子TIA Portal V16編程軟件編寫(xiě)運(yùn)動(dòng)控制程序,實(shí)現(xiàn)PLC(S7-1200系列:CPU1214C DC/DC/DC )對(duì)步進(jìn)電機(jī)的控制,再通過(guò)編寫(xiě)ModbusTCP程序,將控制地址進(jìn)行映射,從而方便上位機(jī)(VS 2019開(kāi)發(fā))與PLC進(jìn)行通信,最終實(shí)現(xiàn)步進(jìn)電機(jī)的運(yùn)動(dòng)方向、速度及距離的靈活控制。
涉及硬件:開(kāi)關(guān)電源、S7-1200PLC、步進(jìn)驅(qū)動(dòng)器、步進(jìn)電機(jī)、單軸模組、限位開(kāi)關(guān)
涉及軟件:TIA Portal V16、VS2019、ModbusPoll(用于測(cè)試通信)
硬件接線

PLC編程
步 ? 驟操作說(shuō)明1通過(guò)博圖軟件創(chuàng)建一個(gè)新的PLC項(xiàng)目,
根據(jù)硬件型號(hào)插入新設(shè)備,這里為
CPU 1214C DC DC DC

2雙擊PLC的以太網(wǎng)口,設(shè)置IP地址,
這里設(shè)置為192.168.2.210

3雙擊CPU,在脈沖發(fā)生器PTO/PWM選項(xiàng)中設(shè)置信號(hào)類(lèi)型為PTO,脈沖輸出為Q0.0,方向輸出為Q0.1

4新建一個(gè)工藝對(duì)象,名稱(chēng)為軸1,通過(guò)基本參數(shù)>驅(qū)動(dòng)器,設(shè)置脈沖輸出為Pulse1

5通過(guò)擴(kuò)展參數(shù)>位置限制,設(shè)置上下限位分別為I0.1和I0.2

6通過(guò)擴(kuò)展參數(shù)>回原點(diǎn)>主動(dòng),設(shè)置原點(diǎn)開(kāi)關(guān)為I0.0

7程序段1,調(diào)用MC_Power使能,各個(gè)引腳填寫(xiě)如圖所示,其中Asix選擇軸1

8程序段2,調(diào)用MC_MoveRelative,各個(gè)引腳填寫(xiě)如圖所示,該程序段主要用于執(zhí)行相對(duì)運(yùn)動(dòng)

9程序段3,調(diào)用MC_MoveAbsolute,各個(gè)引腳填寫(xiě)如圖所示,該程序段主要用于執(zhí)行絕對(duì)運(yùn)動(dòng)

10程序段4,調(diào)用MC_MoveJog,各個(gè)引腳填寫(xiě)如圖所示,該程序段主要用于執(zhí)行前進(jìn)和后退點(diǎn)動(dòng)

11程序段5,調(diào)用MC_Home,各個(gè)引腳填寫(xiě)如圖所示,該程序段主要用于執(zhí)行歸零

12程序段6,調(diào)用MC_Reset,各個(gè)引腳填寫(xiě)如圖所示,該程序段主要用于執(zhí)行復(fù)位功能

13程序段7,調(diào)用MC_Halt,各個(gè)引腳填寫(xiě)如圖所示,該程序段主要用于執(zhí)行暫停功能

14程序段8,調(diào)用MC_ReadParam,來(lái)讀取相關(guān)參數(shù),各個(gè)引腳填寫(xiě)如圖所示,該程序段主要用于讀取實(shí)時(shí)脈沖

上位機(jī)開(kāi)發(fā)思路
為了便于操作,需要配一個(gè)HMI人機(jī)界面來(lái)進(jìn)行使用。這個(gè)的HMI形式是比較多樣化的,如觸摸屏、組態(tài)軟件等,但是這里,我們采用目前比較流行的方式——C#開(kāi)發(fā)上位機(jī),來(lái)供用戶(hù)使用。C#開(kāi)發(fā)上位機(jī)相對(duì)于傳統(tǒng)的組態(tài)軟件,各自都有自己的優(yōu)缺點(diǎn),主要體現(xiàn)在如下三個(gè)方面:
功能限制:組態(tài)軟件對(duì)于一些特定的需求或者邏輯,會(huì)有一定的局限性,使用上也受到軟件本身的約束;C#開(kāi)發(fā)上位機(jī)完全自主開(kāi)發(fā),幾乎不存在功能上的限制,并且擴(kuò)展方便。
技術(shù)要求:組態(tài)軟件最大的優(yōu)勢(shì)在于方便,因?yàn)樗旧矶技闪艘恍┩ㄓ脜f(xié)議和元件,只需要按照使用說(shuō)明進(jìn)行組態(tài)配置即可;C#開(kāi)發(fā)需要完全自己搭建框架和實(shí)現(xiàn)底層代碼,對(duì)開(kāi)發(fā)者的技術(shù)要求會(huì)更高一些。
價(jià)格成本:組態(tài)軟件需要按套、按點(diǎn)位收費(fèi),意味著每個(gè)項(xiàng)目無(wú)形中都有一個(gè)基礎(chǔ)成本;C#開(kāi)發(fā)上位機(jī)自主開(kāi)發(fā),不需要二次授權(quán)費(fèi)用,并且開(kāi)發(fā)一套之后,可以快速應(yīng)用到其他項(xiàng)目中。
采用C#上位機(jī)開(kāi)發(fā),首先需要考慮的是通信問(wèn)題。西門(mén)子S7-1200支持很多種不同的通信協(xié)議,包括S7、ModbusTCP、TCP/IP、UDP、OPC等,從開(kāi)發(fā)成本上來(lái)說(shuō),我們優(yōu)先考慮S7和ModbusTCP,對(duì)于S7和ModbusTCP通信協(xié)議,比較一下兩者的優(yōu)缺點(diǎn):
S7協(xié)議為西門(mén)子內(nèi)部協(xié)議,協(xié)議本身不公開(kāi),需要調(diào)用或者自己開(kāi)發(fā)通信庫(kù),使用S7通信協(xié)議需要勾選CPU中的允許來(lái)自遠(yuǎn)程對(duì)象的PUT/GET通信訪問(wèn)。
ModbusTCP為公開(kāi)、免費(fèi)協(xié)議,可以自己開(kāi)發(fā)通信庫(kù)或者使用開(kāi)源庫(kù),使用ModbusTCP通信協(xié)議需要編寫(xiě)一定的PLC程序來(lái)實(shí)現(xiàn)地址映射。
從公開(kāi)免費(fèi)和使用范圍的角度來(lái)考慮,這里采用ModbusTCP通信協(xié)議,因?yàn)槟銓W(xué)會(huì)了ModbusTCP,意味著市場(chǎng)上的大部分儀表、PLC通信你都可以搞得定,PLC程序編寫(xiě)如下所示:
1、創(chuàng)建DB塊
這里首先創(chuàng)建一個(gè)DB塊,里面包含了常用的一些操作和參數(shù)設(shè)置,值得注意的是,由于Modbus保持型寄存器的Bit位操作比較麻煩,因此這里我們統(tǒng)一使用Word類(lèi)型來(lái)代替Bit。

2、Modbus地址與PLC地址的映射(控制位)

3、Modbus地址與PLC地址的映射(參數(shù)地址)

4、ModbusServer程序編寫(xiě)

5、上位機(jī)UI界面設(shè)計(jì)

6、ModbusTCP通信庫(kù)
上位機(jī)開(kāi)發(fā)功能實(shí)現(xiàn)的核心在于ModbusTCP通信庫(kù)編寫(xiě),由于Modbus協(xié)議是公開(kāi)免費(fèi),可以自己根據(jù)Modbus協(xié)議來(lái)開(kāi)發(fā),也可以使用開(kāi)源的Modbus庫(kù),如NModbus等,有了ModbusTCP通信庫(kù)之后,我們可以將更多的精力放在業(yè)務(wù)處理及邏輯處理上面。
7、ModbusTCP通信點(diǎn)表
上位機(jī)開(kāi)發(fā)功能
1、首先創(chuàng)建一個(gè)Windows窗體應(yīng)用項(xiàng)目,項(xiàng)目名稱(chēng)為thinger.cn.MotionPro。
2、日志顯示功能:日志顯示采用ListView進(jìn)行顯示,綁定一個(gè)ImageList用來(lái)區(qū)分信息、報(bào)警、錯(cuò)誤,添加日志方法的參數(shù)包含日志等級(jí)及日志內(nèi)容。
3、自己開(kāi)發(fā)ModbusTCP通信庫(kù)或者使用開(kāi)源庫(kù),該庫(kù)應(yīng)該具備建立連接、斷開(kāi)連接、預(yù)置寄存器、讀取寄存器的功能。
4、建立連接和斷開(kāi)連接:這里通過(guò)按鈕實(shí)現(xiàn)建立連接和斷開(kāi)連接2個(gè)功能。
5、相對(duì)位置運(yùn)動(dòng):設(shè)置相對(duì)運(yùn)動(dòng)速度和相對(duì)運(yùn)動(dòng)位置,實(shí)現(xiàn)電機(jī)的相對(duì)運(yùn)動(dòng)。
6、絕對(duì)位置運(yùn)動(dòng):設(shè)置絕對(duì)運(yùn)動(dòng)速度和絕對(duì)運(yùn)動(dòng)位置,實(shí)現(xiàn)電機(jī)的相對(duì)運(yùn)動(dòng)。
7、點(diǎn)動(dòng)運(yùn)動(dòng)模式:設(shè)置點(diǎn)動(dòng)運(yùn)動(dòng)速度,按住正向點(diǎn)動(dòng)或者反向點(diǎn)動(dòng),實(shí)現(xiàn)電機(jī)的點(diǎn)動(dòng)運(yùn)動(dòng)。
8、回原點(diǎn)模式:點(diǎn)擊回原點(diǎn),可以控制物體回到原點(diǎn)位置并停止。
9、運(yùn)動(dòng)停止、運(yùn)動(dòng)暫停、復(fù)位相關(guān)功能。
寫(xiě)在最后
這個(gè)項(xiàng)目整體來(lái)說(shuō)難度不是很大,但是涉及的知識(shí)面比較廣,非常適合上位機(jī)初學(xué)者進(jìn)行學(xué)習(xí)和練手。
需要相關(guān)學(xué)習(xí)資料,可以加小助理微信:thingerzj