2017-09-25 122 views
0

使用Visual Studio Community 2017和AdvancedHMI創建基於PC的HMI應用程序。我有幾個運行沒有問題,所以移動到新的東西。 在每一行我有7個數組(每個數組500個實數),並且想每天捕獲這些數據並保存到Excel。 使用EPPlus和AdvancedHMI我有以下代碼。引發的異常:EPPlus.dll中的'System.IndexOutOfRangeException'

Private Sub DataSubscriber1_DataChanged(sender As Object, e As Drivers.Common.PlcComEventArgs) Handles DataSubscriber1.DataChanged 
    If e.ErrorId = 0 AndAlso e.Values.Count > 0 AndAlso e.Values(0) = "True" Then 
     Console.WriteLine("About to read the data") 
     Dim MyValues() As String = EthernetIPforCLXCom1.Read("VCell_1A_FES_Cycle_Average[0]", 500) 
     Console.WriteLine(MyValues.Length & "elements read.") 

     '* Transfer the values to Excel 
     Using ExcelPackage As New OfficeOpenXml.ExcelPackage(New System.IO.FileInfo("c:\Data.xlsx")) 
      For I = 0 To MyValues.Length - 1 
       Console.WriteLine("Element " & I & "=" & MyValues(I)) 
       ExcelPackage.Workbook.Worksheets(1).Cells(1, I + 1).Value = MyValues(I) 

      Next 
     End Using 
    End If 
End Sub 

運行這個並觸發我的標籤值來執行數據訂戶我得到以下。

關於讀取數據

500Elements讀取。

元素0 = 87.945

拋出異常:「System.IndexOutOfRangeException」在EPPlus.dll

一切看起來像它應該工作,但我是很新的VB或任何類型的編碼是的物。我的特長'是PLC梯形邏輯。

謝謝。

+0

嘗試寫入的測試值(而不是從數組)前行的Excel文件'*轉移值Excel'。你仍然得到超出範圍的異常?如果沒有,請停止將值寫入循環中的Excel文件,並將值寫入控制檯。那樣有用嗎? –

+0

謝謝,當我今晚進入工作時,我會給它一個鏡頭。 – Bobby5184

+0

我能夠將500標籤陣列寫入控制檯而沒有問題。我修改了我的循環,現在一切正常。謝謝。 – Bobby5184

回答

0

這是我的工作。 Datascriber在PLC中有一個觸發標籤。一旦觸發它收集數組數據,所有500個元素。創建一個新的Excel文件,並將數據寫入到列A,細胞1-500

Private Sub DataSubscriber1_DataChanged(sender As Object, e As Drivers.Common.PlcComEventArgs) Handles DataSubscriber1.DataChanged 

    If e.ErrorId = 0 AndAlso e.Values.Count > 0 AndAlso e.Values(0) = "True" Then 
     Console.WriteLine("About to read the data") 
     Dim MyValues() As String = EthernetIPforCLXCom1.Read("VCell_1A_FES_Cycle_Average[0]", 500) 
     Console.WriteLine(MyValues.Length & "elements read.") 

     Transfer the values to Excel 

     Using ExcelPackage As New OfficeOpenXml.ExcelPackage(New IO.FileInfo("C:\Data.xlsx")) 
      ExcelPackage.Workbook.Worksheets.Add("test") 
      For Index = 0 To MyValues.Length - 1 
       Console.WriteLine("Element " & Index & "=" & MyValues(Index)) 
       Dim ws As OfficeOpenXml.ExcelWorksheet = ExcelPackage.Workbook.Worksheets(1) 
       Console.WriteLine("Worksheet OK") 
       Dim CellNum As String = "A" & (Index + 1) 
       ws.Cells(CellNum).Value = MyValues(Index) 
      Next 
      ExcelPackage.Save() 
     End Using 
    End If 
End Sub