[西门子] 关于C#与S7-200smart之间通信连续读数的测试

[复制链接]
查看207 | 回复0 | 2024-5-6 07:20:32 | 显示全部楼层 |阅读模式
上篇文章我们一起学习实践了,如何通过s7.NET的驱动,来实现C#与S7-200smart之间的通讯。

C#连接S7-200 smart通讯测试

以前也通过C#作了关于S7_1500之间的通讯测试

利用C#读取S7-1500的测试

同时也做了一个简单的年月日报表

C#实现自动化报表--终版(含C#原代码)

这些都用到了一个线程。其实我对线程也不是很了解,但是测试过程中发现使用了线程后,很多事情可以同时做。

比如我们本次连续读4个数据。



在没有使用线程的时候,我们无法操作【退出】及其他按钮。

那我们怎么引入线程呢;



这里我们需要在首次加载一个允许跨线程

CheckForIllegalCrossThreadCalls = false;

其次定义一个线程:



Tread XC;



接着我们在定时器里面编写一个线程程序:

private void timer1_autoread_Tick(object sender, EventArgs e)

{

    xc = new Thread(dataR);

    xc.Start();//启动线程

    void dataR()//建立线程执行程序

    {

        if (plc.IsConnected == false)

        {

            MessageBox.Show("未连接PLC!", "连接提示", MessageBoxButtons.OK);//检查PLC是否连接;               

        }

        else

        {

            try

            {

                string[] arr = (txtAddress2.Text.ToUpper()).Split('.');

                string valuetype = arr[1].Substring(0, 3);

                if (valuetype == "DBX")

                {

               bool test1 = (bool)plc.Read(txtAddress2.Text.ToUpper());

         txtReadData.Text = txtAddress2.Text + ":" + test1.ToString();

                }

                else if (valuetype == "DBW")

                {short test3 = ((ushort)plc.Read(txtAddress2.Text.ToUpper())).ConvertToShort();

         txtReadData.Text = txtAddress2.Text + ":" + test3.ToString();

                }



                else if (valuetype == "DBD")

                {

  double test5 = ((uint)plc.Read(txtAddress2.Text.ToUpper())).ConvertToFloat();

                    txtReadData.Text = test5.ToString("F3");

                    string a1 = "DB1.DBD28";

                    string a2 = "db1.dbd32";

                    string a3 = "db1.dbd36";

      double test6 = ((uint)plc.Read(a1.ToUpper())).ConvertToFloat();

                    PT1.Text = test6.ToString("F3") + "Mpa";//1号压力

     double test7 = ((uint)plc.Read(a2.ToUpper())).ConvertToFloat();

                    PT2.Text = test7.ToString("F3") + "Mpa";//2号压力

      double test8 = ((uint)plc.Read(a3.ToUpper())).ConvertToFloat();

                    PT3.Text = test8.ToString("F3") + "Mpa";//2号压力

                }

              else

                {

                    MessageBox.Show("请检查地址是否输入错误!", "输入提示", MessageBoxButtons.OK);

                }

            }

            catch (Exception Ex)

            {

                MessageBox.Show("请检查地址是否输入错误!" + Ex, "输入提示", MessageBoxButtons.OK);

            }

        }

    }

}

测试效果:






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则