C# 组态王

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());
                }
            }
        }




    }
}

杨航收集技术资料,分享给大家


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
下面这段代码是网上抄来的,相信有人也找到过这段,实际上真正运行的时候就会发现其实是有问题的,我把它修改了下,能正常读写了。 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 { /// /// 与组态王建立连接 /// 每次应用程序启动时,必须用该函数与组态王建立连接 /// /// node为节点(IP),如果是本机,其值为空 /// 返回错误码,见附录。 [DllImport("kingvewcliend.dll")] public static extern int StartCliend(string node); /// /// 得到组态王SDK中列出的项目(包括变量及其域)总数 /// [DllImport("kingvewcliend.dll")] public static extern int ReadItemNo(); /// /// 得到某个项目的名称 /// 将返回组态王的项目的名称 /// 为用户写入的其要取的变量的索引号,其为ReadItemNo返回的范围内的某个数 /// 返回错误码,见附录 /// [DllImport("kingvewcliend.dll")] //[SecurityPermission(SecurityAction.Assert, Unrestricted = true)] public static extern int GetItemNames(StringBuilder sName, int wItemId); /// /// 将某个项目添加到采集列中 /// 是要加入采集的项目名 /// TagId项目采集的标识号 /// 项目的数据类型 /// 返回错误码,见附录 /// [DllImport("kingvewcliend.dll")] public static extern int AddTag(string sRegName, ref int TagId, ref int TagDataType); /// /// 向某个项目中有应用程序组态王方向写数据 /// /// 为要采集项目的标识号 /// bVal、lVal、fVal、sVal为设定的数值,用户将根据变量的类型设定数值 /// bVal、lVal、fVal、sVal为设定的数值,用户将根据变量的类型设定数值 /// b
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值