C#实现OPC通讯

qq_34139010 2016-03-10 09:09:25
请教大神,用C#编写程序利用OPC在同一时间读取写入若干个参数,是属于同步通讯还是异步?若要把读入的参数和写入的参数都记录到SQL Server中应该怎么做,能否给鄙人一个读写数据的DEMO?再次谢帮助我的大神!
...全文
3545 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzspace 2017-09-11
  • 打赏
  • 举报
回复
UCAsp.OPC是一个基于OPC基金会的库的支持DA和UA的OPC客户端C#的中间件,可以在不同的协议中轻松、透明地执行OPC Server操作。 UcAsp.Opc C#的客户端API共有15个,支持.Net 4.0~4.6; 一、如何连接一个OPC服务器: 例 DA: OpcClient client = new OpcClient(new Uri("opcda://127.0.0.1/Matrikon.OPC.Simulation.1")); UA: OpcClient client = new OpcClient(new Uri("opc.tcp://127.0.0.1:26543/Workstation.RobotServer")); 在使用中通过Url的Scheme区分是DA还UA,开发者不用需要关心UA还是DA; 二、如何读取对应节点的值: string r = client.Read("Random.String"); 三、如何写入一个节点的值: client.Write("Robot1.Axis1", 2.0090f); 上面两个环节UA和DA没有差别 四、节点变化监听: 该库采用的建立Group的方式监听组的变化情况,实现代码如下 public void UAGroup() { OpcClient client = new OpcClient(new Uri("opc.tcp://127.0.0.1:26543/Workstation.RobotServer")); OpcGroup group = client.AddGroup("Test"); client.AddItems("Test", new string[] { "Robot1.Axis1", "Robot1.Axis2" }); group.DataChange += Group_DataChange; Console.WriteLine(group); } private void Group_DataChange(object sender, System.Collections.Generic.List e) { foreach (OpcItemValue o in e) { Console.WriteLine(o.Value); } } 这里格式比较难排,移步 http://www.ucasp.net/opc/opcda-opcua-Csharp.shtml
zhangzsy1 2016-08-09
  • 打赏
  • 举报
回复
求赐教,63534396@QQ.com
zhangzsy1 2016-08-09
  • 打赏
  • 举报
回复
求大神赐教啊
qq_34139010 2016-03-25
  • 打赏
  • 举报
回复
引用 32 楼 u014171051 的回复:
学子!一定要支持一下。我也刚完成一个关于opc的项目,别着急。
关于OPC还是有些东西需要跟你交流下。
qq_34139010 2016-03-25
  • 打赏
  • 举报
回复
引用 32 楼 u014171051 的回复:
学子!一定要支持一下。我也刚完成一个关于opc的项目,别着急。
您能留个联系方式吗?以后有问题还想请教下您?我邮箱530859564@qq.com
牛牛2014 2016-03-25
  • 打赏
  • 举报
回复
邮箱:david.liu@chunfai.com.cn
牛牛2014 2016-03-24
  • 打赏
  • 举报
回复
学子!一定要支持一下。我也刚完成一个关于opc的项目,别着急。
qq_34139010 2016-03-23
  • 打赏
  • 举报
回复
是这样吗 private bool CreateGroup() { try { OPCServer KepServer=new OPCServer(); OPCgroup KepGroups=NULL; KepGroups = KepServer.OPCGroups; KepGroup = KepGroups.Add("OPCDOTNETGROUP"); SetGroupProperty(); KepGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange); KepGroup.AsyncWriteComplete += new DIOPCGroupEvent_AsyncWriteCompleteEventHandler(KepGroup_AsyncWriteComplete); KepItems = KepGroup.OPCItems; } catch (Exception err) { MessageBox.Show("创建组出现错误:"+err.Message,"提示信息",MessageBoxButtons.OK,MessageBoxIcon.Warning); return false; } return true; }
qq_34139010 2016-03-23
  • 打赏
  • 举报
回复
引用 24 楼 u014171051 的回复:
把你的定义变量部分发的更全一些。
namespace OPC测试通过 { public partial class MainFrom : Form { public MainFrom() { InitializeComponent(); } #region 私有变量 /// <summary> /// OPCServer Object /// </summary> OPCServer KepServer; /// <summary> /// OPCGroups Object /// </summary> OPCGroups KepGroups; /// <summary> /// OPCGroup Object /// </summary> OPCGroup KepGroup; /// <summary> /// OPCItems Object /// </summary> OPCItems KepItems; /// <summary> /// OPCItem Object /// </summary> OPCItem KepItem; /// <summary> /// 主机IP /// </summary> string strHostIP = ""; /// <summary> /// 主机名称 /// </summary> string strHostName = ""; /// <summary> /// 连接状态 /// </summary> bool opc_connected = false; /// <summary> /// 客户端句柄 /// </summary> int itmHandleClient = 0; /// <summary> /// 服务端句柄 /// </summary> int itmHandleServer = 0; #endregion
牛牛2014 2016-03-23
  • 打赏
  • 举报
回复
你是不是opcgroup KepGroups=new opcgroup()了 应该为:opcgroup KepGroups=NULL;
KJ_Wang 2016-03-23
  • 打赏
  • 举报
回复
西门子官网就有,太多了
牛牛2014 2016-03-23
  • 打赏
  • 举报
回复
把你的定义变量部分发的更全一些。
qq_34139010 2016-03-23
  • 打赏
  • 举报
回复
引用 19 楼 u014171051 的回复:
OPCServer MyServer=new OPCServer()
试了试,并不好用
qq_34139010 2016-03-23
  • 打赏
  • 举报
回复
引用 20 楼 u014171051 的回复:
你这是网上的例子,我也看过
我去试试哈
qq_34139010 2016-03-23
  • 打赏
  • 举报
回复
引用 20 楼 u014171051 的回复:
你这是网上的例子,我也看过
现在是出现错误解决不了了,.NET版本也换了,dll文件也换了。无济于事
qq_34139010 2016-03-23
  • 打赏
  • 举报
回复
引用 30 楼 牛牛2014的回复:
我这就去试!!不管结果如何真心感谢您我再弄不出来,老师就要给我换课题了,这么些天都白做了。
牛牛2014 2016-03-23
  • 打赏
  • 举报
回复
牛牛2014 2016-03-23
  • 打赏
  • 举报
回复
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; namespace WindowsFormsApplication1 { public partial class FrmTestOPC : Form { public FrmTestOPC() { InitializeComponent(); } OPCServer newSever=new OPCServer(); OPCGroups newGroups; OPCGroup newGroup; /// private bool ConnectRemoteServer() { try { newSever.Connect("KingView.View", "");//连接本地服务器:服务器名+主机名或IP if (newSever.ServerState == (int)OPCServerState.OPCRunning) { return true; } else { return false; } } catch (Exception err) { MessageBox.Show("连接远程服务器出现错误:" + err.Message, "提示"); return false; } } /// private bool CreateGroup() { try { newGroups=newSever.OPCGroups; newGroup =newGroups.Add("MeterRun1_CurrentParameter"); return true; } catch (Exception err) { MessageBox.Show("创建组出现错误:"+err.Message); return false; } } /// private void exit() { newSever.OPCGroups.RemoveAll(); newSever.Disconnect(); this.Close(); } private void btnConnectServer_Click(object sender, EventArgs e) { lblShowConnection.Text = ConnectRemoteServer().ToString(); } private void btnCreate_Click(object sender, EventArgs e) { lblShowCreateGroup.Text = CreateGroup().ToString(); } private void btnExit_Click(object sender, EventArgs e) { exit(); } } } 刚做的测试,没问题。供参考
牛牛2014 2016-03-22
  • 打赏
  • 举报
回复
你这是网上的例子,我也看过
牛牛2014 2016-03-22
  • 打赏
  • 举报
回复
定义 opcserver 不要定义opcserverclass
加载更多回复(18)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧