版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
声明:学习慧兰博的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);
}