我开发c #windows形式的ModbusTCP Slave应用程序,它提供来自dataGridView的数据。 我创建了从dataGridView读取数据并开始监听的方法。 我需要在当前的监听中刷新数据。
我的方法:
void Button1Click(object sender, EventArgs e)
{
IPAddress address = IPAddress.Parse(tbIP.Text);
int port = Convert.ToInt32(tbPort.Text);
slaveTcpListener = new TcpListener(address, port);
slave = ModbusTcpSlave.CreateTcp(1, slaveTcpListener);
DataStore data = new DataStore();
for (int i=0; i<dgV.Rows.Count-1; i++)
{
slave.DataStore.InputRegisters[Convert.ToInt32(dgV[0,i].Value)] = (ushort)Convert.ToUInt16(dgV[1,i].Value);
}
slave.Listen();}
我需要在DataGridView中刷新数据。我怎么样? 因此,如果我更改表中的数据并再次单击按钮,则会出现错误。 谢谢你的帮助
答案 0 :(得分:1)
您可以使用timer
对象(更多信息here)。例如,您可以按下按钮启动计时器,然后计时器可以读取数据并更新您的gridview。
例如,您可以按照以下步骤操作:
timer1
的对象timer1
。 Visual Studio为您的计时器的click事件创建一个处理程序(它应该被称为timer1_Tick()
)。计时器将定期运行您放在timer1_Tick()
事件处理程序中的代码。在timer1_Tick()
private void timer1_Tick(object sender, EventArgs e)
{
IPAddress address = IPAddress.Parse(tbIP.Text);
int port = Convert.ToInt32(tbPort.Text);
slaveTcpListener = new TcpListener(address, port);
slave = ModbusTcpSlave.CreateTcp(1, slaveTcpListener);
DataStore data = new DataStore();
for (int i=0; i<dgV.Rows.Count-1; i++)
{
slave.DataStore.InputRegisters[Convert.ToInt32(dgV[0,i].Value)] = (ushort)Convert.ToUInt16(dgV[1,i].Value);
}
slave.Listen();
}
最后,您必须配置并启动计时器,例如使用按钮:
void Button1Click(object sender, EventArgs e)
{
timer1.Interval = 10000; //timer tick occurs every 10'000ms=10sec
timer1.Enabled = true;
timer1.Start();
}
现在,如果您单击Button1
您的计时器启动并应该从Modbus读取数据并每10秒更新一次GridView
。