基于C#的PISDK研究(代码)
首先需要一些基础的代码,比如获取PI服务的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
/// <summary>
/// 获取PI服务/// </summary>
/// <param name="servername">//UID=PIUser;PWD=PIUserPassWord
</param>
/// <returns></returns>
private Server GetServer( string servername)
{
try
{
if (! string .IsNullOrEmpty(servername))
{
//采用认证方式登录
server = pi.Servers[servername];
server.Open(connStr);
}
else
{
//采用默认方式登录
server = pi.Servers.DefaultServer;
server.Open();
}
if (server.Connected)
{
return server;
}
else
{
return null ;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return null ;
}
}
|
还有到PI服务器中找点的方法:
1
2
3
4
5
6
7
8
9
10
|
/// <summary>
/// 搜索PI中对应的数据点
/// </summary>
/// <param name="server">PI服务对象</param>
/// <param name="condition">选择tag的条件</param>
/// <returns></returns>
private PointList SearchPIPoints(Server server, String condition)
{
return server.GetPoints(condition);
}
|
下面介绍取数方法:
1. 取得单个tag快照值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
/// <summary>
/// 取得单个tag快照值
/// </summary>
/// <param name="server">PI服务对象</param>
/// <param name="tag">tag名称</param>
/// <returns></returns>
private string GetSingleSnap(Server server, string tag)
{
string output= string .Empty;
PIPoints piPoints = server.PIPoints;
//采用标签名称的方式取得对象
PIPoint piPoint = piPoints[tag];
//调用方法取得快照值
PIValue piValue = piPoint.Data.Snapshot;
//取到该快照值时PI服务器时间
PITimeServer.PITime piTime = piValue.TimeStamp;
output = piTime.LocalDate.ToString() + " " + piValue.Value + Environment.NewLine;
return output;
}
|
2. 取得单个tag一段时间内的历史值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/// <summary>
/// 取得单个tag段时间内的历史值
/// </summary>
/// <param name="server">PI服务对象</param>
/// <param name="tag">tag名称</param>
/// <returns></returns>
private string GetSingleHistory(Server server, string tag)
{
string output = string .Empty;
PIPoints piPoints = server.PIPoints;
PIPoint piPoint = piPoints[tag];
//取得分钟前到当前时间的历史值
PIValues piValues = piPoint.Data.RecordedValues(DateTime.Now.AddMinutes(-5).ToString(),
DateTime.Now.ToString());
foreach (PIValue piValue in piValues)
{
PITimeServer.PITime piTime = piValue.TimeStamp; //PI时间
output += piTime.LocalDate.ToString() + " " + piValue.Value + Environment.NewLine;
}
return output;
}
|
3. 取得多个tag快照值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
/// <summary>
/// 取得多个tag取快照值
/// </summary>
/// <param name="server">PI服务对象</param>
/// <param name="tag">tag值(tag='' or tag='')</param>
/// <returns></returns>
private string MultipleSnap(Server server, string tag)
{
string output = string .Empty;
//取tag
PointList ptlist = SearchPIPoints(server, tag);
PISDKCommon.NamedValues nvErrs = new PISDKCommon.NamedValues();
PointValues ptvalues = ptlist.Data.get_Snapshot( out nvErrs);
foreach (PointValue myValue in ptvalues)
{
PITimeServer.PITime piTime = myValue.PIValue.TimeStamp; //PI时间
if (myValue.PIValue.Value.GetType().IsCOMObject)
{
//状态值
DigitalState myDigState = (DigitalState)myValue.PIValue.Value;
output += myValue.PIPoint.Name + " " + piTime.LocalDate.ToString() + " " + myDigState.Name + Environment.NewLine;
}
else
{
//模拟值
output += myValue.PIPoint.Name + " " + piTime.LocalDate.ToString() + " " + Convert.ToString(Math.Round( double .Parse(Convert.ToString(myValue.PIValue.Value)), 2)) + Environment.NewLine;
}
}
return output;
}
|
4. 取得多个tag一段历史时间所有值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
/// <summary>
/// 取得多个tag段历史时间所有值
/// </summary>
/// <param name="server">PI服务对象</param>
/// <param name="tag">tag名称</param>
/// <returns></returns>
private string MultipleHistory1(Server server, string tag)
{
string output = string .Empty;
PointList ptlist = SearchPIPoints(server, tag);
string outPut = string .Empty;
PISDKCommon.NamedValues nvErrs = new PISDKCommon.NamedValues();
foreach (PIPoint piPoint in ptlist)
{
//获取5分钟前到当前时间的历史值
PIValues piValues = piPoint.Data.RecordedValues(DateTime.Now.AddMinutes(-5).ToString(),
DateTime.Now.ToString());
foreach (PIValue piValue in piValues)
{
PITimeServer.PITime piTime = piValue.TimeStamp; //PI时间
output+= piPoint.Name + " " + piTime.LocalDate.ToString() + " " + piValue.Value + Environment.NewLine;
}
}
return output;
}
|
5. 取得多个tag历史时刻值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
/// <summary>
/// 取得多个tag段历史时间点值
/// </summary>
/// <param name="server">PI服务对象</param>
/// <param name="tag">tag名称</param>
/// <returns></returns>
private string MultipleHistory2(Server server, string tag)
{
string output = string .Empty;
PointList ptlist = SearchPIPoints(server, tag);
PISDKCommon.NamedValues nvErrs = new PISDKCommon.NamedValues();
PITimeServer.PITimeFormat piTime1 = new PITimeServer.PITimeFormat();
piTime1.InputString = "*-2h" ; //or "2012-2-2 2:2:2"
//获取两小时前的时刻值
PointValues ptvalues = ptlist.Data.ArcValue(piTime1, RetrievalTypeConstants.rtAuto, out nvErrs);
foreach (PointValue myValue in ptvalues)
{
PITimeServer.PITime piTime = myValue.PIValue.TimeStamp; //PI时间
if (myValue.PIValue.Value.GetType().IsCOMObject)
{
//状态值
DigitalState myDigState = (DigitalState)myValue.PIValue.Value;
output+= myValue.PIPoint.Name + " " + piTime.LocalDate.ToString() + " " + myDigState.Name + Environment.NewLine;
}
else
{
//模拟值
output+= myValue.PIPoint.Name + " " + piTime.LocalDate.ToString() + " " + Convert.ToString(Math.Round( double .Parse(Convert.ToString(myValue.PIValue.Value)), 2)) + Environment.NewLine;
}
}
return output;
}
|
转载自:https://www.cnblogs.com/Johnny_Z/p/3234849.html
转载于:https://www.cnblogs.com/zouhao/p/10048127.html
基于C#的PISDK研究(代码)相关推荐
- 基于DM642的X264开源代码实现的研究
基于DM642的X264开源代码实现的研究 文章发表于:2008-09-08 11:24 作者:谭超 王库 傅颖 来源:微计算机信息 摘要:本文概述了H.264视频压缩编码标准的主要特性,简要介绍了当 ...
- 基于支持向量机的谐波分析研究与实现
基于支持向量机的谐波分析研究与实现-附Matlab源码 文章目录 基于支持向量机的谐波分析研究与实现-附Matlab源码 前言 一.支持向量机分析电力谐波的原理 二.基于 SVM 的电力谐波分析与仿真 ...
- 基于git hooks的前端代码质量控制解决方案
基于git hooks的前端代码质量控制解决方案 原文:https://github.com/kuitos/kuitos.github.io/issues/28 国际惯例先说下故事背景 通常情况下,如 ...
- 连连看+php,java基于swing实现的连连看代码
本文实例讲述了java基于swing实现连连看代码.分享给大家供大家参考. 主要功能代码如下:package llkan; import javax.swing.*; import java.awt. ...
- matlab 基于GUI的PID研究
基于GUI的PID研究 本例子中设计一个PID控制器来研究不同参数对输出结果的影响,PID控制器由比例单元 P.积分单元 I 和微分单元 D 组成.PID 控制器是一个在工业控制应用中常见的反馈回路部 ...
- Freemarker基于模板文件静态化代码示例
Freemarker基于模板文件静态化代码示例
- python直方图均衡化代码_基于matlab的直方图均衡化代码
基于matlab的直方图均衡化代码 2007-04-15 20:15 clear all %一,图像的预处理,读入彩***像将其灰度化 PS=imread('1.jpg'); ...
- 基于 Kubernetes 的基础设施即代码
11 月 9.10 号两天,.NET 社区第一次以".NET 大会"为品牌在上海召开了第一届峰会,现场与会者达到 600 人规模.大会的第 1 天是各类演讲分享,第 2 天有多个动 ...
- 基于 EntityFramework 生成 Repository 模式代码
借助 WeihanLi.EntityFramework 实现简单的 Repository Intro 很多时候一些简单的业务都是简单的增删改查,动态生成一些代码完成基本的增删改查,而这些增删改查代码大 ...
最新文章
- linux查看全连接队列大小,[TimLinux] TCP全连接队列满
- Kettle使用_12 CSV文件仅并发运行与复制数量
- asp.net menu Operation aborted
- 怎么画单极交流放大电路波形图_珠海放大IC怎么样
- 如何发现假库存照片(并将合适的人归于属性)
- 2 s锁是什么_《演员请就位》:一场戏拿了2张S卡,任敏凭什么打败老戏骨?
- 【CCF】201903-1小中大
- 判定浏览器是否支持原生透明
- Atitit View事件分发机制
- sendip linux发包工具
- linux桌面 英文,Linux桌面最好看的40+种英文Sans字体(2019版)
- 淘宝天猫页面详情采集API调用展示(APP端商品详情)
- Linux查看服务器SN序列码
- 测试人员如何管理项目与风险预警
- 2020民泰银行软件测试,2020应届生银行工作一个半月感受
- 办公小贴士之:Excel奇偶行隔行填充颜色
- 写给我的如风老男人(终结版)
- Un-Routed Net ConStraint报错的原因
- Mac OS X的Spotlight综述
- 微信小程序右上角胶囊按钮尺寸
热门文章
- 酒吧声场测试软件,做到以下几点 酒吧音响效果出奇的好
- python 随机数_python项目实战:实现蒙特卡罗方法,求物体阴影面积
- vscode调试html文件,vscode调试html文件
- python求字符组合_python – 生成一个潜在的8个字符串的所有可能的2个字符组合?...
- 安卓自动滑屏脚本_【按键精灵】开发抖音全自动养号脚本!可实现自动滑屏
- 正则表达式python_Python正则表达式
- testng_TestNG Mockito示例
- linux的shell类型_Linux中有哪些不同类型的Shell?
- spring事务 jdbc_Spring事务管理示例JDBC
- MapInfo启动时,提示the Microsoft jet engine is not available