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.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Chromoflex ansteuerung
Einklappen
X
-
Chromoflex will Binärdaten...Zitat von Lobo2210 Beitrag anzeigenWarum 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!?
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:
-
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:
Die --> 2 <-- war das ganze Problem, um die Berechnung in Hex auszugebenCode:For nC = 1 To Len(txt) Step [B][U]2[/U][/B] j = Val("&H" + Mid(txt, nC, [B][U]2[/U][/B]))
Einen Kommentar schreiben:
-
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äuftZitat von Lobo2210 Beitrag anzeigenSo, ich hab's jetzt endlich raus wie er mir die Richtige Checksumme berechnet mit der ich weiterarbeiten kann !
Einen Kommentar schreiben:
-
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:
-
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.Zitat von Lobo2210So, habe mal dein Code getestet --> Chromoflex reagiert nicht drauf!?
Einen Kommentar schreiben:
-
naaa, hättest du aber auch selber drauf kommen könnenZitat von Lobo2210 Beitrag anzeigenmann, jetzt hast du mich aber verunsichert

Einen Kommentar schreiben:
-
mann, jetzt hast du mich aber verunsichert
hatte schon daran gedacht mich lieber Kreuzworträtsel zu widmen !
Einen Kommentar schreiben:
-
eine Zeile ist wohl untergegangen...
ich andere das auch oben mal ab...Code:.... Next ff CRC16 = Hex(crc) If Len(CRC16) > 4 Then ...
Einen Kommentar schreiben:
-
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:
-
er erzeugt Dir den CRC16 für den benötigten StringZitat von Lobo2210 Beitrag anzeigenwas macht dieser eigentlich wenn er funktioniert?
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:
-
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, damit in Hex gerechnet wirdCode:j = Val("&H" + Mid(txt, nC, 1))
und den unteren Teilwas macht dieser eigentlich wenn er funktioniert?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)))
Gruß Lobo
Einen Kommentar schreiben:
-
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:
-
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
LoboStichworte: -


Einen Kommentar schreiben: