C# winform textbox 读写PLC功能实现siemens S71500

文章讲述了如何在.NET中创建一个实时监控PLC(可编程逻辑控制器)的应用,通过ManualResetEvent实现线程间的协作,包括读取数据、显示到UI和触发数据写入。

点击按钮,输入框显示实时PLC WORD

核心逻辑如下:

public ManualResetEvent manual = new ManualResetEvent(true);//阀门开启

            Thread _threadWR;
           
            public void Init()
            {
                if (_threadWR == null || !_threadWR.IsAlive)
                {
                    _threadWR = new Thread(new ThreadStart(HandleWR));
                    _threadWR.IsBackground = true;
                    _threadWR.Start();
                }
            }
            void HandleWR()
            {
                while (true)
                {
                manual.WaitOne();//阻塞
                Random r = new Random();

                var intbuffer = new byte[1024];
                int readResult = Client.DBRead(1, 0, intbuffer.Length, intbuffer);          //DBRead读四个字节   位0101 0000 ——》1010 0000-》0A 00->10 0
                if (readResult == 0)
                {
                    MessageBox.Show("Read Success !");
                }
                else { MessageBox.Show("Read Fail!"); }
                //Read int
                string intValue1 = Convert.ToString(S7.GetIntAt(intbuffer, 24));  //有符号

                this.Invoke(new Action(() => {
                    textBox1.Text = intValue1;
                }));
                manual.Set();
                Thread.Sleep(100);
            }
            }
        //商务合作:1960697656
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            manual.Reset();

        }

        private void textBox1_MouseDown(object sender, MouseEventArgs e)
        {
            manual.Reset();

        }

        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            manual.Reset();
        }
        private void textBox1_Leave(object sender, EventArgs e)
        {
            //数据写DBWrite
            byte[] dbWBuffer = new byte[1244];
            // Write Int
            S7.SetIntAt(dbWBuffer, 0, Int16.Parse("24"));//1.0
            int reasult3 = Client.DBWrite(1, 0, dbWBuffer.Length, dbWBuffer);  //写入成功
            manual.Set();


        }

        private void button1_Click(object sender, EventArgs e)
        {
            Init();
        }

        private void textBox1_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                //数据写DBWrite
                byte[] dbWBuffer = new byte[1244];
                // Write Int
                S7.SetIntAt(dbWBuffer, 0, Int16.Parse("24"));//1.0
                int reasult3 = Client.DBWrite(1, 0, dbWBuffer.Length, dbWBuffer);  //写入成功

                manual.Set();


            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值