|
自動化行業,正在慢慢往軟件行業靠近。
很多plc工程師也開始慢慢意識到,掌握一門編程語言,變得越來越重要。
那麼PLC工程師學會plc編程之後,會是一種什麼樣的體驗?很多人最直接的體驗就是:原理性的東西懂得更多,技術棧更全麵,可以自己獨立完成項目評估、製圖、選型、PLC程序開發調試,到上位機開發,甚至於更上層的WEB端、移動端。
言歸正傳,本文分享一個工業現場常用的運動控製案例,從硬件選型到程序設計,再從本地調試到上位機開發調試。這個案例算是一個比較簡單的案例,但是可以有效地將PLC與上位機結合起來,對於初學者來說,是一個比較適合的練手項目。
1、硬件選型
控製器:西門子200Smart PLC,型號為ST20(DC-DC-DC)
驅動器:步進驅動器
電機:42mm步進電機
限位:3個限位開關,分別對應原點、左限位、右限位
平台:單軸模組
按鈕指示燈:啟動、停止、運行狀態、3個行程開關(模擬完成信號)
2、硬件接線圖
3、PLC程序開發
S7-200 Smart PLC運動控製需要使用運動控製向導來實現,核心程序如下:
4、上位機程序開發
①I/O表:PLC程序編程中,會預留上位機接口,上位機I/O表如下所示:
②界麵設計:上位機UI界麵設計
③功能實現:上位機主要包含實時狀態與數據監控、速度及位置參數設置、係統日誌顯示、通信參數設置。
◆實時狀態與數據監控
本案例與西門子plc之間的通信方式采用S7通信,使用開源通信庫s7.net來實現,基於多線程實現數據的實時采集,並結合實際I/O進行數據解析。
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(() =>
{
//這裏進行實時狀態更新
}));
Thread.Sleep(10);
}
}
}
◆速度及位置參數設置
參數設置采用獨立的設置界麵,通過窗體傳值來實現。
代碼如下所示:
///
/// 設定值
///
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();
}
◆係統日誌顯示
係統日誌基於ListView控件開發,實現日誌、報警、警告三種不同狀態區別顯示,可同時存儲至數據庫,便於後續追溯。
private string CurrentTime
{
get { return DateTime.Now.ToString("HH:mm:ss"); }
}
//寫入日誌
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);
}
}
◆通信參數設置
通信參數為係統參數,采用Winform的Settings來進行配置存儲,簡單快捷。界麵設計如下所示:
代碼如下所示:
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("請檢查數據格式是否正確","格式錯誤");
return;
}
SaveDefaultSetting(set);
MessageBox.Show("配置成功,立即生效", "配置成功");
this.Close();
}
5、寫在後麵
近幾年, 隨著越來越多的設備開始加入IIoT 網絡(Industrial Internet of Things,工業物聯網簡稱IIoT),IT與OT之間的界限將逐漸消失,直到成為一個或相同的係統為止。
|
|