初步接触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