点击按钮,输入框显示实时PLC WORD

核心逻辑如下:
public ManualResetEvent manual = new ManualResetEvent(true);//阀门开启
Thread _threadWR;
public void Init()
{
if (_threadWR == null || !_threadWR.IsAlive)
{
_threadWR = new Thread(new ThreadStart(HandleWR));
_threadWR.IsBackground = true;
_threadWR.Start();
}
}
void HandleWR()
{
while (true)
{
manual.WaitOne();//阻塞
Random r = new Random();
var intbuffer = new byte[1024];
int readResult = Client.DBRead(1, 0, intbuffer.Length, 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(S7.GetIntAt(intbuffer, 24)); //有符号
this.Invoke(new Action(() => {
textBox1.Text = intValue1;
}));
manual.Set();
Thread.Sleep(100);
}
}
//商务合作:1960697656
private void textBox1_TextChanged(object sender, EventArgs e)
{
manual.Reset();
}
private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
manual.Reset();
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
manual.Reset();
}
private void textBox1_Leave(object sender, EventArgs e)
{
//数据写DBWrite
byte[] dbWBuffer = new byte[1244];
// Write Int
S7.SetIntAt(dbWBuffer, 0, Int16.Parse("24"));//1.0
int reasult3 = Client.DBWrite(1, 0, dbWBuffer.Length, dbWBuffer); //写入成功
manual.Set();
}
private void button1_Click(object sender, EventArgs e)
{
Init();
}
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
//数据写DBWrite
byte[] dbWBuffer = new byte[1244];
// Write Int
S7.SetIntAt(dbWBuffer, 0, Int16.Parse("24"));//1.0
int reasult3 = Client.DBWrite(1, 0, dbWBuffer.Length, dbWBuffer); //写入成功
manual.Set();
}
}
文章讲述了如何在.NET中创建一个实时监控PLC(可编程逻辑控制器)的应用,通过ManualResetEvent实现线程间的协作,包括读取数据、显示到UI和触发数据写入。

5522

被折叠的 条评论
为什么被折叠?



