通过S7.Net,实现与西门子PLC的通讯

初步接触C#,写个小文件练手,实现与200Smart、1500(目前身边只有这两种PLC,其他300/400/1200应该也行,程序中写了,但没测试)进行Bool、Int、DInt、Real等数据量的读写,并最终封装成exe 文件,效果图如下
在这里插入图片描述
在这里插入图片描述
部分代码如下

 private void Btn_read_Click(object sender, EventArgs e)
        {
            textBox1.Clear();
            typenum = this.cmb_numtype.SelectedIndex;
            int DBnum = Convert.ToInt16(txt_DB.Text);//DB块
            int Startnum = Convert.ToInt16(txt_start.Text);
            int lengthnum = Convert.ToInt16(txt_length.Text);
            res = objS7.ReadBytes(DataType.DataBlock, DBnum, Startnum, lengthnum);
            for (int i = 0; i < totalnum(typenum); i++)
            {
                //textBox1.AppendText(res[i].ToString() + "\r\n");
                textBox1.AppendText("     " + i.ToString() + "   " + Read1(cpunum, typenum, i) + "      " + Read2(typenum, i) + "\r\n");
            }
        }
         private string Read2(int typenum, int i)
        {
            if (typenum == 1)//bool
            {
                return res[Convert.ToInt16(i / 8)].SelectBit(i % 8).ToString();
            }
            else if (typenum == 2)//int
                return S7.Net.Types.Int.FromByteArray(res.Skip(2 * i).Take(2).ToArray()).ToString();
            else if (typenum == 3)//Dint
                return S7.Net.Types.DInt.FromByteArray(res.Skip(4 * i).Take(4).ToArray()).ToString();
            else if (typenum == 4)//Real
                return S7.Net.Types.Double.FromByteArray(res.Skip(4 * i).Take(4).ToArray()).ToString();
            else
                return res[i].ToString();
        }
        private void btn_write_Click(object sender, EventArgs e)
        {
            if (typenum == 1)//bool 
                objS7.Write(Write1(typenum),Convert.ToBoolean(Convert.ToInt16(txt_write.Text)));
            else if (typenum == 2)//int
                objS7.Write(Write1(typenum), Convert.ToInt16(txt_write.Text));
            else if (typenum == 3)//Dint
                objS7.Write(Write1(typenum), Convert.ToInt32(txt_write.Text));
            else if (typenum == 4)//Real
                objS7.Write(Write1(typenum), Convert.ToDouble(txt_write.Text));
            else
                objS7.Write(Write1(typenum), Convert.ToByte(txt_write.Text));
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            DateTime dt = DateTime.Now;
            string strDt = dt.ToString("yyyy/MM/dd HH:mm:ss");
            this.lable_time.Text = strDt;
        }

文档下载链接
https://download.csdn.net/download/Xingxing99988/12889180

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值