您现在所在的是:

PLC论坛

回帖:5个,阅读:1777 [上一页] [1] [下一页]
* 帖子主题:

求助winform连接plc

50
18686136423
文章数:3
年度积分:50
历史总积分:50
注册时间:2022/2/20
发站内信
发表于:2022/2/20 20:14:47
#0楼
一个项目两个窗体
一个主窗体和一个软键盘窗体。连接西门子S71200的程序是在主窗体里,可以成功连接plc并读取数据。问题是第二个窗体连接不到plc啊。
哪位大神帮看下
主窗体连接程序
public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
       }


       public Plc plc = new Plc(CpuType.S71200, "ip地址", 0, 1);  //这里地址改了,因为论坛以为我输入电话号了
       private void button1_Click(object sender, EventArgs e)
       {
           try
           {
               plc.Open();//连接PLC
           }
           catch (Exception)
           {

               MessageBox.Show("连接时间超时,请检查网络");
           }
第二个窗体就是软键盘窗体的程序 直接实例化form1,得到form1的对象fo1,调用fo1的plc对象。问题是连接不上
private void label1_Click(object sender, EventArgs e)
       {
           this.label1.BackColor = Color.Red;
           Form1 fo1=new Form1();  
         
           if (fo1.plc.IsConnected == false)
           {
               MessageBox.Show("未连接PLC!", "连接提示", MessageBoxButtons.OK);
           }
           else
           {
               try
               {
                   string[] arr = (fo1.txt_read_addr.Text.ToUpper()).Split('.');
                   string valuetype = arr[1].Substring(0, 3);

                   if (valuetype == "DBX")
                   {
                      fo1. plc.Write(fo1.txt_read_addr.Text.ToUpper(), Convert.ToBoolean(this.textBox1.Text));
                   }

                   else if (valuetype == "DBW")
                   {
                       var value = short.Parse(this.textBox1.Text);
                       fo1.plc.Write(fo1.txt_read_addr.Text.ToUpper(), value);
                   }

                   else if (valuetype == "DBD")
                   {
                       double value = double.Parse(this.textBox1.Text);
                      fo1. plc.Write(fo1.txt_read_addr.Text.ToUpper(), value);
                   }

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

               }
               catch (Exception Ex)
               {
                   MessageBox.Show("请检查输入的“地址”或“值”是否错误!", "输入提示", MessageBoxButtons.OK);
               }
           }
21620
cgmguangming
文章数:4324
年度积分:1244
历史总积分:21620
注册时间:2009/10/6
发站内信
西门子接触器(三)
2011国庆活动
发表于:2022/2/24 17:46:08
#1楼
记得在其他地方见过有一种写法是把那个PLC连接做成静态的,供全局使用,这样在任何窗体都可以调用。
发现异常解决之,才有进步与快乐!分享给大家会有更多收获与成长!
1279
Yao默默
文章数:10
年度积分:95
历史总积分:1279
注册时间:2013/4/16
发站内信
发表于:2022/2/25 13:30:53
#2楼
Form1 fo1=new Form1();  你创建一个新的了,fo1.plc.IsConnected  中的plc 和你打开的主界面中的Plc不是同一个对象
50
18686136423
文章数:3
年度积分:50
历史总积分:50
注册时间:2022/2/20
发站内信
发表于:2022/2/25 18:40:38
#3楼
回复 #1楼 cgmguangming
您说的我也想到了,但是不论是静态类还是静态方法,里面都不允许实例成员出现,那样就没法new出plc的对象了。那岂不是根本连接不上?
50
18686136423
文章数:3
年度积分:50
历史总积分:50
注册时间:2022/2/20
发站内信
发表于:2022/2/25 18:52:52
#4楼
回复 #2楼 Yao默默
该怎么解决?谢谢
1279
Yao默默
文章数:10
年度积分:95
历史总积分:1279
注册时间:2013/4/16
发站内信
发表于:2022/2/25 19:04:50
#5楼
public static Plc plc = new Plc(CpuType.S71200, "ip地址", 0, 1);  //加个static,另外一个直接用 Form1.plc

或者将这个plc在打开另外一个界面的时候以参数的形式传到另外一个界面,总之确保另外一个界面用的是同一个对象就行

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

78.0005