和PLC通讯的类文件中更新了两个方法。类文件的编写参考之前的文章C#-基于Sharp7.cs二次开发读取PLC值的方法-留言更新方法
这两个方法里面包含了以下参数,PLCIP地址,机架号,插槽号,数据块号,起始字节,字节长度。其中读方法有返回值,返回的是读取的字节数组。
//20201027 读取特定字节 public byte[] readBytes(string ip,int rack,int slot,int dbnum,int start,int length) { byte[] Buffer = new byte[length]; Client.ConnectTo(ip, rack,slot); Client.DBRead(dbnum, start, length, Buffer); Client.Disconnect(); return Buffer; }
//20201027写入特定字节 public void writeBytes(string ip, int rack, int slot, int dbnum, int start, int length,byte[] buffer) { Client.ConnectTo(ip, rack, slot); Client.DBWrite(dbnum, start, length, buffer); Client.Disconnect(); }
做了一个简单的窗体,调用这两个方法
读取方法的调用
对应按钮-读取
public byte[] b;//存储读取到的字节 private void plconeread_Click(object sender, EventArgs e) { //将文本框中的内容转换为整数 int rack = Convert.ToInt16(plconerack.Text); int slot = Convert.ToInt16(plconeslot.Text); int dbnum = Convert.ToInt16(plconedbnum.Text); int dbstart = Convert.ToInt16(plconedbstart.Text); int dblength = Convert.ToInt16(plconedblength.Text); //调用方法 b = opplc.readBytes(plconeip.Text, rack, slot, dbnum, dbstart, dblength); //文本框清空 plconereadresult.Clear(); //将字节b中转换成字符串输出 for (int i = 0; i < b.Length; i++) { this.plconereadresult.Text = this.plconereadresult.Text + b[i]+" "; } }
写入,对应按钮写入
private void plctwowrite_Click(object sender, EventArgs e) { int rack = Convert.ToInt16(plctworack.Text); int slot = Convert.ToInt16(plctwoslot.Text); int dbnum = Convert.ToInt16(plctwodbnum.Text); int dbstart = Convert.ToInt16(plctwodbstart.Text); int dblength = Convert.ToInt16(plctwodblength.Text); opplc.writeBytes(plctwoip.Text, rack, slot, dbnum, dbstart, dblength,b); }
下面的视频显示了,从s7-400 db298.dbb0开始的8个字节的值传递给s7-1200 db1.dbb0开始的8个字节。
文本框中显示的值是十进制的。