1、先上圖
前面10講,讓你爽煹了肝,已經(jīng)進(jìn)入最后收尾階段,這節(jié)來(lái)個(gè)常規(guī)應(yīng)用,讓前面的技能直接飛上天,我們要做的界面軟件是這樣的,雖然沒(méi)有潘金蓮漂亮,但也是爆抱:
2、如何爆?
1、創(chuàng)建plc中的寄存器數(shù)據(jù)
這里經(jīng)過(guò)與PLC電氣硬件工程師溝通,明確了這3個(gè)區(qū)的寄存器代表的含義,具體哪些寄存器存放的是什么數(shù)據(jù),需要與他們仔細(xì)溝通,并用excel記錄下來(lái),現(xiàn)在只是舉例,說(shuō)明現(xiàn)場(chǎng)有4個(gè)窯爐,每個(gè)窯爐有溫度,水位,轉(zhuǎn)速,轉(zhuǎn)角,狀態(tài),分別是CIO區(qū)的BOOL,H區(qū)的SHORT,W區(qū)的FLOAT數(shù)據(jù)類型,這個(gè)關(guān)鍵,需要一個(gè)個(gè)數(shù)據(jù)地址要明確清晰,不出差錯(cuò)。
將12個(gè)地址保存在excel文件中,程序中來(lái)讀取這個(gè)excel,也就是說(shuō)我們要將現(xiàn)場(chǎng)需要采集PLC數(shù)據(jù)的寄存器地址全部放在EXCEL文件中,統(tǒng)一管理和程序讀取利用起來(lái),這很重要。
2、創(chuàng)建winform項(xiàng)目
3、創(chuàng)建相關(guān)目錄,引入NPOI,SQLite,OmronFins通信庫(kù)
?
PLC變量實(shí)體類
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OmRonMesFormsApp.Model
{
public class PlcVariableModel
{
/// <summary>
///名稱
/// </summary>
public string Name { get; set; }
/// <summary>
/// 狀態(tài)
/// </summary>
public string State { get; set; }
/// <summary>
/// 溫度
/// </summary>
public string Temperature { get; set; }
/// <summary>
/// 水位
/// </summary>
public string Waterlevel { get; set; }
/// <summary>
/// 轉(zhuǎn)速
/// </summary>
public string Speed { get; set; }
/// <summary>
/// 轉(zhuǎn)角
/// </summary>
public string Corner { get; set; }
/// <summary>
/// 時(shí)間
/// </summary>
public string Inserttime { get; set; }
}
}
4、在sqlite數(shù)據(jù)庫(kù)中創(chuàng)建數(shù)據(jù)及表
這里簡(jiǎn)單介紹下sqlite數(shù)據(jù)庫(kù),這個(gè)數(shù)據(jù)庫(kù)很好中,雖然功能沒(méi)有sqlserver,mysql,oracle等強(qiáng)大,但它在上位機(jī)軟件中非常方便,不需要安裝,不需要配置,所有sql命令都支持,不太清楚的可百度求助下。
注意將sqlite數(shù)據(jù)庫(kù)放在項(xiàng)目編譯生成的debug目錄下,因?yàn)槌绦蚓幾g后會(huì)有debug目錄,這樣方便訪問(wèn),便于部署和移植項(xiàng)目
?
5、UI布局
注意這里布局用到了傳統(tǒng)winform控件和自定義的控件,以增強(qiáng)視覺(jué)感觀。
?6、編寫邏輯
連接代碼:
注意這里用到了定時(shí)器,因?yàn)橐獙?shí)時(shí)獲取PLC數(shù)據(jù),必須使用定時(shí)讀取功能,具體多少時(shí)間讀一次,自己可以修改
/// <summary>
/// 連接Plc
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnOpen_Click(object sender, EventArgs e)
{
string ip = txtIPAddress.Text.Trim();
string port = txtPort.Text.Trim();
finsTcp = new FinsTcp(ip, Convert.ToInt32(port), (byte)10, (byte)04);// 創(chuàng)建連接
var result = finsTcp.Connect();// 開(kāi)始連接PLC
if (!result.IsSuccessed)
{
MessageBox.Show(result.Message);
return;
}
xktToggle4.Checked = true;
SetTextDisable(true);
this.btnOpen.Enabled = false;
this.btnClose.Enabled = true;
if (result.IsSuccessed)
{
plcTimer.Tick += PlcTimer_Tick;
plcTimer.Enabled = true;
plcTimer.Start();
plcTimer.Interval = 8000 * 1;
}
}
?
?窗體加載時(shí),就啟用定時(shí)器,讀取plc寄存器的變量地址
?
這里思路很重要,不要亂手腳,不要亂手腳,穩(wěn)住方向盤。
3、運(yùn)行軟件
?10秒后加載最新的數(shù)據(jù)。
連接PLC開(kāi)始實(shí)時(shí)讀取數(shù)據(jù)
稍等一下,自動(dòng)讀取數(shù)據(jù)
對(duì)比下PLC的數(shù)據(jù),一致的,成功的。
修改下數(shù)據(jù),將cio100.0,100.1改為1,看看實(shí)時(shí)讀取了沒(méi)有,設(shè)備停止了,界面有實(shí)時(shí)監(jiān)測(cè)
?
修改下數(shù)據(jù),將H100.0,100.1改為65,看看實(shí)時(shí)讀取了沒(méi)有,數(shù)據(jù)有變化了,界面有實(shí)時(shí)監(jiān)測(cè)
數(shù)據(jù)準(zhǔn)確無(wú)誤,效果帥B了,可以爆肝了。
打字不易,截圖不易,代碼不易,準(zhǔn)備不易,原創(chuàng)不易,多多點(diǎn)贊收藏,江湖有你,共同致富。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-819103.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-819103.html
到了這里,關(guān)于C#上位機(jī)與歐姆龍PLC的通信11----【爆肝了】上位機(jī)應(yīng)用開(kāi)發(fā)(Winform版)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!