OPCServer Modbus使用和配置
一,安裝KEPware.Enhanced.OPC.DDE.KEPServer。(PLC數(shù)據(jù)傳送給KEPServer,開發(fā)的程序用OPCServer讀KEPServer)
?????
???
?
??? 設(shè)置ip地址后面是指的plc站號(hào),此處必須和plc上站號(hào)對(duì)應(yīng)。否則無(wú)法接收數(shù)據(jù)。
???
????? 打開quick client 查看傳值情況
?????
二.C#程序代碼
???引用opcdaauto.dll
?? 在win7 64位下KepServer = new OPCServer()會(huì)出錯(cuò)的問題,
?? 檢索COM 類工廠中 CLSID 為 <28e68f9a-8d75-11d1-8dc3-3c302a000000> 的組件時(shí)失敗,原因是出現(xiàn)以下錯(cuò)誤: 80040154
? 1.一定要到C:\Windows\SysWOW64路徑下打開cmd.exe運(yùn)行命令文件(而不是在運(yùn)行打開),注冊(cè)“OPCDAAuto.dll” 輸入命令: REGSVR32 OPCDAAuto.dll;即可
? 2.編譯工具目標(biāo)要選擇x86
?? KepServer.Connect("KEPware.KEPServerEx.V4", "127.0.0.1");? 此處ip地址是安裝KEPware.Enhanced.OPC.DDE.KEPServer電腦的ip地址.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OPCAutomation; using System.Threading;namespace SPCTest {public partial class Form2 : Form{private OPCServer KepServer;private OPCGroups KepGroups;private OPCGroup KepGroup;private OPCItems KepItems;//軸承凈重,注脂量,防塵蓋壓入深度,防塵蓋平整度 壓入OK/NGprivate OPCItem item1, item2, item3;public Form2(){InitializeComponent();}#region OPC Serverprivate void KepServerLoad(){try{KepServer = new OPCServer();KepServer.Connect("KEPware.KEPServerEx.V4", "127.0.0.1");if (KepServer.ServerState == (int)OPCServerState.OPCRunning){// statusLabelConnectInfo.Text = "OPC Server連接成功"; }else{// statusLabelConnectInfo.Text = "OPC Server連接失敗";return;}}catch (Exception ex){// statusLabelConnectInfo.Text = "OPC Server連接失敗," + ex.Message;return;}KepGroups = KepServer.OPCGroups;Thread t1; // 開1個(gè)線程用于讀取數(shù)據(jù) t1 = new Thread(new ThreadStart(KepProcess));t1.Start();}public void KepProcess(){//KepGroup = KepGroups.Add("Channel.Device.Group");KepGroup = KepGroups.Add("Channel1.Device1.Group");KepGroup.UpdateRate = 250;KepGroup.IsActive = true;KepGroup.IsSubscribed = true;//當(dāng)KepGroup中數(shù)據(jù)發(fā)生改變的觸發(fā)事件 KepGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange);KepItems = KepGroup.OPCItems;item1 = KepItems.AddItem("Channel1.Device1.A01", 1);item2 = KepItems.AddItem("Channel1.Device1.A02", 2);item3 = KepItems.AddItem("Channel1.Device1.A03", 3);}//當(dāng)數(shù)據(jù)改變時(shí)觸發(fā)的事件 public delegate void DelegateShowMessage(string str);public void KepGroup_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps){string str = "";DelegateShowMessage show1 = new DelegateShowMessage(ShowMessage);for (int i = 1; i <= NumItems; i++){if (ClientHandles.GetValue(i).Equals(1)){str = "A01:" + ItemValues.GetValue(i).ToString();}if (ClientHandles.GetValue(i).Equals(2)){str = "A02:" + ItemValues.GetValue(i).ToString();}if (ClientHandles.GetValue(i).Equals(3)){str = "A03:" + ItemValues.GetValue(i).ToString();}BeginInvoke(show1, new string[] { str });}}public void ShowMessage(string str){richTextBox1.AppendText(str+",");}#endregionprivate void Form2_Load(object sender, EventArgs e){KepServerLoad();}private void Form2_FormClosing(object sender, FormClosingEventArgs e){KepServer.Disconnect();}} }?
轉(zhuǎn)載于:https://www.cnblogs.com/ike_li/p/5468658.html
總結(jié)
以上是生活随笔為你收集整理的OPCServer Modbus使用和配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用linux系统下载BT?
- 下一篇: javaScript学习之路(1)词法结