Visual Studio 2010--C#跟西门子1200(Sharp7)窗体控制⑨--循环读取

大哥大姐们哪位知道,Visual Studio 2010--C#跟西门子1200(Sharp7)窗体控制⑨--循环读取
最新回答
各种坚强

2024-10-31 10:38:35

上期回顾(上期完成了IO监控的窗体界面的搭建,做了文本注释,以及状态框):

本期我们探讨如何将PLC的输入输出捕捉到C#窗体上,实现监控状态,上期框架搭建完成后,本期将开始编写代码。

1.0 为了读取PLC输入地址数据,需要调用EBRead方法,该方法用于读取PLC输入地址数据。在本例中,从0开始到1的2个字节,共16位,相当于I0.0~I1.7。

var buffer = new byte[2];

//读取PLC的输入地址0开始的2个字节的数据,读到buffer

client.EBRead(0, buffer.Length, buffer); //PLC的输入读取

2.0 读取两个字节到缓冲区后,将第一个字节I0.0-I0.7的8位提取出来,并显示到Label控件OK中。

var buffer = new byte[2];

//读取DB1的从地址0开始的38个字节的数据,读到buffer

client.EBRead(0, buffer.Length, buffer); //PLC的输入读取

byte db1da16 = S7.GetByteAt(buffer, 0);

OK.Text = db1da16.ToString();

3.0 接着,编写一个位的读取,将第一个字节的第一位I0.0单独提取出来,放入db1dbx00,然后根据true/false显示不同的背景色。

bool db1dbx00 = S7.GetBitAt(buffer, 0, 0);

if (db1dbx00 == true)

{

I0_0.BackColor = Color.Green;

}

else

{

I0_0.BackColor = Color.White;

}

4.0 按照上述示例,依次编写I0.2和I1.0的点位反馈。

bool db1dbx02 = S7.GetBitAt(buffer, 0, 2);

if (db1dbx02 == true)

{

I0_2.BackColor = Color.Green;

}

else

{

I0_2.BackColor = Color.White;

}

bool db1dbx10 = S7.GetBitAt(buffer, 1, 0);

if (db1dbx10 == true)

{

I1_0.BackColor = Color.Green;

}

else

{

I1_0.BackColor = Color.White;

}