從簡(jiǎn)單案例了解PLC編程與上位機(jī)程序開(kāi)發(fā)調(diào)試
自動(dòng)化行業(yè),正在慢慢往軟件行業(yè)靠近。
很多PLC工程師也開(kāi)始慢慢意識(shí)到,掌握一門(mén)編程語(yǔ)言,變得越來(lái)越重要。
那么PLC工程師學(xué)會(huì)之后,會(huì)是一種什么樣的體驗(yàn)?很多人最直接的體驗(yàn)就是:原理性的東西懂得更多,技術(shù)棧更全面,可以自己獨(dú)立完成項(xiàng)目評(píng)估、制圖、選型、PLC程序開(kāi)發(fā)調(diào)試,到上位機(jī)開(kāi)發(fā),甚至于更上層的WEB端、移動(dòng)端。
言歸正傳,昌暉儀表在本文分享一個(gè)工業(yè)現(xiàn)場(chǎng)常用的運(yùn)動(dòng)控制案例,從硬件選型到程序設(shè)計(jì),再?gòu)谋镜卣{(diào)試到上位機(jī)開(kāi)發(fā)調(diào)試。這個(gè)案例算是一個(gè)比較簡(jiǎn)單的案例,但是可以有效地將PLC與上位機(jī)結(jié)合起來(lái),對(duì)于初學(xué)者來(lái)說(shuō),是一個(gè)比較適合的練手項(xiàng)目。
1、硬件選型控制器:200Smart PLC,型號(hào)為ST20(DC-DC-DC)驅(qū)動(dòng)器:步進(jìn)驅(qū)動(dòng)器電機(jī):42mm步進(jìn)電機(jī)限位:3個(gè)限位開(kāi)關(guān),分別對(duì)應(yīng)原點(diǎn)、左限位、右限位平臺(tái):?jiǎn)屋S模組按鈕指示燈:?jiǎn)?dòng)、停止、運(yùn)行狀態(tài)、3個(gè)行程開(kāi)關(guān)(模擬完成信號(hào))
2、硬件接線圖
3、PLC程序開(kāi)發(fā)S7-200 Smart PLC運(yùn)動(dòng)控制需要使用運(yùn)動(dòng)控制向?qū)?lái)實(shí)現(xiàn),核心程序如下:

4、上位機(jī)程序開(kāi)發(fā)①I(mǎi)/O表:PLC程序編程中,會(huì)預(yù)留上位機(jī)接口,上位機(jī)I/O表如下所示:
②界面設(shè)計(jì):上位機(jī)UI界面設(shè)計(jì)
③功能實(shí)現(xiàn):上位機(jī)主要包含實(shí)時(shí)狀態(tài)與數(shù)據(jù)監(jiān)控、速度及位置參數(shù)設(shè)置、系統(tǒng)日志顯示、通信參數(shù)設(shè)置。◆實(shí)時(shí)狀態(tài)與數(shù)據(jù)監(jiān)控本案例與西門(mén)子PLC之間的通信方式采用S7通信,使用開(kāi)源通信庫(kù)來(lái)實(shí)現(xiàn),基于多線程實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)采集,并結(jié)合實(shí)際I/O進(jìn)行數(shù)據(jù)解析。private void PLCCommunication(){ while (!cts.IsCancellationRequested) { byte[] result = plc.ReadBytes(StoreType.DataBlock, 1, 0, 23); if (result != null && result.Length == 23) { this.BeginInvoke(new Action(() => { //這里進(jìn)行實(shí)時(shí)狀態(tài)更新 })); Thread.Sleep(10); } }}
◆速度及位置參數(shù)設(shè)置參數(shù)設(shè)置采用獨(dú)立的設(shè)置界面,通過(guò)窗體傳值來(lái)實(shí)現(xiàn)。
代碼如下所示:/// /// 設(shè)定值/// public string setValue = string.Empty;private void btn_Set_Click(object sender, EventArgs e){ this.setValue = this.txt_SetValue.Text; this.DialogResult = DialogResult.OK; this.Close();}
◆系統(tǒng)日志顯示系統(tǒng)日志基于ListView控件開(kāi)發(fā),實(shí)現(xiàn)日志、報(bào)警、警告三種不同狀態(tài)區(qū)別顯示,可同時(shí)存儲(chǔ)至數(shù)據(jù)庫(kù),便于后續(xù)追溯。private string CurrentTime{ get { return DateTime.Now.ToString("HH:mm:ss"); }}//寫(xiě)入日志private void AddLog(int index, string log){ if (this.lstInfo.InvokeRequired) { this.lstInfo.Invoke(new Action(() => { ListViewItem lst = new ListViewItem(" " + CurrentTime, index); lst.SubItems.Add(log); this.lstInfo.Items.Insert(0, lst); })); } else { ListViewItem lst = new ListViewItem(" " + CurrentTime, index); lst.SubItems.Add(log); this.lstInfo.Items.Insert(0, lst); }}
◆通信參數(shù)設(shè)置通信參數(shù)為系統(tǒng)參數(shù),采用Winform的Settings來(lái)進(jìn)行配置存儲(chǔ),簡(jiǎn)單快捷。界面設(shè)計(jì)如下所示:
代碼如下所示:public SaveDefaultSettingDelegate SaveDefaultSetting;private void btn_Set_Click(object sender, EventArgs e){ CommSet set = new CommSet(); try { set.IPAddress = this.txt_IPAddress.Text; set.CPUType = this.cmb_CPUType.Text; set.StoreTime = Convert.ToInt32(this.txt_StoreTime.Text); set.AutoStore = this.chk_AutoStore.Checked; } catch (Exception) { MessageBox.Show("請(qǐng)檢查數(shù)據(jù)格式是否正確","格式錯(cuò)誤"); return; } SaveDefaultSetting(set); MessageBox.Show("配置成功,立即生效", "配置成功"); this.Close(); }
5、寫(xiě)在后面近幾年, 隨著越來(lái)越多的設(shè)備開(kāi)始加入IIoT 網(wǎng)絡(luò)(Industrial Internet of Things,工業(yè)物聯(lián)網(wǎng)簡(jiǎn)稱(chēng)IIoT),IT與OT之間的界限將逐漸消失,直到成為一個(gè)或相同的系統(tǒng)為止。
版權(quán)與免責(zé)聲明:
1.凡本網(wǎng)注明"來(lái)源:歐亞貿(mào)易網(wǎng)"的所有作品,版權(quán)均屬于歐亞貿(mào)易網(wǎng),轉(zhuǎn)載請(qǐng)必須注明歐亞貿(mào)易網(wǎng)。違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
2.企業(yè)發(fā)布的公司新聞、技術(shù)文章、資料下載等內(nèi)容,如涉及侵權(quán)、違規(guī)遭投訴的,一律由發(fā)布企業(yè)自行承擔(dān)責(zé)任,本網(wǎng)有權(quán)刪除內(nèi)容并追溯責(zé)任。
3.本網(wǎng)轉(zhuǎn)載并注明自其它來(lái)源的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類(lèi)作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品來(lái)源,并自負(fù)版權(quán)等法律責(zé)任。
4.如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系。