C#改的一个监控IO的小程序

已锁定

zunzhi

  • 帖子

    118
  • 精华

    5
  • 被关注

    43

论坛等级:侠圣

注册时间:2014-02-15

普通 普通 如何晋级?

C#改的一个监控IO的小程序

6602

57

2021-02-17 15:45:30

浏览论坛发现一个C#写的与PLC通信的程序,链接为http://www.ad.siemens.com.cn/club/bbs/post_like.aspx?b_id=7&a_id=1564378

但每次只能读写一个点,于是想能不能加个IO监控功能,直接将IO点写入一个EXCEL表格,然后导入程序,这样我们在办公室就可以直接监控PLC的IO了,不必安装博途,博途确实太大了,对电脑要求太高。由于本人基础太差,只能实现初步的一个简单的功能,抛转引玉,希望大牛门能多多指点!

本文读取excel用了System.Data.OleDb类,使用前需要下载安装支持文件,下载时注意区分32或64位。

程序测试画面如下:


软件经过测试与1500连接正常,只是打开EXCEL读取时有点慢


这是打开excel的方法


public DataSet getData()

        {

            var path = "IO.xlsx";

            string filesuffix = System.IO.Path.GetExtension(path);

            if (string.IsNullOrEmpty(filesuffix))

                return null;

            using (DataSet ds = new DataSet())

            {

                string connString = "";


                connString = "Provider = Microsoft.ACE.OLEDB.12.0;" + "Data Source =" + path + ";" + "Extended Properties = \"Excel 12.0; HDR = YES; IMEX = 1 \"";

//请注意,Extended Properties 所需的双引号字符还必须包含在双引号中
//当IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。
//HDR=Yes,会过滤表头内容,HDR=No,可以读取表头信息,默认情况HDR=Yes

                DataTable alldata = null;

                string sql_select = "SELECT* FROM[Sheet1$]";


                using (OleDbConnection conn = new OleDbConnection(connString))

                using (OleDbDataAdapter cmd = new OleDbDataAdapter(sql_select, conn))

                {

                    NewMethod1(conn);

                    cmd.Fill(ds);

                }

                if (ds == null || ds.Tables.Count <= 0) return null;

                alldata = ds.Tables[0];


                RowMax = alldata.Rows.Count;

                return ds;


            }

下面是添加到ListView的方法


 private void button1_Click(object sender, EventArgs e)

        {

            listView1.Items.Clear();//清空listView

            this.listView1.BeginUpdate();

            getData();


            if (Form1.lianjie == 0)

            {

                MessageBox.Show("请连接PLC!");

            }

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

            {

                ListViewItem lvi = new ListViewItem();


                lvi.Text = "" + i;


                lvi.SubItems.Add(NewMethod().Tables[0].Rows[i].ItemArray[0].ToString());


                lvi.SubItems.Add(NewMethod().Tables[0].Rows[i].ItemArray[1].ToString());

                lvi.SubItems.Add(NewMethod().Tables[0].Rows[i].ItemArray[2].ToString());


                if (Form1.lianjie == 1)//判断连接状态

                {

   //这句是添加读取PLC的值                 lvi.SubItems.Add(S7.Form1.plc.Read(NewMethod().Tables[0].Rows[i].ItemArray[1].ToString()).ToString());

                }

                this.listView1.Items.Add(lvi);

            }

            this.listView1.EndUpdate();

        }

    }

}


程序需要改进的地方有很多,比如显示方式只有十进制的,后续有时间会增加16进制的,还有就是打开EXCEL读取太慢等等

源码与程序我已打包上传,希望大家多多指点,同时希望大家可以出更好的作品,让西门子论坛百花齐放,每个人都能在此找到自己想要的知识,谢谢!

IO监控.zip

S7NET (3).zip


C#改的一个监控IO的小程序 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有8583条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

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