回复:【分享】C#中实现OPC数据访问(学习笔记二)C#编程

HUO1921

  • 帖子

    152
  • 精华

    6
  • 被关注

    32

论坛等级:侠圣

注册时间:2012-07-20

普通 普通 如何晋级?

发布于 2015-11-11 15:49:12

1楼

        //异步读数据

        private void btn_Read_Async_Click(object sender, EventArgs e)

        {

            if (MyOpcServer == null)

            {

                MessageBox.Show("请连接OPCServer");

                return;

            }

            if (MyOpcGroup.IsSubscribed == false)

            {

                MessageBox.Show("请选择订阅");

                return;

            }

            int[] handle = new int[ItemCount+1] { 0, ServerHandle[0], ServerHandle[1], ServerHandle[2], ServerHandle[3], ServerHandle[4], ServerHandle[5] };//注意写的方式

            Array MyServerHandles = (Array)handle;

            Array errors;

            int cancelID;

            try

            {

                MyOpcGroup.AsyncRead(ItemCount, ref MyServerHandles, out errors, 1, out cancelID);

            }

            catch (System.Exception error)

            {

                MessageBox.Show(error.Message, "Result - 异步读", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }

        }


        


//异步写数据

        private void btn_Write_Async_Click(object sender, EventArgs e)

        {

            if (MyOpcServer == null)

            {

                MessageBox.Show("请连接OPCServer");

                return;

            }

            if (MyOpcGroup.IsSubscribed == false)

            {

                MessageBox.Show("请选择订阅");

                return;

            }

            int[] handle = new int[ItemCount+1] { 0, ServerHandle[0], ServerHandle[1], ServerHandle[2], ServerHandle[3], ServerHandle[4], ServerHandle[5] };

            Array MyServerHandles = (Array)handle;

            object[] values = new object[ItemCount+1] { "", txt_W1.Text, txt_W2.Text, txt_W3.Text, txt_W4.Text, txt_W5.Text, txt_W6.Text };

            Array Myvalues = (Array)values;

            Array errors;

            int cancelID;

            try

            {

                MyOpcGroup.AsyncWrite(ItemCount, ref MyServerHandles, ref Myvalues, out errors, 2, out cancelID);

            }

            catch (System.Exception error)

            {

                MessageBox.Show(error.Message, "Result - 异步写", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }

            GC.Collect();

        }



        //选择是否为订阅方式

        private void chk_Subscribe_CheckedChanged(object sender, EventArgs e)

        {

            if (MyOpcServer == null)

            {

                MessageBox.Show("请连接OPCServer");

                return;

            }

            if (chk_Subscribe.Checked)

            {

                MyOpcGroup.IsSubscribed = true;

            }

            else

            {

                MyOpcGroup.IsSubscribed = false;

            }

        }


        //断开OPCServer连接

        private void btn_disConn_Click(object sender, EventArgs e)

        {

            try

            {

                for (int i = 0; i < ItemCount; i++)

                {

                    if (MyOpcItem[i] != null)

                        MyOpcItem[i] = null;

                }

                MyOpcServer.Disconnect();

            }

            catch (System.Exception error)

            {

                MessageBox.Show(error.Message, "Result - 异步写", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }

        }


        private void btn_Change_Click(object sender, EventArgs e)

        {

            if (MyOpcServer == null)

            {

                MessageBox.Show("请连接OPCServer");

                return;

            }

            object ItemValues;

            object Qualities;

            object TimeStamps;

            try

            {

                MyOpcItem[6].Read(1, out ItemValues, out Qualities, out TimeStamps);

                if (String.Format("{0}", ItemValues).ToLower() == "false")

                {

                    MyOpcItem[6].Write("true");

                    btn_Change.Text = "CHANGE";

                }

                else

                {

                    MyOpcItem[6].Write("false");

                    btn_Change.Text = "UNCHANGE";

                }

            }

            catch (System.Exception error)

            {

                MessageBox.Show(error.Message, "Result - 同步写", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }

        }


        private bool[] ByteToBool(int temp)

        {

            bool[] temp2 = new bool[8];

            for (int k = 0; k < 8; k++)

            {

                if (temp % 2 == 1)

                    temp2[k] = true;

                else

                    temp2[k] = false;

                temp = temp / 2;

            }

            return temp2;

        }


        private void SetValue(int NumItems, System.Array ClientHandles, System.Array ItemValues, System.Array Qualities, System.Array TimeStamps)

        {

            for (int i = 0; i < NumItems; i++)

            {

                if (ItemValues.GetValue(i + 1) != null)

                {

                    switch (Convert.ToInt32(ClientHandles.GetValue(i + 1)))

                    {

                        case 1:

                            txt_R1_Value.Text = ItemValues.GetValue(i + 1).ToString();

                            txt_R1_Quality.Text = Qualities.GetValue(i + 1).ToString();

                            txt_R1_TimeStamp.Text = TimeStamps.GetValue(i + 1).ToString();

                            break;

                        case 2:

                            txt_R2_Value.Text = ItemValues.GetValue(i + 1).ToString();

                            txt_R2_Quality.Text = Qualities.GetValue(i + 1).ToString();

                            txt_R2_TimeStamp.Text = TimeStamps.GetValue(i + 1).ToString();

                            break;

                        case 3:

                            txt_R3_Value.Text = ItemValues.GetValue(i + 1).ToString();

                            txt_R3_Quality.Text = Qualities.GetValue(i + 1).ToString();

                            txt_R3_TimeStamp.Text = TimeStamps.GetValue(i + 1).ToString();

                            break;

                        case 4:

                            txt_R4_Value.Text = ItemValues.GetValue(i + 1).ToString();

                            int temp = Convert.ToInt32(txt_R4_Value.Text);

                            bool[] temp2 = ByteToBool(temp);

                            btn_LED1.BackColor= temp2[0]?Color.Green:Color.White;

                            btn_LED2.BackColor= temp2[1]?Color.Green:Color.White;

                            btn_LED3.BackColor= temp2[2]?Color.Green:Color.White;

                            btn_LED4.BackColor= temp2[3]?Color.Green:Color.White;

                            btn_LED5.BackColor= temp2[4]?Color.Green:Color.White;

                            btn_LED6.BackColor= temp2[5]?Color.Green:Color.White;

                            btn_LED7.BackColor= temp2[6]?Color.Green:Color.White;

                            btn_LED8.BackColor= temp2[7]?Color.Green:Color.White;

                            txt_R4_Quality.Text = Qualities.GetValue(i + 1).ToString();

                            txt_R4_TimeStamp.Text = TimeStamps.GetValue(i + 1).ToString();

                            break;

                        case 5:

                            txt_R5_Value.Text = ItemValues.GetValue(i + 1).ToString();

                            txt_R5_Quality.Text = Qualities.GetValue(i + 1).ToString();

                            txt_R5_TimeStamp.Text = TimeStamps.GetValue(i + 1).ToString();

                            break;

                        case 6:

                            txt_R6_Value.Text = ItemValues.GetValue(i + 1).ToString();

                            txt_R6_Quality.Text = Qualities.GetValue(i + 1).ToString();

                            txt_R6_TimeStamp.Text = TimeStamps.GetValue(i + 1).ToString();

                            break;

                    }

                }

            }

        }


        

hongxi-002@qq.com

精华帖版主置评:较完整给出OPC通信开发的步骤、示例、程序和测试,有参考和借鉴意义,封精鼓励分享。

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54615条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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