下面是PLC中的數據,根據一下類型進行數據的讀寫練習,以及多值的讀寫练习。
1、首先进行PLC的连接
//PLC的连接
private void ConnectBtn_Click(object sender, EventArgs e) // 连接PLC
{
int Result = 1;
int Rack = System.Convert.ToInt32(TxtRack.Text);
int Slot = System.Convert.ToInt32(TxtSlot.Text);
Result = Client.ConnectTo(TxtIP.Text, Rack, Slot); // 0 表示Success
ShowResult(Result); // 状态栏结果显示
if (Result == 0)
{
TextError.Text = TextError.Text + "协商PDU[PDU Negotiated]" + Client.PduSizeNegotiated.ToString();//状态栏结果追加文本,返回协商的PDU大小
TxtIP.Enabled = false;
TxtRack.Enabled = false;
TxtSlot.Enabled = false;
ConnectBtn.Enabled = false;
DisconnectBtn.Enabled = true;
readBox.Enabled = true;
//MessageBox.Show(" ===》》连接PLC成功!《《=== ");
}
else MessageBox.Show("连接PLC失败!");
}
2、从PLC中读取值,单值与多值的读取
private void button2_Click(object sender, EventArgs e)
{
var Buffert = new byte[680];
string int_1_0 = Client.ReadArea(S7Consts.S7AreaDB, 1, 0, 2, 0x04, Buffert).ToString();
string Real_6_0 = Client.ReadArea(S7Consts.S7AreaDB, 1, 6, 4, 0x08, Buffert).ToString();
string Byte_18_0 = Client.ReadArea(S7Consts.S7AreaDB, 1, 18, 1, 0x02, Buffert).ToString();
string Bool_21_0 = Client.ReadArea(S7Consts.S7AreaDB, 1, 168, 1, 0x01, Buffert).ToString();
//DBRead读数据
var intbuffer = new byte[688];
int readResult = Client.DBRead(1,0,688,intbuffer); //DBRead读四个字节 位0101 0000 ——》1010 0000-》0A 00->10 0
if (readResult == 0)
{
MessageBox.Show("Read Success !");
}
else { MessageBox.Show("Read Fail!"); }
//Read int
string intValue1 = Convert.ToString(Sharp7.S7.GetIntAt(intbuffer,0)); //有符号的256进位
string intValue2 = Convert.ToString(Sharp7.S7.GetIntAt(intbuffer, 2));
string intValue3 = Convert.ToString(Sharp7.S7.GetIntAt(intbuffer, 4));
//Read Real
string RealValue4 = Convert.ToString(Sharp7.S7.GetRealAt(intbuffer, 6));
string RealValue5 = Convert.ToString(Sharp7.S7.GetRealAt(intbuffer, 10));
string RealValue6 = Convert.ToString(Sharp7.S7.GetRealAt(intbuffer, 14));
//Read Byte
string ByteValue7 = Convert.ToString(Sharp7.S7.GetByteAt(intbuffer, 18));
string ByteValue8 = Convert.ToString(Sharp7.S7.GetByteAt(intbuffer, 19));
string ByteValue9 = Convert.ToString(Sharp7.S7.GetByteAt(intbuffer, 20));
//Read Bool
string BoolValue10 = Convert.ToString(Sharp7.S7.GetBitAt(intbuffer, 21,0));
string BoolValue11 = Convert.ToString(Sharp7.S7.GetBitAt(intbuffer, 21,1));
string BoolValue12 = Convert.ToString(Sharp7.S7.GetBitAt(intbuffer, 21,2));
//Read Char
string CharValue = Sharp7.S7.GetCharsAt(intbuffer, 22, 2); //2为读两个字符
string CharValue1 = Sharp7.S7.GetCharsAt(intbuffer, 22, 1);
string CharValue2 = Sharp7.S7.GetCharsAt(intbuffer, 23, 1);
//Read String
string StringValue12 = S7.GetStringAt(intbuffer, 24).ToString();
string StringValue13 = S7.GetStringAt(intbuffer, 536).ToString();
}
private void button4_Click(object sender, EventArgs e)
{
//------Read Multi vars
S7MultiVar s7MultiVal = new S7MultiVar(Client);
byte[] db1 = new byte[21];
s7MultiVal.Add(S7Consts.S7AreaDB, S7Consts.S7WLByte, 1, 0, db1.Length, ref db1);
var db2 = new byte[18];
s7MultiVal.Add(S7Consts.S7AreaDB, S7Consts.S7WLByte, 1, 21, db1.Length, ref db2);
var db3 = new byte[24];
s7MultiVal.Add(S7Consts.S7AreaDB, S7Consts.S7WLByte, 1, 280, db2.Length, ref db3);
int resultmul = s7MultiVal.Read();
if (resultmul != 0)
{ //Fail}
TextError.Text = "Error" + resultmul;
}
int db1dbw1 = S7.GetIntAt(db1, 0);
int db1dbw2 = S7.GetIntAt(db1, 2);
int db1dbw3 = S7.GetIntAt(db1, 4);
float f1 = S7.GetRealAt(db1, 6);
float f2 = S7.GetRealAt(db1, 10);
float f3 = S7.GetRealAt(db1, 14);
byte b1 = S7.GetByteAt(db1, 18);
byte b2 = S7.GetByteAt(db1, 19);
byte b3 = S7.GetByteAt(db1, 20);
bool bo0 = S7.GetBitAt(db2, 0, 0);
bool bo1 = S7.GetBitAt(db2, 0, 1);
bool bo2 = S7.GetBitAt(db2, 0, 2);
string c1 = S7.GetCharsAt(db2, 1, 1);
string c2 = S7.GetCharsAt(db2, 2, 1);
string s1 = S7.GetStringAt(db2, 3).ToString();
string s2 = S7.GetStringAt(db3, 0).ToString();
//string s3 = S7.GetStringAt(db2, 512).ToString();
}
3、写入PLC数据,单值写入与多值写入
//写数据
private void button3_Click(object sender, EventArgs e)
{
//数据写DBWrite
byte[] dbWBuffer = new byte[1244];
// Write Int
S7.SetIntAt(dbWBuffer, 0, Int16.Parse("24"));//1.0
S7.SetIntAt(dbWBuffer, 2, Int16.Parse("66"));//1.1
S7.SetIntAt(dbWBuffer, 4, Int16.Parse("99"));//1.2
//Write Real
S7.SetRealAt(dbWBuffer, 6, 21.3f);
S7.SetRealAt(dbWBuffer, 10, 21.3f);
S7.SetRealAt(dbWBuffer, 14, 21.3f);
//Write Byte
S7.SetByteAt(dbWBuffer, 18, 99);
S7.SetByteAt(dbWBuffer, 19, 99);
S7.SetByteAt(dbWBuffer, 20, 99);
//Write Bool
S7.SetBitAt(ref dbWBuffer, 21, 0, true);
S7.SetBitAt(ref dbWBuffer, 21, 1, true);
S7.SetBitAt(ref dbWBuffer, 21, 2, true);
//Write Char
S7.SetCharsAt(dbWBuffer, 22, "F");
S7.SetCharsAt(dbWBuffer, 23, "G");
//Write String
S7.SetStringAt(dbWBuffer, 24, 20, "wlll");
S7.SetStringAt(dbWBuffer, 280, 20, "fu222");
int reasult3 = Client.DBWrite(1, 0, dbWBuffer.Length, dbWBuffer); //写入成功
特定的写某一位
//var bufferInt = new byte[4];
//S7.SetIntAt(bufferInt, 0, 77); // 0是数组的位置
//Client.DBWrite(1, 2, 2, bufferInt); //2是DB的偏移量
if (reasult3 != 0)
{
TextError.Text = "Error:" + Client.ErrorText(reasult3);
}
else
{ TextError.Text = "Success Write:" + Client.ErrorText(reasult3); }
}
private void button5_Click(object sender, EventArgs e)
{
//write Mulvalue
S7MultiVar s7MulWrite = new S7MultiVar(Client);
var db1 = new byte[4];
S7.SetIntAt(db1, 0, 77);
S7.SetIntAt(db1, 2, 77);
s7MulWrite.Add(S7Consts.S7AreaDB, S7Consts.S7WLByte, 1, 0, 4, ref db1);
var db2 = new byte[8];
S7.SetRealAt(db2, 0, (float)44.4);
S7.SetRealAt(db2, 4, (float)44.4);
s7MulWrite.Add(S7Consts.S7AreaDB, S7Consts.S7WLByte, 1, 6, 8, ref db2);
int rea = s7MulWrite.Write();
if (rea != 0)
{
//Fail
}
}