Variable im Hauptspeicher

Alle Fragen zur Programmierung, die nicht in die speziellen Themen passen
Antworten
Frigo2010
Foriker
Beiträge: 12
Registriert: Sa 13. Feb 2016, 08:30
Kontaktdaten:

Variable im Hauptspeicher

Beitrag von Frigo2010 » So 21. Feb 2016, 14:04

Hallo Zusammen

Ich habe eine Funktion die eine RFID Card ausließt und mit Return wieder gibt..
Return wäre hier die CARD_ID und diese möchte ich gerne im Hauptspeicher zwischenspeichern das
ich diese CARD_ID beim nächsten Aufruf der Funktion zum vergleich habe, das die Karte nicht doppelt gelesen wurde!

Möchte dies zum schonen der SQL nicht über eine MySQL Query machen.



Hoffe ihr versteht was ich mein!

Gruß und Danke

Frigo

Benutzeravatar
gambi
Moderator
Beiträge: 322
Registriert: Mi 8. Mai 2013, 21:46
Kontaktdaten:

Re: Variable im Hauptspeicher

Beitrag von gambi » So 21. Feb 2016, 14:58

Hallo Frigo,
dann musst du die CARD_ID einer Variablen zuordnen.
Das kann ein Integer, String oder sonst was sein.

Nehmen wir mal an, CARD_ID ist vomTyp String. Dann deklarierst du dir eine Variable sCardId as String.
Ob du die Variable global benötigst, musst du entscheiden.

Da, wo du deine Funktion zum Auslesen der RFID Card (ich nenne sie mal ReadRFID) startest sollte dann stehen:
gambas code
sCardId=ReadRFID()
Die Funktion ReadRFID() benötigt dann noch den richtigen ReturnType:
gambas code
Function ReadRFID() As String
... dein Code ...
Return CARD_ID
End Function
Am Ende deiner Funktion kommt ja dein Return mit der CARD_ID, die dann der Variablen sCardId übergeben wird.

Wenn du mehr wissen möchtest, brauchen wir deinen Code, sonst wird das hier zum "Im-Nebel-segeln ohne Navi" :wink:

Viel Erfolg
gg

Frigo2010
Foriker
Beiträge: 12
Registriert: Sa 13. Feb 2016, 08:30
Kontaktdaten:

Re: Variable im Hauptspeicher

Beitrag von Frigo2010 » So 21. Feb 2016, 15:32

Hallo

Danke für deine Antwort, so wie Du beschrieben hast, habe ich es so ca auch

Ich rufe in der ersten Form()
gambas code
Dim x As String = Uart_Rfid.PortRead_Einfahrt()
auf, damit verarbeite ich die CARD_ID weiter...

in der Modul Datei Uart_Rfid habe ich diese Funktion, die aber leider die RFID Karte ab und zu doppelt einliest,
um das zu vermeiden, möchte ich die "Return Card_ID" ausgabe zwischenspeichern und beim nächsten Aufruf der
Funktion "PortRead_Einfahrt()" zum vergleich mit verwenden!
gambas code
Public Function PortRead_Einfahrt() As String 

Dim SP_String As String = ""
Dim Search_Raute As Integer
Dim Search_Stern As Integer
Dim String_Raute As String 
Dim Card_ID As String
Dim Card_ID_String As String 
Dim Card_ID_Error As String = "FALSE"
Dim MySQL_Query As String
Dim Wait_Time As Integer = 4.0

  If SerialPort1_Connected Then
      SerialPort1.Begin
      SerialPort1.Blocking = True ' SerialPort
    Try Read #SerialPort1, SP_String, Lof(SerialPort1)
      
      If InStr(SP_String, "\x02") > 0 And InStr(SP_String, "\x03") > 0 Then
      SP_String = Trim(SP_String)
      SP_String = Replace(SP_String, "\x02", "#") ' Ersetze Startflag 
      SP_String = Replace(SP_String, "\x03", "*") ' Ersetze Endflag 
      Search_Raute = InStr(SP_String, "#") ' Suche im ganzen String das erste #
      String_Raute = Mid(Trim(SP_String), Search_Raute + 1) ' String nach dem ersten #
      Search_Stern = InStr(String_Raute, "*", 1) ' Suche nach # das erste *
      Card_ID_String = Mid(Trim(String_Raute), 1, Search_Stern - 1)
      Wait 0.5
      If InStr(SP_String, "0") > 5 Then
        SP_String = "" 
      Endif
      If Len(Card_ID_String) < 12 And Len(Trim(String_Raute)) < 12 Then ' Länge des neun Strings 
      ' Neu Scannen!!! 
        Print " ERROR BEIM LESEN DER CARD ID !!!!!!!!!!!!!!!!!!!!!!!!!"
        Print "Error: " & Card_ID_String
        Print Search_Raute
        Print String_Raute
        Print Search_Stern
      Else ' alles 

      If Len(Trim(String_Raute)) = 12 And InStr(String_Raute, "#") = 0 And InStr(String_Raute, "*") = 0   
        Card_ID = String_Raute 
      Else 
        Card_ID = Card_ID_String
      Endif
      
      Print "SQL Card ID: " & Card_ID
      MySQL_Connect.Connect()
      MySQL_Connect.$MySQL_Con.Begin
      MySQL_Query = "INSERT INTO card_ID_Einfahrt (CARD_ID, DATUM_ZEIT, CARD_ID_ERROR, CARD_READ) VALUES ('" & Card_ID & "', '" & Format$(Now, "yyyy/mm/dd hh:nn:ss") & "', '" & Card_ID_Error & "', 'FALSE') On DUPLICATE KEY UPDATE CARD_ID = '" & Card_ID & "';"
      MySQL_Connect.$MySQL_Con.Exec(MySQL_Query)
      MySQL_Connect.$MySQL_Con.Commit
      MySQL_Connect.$MySQL_Con.Close 
	  
      Return Card_ID

		Endif ' Kleiner 12 Zeichen 
          
     Else
      Return ""
    Endif
       
    If Error Then
      Return "Konnte Port nicht lesen!"
    Endif ' Port Read 
      
    Wait Wait_Time ' Pause für RFID Leser
    
  Else
    Return "Serial Port nicht geöffnet!" 
  Endif 'beconnected
End

Gruß

Frigo

Benutzeravatar
gambi
Moderator
Beiträge: 322
Registriert: Mi 8. Mai 2013, 21:46
Kontaktdaten:

Re: Variable im Hauptspeicher

Beitrag von gambi » So 21. Feb 2016, 17:18

Hallo Frigo,
deklariere in der ersten Form gambas code
Private sCardID as String
und nach dem gambas code
Dim x As String = Uart_Rfid.PortRead_Einfahrt()
gambas code
IF x=sCardID Then
   Print "Dich hatte ich schon  mal"
Endif
sCardID=x
Damit vergleichst du, ob der letzte Wert (x) mit dem vorletzten (sCardID) übereinstimmt.

gg

Frigo2010
Foriker
Beiträge: 12
Registriert: Sa 13. Feb 2016, 08:30
Kontaktdaten:

Re: Variable im Hauptspeicher

Beitrag von Frigo2010 » So 21. Feb 2016, 17:33

Hallo gambi,

wieso so einfach, wenn es auch schwer geht...

Vielen Dank, das hätte mir einleuchten sollen, aber manchmal sieht man den Wald vor lauter Bäumen nicht!

Es klappt wunderbar, damit kann ich ne menge wenn und dann abfragen aus dem Code löschen :shock: :lol:

Gruß und Danke

Frigo

Antworten

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 5 Gäste