Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 6 von 6

Thema: Libnodave Baustein Zeitstempel ermittlen (.Block-> LastModified)

  1. #1
    Registriert seit
    27.07.2011
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich beschäftige mich zur Zeit mit einem Tool für Softwarevergleiche und Versionskontrolle
    verschiedener S7 Projekte. Ein Kriterium für die Vergleiche sind die Zeitstempel der Bausteine
    mit letzten Codeänderung. Für das Zusammenstellen und Vergleichen der Bausteine
    nutze ich die Libnodave und S7 DotNetToolbox. Leider bekomme ich beim Wert .LastModified mit
    der GetBlock Funktion bei jeden Baustein den gleichen Zeitstempel (#12:00:00#) geliefert obwohl
    im Simaticmanager ein anderes Datum angezeigt wird. Hat jemand eine Idee was ich vielleicht falsch
    mache
    Zitieren Zitieren Libnodave Baustein Zeitstempel ermittlen (.Block-> LastModified)  

  2. #2
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.758
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Habs mir mal angeschaut, wird nie gefüllt. Probiers mal mit "LastCodeChange", vielleicht lösche Ich die andere property...
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  3. #3
    helem ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    27.07.2011
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Jochen,
    habe es ausprobiert - funzt immer noch nicht. Ich habe mal
    einen Auszug aus der Funktion beigefügt.

    Der folgende Abschnitt liest das Datum zu ->weiter unten ist die Komplette Funktion

    '------------------------------------------------------------------------------------------------
    blkFld = tmp3 'S7 Bausteinordner
    Blocks = blkFld.readPlcBlocksList 'liest alle Bausteine aus dem S7 Bausteinordner

    Dim Test As Object '(Date)

    For Each N In Blocks
    BlockData = blkFld.GetBlock(N)

    With BlockData
    Test = .LastCodeChange
    Test = .LastInterfaceChange
    Test = .LastModified

    End With
    listBlockData.Add(BlockData)
    Next N
    '------------------------------------------------------------------------------------------------


    Private Function GetFolderContent()

    lblStep7ProjectFolder.Text = ""
    blkFld = Nothing

    If treeStep7Project.SelectedNode IsNot Nothing Then
    'Ausgewählter Node in Typ ProjectFolder konvertieren
    'Teil 1
    'Class myTreeNode - enthält TreeNode und public myObject
    'CType(treeStep7Project.SelectedNode, myTreeNode) gibt den ausgewählten Node als Objekt zurück
    '
    Dim tmp = CType(treeStep7Project.SelectedNode, myTreeNode)
    Dim fld As ProjectFolder = CType((tmp).myObject, ProjectFolder)
    Me.Text = "Step7 Projekt [" & fld.Project.ProjectFile & "] [" & fld.Project.ProjectDescription & "]"
    lblStep7ProjectFolder.Text = "Step7 Projekt [" & fld.Project.ProjectFile & "] [" & fld.Project.ProjectDescription & "]"

    'Dim tmp = CType(treeStep7Project.SelectedNode, myTreeNode)
    If TypeOf tmp.myObject Is IBlocksFolder Then
    blkFld = CType(tmp.myObject, IBlocksFolder)
    End If

    'Prüfe ob der alte ausgewählte Node nicht der neue Node ist
    ' If oldNode IsNot treeStep7Project.SelectedNode Then
    Dim FT As Object = CType(tmp.myObject, Object).GetType

    'Prüfe ob Bausteinordner ausgewählt wurde
    Dim Ordner As String = ""
    Ordner = UCase(FT.ToString)

    If Ordner = UCase("DotNetSiemensPLCToolBoxLibrary.DataTypes.Projectfolders.Step7V5.S7Program mFolder") Then
    'Wurde Verzeichnis Programmfolder gewählt, dann
    'lies Symboltabelle, Bausteine und AWL-Quellenverzeichnis

    '1. Symboltabelle übernehmen
    Dim tmpSymb0 As S7ProgrammFolder = CType(tmp.myObject, S7ProgrammFolder)
    Dim tmp2 As SymbolTable = CType(tmpSymb0.SymbolTable, SymbolTable)
    dtaSymbolTable.Rows.Clear()
    For Each step7SymbolTableEntry In tmp2.SymbolTableEntrys
    dtaSymbolTable.Rows.Add(New Object() {step7SymbolTableEntry.Symbol, step7SymbolTableEntry.DataType, step7SymbolTableEntry.Operand, step7SymbolTableEntry.Comment})
    Next step7SymbolTableEntry

    '2. Bausteinliste übernehmen
    Dim tmp3x As S7ProgrammFolder = CType(tmp.myObject, S7ProgrammFolder)
    Dim tmp3 As BlocksOfflineFolder = CType(tmp3x.BlocksOfflineFolder, BlocksOfflineFolder)
    Dim Blocks As List(Of DataTypes.Blocks.ProjectBlockInfo) 'Liste der Datenbausteine mit Datentyp Block ProjektBlockInfo
    Dim BlockData As DataTypes.Blocks.Step7V5.S7Block 'Baustein Informationen
    Dim listBlockData As New List(Of DataTypes.Blocks.Step7V5.S7Block) 'Liste Baustein Informationen
    '------------------------------------------------------------------------------------------------
    blkFld = tmp3 'S7 Bausteinordner
    Blocks = blkFld.readPlcBlocksList 'liest alle Bausteine aus dem S7 Bausteinordner

    Dim Test As Object '(Date)

    For Each N In Blocks
    BlockData = blkFld.GetBlock(N)

    With BlockData
    Test = .LastCodeChange
    Test = .LastInterfaceChange
    Test = .LastModified

    End With
    listBlockData.Add(BlockData)
    Next N
    '------------------------------------------------------------------------------------------------
    Stop

    For Each Info In listBlockData

    Dim Symbol As String
    Dim Datum As Object


    Datum = Info.LastCodeChange
    Symbol = String.Empty
    Symbol = Info.Title

    'Try
    'Symbol = Info.SymbolTabelEntry.Symbol
    'Catch e As Exception
    'Symbol = e.ToString
    'End Try

    InfBausteine.Rows.Add(New Object() {Info.BlockName, Symbol, Datum})
    Next Info

    lstBoxBausteine.Items.AddRange(blkFld.readPlcBlocksList().ToArray()) 'Schreibt die ganze Baustein Liste in eine Listbox


    'Bausteine zu Listbox hinzufügen
    '3. AWL Quellen übernehmen
    'Dim tmp4x As S7ProgrammFolder = CType(tmp.myObject, S7ProgrammFolder)
    Dim tmp4x As Object = CType(tmp.myObject, Object)
    'Dim tmp4 As SourceFolder = CType(tmp4x.SourceFolder, SourceFolder)
    'src = CType(tmp4x, SourceFolder)
    'lstBoxAWLBausteine.Items.Clear()
    'lstBoxAWLBausteine.Items.AddRange(src.readPlcBlocksList().ToArray())
    End If
    'End If

    'Prüfe ob das im Tree gespeicherte Objekt eine Symboltabelle ist
    If tmp.myObject.GetType() Is GetType(SymbolTable) Then
    'Gespeichertes Objekt ist eine Symboltabelle
    Dim tmp2 = CType(tmp.myObject, SymbolTable)
    lstBoxBausteine.Items.Clear()

    dtaSymbolTable.Rows.Clear()

    For Each step7SymbolTableEntry In tmp2.SymbolTableEntrys
    dtaSymbolTable.Rows.Add(New Object() {step7SymbolTableEntry.Symbol, step7SymbolTableEntry.DataType, step7SymbolTableEntry.Operand, step7SymbolTableEntry.Comment})
    Next step7SymbolTableEntry

    lblToolStripFileSystemFolder.Text = tmp2.Folder

    ElseIf blkFld IsNot Nothing Then
    'Prüfe ob das Verzeichnis ein Bausteinverzeichnis vom Typ "IBlocksFolder" ist
    'Prüfe ob der alte ausgewählte Node nicht der neue Node ist
    If oldNode IsNot treeStep7Project.SelectedNode Then
    If tmp.myObject.GetType() Is GetType(BlocksOfflineFolder) Then
    'Lösche Inhalt der "viewBlockList"
    lstBoxBausteine.Items.Clear()
    'ProjectBlockInfo[] arr =
    'NumericComparer nc = new NumericComparer();
    'Array.Sort(arr, nc);
    'Anzeige des gerade geöffneten Ordners im Statustrip
    lblToolStripFileSystemFolder.Text = (CType(blkFld, BlocksOfflineFolder)).Folder
    lstBoxBausteine.Items.AddRange(blkFld.readPlcBlocksList().ToArray())
    'Anzeige Bausteinverzeichnis in "viewBlockList"
    lstBoxBausteine.Visible = True
    Else
    'If tmp.myObject.GetType() Is GetType(SourceFolder) Then
    'Prüfe ob das im Tree gespeicherte Objekt ein SourceFolder ist
    'src = CType(tmp.myObject, SourceFolder)
    'Prüfe ob der alte ausgewählte Node nicht der neue Node ist
    'If oldNode IsNot treeStep7Project.SelectedNode Then
    'Lösche Inhalt der "viewBlockList"
    'lstBoxAWLBausteine.Items.Clear()
    'lstBoxAWLBausteine.Items.AddRange(src.readPlcBlocksList().ToArray())
    'End If
    'Anzeige AWL Verzeichnis in "viewBlockList"
    'lstBoxAWLBausteine.Visible = True

    'Anzeige des gerade geöffneten Ordners im Statustrip
    'lblToolStripFileSystemFolder.Text = src.Folder
    'End If
    End If
    End If

    Else
    ' Dim FldOjc As Object = tmp.myObject.GetType
    ' MsgBox("Type=" & tmp.myObject.GetType.ToString)
    End If

    End If

    Return Nothing

    End Function

    Grüße Helem

  4. #4
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.758
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Hat es für die Offline Blocks noch gar nicht implementiert (wurde nicht aus der DB gelesen!). Und auch bei den Online Blocks wars noch falsch. Nun gehts...
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren Fixed...  

  5. #5
    helem ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    27.07.2011
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Jochen,
    danke für das Bugfix. Aber leider
    habe ich festgestellt, das GetBlock immer noch das Default
    Datum zurückgibt. in der Funktion tmpBlock wird das Datum richtig convertiert und ausgegeben,
    aber nicht an die public property.


    Default.jpgReturn021.jpgReturn.jpg

    Ich habe ein paar screenshots mit aktuellen Werten gemacht. Vielleicht kannt Du
    dir das noch mal anschauen.
    Gruße Helem

  6. #6
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.758
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hab deine Änderungen übernommen, nun sollts gehen. Habs auch noch bei DBs,UDTs und VATs eingebaut...
    Kanns aber erst am WE hochladen...
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

Ähnliche Themen

  1. Block DB/FC/FB
    Von mariob im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 04.10.2010, 12:30
  2. Baustein mehrfach verwenden (gleicher Zeitstempel)
    Von SPSstudent im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 24.02.2010, 12:57
  3. Antworten: 7
    Letzter Beitrag: 23.02.2010, 10:52
  4. Suche FU-Block.
    Von Mr.Spok im Forum Antriebstechnik
    Antworten: 8
    Letzter Beitrag: 30.01.2009, 17:17
  5. Block Parameter
    Von Wolflesch im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 11.08.2008, 09:26

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •