using
System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace kingview
{
public partial class Form1 : Form
{
/// <summary>
/// 与组态王建立连接
/// 每次应用程序启动时,必须用该函数与组态王建立连接
/// </summary>
/// <param name="node"> node为节点(IP),如果是本机,其值为空 </param>
/// <returns> 返回错误码,见附录。 </returns>
[DllImport( " kingvewcliend.dll " )]
public static extern int StartCliend( string node);
/// <summary>
/// 得到组态王SDK中列出的项目(包括变量及其域)总数
/// </summary>
[DllImport( " kingvewcliend.dll " )]
public static extern int ReadItemNo();
/// <summary>
/// 得到某个项目的名称
/// <param name="sName"> 将返回组态王的项目的名称 </param>
/// <param name="wItemId"> 为用户写入的其要取的变量的索引号,其为ReadItemNo返回的范围内的某个数 </param>
/// <returns> 返回错误码,见附录 </returns>
/// </summary>
[DllImport( " kingvewcliend.dll " )]
// [SecurityPermission(SecurityAction.Assert, Unrestricted = true)]
public static extern int GetItemNames(StringBuilder sName, int wItemId);
/// <summary>
/// 将某个项目添加到采集列中
/// <param name="sRegName"> 是要加入采集的项目名 </param>
/// <param name="TagId"> TagId项目采集的标识号 </param>
/// <param name="TagDataType"> 项目的数据类型 </param>
/// <returns> 返回错误码,见附录 </returns>
/// </summary>
[DllImport( " kingvewcliend.dll " )]
public static extern int AddTag( string sRegName, ref int TagId, ref int TagDataType);
/// <summary>
/// 向某个项目中有应用程序向组态王方向写数据
/// </summary>
/// <param name="TagId"> 为要采集项目的标识号 </param>
/// <param name="bVal"> bVal、lVal、fVal、sVal为设定的数值,用户将根据变量的类型设定数值 </param>
/// <param name="lVal"> bVal、lVal、fVal、sVal为设定的数值,用户将根据变量的类型设定数值 </param>
/// <param name="fVal"> bVal、lVal、fVal、sVal为设定的数值,用户将根据变量的类型设定数值 </param>
/// <param name="sVal"> bVal、lVal、fVal、sVal为设定的数值,用户将根据变量的类型设定数值 </param>
/// <returns> 返回错误码,见附录 </returns>
[DllImport( " kingvewcliend.dll " )]
public static extern int WriteTag( ushort TagId, bool bVal, long lVal, float fVal, ref char sVal);
/// <summary>
/// 从组态王中读某个项目的数据
/// </summary>
/// <param name="TagId"> 要采集的变量的表示号 </param>
/// <param name="bVal"> bVal、lVal、fVal、sVal为设定的数值,用户将根据变量的类型设定数值 </param>
/// <param name="lVal"> bVal、lVal、fVal、sVal为设定的数值,用户将根据变量的类型设定数值 </param>
/// <param name="fVal"> bVal、lVal、fVal、sVal为设定的数值,用户将根据变量的类型设定数值 </param>
/// <param name="sVal"> bVal、lVal、fVal、sVal为设定的数值,用户将根据变量的类型设定数值 </param>
/// <returns> 返回错误码,见附录 </returns>
[DllImport( " kingvewcliend.dll " )]
public static extern int ReadTag( int TagId, ref bool bVal, ref long lVal, ref Single fVal, StringBuilder sVal);
/// <summary>
/// 断开与组态王OPC的连接
/// </summary>
/// <returns> 返回错误码,见附录 </returns>
[DllImport( " kingvewcliend.dll " )]
public static extern int StopCliend();
// 错误码含义
// 0
// 连接成功
// -1
// OPC SERVER已经被非法关闭
// -2
// 找不到OPC SERVER的PROGID
// -3
// 连接OPC SERVER不成功
// -4
// 枚举ITEMS错误
// -5
// OPC SERVER没有定义ITEMS
// -6
// 内存分配错误
// -7
// 在向GROUP中加入ITEMS时出现错误
// -8
// 未使用
// -9
// 读ITEMS时出现错误
// -10
// 不能识别的数据类型
// -11
// 读ITEMS的质量戳时出现错误
// -12
// 向ITEMS中写入数据时出现错误
// -13
// 用户添加变量的变量名错误
// -14
// 用户读取的变量序号越界
public Form1()
{
InitializeComponent();
}
private void button1_Click( object sender, EventArgs e)
{
Console.WriteLine( " 连接到本地服务器··· " );
StartCliend( "" );
Console.WriteLine( " 得到项的个数 " );
int itemCount = ReadItemNo();
Console.WriteLine( " 得到项的个数为: " + itemCount.ToString());
StringBuilder regname = new StringBuilder( 256 );
string [] name = new string [itemCount];
Console.WriteLine( " 得到所有的Item···· " );
for ( int i = 0 ; i < itemCount - 1 ; i ++ )
{
GetItemNames(regname, i);
name[i] = regname.ToString();
}
Console.WriteLine( " 输出所有的Item···· " );
for ( int i = 0 ; i < itemCount - 1 ; i ++ )
{
Console.WriteLine(name[i].ToString());
}
int [] tagId = new int [itemCount];
int [] tagType = new int [itemCount];
Console.WriteLine( " 开始将要监控的Item添加···· " );
for ( int i = 0 ; i < itemCount - 1 ; i ++ )
{
AddTag(name[i].ToString(), ref tagId[i], ref tagType[i]);
}
bool [] bVal = new bool [itemCount];
long [] lVal = new long [itemCount];
Single[] fVal = new Single[itemCount];
StringBuilder sVal = new StringBuilder( 255 );
string [] sValString = new string [itemCount];
Console.WriteLine( " 开始读取数据···· " );
for ( int x = 1 ; x < 5 ; x ++ )
{
Console.WriteLine( " 第 " + x.ToString() + " 次读取数据: " );
for ( int i = 0 ; i < itemCount - 1 ; i ++ )
{
ReadTag(tagId[i], ref bVal[i], ref lVal[i], ref fVal[i], sVal);
sValString[i] = sVal.ToString();
Console.WriteLine( " item: " + name[i].ToString() + " 值: " + sValString[i].ToString());
}
}
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace kingview
{
public partial class Form1 : Form
{
/// <summary>
/// 与组态王建立连接
/// 每次应用程序启动时,必须用该函数与组态王建立连接
/// </summary>
/// <param name="node"> node为节点(IP),如果是本机,其值为空 </param>
/// <returns> 返回错误码,见附录。 </returns>
[DllImport( " kingvewcliend.dll " )]
public static extern int StartCliend( string node);
/// <summary>
/// 得到组态王SDK中列出的项目(包括变量及其域)总数
/// </summary>
[DllImport( " kingvewcliend.dll " )]
public static extern int ReadItemNo();
/// <summary>
/// 得到某个项目的名称
/// <param name="sName"> 将返回组态王的项目的名称 </param>
/// <param name="wItemId"> 为用户写入的其要取的变量的索引号,其为ReadItemNo返回的范围内的某个数 </param>
/// <returns> 返回错误码,见附录 </returns>
/// </summary>
[DllImport( " kingvewcliend.dll " )]
// [SecurityPermission(SecurityAction.Assert, Unrestricted = true)]
public static extern int GetItemNames(StringBuilder sName, int wItemId);
/// <summary>
/// 将某个项目添加到采集列中
/// <param name="sRegName"> 是要加入采集的项目名 </param>
/// <param name="TagId"> TagId项目采集的标识号 </param>
/// <param name="TagDataType"> 项目的数据类型 </param>
/// <returns> 返回错误码,见附录 </returns>
/// </summary>
[DllImport( " kingvewcliend.dll " )]
public static extern int AddTag( string sRegName, ref int TagId, ref int TagDataType);
/// <summary>
/// 向某个项目中有应用程序向组态王方向写数据
/// </summary>
/// <param name="TagId"> 为要采集项目的标识号 </param>
/// <param name="bVal"> bVal、lVal、fVal、sVal为设定的数值,用户将根据变量的类型设定数值 </param>
/// <param name="lVal"> bVal、lVal、fVal、sVal为设定的数值,用户将根据变量的类型设定数值 </param>
/// <param name="fVal"> bVal、lVal、fVal、sVal为设定的数值,用户将根据变量的类型设定数值 </param>
/// <param name="sVal"> bVal、lVal、fVal、sVal为设定的数值,用户将根据变量的类型设定数值 </param>
/// <returns> 返回错误码,见附录 </returns>
[DllImport( " kingvewcliend.dll " )]
public static extern int WriteTag( ushort TagId, bool bVal, long lVal, float fVal, ref char sVal);
/// <summary>
/// 从组态王中读某个项目的数据
/// </summary>
/// <param name="TagId"> 要采集的变量的表示号 </param>
/// <param name="bVal"> bVal、lVal、fVal、sVal为设定的数值,用户将根据变量的类型设定数值 </param>
/// <param name="lVal"> bVal、lVal、fVal、sVal为设定的数值,用户将根据变量的类型设定数值 </param>
/// <param name="fVal"> bVal、lVal、fVal、sVal为设定的数值,用户将根据变量的类型设定数值 </param>
/// <param name="sVal"> bVal、lVal、fVal、sVal为设定的数值,用户将根据变量的类型设定数值 </param>
/// <returns> 返回错误码,见附录 </returns>
[DllImport( " kingvewcliend.dll " )]
public static extern int ReadTag( int TagId, ref bool bVal, ref long lVal, ref Single fVal, StringBuilder sVal);
/// <summary>
/// 断开与组态王OPC的连接
/// </summary>
/// <returns> 返回错误码,见附录 </returns>
[DllImport( " kingvewcliend.dll " )]
public static extern int StopCliend();
// 错误码含义
// 0
// 连接成功
// -1
// OPC SERVER已经被非法关闭
// -2
// 找不到OPC SERVER的PROGID
// -3
// 连接OPC SERVER不成功
// -4
// 枚举ITEMS错误
// -5
// OPC SERVER没有定义ITEMS
// -6
// 内存分配错误
// -7
// 在向GROUP中加入ITEMS时出现错误
// -8
// 未使用
// -9
// 读ITEMS时出现错误
// -10
// 不能识别的数据类型
// -11
// 读ITEMS的质量戳时出现错误
// -12
// 向ITEMS中写入数据时出现错误
// -13
// 用户添加变量的变量名错误
// -14
// 用户读取的变量序号越界
public Form1()
{
InitializeComponent();
}
private void button1_Click( object sender, EventArgs e)
{
Console.WriteLine( " 连接到本地服务器··· " );
StartCliend( "" );
Console.WriteLine( " 得到项的个数 " );
int itemCount = ReadItemNo();
Console.WriteLine( " 得到项的个数为: " + itemCount.ToString());
StringBuilder regname = new StringBuilder( 256 );
string [] name = new string [itemCount];
Console.WriteLine( " 得到所有的Item···· " );
for ( int i = 0 ; i < itemCount - 1 ; i ++ )
{
GetItemNames(regname, i);
name[i] = regname.ToString();
}
Console.WriteLine( " 输出所有的Item···· " );
for ( int i = 0 ; i < itemCount - 1 ; i ++ )
{
Console.WriteLine(name[i].ToString());
}
int [] tagId = new int [itemCount];
int [] tagType = new int [itemCount];
Console.WriteLine( " 开始将要监控的Item添加···· " );
for ( int i = 0 ; i < itemCount - 1 ; i ++ )
{
AddTag(name[i].ToString(), ref tagId[i], ref tagType[i]);
}
bool [] bVal = new bool [itemCount];
long [] lVal = new long [itemCount];
Single[] fVal = new Single[itemCount];
StringBuilder sVal = new StringBuilder( 255 );
string [] sValString = new string [itemCount];
Console.WriteLine( " 开始读取数据···· " );
for ( int x = 1 ; x < 5 ; x ++ )
{
Console.WriteLine( " 第 " + x.ToString() + " 次读取数据: " );
for ( int i = 0 ; i < itemCount - 1 ; i ++ )
{
ReadTag(tagId[i], ref bVal[i], ref lVal[i], ref fVal[i], sVal);
sValString[i] = sVal.ToString();
Console.WriteLine( " item: " + name[i].ToString() + " 值: " + sValString[i].ToString());
}
}
}
}
}