php opc数据,OPC连接获取数据
【实例简介】
【实例截图】
【核心代码】
///摘要
///程式使用C#.NET 2005 编写
///引用类库OPCDAAuto.dll
///OPCServer采用KEPWare
///在windows xp sp2、sp3、windows 2003上测试通过
///完成于:2008年12月31日
///测试于:2009年01月05日
///
///作者:潇洒草
///Email:zhkai868@163.com
///QQ:44649029
///
///如分发,请保留此摘要。
///鄙视那些拿代码当宝贝的人,鄙视那些拿源码换源码的人,鄙视那些自私的人。
///别人看到你的代码,你能死啊?对你有多大威胁啊?强烈鄙视~~~
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Collections;
using OPCAutomation;
namespace OPC测试通过
{
public partial class MainFrom : Form
{
public MainFrom()
{
InitializeComponent();
}
#region 私有变量
///
/// OPCServer Object
///
OPCServer KepServer;
///
/// OPCGroups Object
///
OPCGroups KepGroups;
///
/// OPCGroup Object
///
OPCGroup KepGroup;
///
/// OPCItems Object
///
OPCItems KepItems;
///
/// OPCItem Object
///
OPCItem KepItem;
///
/// 主机IP
///
string strHostIP = "";
///
/// 主机名称
///
string strHostName = "";
///
/// 连接状态
///
bool opc_connected = false;
///
/// 客户端句柄
///
int itmHandleClient = 0;
///
/// 服务端句柄
///
int itmHandleServer = 0;
#endregion
#region 方法
///
/// 枚举本地OPC服务器
///
private void GetLocalServer()
{
//获取本地计算机IP,计算机名称
IPHostEntry IPHost = Dns.Resolve(Environment.MachineName);
if (IPHost.AddressList.Length > 0)
{
strHostIP = IPHost.AddressList[0].ToString();
}
else
{
return;
}
//通过IP来获取计算机名称,可用在局域网内
IPHostEntry ipHostEntry = Dns.GetHostByAddress(strHostIP);
strHostName=ipHostEntry.HostName.ToString();
//获取本地计算机上的OPCServerName
try
{
KepServer = new OPCServer();
object serverList = KepServer.GetOPCServers(strHostName);
foreach (string turn in (Array)serverList)
{
cmbServerName.Items.Add(turn);
}
cmbServerName.SelectedIndex = 0;
btnConnServer.Enabled = true;
}
catch(Exception err)
{
MessageBox.Show("枚举本地OPC服务器出错:" err.Message,"提示信息",MessageBoxButtons.OK,MessageBoxIcon.Warning);
}
}
///
/// 创建组
///
private bool CreateGroup()
{
try
{
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;
}
///
/// 设置组属性
///
private void SetGroupProperty()
{
KepServer.OPCGroups.DefaultGroupIsActive =Convert.ToBoolean(txtGroupIsActive.Text);
KepServer.OPCGroups.DefaultGroupDeadband = Convert.ToInt32(txtGroupDeadband.Text);
KepGroup.UpdateRate = Convert.ToInt32(txtUpdateRate.Text);
KepGroup.IsActive = Convert.ToBoolean(txtIsActive.Text);
KepGroup.IsSubscribed =Convert.ToBoolean(txtIsSubscribed.Text);
}
///
/// 列出OPC服务器中所有节点
///
///
private void RecurBrowse(OPCBrowser oPCBrowser)
{
//展开分支
oPCBrowser.ShowBranches();
//展开叶子
oPCBrowser.ShowLeafs(true);
foreach (object turn in oPCBrowser)
{
listBox1.Items.Add(turn.ToString());
}
}
///
/// 获取服务器信息,并显示在窗体状态栏上
///
private void GetServerInfo()
{
tsslServerStartTime.Text ="开始时间:" KepServer.StartTime.ToString() " ";
tsslversion.Text ="版本:" KepServer.MajorVersion.ToString() "." KepServer.MinorVersion.ToString() "." KepServer.BuildNumber.ToString();
}
///
/// 连接OPC服务器
///
/// OPCServerIP
/// OPCServer名称
private bool ConnectRemoteServer(string remoteServerIP, string remoteServerName)
{
try
{
KepServer.Connect(remoteServerName, remoteServerIP);
if (KepServer.ServerState == (int)OPCServerState.OPCRunning)
{
tsslServerState.Text = "已连接到-" KepServer.ServerName " ";
}
else
{
//这里你可以根据返回的状态来自定义显示信息,请查看自动化接口API文档
tsslServerState.Text = "状态:" KepServer.ServerState.ToString() " ";
}
}
catch (Exception err)
{
MessageBox.Show("连接远程服务器出现错误:" err.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
}
return true;
}
#endregion
#region 事件
///
/// 写入TAG值时执行的事件
///
///
///
///
///
void KepGroup_AsyncWriteComplete(int TransactionID, int NumItems, ref Array ClientHandles, ref Array Errors)
{
lblState.Text = "";
for (int i = 1; i <= NumItems; i )
{
lblState.Text = "Tran:" TransactionID.ToString() " CH:" ClientHandles.GetValue(i).ToString() " Error:" Errors.GetValue(i).ToString();
}
}
///
/// 每当项数据有变化时执行的事件
///
/// 处理ID
/// 项个数
/// 项客户端句柄
/// TAG值
/// 品质
/// 时间戳
void KepGroup_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps)
{
//为了测试,所以加了控制台的输出,来查看事物ID号
//Console.WriteLine("********" TransactionID.ToString() "*********");
for (int i = 1; i <= NumItems; i )
{
this.txtTagValue.Text = ItemValues.GetValue(i).ToString();
this.txtQualities.Text = Qualities.GetValue(i).ToString();
this.txtTimeStamps.Text = TimeStamps.GetValue(i).ToString();
}
}
///
/// 选择列表项时处理的事情
///
///
///
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
if (itmHandleClient != 0)
{
this.txtTagValue.Text = "";
this.txtQualities.Text ="";
this.txtTimeStamps.Text = "";
Array Errors;
OPCItem bItem = KepItems.GetOPCItem(itmHandleServer);
//注:OPC中以1为数组的基数
int[] temp = new int[2] { 0, bItem.ServerHandle };
Array serverHandle = (Array)temp;
//移除上一次选择的项
KepItems.Remove(KepItems.Count, ref serverHandle, out Errors);
}
itmHandleClient = 1234;
KepItem = KepItems.AddItem(listBox1.SelectedItem.ToString(), itmHandleClient);
itmHandleServer = KepItem.ServerHandle;
}
catch(Exception err)
{
//没有任何权限的项,都是OPC服务器保留的系统项,此处可不做处理。
itmHandleClient = 0;
txtTagValue.Text = "Error ox";
txtQualities.Text = "Error ox";
txtTimeStamps.Text = "Error ox";
MessageBox.Show("此项为系统保留项:" err.Message,"提示信息");
}
}
///
/// 载入窗体时处理的事情
///
private void MainFrom_Load(object sender, EventArgs e)
{
GetLocalServer();
}
///
/// 关闭窗体时处理的事情
///
private void MainFrom_FormClosing(object sender, FormClosingEventArgs e)
{
if (!opc_connected)
{
return;
}
if (KepGroup != null)
{
KepGroup.DataChange -= new DIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange);
}
if (KepServer != null)
{
KepServer.Disconnect();
KepServer = null;
}
opc_connected = false;
}
///
/// 【按钮】设置
///
private void btnSetGroupPro_Click(object sender, EventArgs e)
{
SetGroupProperty();
}
///
/// 【按钮】连接OPC服务器
///
private void btnConnLocalServer_Click(object sender, EventArgs e)
{
try
{
if (!ConnectRemoteServer(txtRemoteServerIP.Text,cmbServerName.Text))
{
return;
}
btnSetGroupPro.Enabled = true;
opc_connected = true;
GetServerInfo();
RecurBrowse(KepServer.CreateBrowser());
if (!CreateGroup())
{
return;
}
}
catch (Exception err)
{
MessageBox.Show("初始化出错:" err.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
///
/// 【按钮】写入
///
private void btnWrite_Click(object sender, EventArgs e)
{
OPCItem bItem = KepItems.GetOPCItem(itmHandleServer);
int[] temp = new int[2] { 0, bItem.ServerHandle };
Array serverHandles=(Array)temp;
object[] valueTemp = new object[2] {"",txtWriteTagValue.Text };
Array values=(Array)valueTemp;
Array Errors;
int cancelID;
KepGroup.AsyncWrite(1,ref serverHandles,ref values,out Errors, 2009,out cancelID);
//KepItem.Write(txtWriteTagValue.Text);//这句也可以写入,但并不触发写入事件
GC.Collect();
}
#endregion
}
}
php opc数据,OPC连接获取数据相关推荐
- ajax请求数据 ztree_ajax 异步获取数据填充到表格显示(ajax) 文档(Options API) DataTables中文网...
描述(Description) 使用这个参数可以让 DataTables 像使用jQuery ajax 一样从一个数据源获取数据,最终获取到返回的数据 来显示表格,DataTables 支持 Java ...
- element excel导入数据,解析获取数据
前端导入excel表格,解析为json格式数据 npm install xlsx -g 全局安装xlsx 新建一个组件,随意命名,键入以下代码,复制即可用 <template><sp ...
- ajax读取数据失败,ajax 获取数据失败
1.想获取后台数据,但是前台调用不到,自己写了一个简单测试还是获取不到数据,直接提示数据加载失败 $(document).ready(function(e) { $("#submit&quo ...
- python如何获取传感器数据_连接获取传感器数据的几大方法
传感器的数量在整个地球表面和人们生活周遭空间激增,提供世界各种数据讯息.这些价格亲民的传感器是物联网(IoT)发展和我们的社会正面临数字化革命,背后的驱动力. 然而,连接和获取来自传感器的数据并不总是 ...
- MQTT数据处理之从tcp连接获取数据过程
- vuex异步获取数据_vuex 异步获取数据,却无法渲染页面
报错信息为 无法获取到program.teacher 返回undefined 但是奇怪的是 program.title 都能获取到..唯独获取不到多层的.. 模拟的数据 { "program ...
- windox连接电子秤通过COM口获取数据(java)
文档说明:该文档局限性太大(后端java连接COM端口获取数据),前端连接COM端口获取数据能连接获取不到,如果有大佬会前端获取的可以评论一下. 1.所需物品:java项目(JDK1.8),可以连接串 ...
- zookeeper专题:使用zookeeper客户端实现动态监听节点并获取数据
文章目录 1. zookeeper原生客户端 2. Curator客户端 1. zookeeper原生客户端 zookeeper原生客户端就是zookeeper官方自带的客户端,作为代码与zk服务器交 ...
- 利用串口网络助手上传数据、图片到OneNet平台以及获取数据(HTTP)
利用串口网络助手上传数据.图片到OneNet平台以及获取数据(HTTP) 使用网络助手连接OneNet服务器 HTTP上传数据至OneNet 获取数据 上传图片至OneNet 使用网络助手连接OneN ...
- java调用别人的接口获取数据存到mysql数据库
1.根据接口返回的字段创建数据库表 2.创建对应这个表的controller,service,mapper,pojo 3.在controller层调用Impl实现类.具体业务:接收数据并保存在数据库, ...
最新文章
- redis 哨兵_docker里创建redis哨兵
- 网页视频播放php拉伸代码,网页在线视频播放代码大全
- rails3系统架构
- 第十一章:【UCHome二次开发】功能修改
- 文献阅读课13-DSGAN: Generative Adversarial Training for (远程监督关系抽取,句子级去噪)
- JavaBean和Servlet
- 11g DG中的参数
- 三菱mode bus tcp通讯_绍兴三菱MR-J4-70B
- 数据库接口实验--php实现--
- Rost CM使用手册
- c语言的常用英语单词和翻译,c语言通用英语词汇带翻译
- html弹框整体缩放,网页弹出对话框无法放大
- USB(十)2022-03-03
- python requests post 二进制流_Python的requests如何同时post图片二进制流和json数据application/octet-stream...
- 微分积分电路及其波形转换
- win10 任务栏无法使用鼠标一直转圈圈解决方式
- Docker部署Flask网站
- 网络变压器的介绍分类及工作原理
- 棋牌娱乐盛宴推动全民游戏健康发展
- 2022,视频号的十大机会