Sida 1 av 1
Problem med USB-RS232-adapter
Postat: 22 november 2010, 21:57:16
av ie
Har suttit och kliat mig i huvudet hela helgen varför mitt VB-program inte funkar helt att prata med Xbee-moduler, inkopplade via en USB-RS232-adapter.
Lokala kommandon i modulen har (oftast) funkat men jag har inte lyckats skicka något till andra moduler. Jag vet dock att de hänger ihop i ett nätverk.
Så idag hittade jag äntligen problemet. USB-RS232-adaptern (eller VB?) gör om alla utgående tecken H80-HFF till H3F! Varför då??? I alla inställningar jag hittar (VB's SerialPort-kontroll och Windows enhetshaterare är inställda på 8 bit (1 stoppbit, ingen paritet).
Kod: Markera allt
7E 00 0F 17 01 01 23 45 67 89 AB CD EF 43 21 02 61 61 FF - Skickat
7E 00 0F 17 01 01 23 45 67 3F 3F 3F 3F 43 21 02 61 61 3F - Kommer ut
Anledningen till att de lokala kommandona funkade var att de in nödvändigtvis hade något "högt" tecken i sig, medans alla sänd-kommandon hade höga tecken i mottagaradressen. Detta gjorde naturligtvis att det blev checksummafel och att modulen ignorerade dessa paket.
Nån som har någon idé eller råkat ut för detta själva? Annars köper jag en ny adapter på Kjell i morgon och testar.
Kan nämna att det är exakts samma problem med två identiska adaptrar jag provat med.
Re: Problem med USB-RS232-adapter
Postat: 22 november 2010, 22:05:59
av v-g
Låter skumt. Du är säker på att det inte ett omvandlingsfel från din sida när du skall skicka saker med din rutin?
Sätt en breakpoint precis innan du skickar så du _vet_ vad variabeln står på (om du har en).
Mig veterligen är det mer eller mindre "samma skit" i alla dessa converterare och eftersom du fått samma resultat med båda lutar det åt ovan eller någon inställning/drivrutin till din konverterare. Kolla om det fungerar med något annat som drivs med en serieport och dess programvara.
Re: Problem med USB-RS232-adapter
Postat: 22 november 2010, 22:47:41
av ie
Ja, jag är säker på rätt data skickas ut. Kontrollsträngen skapas "samtidigt" med sändningen.
Kod: Markera allt
For i As Integer = 1 To s1.Length 'Kontrollutskrift
TextBox1.Text = TextBox1.Text & Asc(Mid(s1, i, 1)).ToString("X2")
Next
TextBox1.Text = TextBox1.Text & vbCrLf
SerialPort1.Write(s1) 'Skicka data
Tyvärr har jag inget annat tillgängligt att testa mot just nu.
Jag är också tämligen säker på att mottagningen av data funkar, då jag kan verifiera det med de kontrollkommandon som funkar mot modulen. Det modulen skickar tar jag emot rätt.
I min testuppkoppling (enl första inlägget) byglade jag stift 2 och 3 i RS232-donet och tog mao emot utskickat data med samma funktion som jag vet tar emot data rätt.
Re: Problem med USB-RS232-adapter
Postat: 22 november 2010, 22:50:04
av ie
Gissa vad jag hittade nu...
Kod: Markera allt
Use this method when you want to write a string as output to a serial port.
If there are too many bytes in the output buffer and Handshake is set to XOnXOff then the SerialPort object may raise a TimeoutException while it waits for the device to be ready to accept more data.
By default, SerialPort uses ASCIIEncoding to encode the characters. ASCIIEncoding encodes all characters greater then 127 as (char)63 or '?'. To support additional characters in that range, set Encoding to UTF8Encoding, UTF32Encoding, or UnicodeEncoding.
RTFM!!!
Re: Problem med USB-RS232-adapter
Postat: 22 november 2010, 23:00:21
av AndLi
v-g skrev:
Mig veterligen är det mer eller mindre "samma skit" i alla dessa converterare och eftersom du fått samma resultat med båda lutar det åt ovan eller någon inställning/drivrutin till din konverterare. Kolla om det fungerar med något annat som drivs med en serieport och dess programvara.
Nu kanske du anser FTDi vara skit, men konverterare med deras chip har jag
aldrig haft problem med. de spelar i en egen liga.. Svårt att veta innan dock vilket chip som sitter i, bäst att göra sina egna

Re: Problem med USB-RS232-adapter
Postat: 22 november 2010, 23:20:12
av v-g
AndLi:Tvärtom

FTDI är kvalla!
Re: Problem med USB-RS232-adapter
Postat: 22 november 2010, 23:25:13
av sodjan
OK. Men du vill ju sannolikt varken ha UTF8Encoding, UTF32Encoding, eller UnicodeEncoding.
Hittade du någon inställning för att göra porten helt transparent för 8-bitars tecken ?
Se även :
http://bytes.com/topic/visual-basic-net ... t-encoding
http://www.visualstudiodev.com/visual-b ... 9369.shtml
Svaret verkar vara att antingen sättat en speciell codepage eller att inte skicka
datat som en sträng alls utan som en array-of-bytes (då sker ingen omkodning).
Re: Problem med USB-RS232-adapter (Löst, var VB-problem)
Postat: 23 november 2010, 18:22:22
av ie
Jo, jag hittade rätt kodning till slut. Kodningen heter "Default". Lite lustigt alltså att "Default" inte är Default-inställningen för serieportskontrollen. Känns lite ologiskt. Nu funkar det i alla fall att skicka strängar som inte förstörs.
Kod: Markera allt
SerialPort1.Encoding = System.Text.Encoding.Default
Sodjan: Det var dina USB-adaptrar för övrigt.
Re: Problem med USB-RS232-adapter
Postat: 23 november 2010, 18:55:06
av sodjan
Jahaja

Men detta har så vitt jag förstår inte ett smack med själva adaptern
att göra, utan hur "Serial" objektet uppför sig i .Net. Personligen
skulle jag vilja ha en parameter/property där man ställer "encoding=none"
eller något liknande. Även "default" är ju (som du också säger) inte helt
tillförlitligt, hur vet man vad som *är* "default" ??