fangli1119 2022-02-28 18:01 采纳率: 33.3%
浏览 63
已结题

winform 连接plc成功,但读不到数据?

请问各位,想winform连接西门子s71500,写了一个类库,在form中调用这个类库,在timer中调用这个类的read读方法,传递的参数就form的lable的text //地址,和textbox的text//输出到这里, 显示连接成功plc,但读不到数据,是空的。
如果把plc 的new和open直接写到窗体中,参数直接赋值,都是可以读到的,但问题是,项目有好几个窗体,其他窗体都读不到。
哪位给看一下,谢谢了。

新建一个类库,在form引用这个库 方法全部写成静态的
public class Class1
{
public static Plc plc = new Plc( CpuType.S71200, "192.168.0.11", 0, 1);
public static void openplc()
{
try
{
plc.Open();
}
catch (Exception)
{
MessageBox.Show("不能连接,请开plc电源或者检查网线");

        }
    }
    public static void closeplc()
    {
        plc.Close();
    }
    public static void read(string addr,string result)   //labletext地址,输出到textbox的text
    {

        
         try
            {
                string[] arr = (addr.ToUpper()).Split('.');
                string valuetype = arr[1].Substring(0, 3);
                                                          
                                                         
                if (valuetype == "DBX")
                {
                    bool test1 = (bool)plc.Read(addr.ToUpper());
                    result=test1.ToString();
                   
                }

                else if (valuetype == "DBW")
                {
                    short test2 = ((ushort)plc.Read(addr.ToUpper())).ConvertToShort();
                   result=test2.ToString();
                }

                else if (valuetype == "DBD")
                {
                    double test3 = ((uint)plc.Read(addr.ToUpper())).ConvertToFloat();
                    result=test3.ToString();
                }

                
            }
            catch (Exception Ex)
            {
               
            }
        }

在form的timer中调用读的方法
private void timer1_Tick(object sender, EventArgs e)
{
Class1. read(this.Lable.Text,this.TextBox.Text)
}

  • 写回答

2条回答 默认 最新

  • CSDN专家-showbo 2022-02-28 20:56
    关注

    题主要设置textbox的值,给read函数返回result的值就行了,然后设置textbox的text属性,要不题主只是设置传入的string变量的值,这不会显示在textbox中的,改下面这样

    
        public class Class1
        {
            public static Plc plc = new Plc(CpuType.S71200, "192.168.0.11", 0, 1);
            public static void openplc()
            {
                try
                {
                    plc.Open();
                }
                catch (Exception)
                {
                    MessageBox.Show("不能连接,请开plc电源或者检查网线");
    
                }
            }
            public static void closeplc()
            {
                plc.Close();
            }
            public static string read(string addr)   //labletext地址,输出到textbox的text
            {
                string result = null;
    
                try
                {
                    string[] arr = (addr.ToUpper()).Split('.');
                    string valuetype = arr[1].Substring(0, 3);
    
    
                    if (valuetype == "DBX")
                    {
                        bool test1 = (bool)plc.Read(addr.ToUpper());
                        result = test1.ToString();
    
                    }
    
                    else if (valuetype == "DBW")
                    {
                        short test2 = ((ushort)plc.Read(addr.ToUpper())).ConvertToShort();
                        result = test2.ToString();
                    }
    
                    else if (valuetype == "DBD")
                    {
                        double test3 = ((uint)plc.Read(addr.ToUpper())).ConvertToFloat();
                        result = test3.ToString();
                    }
    
    
                }
                catch (Exception Ex)
                {
                    result = Ex.Message;
                }
                return result;////////////
            }
        }
    
        //这样调用this.TextBox.Text=Class1. read(this.Lable.Text);
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月9日
  • 已采纳回答 3月1日
  • 创建了问题 2月28日

悬赏问题

  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗