C#使用Sharp7连接并读写PLC

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_38950569/article/details/100415696

声明:学习慧兰博的C#与工业自动化U盘版,在这里做些浅显记录,如要深入请去购买慧兰博。有什么错误的地方请指出来,互相学习。(PS如果侵权慧兰博请及时联系我删除。)

Sharp7的功能是很强大的,除了可以读写PLC的数据之外,还可以获取CPU的硬件信息,控制CPU运行,停止等。这个只介绍读写。

对于读数据来说,一般是先调用Sharp7提供的方法从PLC中获取数据保存到Byte类型的数组中,然后调用Sharp7提供的数据类型转换方法将原始数据转为目标类型的数据。对于写入数据来说,一般是现将数据转为Byte类型的数组,然后调用Sharp7提供的方法将数据写入到目标PLC中。---慧兰博《C#与工业自动化》

 Sharp7.S7Client S7 = new Sharp7.S7Client();
  //Ip地址,机架号,槽号
            if (S7.ConnectTo(txtAddress.Text, 0, 1) == 0)
            {
                comDT.Items.Add("Bool");
                MessageBox.Show("Sharp7连接成功");
               
                btnLink.Enabled = false;
                btnBreak.Enabled = false;
                btnRead.Enabled = false;
                btnReadStr.Enabled = false;
                btnReadWstr.Enabled = false;
                BtnSp7Write.Enabled = false;
               
                
            }
 //断开连接
            S7.Disconnect();
            btnLink.Enabled = true;
            btnBreak.Enabled = true;
            btnRead.Enabled = true;
            btnReadStr.Enabled = true;
            btnReadWstr.Enabled = true;
            BtnSp7Write.Enabled = true;
 byte[] Buffer = new byte[65536];
            if(comDT.Text =="Real")
            {             //DB块,起始位,大小,接收数组
                S7.DBRead(int.Parse(txtDB.Text), int.Parse(txtStart.Text), 4, Buffer);

                MessageBox.Show(Convert.ToString(Sharp7.S7.GetRealAt(Buffer, 0)));
            }
            else if(comDT.Text == "Int")
            {
                S7.DBRead(Int16.Parse(txtDB.Text), int.Parse(txtStart.Text), 2, Buffer);
                MessageBox.Show(Convert.ToString(Sharp7.S7.GetRealAt(Buffer, 0)));
            }
            else if(comDT.Text == "DInt")
            {
                S7.DBRead(int.Parse(txtDB.Text), int.Parse(txtStart.Text), 4, Buffer);

                MessageBox.Show(Convert.ToString(Sharp7.S7.GetRealAt(Buffer, 0)));
            }
            else if (comDT.Text == "Bool")
            { //public const byte S7AreaDB = 0x84;
                //public const int S7WLBit     = 0x01;
                S7.ReadArea(0x84, int.Parse(txtDB.Text), int.Parse(txtStart.Text), 1, 0x01, Buffer);
                MessageBox.Show(Convert.ToString(Sharp7.S7.GetBitAt(Buffer, 0,0)));
            }
 byte[] Buffer = new byte[65536];

            //写入浮点数
            if(comDT.Text == "Real")
            {
                Sharp7.S7.SetRealAt(Buffer, 0, float.Parse(txtWrite.Text));
                S7.DBWrite(int.Parse(txtDB.Text), int.Parse(txtStart.Text), 4, Buffer);
            }
            else if(comDT.Text =="Int")
            {
                Sharp7.S7.SetIntAt(Buffer, 0, Int16.Parse(txtWrite.Text));
                S7.DBWrite(int.Parse(txtDB.Text), int.Parse(txtStart.Text), 2, Buffer);
            }
            else if(comDT.Text == "DInt")
            {
                Sharp7.S7.SetDIntAt(Buffer, 0, Int32.Parse(txtWrite.Text));
                S7.DBWrite(int.Parse(txtDB.Text), int.Parse(txtStart.Text), 4, Buffer);
            }
            else if(comDT.Text == "Bool")
            {
                Sharp7.S7.SetBitAt(ref Buffer, 0, 0, bool.Parse(txtWrite.Text));
                S7.WriteArea(0x84, int.Parse(txtDB.Text), int.Parse(txtStart.Text), 1, 0x01, Buffer);
            }

猜你喜欢

转载自blog.csdn.net/weixin_38950569/article/details/100415696