INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.




Unsere Partner:

DIAdem-Forum.de Partner

DIAdem-Forum.de Partner






Stellenangebote:
Softwarearchitekt LabVIEW/Teststand (m/w/d)
Gerlingen

Testingenieur (m/w/d) Produktqualifizierung im Bereich Antriebstechnik
Sexau nahe Freiburg im Breisgau

Leiter (m/w/d) Prüffeld
Langenbrettach

Wissenschaftlicher Mitarbeiter / Wissenschaftliche Mitarbeiterin (m/w/d) im Bereich Bewegungsdynamik
Deggendorf

Software Test Engineer (m/w/d)
Malente

Testdesigner (m/w/d)
Wolfsburg, Leonberg, Ingolstadt, Aurich, Vierkirchen (München)

Testingenieur (m/w/d)
Nördlingen

Senior Entwicklungsingenieur für Hubschrauber-SW Ladesysteme (m/w/d)
Donauwörth





.
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5

Navilock GPS-Empfänger
12.03.2014, 17:47,
#1
DIAdem-Version: 12
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: -
Navilock GPS-Empfänger

Hallo

ich geister hier schon seit ein paar Tagen durch das Forum ohne allerdings fündig geworden zu sein.

Ich versuche momentan für meinen Navilock GPS Empfänger, welcher über COM1 an den Messrechner angeschlossen ist, einen Script-Dac Treiber zu erstellen (mein erster überhaupt).

Wenn ich mit einem Terminal Programm die Schnittstelle öffne, bekomme ich Daten zugesand, jedoch wenn ich in DIAdem im Schnittstellenmonitor auf "lesen" klicke, stürzt mein DIAdem ab (Version 2012).

Bei dem Script Treiber bin ich mir auch nicht sicher ob die Daten reinkommen. Kann ich dort irgendwie sehen was gerade ankommt?
oder hat evtl jemand für einen Seriellen GPS Empfänger ein fertigen Treiber?

mfg
Nielscho

Antworten
13.03.2014, 20:21,
#2
DIAdem-Version: 12
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: -
RE: Navilock GPS-Empfänger

Habe mich heute ein wenig mit dem ScriptDac treiber rumgeschlagen. Habe jetzt folgendes Problem.
Wenn ich mit read etwas aus der udi Schnittstelle lese, dann ist dies ja ein String.
Gibt es eine Möglichkeit das ich mir diesen String amzeigen lassen kann?
Über die read_channel funktion kann ich anscheinend nur Gleitkommerwerte ausgeben.

Antworten
24.03.2014, 15:25,
#3
DIAdem-Version: 12
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: -
RE: Navilock GPS-Empfänger

Hallo

ich habe es jetzt geschafft mir einen Treiber zu bauen.
Solange ich nur diesen im DAC-Schaltplan verwende funktioniert er auch bestens.
Wenn ich jetzt jedoch noch einen weiteren Treibereingang von z.B. meiner Spider mit reinhänge und evtl noch einen Sinusgenerator reinlege erhalte ich ständig Fehlermeldungen.
Noch dazu scheint er dann nicht mal mehr die Anweisungen im DAC-Treiber-Skript sauber abzuarbeiten. So erhalte ich beispielsweise die Meldung das "right" nicht zulässig ist, obwohl ich dieses vorher mit einer IF-Anweisung auszuschließen versuche.

Hat da jemand ne Idee?

Code:
'Globale Variablen-------------------------------------------------------------
'Datenpaul
Dim            paul
'Globale Variablen
Dim     Rohdaten1,Rohdaten2 'strings
Dim     i,GPSgueltig,Breitengrad,Laengengrad,GPSGeschwindigkeit
'------------------------------------------------------------------------------

'Schnittstelle Initialisieren--------------------------------------------------
' sgCOMName           | Name der seriellen Schnittstelle an die der GPS-
'                     | Empfänger angeschlossen ist
' DeviceParam2V       | Ohne Funktion
' ErrorP              | Variable mit der Fehlermeldungen an DIAdem zurueck-
'                     | gegeben werden können
Sub SFD_Init( sgCOMName,DeviceParam2V, ErrorP )
  ' Anlegen des UDI-Objektes
  Set paul=CreateObject("DIAdem.SFD.UDI" )
  ' Oeffnen und Initialisieren der Schnittstelle
  Call SFDU_COMInit(paul,sgCOMName+",38400,N,8,1") 'Funktion für die Kommunikation mit Schnittstelle

End Sub
'Funktion für die Com-Schnittstelle

Sub SFDU_COMInit(paul,sgCOMParams)
  Dim  aCOMParams,sgParamsT,sgTimeoutCurrentT
  ' Umsetzen der Parameterbeschreibung, um die Schlüsselworter schnell
  ' und einfach erkennen zu können
  sgParamsT = UCase(sgCOMParams)
  ' Zerlegen der gesamten Beschreibung in einzelne Abschnitte
  aCOMParams = Split(sgParamsT,",")
  ' Wurden Parameter gefunden?
  if ( Not IsArray(aCOMParams) ) Then Exit Sub
  '-------------------------------------------------
  ' Prüfen, ob der "Name" des seriellen I/O port
  ' richtig angegeben wurde...
  '-------------------------------------------------
  if ( 0 <= UBound(aCOMParams) ) Then
      If ( 1 > InStr(aCOMParams(0),"COM")) Then Exit Sub
    '-------------------------------------------------
    ' Prüfen, ob die Schnittstelle bereits
    ' geöffnet ist
    '-------------------------------------------------
    if ( not paul.IsOpen ) then Call paul.Open("COM",aCOMParams(0))
  Else
    Exit Sub
  End If
  '-------------------------------------------------
  ' Prüfen, ob Parameter für die serielle Schnitt-
  ' stelle angegeben wurden
  '-------------------------------------------------
  if ( 1 <= UBound(aCOMParams) ) Then
    Call paul.ParamSet( "BAUDRATE",aCOMParams(1))
  End If
  '-------------------------------------------------
  ' .. Prüfen der Baudrate
  '-------------------------------------------------
  if ( 2 <= UBound(aCOMParams) ) Then
      Select Case aCOMParams(2)
      Case "N"
      Call paul.ParamSet( "PARITY", "NONE" )
      Case "E"
      Call paul.ParamSet( "PARITY", "EVEN" )
      End Select
  End If
  '-------------------------------------------------
  ' .. Prüfen der Anzahl der Datenbits
  '-------------------------------------------------
  if ( 3 <= UBound(aCOMParams) ) Then
    Call paul.ParamSet( "DATABITS",aCOMParams(3))
  End If
  '-------------------------------------------------
  ' .. Prüfen der Anzahl der Stopbits
  '-------------------------------------------------
  if ( 4 <= UBound(aCOMParams) ) Then
    Call paul.ParamSet( "STOPBITS",aCOMParams(4))
  End If
  '-------------------------------------------------
  ' Lesen "alter" Werte ...
  '-------------------------------------------------
  sgTimeoutCurrentT = paul.ParamGet("Timeout")
  if ( 1 <= Len(sgTimeoutCurrentT) ) Then
    Call paul.ParamSet("Timeout",10)
    Call paul.Read(1000,0)
    ' Zurücksetzen der Einstellungen für "Timeout"
    Call paul.ParamSet("Timeout",sgTimeoutCurrentT)
  End If
End Sub
'------------------------------------------------------------------------------

' SFD_GetScan Einlesen eines Datensatzen von Scnittstelle----------------------
' ErrorP              | Variable zur Rueckgabe einer Fehlermeldung. Wird diese
'                     | Variable gesetzt, stopt DIAdem die Messung
'------------------------------------------------------------------------------
Sub SFD_GetScan(ErrorP )
Dim     strGPSgueltig,strBreitengrad1,strBreitenminuten1,flBreitenminuten1,strLaengengra​d1,strLaengenminuten1,flLaengenminuten1,strGPSGeschwindigkeit,Rohdaten_Tabelle

Rohdaten1="nichts"
GPSgueltig=0.0
Breitengrad=0.0
Laengengrad=0.0
GPSGeschwindigkeit=0.0


  Call paul.ParamSet("Delimiter","$GPVTG") 'Setze Parameter das bis zu Zeichenfolge gelesen wird
  Call paul.Read()  'lese von Schnittstelle
  Rohdaten1 = paul.Read() 'alles was gelesen wurde in Rohdaten1
  Call paul.ParamSet("Delimiter","") 'Schnittstellenflter zurücksetzen


if (len(Rohdaten1)>70) then 'nur fortfahren wenn GPS Daten Empfangen wurden

     Rohdaten1 = Right(Rohdaten1, 77)  'gelesene daten von rechts 162 Zeichen, da nur die eine Zeile Interessiert
  


      Rohdaten_Tabelle=Split(Rohdaten1, ",", -1,vbTextCompare) 'Gelesenen String zerhacken
      'Rohdaten_Tabelle(0)= gprmc
      'Rohdaten_Tabelle(1)= Uhrzeit
      'Rohdaten_Tabelle(2)= Status/Gültig
      'Rohdaten_Tabelle(3)= Breitengrad
      'Rohdaten_Tabelle(4)= N
      'Rohdaten_Tabelle(5)= Längengrad
      'Rohdaten_Tabelle(6)= E
      'Rohdaten_Tabelle(7)= Geschwindigkeit in Knoten
      'Rohdaten_Tabelle(8)= Bewegungsrichtung
      'Rohdaten_Tabelle(9)= Datum ......

      'GPS Status
      if (Rohdaten_Tabelle(2)="A") then
        GPSgueltig=1.0
        else
        GPSgueltig=0.0 'Abfrage ob GPS Signal Gültig ist
      end if
      
      'Breitengrad
      strBreitengrad1=Left(Rohdaten_Tabelle(3), 2) 'ersten beiden Zeichen des Strings sind Breitengrad
      strBreitenminuten1=Right(Rohdaten_Tabelle(3), Len(Rohdaten_Tabelle(3))-2) 'Letze Zeichen sind Breitenminuten
      'Breitenminuten umrechnen
      flBreitenminuten1=Cdbl(strBreitenminuten1)/60 'In Zahl umwandeln und duch 60 Teilen
      strBreitenminuten1=cstr(flBreitenminuten1) 'wieder in String umwandeln
      strBreitenminuten1=replace(strBreitenminuten1,",","") 'Dezimalzeichen löschen
      'Breitengrag schreiben
      Breitengrad=Cdbl(strBreitengrad1&","&strBreitenminuten1)
      
      'Längengrad
      strLaengengrad1=Left(Rohdaten_Tabelle(5), 3) 'ersten drei Zeichen des Strings sind Laengengrad
      strLaengenminuten1=Right(Rohdaten_Tabelle(5), Len(Rohdaten_Tabelle(5))-3) 'Letze Zeichen sind Breitenminuten
      'Laengenminuten umrechnen
      flLaengenminuten1=Cdbl(strLaengenminuten1)/60 'In Zahl umwandeln und duch 60 Teilen
      strLaengenminuten1=cstr(flLaengenminuten1) 'wieder in String umwandeln
      strLaengenminuten1=replace(strLaengenminuten1,",","") 'Dezimalzeichen löschen
      'Laengengrag schreiben
      Laengengrad=Cdbl(strLaengengrad1&","&strLaengenminuten1)
      
      'Geschwindigkeit
      GPSGeschwindigkeit=Cdbl(Rohdaten_Tabelle(7)) 'string zu double
      GPSGeschwindigkeit=GPSGeschwindigkeit/100*1.852 'umrechnug in km/h

else 'Bei nicht Empfangen GPS Daten Werte auf unnatürlichen Wert setzen
GPSgueltig=2
Breitengrad=2
Laengengrad=2  
GPSGeschwindigkeit=2

end if

'Programmierhilfe per Ausgabe in Datei
'Dim fso1,MyFile1,fso2,MyFile2
'i=i+1
'Set fso1 = CreateObject("Scripting.FileSystemObject")
'Set MyFile1= fso1.CreateTextFile(ScriptWritePath & "d:\roh1_"&i&".txt", True)
'MyFile1.WriteLine(Rohdaten1)
'MyFile1.Close



'Set fso2 = CreateObject("Scripting.FileSystemObject")
'Set MyFile2= fso2.CreateTextFile(ScriptWritePath & "d:\roh2_"&i&".txt", True)
'MyFile2.WriteLine(Rohdaten2)
'MyFile2.Close
  
  
  
'L5=L5+1  
'Ausgabe = CDbl(Rohdaten)  
End Sub
'------------------------------------------------------------------------------

' SFD_ReadChannel--------------------------------------------------------------
' Zweck               : Lesen eines Wertes für den Kanal "ChannelNumberP"
' ChannelNumberP      | Kanalnummer aus dem Block-Dialog
' ParamP              | Vom Anwender definierte Variable aus dem Block-Dialog
' DataP               | Variable zur Rückgabe des neuen Kanalwertes. Diese
'                     | Variable sollte zumindest auf einen gültigen Wert
'                     | initialisiert werden.
' ErrorP              | Variable zur Rückgabe einer Fehlermeldung. Wird diese
'                     | Variable gesetzt, stoppt DIAdem die Messung.
'------------------------------------------------------------------------------
Sub SFD_ReadChannel( ChannelNumberP, ParamP, DataP, ErrorP )
  
    DataP = 0

  Select case ChannelNumberP
  case 0:  'GPS-gueltig 1=gueltig, 0 =ungueltig
        DataP = GPSgueltig
  case 1: 'Breitengrad
        DataP = Breitengrad
  case 2: 'Längengrad
        DataP = Laengengrad  
  case 3: 'Geschwindikeit
        DataP = GPSGeschwindigkeit        
        
        
  End Select
  
  
End Sub

Sub SFD_DeInit(ErrorP )
  paul.Close()
  Set oUDIM = Nothing
End Sub

Antworten
04.04.2014, 12:44,
#4
DIAdem-Version: 2017, 2015 32/64bit, 2014 32bit SP1, 2012, 2011, 2010, 11.1, 10.2.1 und fast alle davor, und davor noch DIA/DAGO
DIAdem-Sprachversion: DE/EN
DIAdem Erfahrung seit: 1995
RE: Navilock GPS-Empfänger

Hi nielscho,

wie wird denn dein Scriptblock getaktet ??

Wir haben hier auch einen Treiber und takten den mit 100Hz.

Du solltest im Scriptblock auf jeden Fall "Asynchron zum Messtakt" einstellen sonst bremst dich dein Treiber im DAC für den Rest aus, weil er eventuell auf die serielle Schnittstelle wartet.

Grüße grisu

Antworten
07.04.2014, 07:35,
#5
DIAdem-Version: 12
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: -
RE: Navilock GPS-Empfänger

Super, das funktioniert

Hae den Scriptblock auf 1Hz, noch nen Sinus-Generator auf 200Hz und eine Spider8 auf 250Hz jetzt mal ne hale Stunde durchlaufen lassen. Ab und zu kommt noch eine Fehlermeldung, aber das Messen wird nicht beeinträchtigt...
Denke ich mache damit morgen mal ne kleine Testfahrt.

sonst schonmal besten Dank...

Antworten


Gehe zu: