代码之家  ›  专栏  ›  技术社区  ›  user1567995

Modbus TCP从站。数据传输

  •  1
  • user1567995  · 技术社区  · 10 年前

    我从ModbusTCPSlave应用程序开发了c#windows,该应用程序从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 回复  |  直到 10 年前
        1
  •  1
  •   Andrea    10 年前

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

    例如,您可以遵循以下步骤:

    1. 将计时器对象从工具箱拖到窗体上(它应该位于“ 所有Windows窗体 “文件夹)。Visual studio应创建一个名为 timer1 在设计器窗口的下部
    2. 双击 时间r1 Visual Studio为计时器的单击事件创建处理程序(应调用 timer1_Tick() ). 计时器将定期运行您输入的代码 时间r1_Tick() 事件处理程序。
    3. 复制您为中的按钮编写的代码 时间r1_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(); 
          }
      

    现在,如果您单击 Button1 您的计时器启动,应该从Modbus读取数据并更新 GridView 每10秒。