Hallo Forengemeinde, Ich verwende die FTD2XX_NET.dll in Verbindung mit VB.Net 2010 Express. (Die FTD2XX_NET.dll ist die Softwareschnittstelle zu einem USB->RS232 umsetzers) Das funktioniert soweit sehr gut. Um Daten zu übertragen bildet man eine String-Zeichenkette. Jedes Zeichen entspricht ein Byte. Den String übergibt man dann der Sub. Sendent klappt das einwandfrei auch mit Zeichen zw. ASCII 128 und 255, Sprich Bit7 ist gesetzt. Beim lesen geht das auch suprer solange Bit 7 nicht gesetzt ist. Ist Bit 7 gesetzt kommt nur Müll raus. Public FT_InBuffer As String = "" Public trasmited As Integer Public recived As Integer .... FT_Device.Read(FT_InBuffer, trasmited, recived) Datum=(Asc(FT_InBuffer(i)) Kennt jemand das Problem ? LG Christof
Wenn du kein ASCII hast (sprich das 8.Bit verwendest), solltet du die string-Varianten von .Read() und .Write() vermeiden, da verwendet ftdi intern Encoding.ASCII, welches das 8.Bit ignoriert. Nimm die byte[]-Varianten und wandle mit: Encoding enc=Encoding.GetEncoding(1252); // bzgl. der 1252: http://en.wikipedia.org/wiki/Windows-1252 // das ist in der Regel die passende Codepage und enc.GetBytes() bzw. enc.GetString() zwischen byte[] und string um. (Ich bin C#'ler, wird aber in VB.net wohl ähnlich/identich sein)
Christof Rieger schrieb: > Um Daten zu übertragen bildet man eine String-Zeichenkette. Jedes > Zeichen entspricht ein Byte. Den String übergibt man dann der Sub. > Sendent klappt das einwandfrei auch mit Zeichen zw. ASCII 128 und 255, > Sprich Bit7 ist gesetzt. ASCII hat nur 7 Bit. Daher gibt es da kein 128 bis 255 und kein Bit 7. Siehe auch http://de.wikipedia.org/wiki/Ascii Alles, was darüber hinaus geht muß mit einem anderen Encoding gemacht werden. Welches das ist, hängt davon ab, was die Gegenstelle verwendet.
Stimmt ! ASCII ist nur bis 127 definiert. Das hatte ich verdrängt. Damit sind die Befehle Chr()(Byte zu Zeichen) und Asc()(Zeichen zu Byte) nicht korrekt. Eine Code-Tabellenbehandlung benötige ich nicht. Wenn die FTD2XX_NET.dll mir: 65 67 69 189 in den String-Buffer schreibt sieht VB.NET A C E [irgendwass] Ich brauche jetzt eine Möglichkeit aus A C E [irgendwass] unverändert wieder 65 67 69 189 zu machen. Mir ist jetzt klar das Asc([irgendwass]) nicht geht! und warscheinlich Chr(189) auch nicht wirklich das richtige macht. Ich bräuchte eine art Rawread und Rawwrite ! Kennt das jemand ? LG Christof
Ah, ich habe was gefunden: http://dotnet-snippets.de/dns/string-in-byte-array-und-zurueck-wandeln-SID645.aspx Jetzt verstehe ich was bluppdidupp meint.
Christof Rieger schrieb: > Ich bräuchte eine art Rawread und Rawwrite ! > > Kennt das jemand ? FTD2XX_NET.dll mit den Funktionen Read und Write (die es in Varianten für Strings und Byte-Arrays gibt), dazu das passende Encoding Beitrag "Re: VB.Net 2010 Express lese Müll wenn ASCII > 127" und/oder man könnte auch die FTD2XX_NET.dll entsprechend erweitern http://www.ftdichip.com/Support/SoftwareExamples/CodeExamples/CSharp/FTD2XX_NETclass.zip
Fettes Danke an Arc Net, Ich hatte mir damals nur ein Programmbeispiel angeschaut, und da wurde alles nur über Strings übergeben. So kam ich nicht auf die Idee, das es auch mit Bytearrays geht. Ich habe mein Programm umgeschrieben und jetzt klaptt es mit Bit 7 Ein Toller Nebeneffekt das Programm ist um 30% schneller geworden. LG Christof
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.