Modbus TCP Slave。数据传输

时间:2014-03-05 15:21:24

标签: c# datagridview modbus

我开发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中刷新数据。我怎么样? 因此,如果我更改表中的数据并再次单击按钮,则会出现错误。 谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

您可以使用timer对象(更多信息here)。例如,您可以按下按钮启动计时器,然后计时器可以读取数据并更新您的gridview。

例如,您可以按照以下步骤操作:

  1. 从表单上的工具箱中拖动计时器对象(它应位于“所有Windows窗体”文件夹中)。 Visual Studio应该在设计器窗口的下半部分创建一个名为timer1的对象
  2. 双击timer1。 Visual Studio为您的计时器的click事件创建一个处理程序(它应该被称为timer1_Tick())。计时器将定期运行您放在timer1_Tick()事件处理程序中的代码。
  3. 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();
    }
    
  4. 最后,您必须配置并启动计时器,例如使用按钮:

    void Button1Click(object sender, EventArgs e)
        {
            timer1.Interval = 10000; //timer tick occurs every 10'000ms=10sec
            timer1.Enabled = true;
            timer1.Start(); 
        }
    
  5. 现在,如果您单击Button1您的计时器启动并应该从Modbus读取数据并每10秒更新一次GridView