Ankündigung

Einklappen
Keine Ankündigung bisher.

Chromoflex ansteuerung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Lobo2210
    antwortet
    Ach so, das wollte ich noch zu deinem letzen Beitrag sagen,
    daß das Chromoflex Binärdaten haben will, war ja das Problem !

    Mein Code hat die Checksumme aber immer in ASCII berechnet und das ist natürlich dann immer der falsche CRC mit dem das Chromoflex nichts anzufangen wußte
    --> die Daten habe ich ihm nämlich immer im Binärformat geschickt.

    Einen Kommentar schreiben:


  • AScherff
    antwortet
    Zitat von Lobo2210 Beitrag anzeigen
    Warum bei mir die Übermittlung an das Chromoflex im ASCII-Format nicht funktioniert weiß ich nicht --> habe es mehrmals getestet, aber das Gerät hat nichts gemacht!?
    Chromoflex will Binärdaten...

    Wenn Du Dir meine Sende Routine ansiehst https://knx-user-forum.de/showpost.p...14&postcount=4

    Ich übergebe HexCode Beispiel: (0000FE)

    Daraus wird in der sende ein String gemacht also 3 Zeichen, (Step 2)

    und von diesem binären String wird dann der CRC16 berechnet und angehangen...

    Wobei in der sende auch noch die Adresse des Controllers vorangestellt wird.

    Aber gut, wenn es nun bei Dir geht, ist das Thema ja erledigt

    Einen Kommentar schreiben:


  • Lobo2210
    antwortet
    Nun, das ist nicht der Stein der Weisen, sondern löst nur mein Problem wie ich es gewollt habe !
    Warum bei mir die Übermittlung an das Chromoflex im ASCII-Format nicht funktioniert weiß ich nicht --> habe es mehrmals getestet, aber das Gerät hat nichts gemacht!?

    Und manchmal ist es ja auch so, das man die Lösung vor lauter Bäumen nicht sieht, obwohl man ja mit der Nase schon genau davor steht.

    Hier die banalen zwei Veränderungen:
    Code:
    For nC = 1 To Len(txt) Step [B][U]2[/U][/B]
        j = Val("&H" + Mid(txt, nC, [B][U]2[/U][/B]))
    Die --> 2 <-- war das ganze Problem, um die Berechnung in Hex auszugeben

    Einen Kommentar schreiben:


  • AScherff
    antwortet
    Zitat von Lobo2210 Beitrag anzeigen
    So, ich hab's jetzt endlich raus wie er mir die Richtige Checksumme berechnet mit der ich weiterarbeiten kann !
    Na, wenn Du den Stein der Weisen gefunden hast, können wir den hier mal sehen? Auch um zu schauen, warum mein Programm trotzdem läuft

    Einen Kommentar schreiben:


  • Lobo2210
    antwortet
    So, ich hab's jetzt endlich raus wie er mir die Richtige Checksumme berechnet mit der ich weiterarbeiten kann !

    Ich danke Dir für deine Bemühungen und deine Geduld

    Gruß Lobo

    Einen Kommentar schreiben:


  • AScherff
    antwortet
    Zitat von Lobo2210
    So, habe mal dein Code getestet --> Chromoflex reagiert nicht drauf!?
    Ich weiss zwar nicht was Du da machst, aber mein Programm läuft, ich kann es Dir gerne als Source zur Verfügung stellen. Der Sende-String über UDP ist zu dem RS232 identisch.

    Einen Kommentar schreiben:


  • AScherff
    antwortet
    Zitat von Lobo2210 Beitrag anzeigen
    mann, jetzt hast du mich aber verunsichert
    naaa, hättest du aber auch selber drauf kommen können

    Einen Kommentar schreiben:


  • Lobo2210
    antwortet
    mann, jetzt hast du mich aber verunsichert
    hatte schon daran gedacht mich lieber Kreuzworträtsel zu widmen !

    Einen Kommentar schreiben:


  • AScherff
    antwortet
    eine Zeile ist wohl untergegangen...

    Code:
    ....
        Next ff
        CRC16 = Hex(crc)
        If Len(CRC16) > 4 Then
    ...
    ich andere das auch oben mal ab...

    Einen Kommentar schreiben:


  • Lobo2210
    antwortet
    also ich muß sagen, ich verstehe das nicht ganz ...
    in deinem ersten Beispiel, übergibst du der Funktion CRC16 den Inhalt von txt -> das ist doch richtig, oder?
    Dann rechnet er schön die zwei For...Next-Schleifen durch und kommt an den Punkt, wo die Länge von CRC16 abgefragt wird. "If Len(CRC16) > 4..."
    CRC16 ist aber doch der Rückgabewert der Funktion und muß erst mal einen Rückgabewert irgendwoher erhalten --> und das tut er an dieser Stelle ja nicht sondern erst am Schluß --> CRC16 = Chr(CInt("&h" & Left$(CRC16, 2))) & Chr...
    da aber CRC16 immer noch keinen Inhalt bekommen hat und er ...Left$(CRC16, 2))) & Chr... berechnen will gibt es bei mir immer eine Fehlermeldung!!

    Sag mir doch mal bitte wie CRC16 zu seinem Inhalt kommt, nach deinem ersten Beispiel

    Thx

    Einen Kommentar schreiben:


  • AScherff
    antwortet
    Zitat von Lobo2210 Beitrag anzeigen
    was macht dieser eigentlich wenn er funktioniert?
    er erzeugt Dir den CRC16 für den benötigten String

    Iss nicht Dein Ernst - oder?


    Ok, mal am Beispiel Reset....

    Code:
    'Reset senden
    
    sende "0000FE"
    
    Sub sende(c As String)
    h = Chr$(&HCA) & Chr$(0) & Chr$(0) & Chr$(0)
        For t = 1 To Len(c) Step 2
            ts = Trim$(Mid$(c, t, 2))
            wert = CInt("&h" & ts)
            h = h & Chr$(wert)
        Next t
     comm.Output = h & CRC16(h)
     Do
         DoEvents
     Loop While comm.OutBufferCount > 0
    End Sub

    Einen Kommentar schreiben:


  • Lobo2210
    antwortet
    hmmm, habe mir den Code mal gezogen und ausprobiert, funktioniert bei mir nicht, da nach durchlaufen der zwei for...next schleifen CRC16="" ist.
    Was übergibst du denn für Werte an die Funktion?
    Hab ich da was verpeilt?

    Ich benutze aber fast den gleichen Code wie du, bis auf
    Code:
    j = Val("&H" + Mid(txt, nC, 1))
    , damit in Hex gerechnet wird
    und den unteren Teil
    Code:
    If Len(CRC16) > 4 Then
            CRC16 = Mid$(CRC16, 5)
        End If
        CRC16 = Chr(CInt("&h" & Left$(CRC16, 2))) & Chr(CInt("&h" & Right$(CRC16, 2)))
    was macht dieser eigentlich wenn er funktioniert?

    Gruß Lobo

    Einen Kommentar schreiben:


  • AScherff
    antwortet
    Ich habe ein Programm in VB6 gemacht. Sehr quick und sehr dirty. Aber es ist eine CRC16 drin und somit kann stufenlos geregelt werden. Auch reagiert das Proggi auf UDP Telegramme vom HS

    Meines geht auch nicht auf die RS232 (was allerdings auch eingebaut ist) sondern sendet das als UDP auf einen MOXA der das dan wieder auf RS232 ausgibt...

    Wir könnten ja in kleines Projekt daraus machen

    Code:
    Function CRC16(txt As String) As String
       crc = -1
        For ff = 1 To Len(txt)
            j = Asc(Mid(txt, ff, 1))
            crc = crc Xor j
            For x = 1 To 8
                mask = 0
                If crc / 2 <> Int(crc / 2) Then mask = &HA001
                crc = Int(crc / 2) And &H7FFF: crc = crc Xor mask
            Next x
        Next ff
      [COLOR=Green]       CRC16 = Hex(crc) '   eingefügt....[/COLOR]
        If Len(CRC16) > 4 Then
            CRC16 = Mid$(CRC16, 5)
        End If
        CRC16 = Chr$(CInt("&h" & Left$(CRC16, 2))) & Chr$(CInt("&h" & Right$(CRC16, 2)))
    
    End Function

    Einen Kommentar schreiben:


  • Lobo2210
    hat ein Thema erstellt Chromoflex ansteuerung.

    Chromoflex ansteuerung

    hi Community,

    habe mir ein Chromoflex besorgt und will das Gerät über den PC ansteuern um mir meine Farbwechsel mit VB zu Programmieren.
    Nachdem ich alles mögliche veranstaltet habe um auf das Gerät mittels PC zuzugreifen, habe ich es endlich geschafft, den Comport auszulesen um zu sehen welche Datenpakete von der Software (Cf_Edit) losgeschickt werden. Habe mir dann die Daten abgespeichert (verschiedene Farben, Effekte) die ich nun direkt aus VB an den Chromoflex schicken kann.
    Klappt einwandfrei

    Jetzt aber zu meinem Eigentlichen Problem:
    Da das Protokoll vom Chromoflex immer eine CRC16-Modbus Checksumme an die zu sendenen Daten dranhängt, kann ich nur fertige Datenpakete senden, die ich am Comport mitgelesen habe.
    Das ist LÄSTIG , weil ich 100erte Einstellungen mitlesen müßte, die ich gerne verwenden will.

    Da in der Beschreibung "Chromoflex Usp3_com.pdf" der CRC16 in C++
    beschrieben wird -> ich aber kein C++ kann wollte ich doch hier mal anfragen, wer dieser Sprache mächtig ist und mir den Rechenvorgang mal erläutern kann, damit ich ihn in VB reinkriege.
    Barthelme scheint ja nicht in der Lage oder Willens zu sein auf Fragen diesbezüglich zu antworten
    Es könnte aber auch gleich ein CRC16-Programm in VB sein, vieleicht hat ja jemand eines auf seinem Rechner rumliegen!?
    Die Berrechnung muß als Ausgabe einen HEX-Wert und keinen ASCII-Wert haben. Gebe mal ein Beispiel:
    Wenn ich den Hexwert 0xCA berechne, muß als Lösung: 0x173F rauskommen und nicht 0xB0F0.
    Wenn ich das nämlich noch hinbekomme, dann kann ich mittels PC das Gerät komplett steuern.

    Also interessierte Chromoflex Benutzer, bitte helft mir, damit ich mich von den eingebetteten Effekten vom Chromoflex verabschieden kann.

    Gruß vom Chromoflex-User
    Lobo
Lädt...
X