回复:OPC读取另一个OPC数据

已锁定

云山雾绕

  • 帖子

    2158
  • 精华

    0
  • 被关注

    96

论坛等级:至圣

注册时间:2011-10-05

钻石 钻石 如何晋级?

发布于 2020-01-11 15:51:58

3楼

opc读取opc服务器的数据,多个变量的
方法用的是,参考的是这里的方法
http://www.cnblogs.com/punkrocker/archive/2012/09/01/2666307.html
这个里的方法,哪位大神加我下
KepGroup_DataChange里只能返回最后一个参数的值
//点开始按钮,将变量名传入  调用获取变量的方法  这个方法应该是错的 只能获取最后一个,求大神指导和修改,给个代码和自己的理解
private void btnStart_Click(object sender, EventArgs e)
        {
            this.btnStart.Text = "结束";
            List<string> getValue=new List<string>();
            foreach (string item in ConfigForm.selectarr) 
            {
                OpcAuto.Default.ReadParamValue(item);
            }
        }
///<summary>
        ///获取变量的值
        ///</summary>
        public void ReadParamValue(string param) 
        {
            try
            {
                if (itmHandleClient != 0)
                {
                    Array Errors;
                    OPCItem bItem = KepItems.GetOPCItem(itmHandleServer);
                    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(param, itmHandleClient);
                itmHandleServer = KepItem.ServerHandle;
                txtName = param.Split('.')[2];
            }
            catch(Exception err) 
            {
                //没有任何权限的项,都是OPC服务器保留的系统项,此处可不做处理。
                itmHandleClient = 0;
                MessageBox.Show("此项为系统保留项:" + err.Message, "提示信息");
            }
        }
/// <summary>
        /// 每当项数据有变化时执行的事件
        /// </summary>
        /// <param name="TransactionID">处理ID</param>
        /// <param name="NumItems">项个数</param>
        /// <param name="ClientHandles">项客户端句柄</param>
        /// <param name="ItemValues">TAG值</param>
        /// <param name="Qualities">品质</param>
        /// <param name="TimeStamps">时间戳</param>
        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++)
            {
                
                MessageBox.Show("值是" + ItemValues.GetValue(i).ToString());
                //MainForm
                try
                {
                    MainForm.ActiveForm.Controls["txt" + txtName].Text = ItemValues.GetValue(i).ToString();
                }
                catch (Exception err) { MessageBox.Show(err.ToString()); }
                //this.txtTagValue.Text = ItemValues.GetValue(i).ToString();
                //this.txtQualities.Text = Qualities.GetValue(i).ToString();
                //this.txtTimeStamps.Text = TimeStamps.GetValue(i).ToString();
            }
        }

开心每一天,懂得包容、感恩!
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32644条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。