2014-03-05 97 views
1

本人開發的c#窗口形式提供dataGridView數據的ModbusTCP從應用程序。 我創建了從dataGridView讀取數據並開始監聽的方法。 我需要我可以刷新當前收聽的數據。Modbus TCP從站。數據傳輸

我的方法:

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

您可以使用一個timer對象(更多信息here)。例如,你可以開始你的計時器按下一個按鈕,然後定時器可以讀取數據並更新你的gridview。

正如你可以按照以下步驟一個例子:從你的表單上的工具箱

  1. 將定時器對象(它應該是在「所有Windows窗體」文件夾)。 Visual Studio應該在設計器窗口的下半部分創建一個名爲timer1的對象
  2. 雙擊timer1。 Visual Studio爲您的計時器的點擊事件創建一個處理程序(它應該被稱爲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(); 
        } 
    

現在,如果你點擊Button1你的計時器開始,應該從Modbus讀取數據並每10秒更新一次GridView