- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 9 von 9

Thema: problem mit inputbin usw bei rs485 kommunikation

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2006
    Beiträge
    164

    problem mit inputbin usw bei rs485 kommunikation

    Anzeige

    Praxistest und DIY Projekte
    also ich habe ein gerät an nem 485 bus dass ich per printbin ein paar kommandos schicke, das funzt einwandfrei.
    das gerät empfängt die befehle und zeigt es auf dem display an.

    nun schickt das gerät antworten, die ich jetzt einlesen will, es klappt aber nicht.
    (ich kann das ganze mit dem pc testen, da funzt alles über ein terminal programm)

    also die antwort auf ein kommando ist z.b. 200 1 0 254 201

    (kurze erklärung: 200 ist das startbyte, dann kommt die gerät-id, dann errorcode 0, dann checksum, dann 201 als endbyte
    ich will die werte jetzt einfach in variablen einlesen, und versuche das gerade so:


    Code:
    Config Serialin = Buffered , Size = 64 
    
    ...
    
    Do
    
    
    
      Wait 3                                                   
     
      Call Transmit_101                       'command get start parameters senden
    
        If Ischarwaiting() = 1 Then
           Call Receive_101                   'sub receive_101 soll empfangen
        End If
    
      
        'Loop
      'End If
    
      .......
     
    Loop
    
    
    Sub Receive_101
      Reset Portc.0      'hier nochmal den rs485 auf empfangen schalten
      Startcom = 0
      Do
        Inputbin Startcom
    
      Loop Until Startcom = 200
    
      ...
    
    end sub


    beim senden checke ich ob alle daten gesendet wurden mit dem txc flag und schalte den 485 wieder auf empfangen ... geht prima.


    problem ist beim empfangen auch wenn ich ischarwaiting weglasse geht gar nix.
    kann es sein dass er sich bei inputbin irgendwie aufhängt ?

    das gerät antwortet innerhalb von 10ms, deshalb dachte ich mir mit ischarwaiting wartet er bis daten kommen, dann in der sub prüft er ob das byte 200 empfangen wird, das ist dann der erste wert, danach die anderen einlesen....


    ?????????


    buhuuuuu

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2006
    Beiträge
    164
    hmmmm muss ich da irgendwie waitkey verwenden oder sowas ???


    man die hilfe ist gar nicht mal sooo übersichtlich ...

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2006
    Beiträge
    164
    oh mann jetzt hab ich echt schon etliches versucht .... interrupt, waitkey, usw usw

    es klappt einfach nicht

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    36
    Beiträge
    1.614
    LOL, das problem hatte ich exakt so mit der CMUCam2, daher schreib ich für die ja auch grad nen manual, wo ich das ganze etwas besser beschreibe, und die gibt als startbyte ne 255 ^^ also so iss der code dazu:

    Code:
    Sub Empfangen()
       While Isit <> 200
          Isit = Waitkey()
       Wend
       For I = 1 To 4
          Isit = Waitkey()
          Ar(i) = Isit
       Next
    End Sub
    der wartet also auf die 200, und dann liest er 4 weitere bytes ein, das funzt wunderbar so, und die methode wird DIREKT nach dem senden ausgeführt, also ohne ischarwaiting und son quatsch, tests mal, sollte genau so gehen ^^

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2006
    Beiträge
    164
    wow prima ich werds gleich mal austesten !

    bei mir sinds so 8-10 bytes glaub ich, müsste ja gehen.

    ach mist und ich hatte den nachmittag eigentlich für was anderes verplant

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    36
    Beiträge
    1.614
    kannst ja auch das andere machen, aber wenn du natürlich der verlockung nicht widerstehen kannst

    musst mal testen mit deiner byteanzahl, aber musste eben nur die 4 ersetzen, in dem array sind dann die verwertbaren bytes nur nach der 200 enthalten, also eigentlich einfach, aber knackig ^^

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2006
    Beiträge
    164
    ok also nach etlichem hin- und her gehts auf einmal, allerdings etwas anders:

    Code:
      
    do
      Wait 3
     
      Call Transmit_102
      'commando senden, dann antwort abwarten
      'antwort ist 200 1 0 244 201  (start, id, error, checksum, end)
    
      Check = Waitkey()
    
       If Check = 200 Then
    
          For I = 1 To 4
             Check = Waitkey()
             Ar(i) = Check
          Next
       End If
          If Ar(1) = 1 Then  (das erste byte nach der 200 muss 1 sein)
            'dann kontroll led blinken lassen
          Porta.0 = 0
          Waitms 100
          Porta.0 = 1
          Waitms 100
          Porta.0 = 0
          Waitms 100
          Porta.0 = 1
          Waitms 100
          Ar(1) = 0
       End If
    loop

    ok also das läuft kontinuierlich durch.
    als erstes brauch ich jetzt mal nen timeout, wenn innerhalb von 10ms nicht geantwortet wird soll das kommando erneut gesendet werden.

    wenn ich das hab müsst ich eigentlich klar kommen.

    vielen dank schonmal und wenn wer tipps zum timeout hat ... ich habe aber noch nie mit timern gearbeitet ....

    werd mich mal umschauen, glaub ich hab im forum irgendwo mal was gelesen

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2006
    Beiträge
    164
    hmmm die hilfe sagt mit inkey gehts weiter auch wenn kein character kommt .... aber da werd ich das problem haben das mein gerät bis zu 10ms brauchen kann bis es sendet ....

    ich probier mal weiter rum

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2006
    Beiträge
    164
    juhuuu mit $timeout und waitkey klappts ...

Berechtigungen

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

Labornetzteil AliExpress