2017-09-25 10 views
0

Visual Studio Community 2017およびAdvancedHMIを使用してPCベースのHMIアプリケーションを作成します。私はいくつかの新しい問題に移動するので、何の問題もなく走っています。 各行には、7つの配列(各配列500個の実数)があり、毎日このデータをキャプチャしてExcelに保存したいと考えています。 EPPlusとAdvancedHMIの使用次のコードがあります。Exception Throw: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

例外がスローされます:それは動作するはずですが、私はVBまたはそのためのコードのいずれかのタイプに非常に新しいですLIKE「System.IndexOutOfRangeException」EPPlus.dllに

すべてが見えます問題。 My forte 'はPLCラダーロジックです。

ありがとうございました。

+0

ラインの前にExcelファイルへのテスト値を(いない配列からの)書き込みをしてみ '* Excel'に値を転送1-500、新しいExcelファイルを作成し、列Aにデータを書き込みます。あなたはまだ範囲外の例外を取得していますか?そうでない場合は、ループ内のExcelファイルへの値の書き込みを停止し、値をコンソールに書き込んでください。それは動作しますか? –

+0

ありがとう、私は今夜仕事に入るときに私はそれを撃つだろう。 – Bobby5184

+0

私は500タグアレイを問題なくコンソールに書き込むことができました。私は自分のループを修正し、今はすべてOKになっています。ありがとう。 – Bobby5184

答えて

0

ここに私が働いているものがあります。 Datascriberには、PLCにトリガタグがあります。トリガされると、配列データ、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 
関連する問題