Konstigt värde när jag skickar från uC till PC

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Konstigt värde när jag skickar från uC till PC

Inlägg av Al_Bundy »

Hej!

Under en lång tid mellan seriell kommunikation mellan uC och PC så har jag fått värdet 47 tillbaka från uC till PC.
Exempelvis så skickar jag ett värde, ett stort och långt värde i form av textsträng och massa andra värden där i textsträngen.

Min uC kapar upp denna textsträng och sedan delar in dessa i variabler, som konverteras till float.
Men jag tänker skicka tillbaka dessa variabler till min PC för att bekräfta att jag har fått rätt värden.

Men ibland får jag bara värdet 47 tillbaka. :| Helt random.
Men oftast så fungerar det :) Vi har löst problemet igenom att den kollar om den har fått rätt värden. Om inte => skicka igen.

Vad brukar detta bero på?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Konstigt värde när jag skickar från uC till PC

Inlägg av sodjan »

"47", är det decimal eller som hex?
Hur ofta är "ibland"?
1 gång av 2?
1 gång av 100?
Mer sällan?
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Konstigt värde när jag skickar från uC till PC

Inlägg av Icecap »

"Vad brukar detta bero på?"
Först och främst: Dåligt kommunikationsprotokoll!
Därnäst: Dålig programmering.

Ett bra protokoll bör vara uppbyggd så att det finns en entydig startsekvens och en entydig stoppsekvens.
Däremellan kommer data samt en checksumma.

Checksumman kan t.ex. vara en addition av alla bytes i data-delen, det kan vara en XOR av dom eller annat man kan hitta på. Självklart kan man köra med CRC18 eller CRC32 men det kan kännas lite överkurs.

Jag brukar skiva värden som siffror, alltså ville värdet 47 bli skickat som '4' (0x34) och därefter '7' (0x37). Checksumman ville då bli 0x34 + 0x37 = 0x6B och den hade jag skickat som 2 siffror i HEX.

Oftast inleder jag ett block med STX (0x02) och avslutar med ETX (0x03).

I protokollet bör det vara definierat om ett block som godtas ska ha en acknowledge tillbaka eller om det bara ska kastas av mottagaren. Har man ett kommunikationsförfarande som begär värdet och får svar kan den då bara begära värdet igen om det blev fel på vägen.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Konstigt värde när jag skickar från uC till PC

Inlägg av Al_Bundy »

sodjan skrev:"47", är det decimal eller som hex?
Hur ofta är "ibland"?
1 gång av 2?
1 gång av 100?
Mer sällan?
"47\r\n" står det.

Ibland: 1 av 7 gånger.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Konstigt värde när jag skickar från uC till PC

Inlägg av Al_Bundy »

Icecap skrev:"Vad brukar detta bero på?"
Först och främst: Dåligt kommunikationsprotokoll!
Därnäst: Dålig programmering.

Ett bra protokoll bör vara uppbyggd så att det finns en entydig startsekvens och en entydig stoppsekvens.
Däremellan kommer data samt en checksumma.

Checksumman kan t.ex. vara en addition av alla bytes i data-delen, det kan vara en XOR av dom eller annat man kan hitta på. Självklart kan man köra med CRC18 eller CRC32 men det kan kännas lite överkurs.

Jag brukar skiva värden som siffror, alltså ville värdet 47 bli skickat som '4' (0x34) och därefter '7' (0x37). Checksumman ville då bli 0x34 + 0x37 = 0x6B och den hade jag skickat som 2 siffror i HEX.

Oftast inleder jag ett block med STX (0x02) och avslutar med ETX (0x03).

I protokollet bör det vara definierat om ett block som godtas ska ha en acknowledge tillbaka eller om det bara ska kastas av mottagaren. Har man ett kommunikationsförfarande som begär värdet och får svar kan den då bara begära värdet igen om det blev fel på vägen.
Vi har löst problemet igenom att man läser resultatet som man har skickat. Då kan man avgöra om det är bra eller inte.
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Konstigt värde när jag skickar från uC till PC

Inlägg av Icecap »

Då kvarstår dålig programmering.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Konstigt värde när jag skickar från uC till PC

Inlägg av Al_Bundy »

Du gillar verkligen att kasta skit på min kod utan ens har sett den :P
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Konstigt värde när jag skickar från uC till PC

Inlägg av sodjan »

> "47\r\n" står det.

Står vardå?

Är det alltså texten "47" eller värdet 47 ?

Men tja, någonstans ifrån kommer det ju... :-)
Användarvisningsbild
Klas-Kenny
Inlägg: 11840
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Konstigt värde när jag skickar från uC till PC

Inlägg av Klas-Kenny »

Al_Bundy skrev:Du gillar verkligen att kasta skit på min kod utan ens har sett den :P
Då får du väl ta och visa upp lite kod då, så folk slipper sitta och gissa..
Miramithe
Inlägg: 1423
Blev medlem: 21 januari 2013, 17:45:10
Ort: Borlänge

Re: Konstigt värde när jag skickar från uC till PC

Inlägg av Miramithe »

Fullt förståeligt när icecap flera ggr försökt hjälpa och påpekat fel som du avfärdar eller skiter helt i. Skit ska skit ha heter det.
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Konstigt värde när jag skickar från uC till PC

Inlägg av Icecap »

Al: nej, det gör jag inte!
Och det behövs ju inte, du klarar det helt själv, gång efter gång!

Du har fått råd, du avfärder dom och du hade två möjligheter till varför fenomenet uppstår. Du förkastar den ena orsak, alltså kvarstår det bara den andra, så enkelt är det!

Och mina råd är inte för skoj skull, de är baserat på många års erfarenhet i alla möjliga tänkbara sammanhang.
Men du vet ju bättre än alla andra - i vanlig ordning - och då är det ju konstigt att du väldigt ofta inte förstår vad som går fel, inte kan analysera dig fram till det och samtidig vägrar ta råd och lära dig.

I de senaste par dagar haf jag suttit med kommunikation över serielänk - och det har varit en del knas på vägen. Men jag har löst dom steg för steg, analyserat vad som gick och inte gick och nu anser jag att den krypterade kommunikation jag har mellan 5 trådlösa enheter är på god gång. Och ja, det tar tid, det har tagit tid att planera protokollet, krypteringen, hur värden ska överföras osv. men då det jobb var klart var resten ganska enkelt.

Men om du får värdet 47 utan någon specifik orsak är det antingen fel på hårdvaran eller på programmet. Motbevisa det gärna, jag skulle uppskatta att lära något nytt.

Men om ditt "försvar" är att klaga på att jag påpekar det självklara ställer du dig själv i ett riktigt dåligt ljus.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Konstigt värde när jag skickar från uC till PC

Inlägg av Al_Bundy »

sodjan skrev:> "47\r\n" står det.

Står vardå?

Är det alltså texten "47" eller värdet 47 ?

Men tja, någonstans ifrån kommer det ju... :-)
Texten blir det.
Men det är så klart ett värde. När jag skickar ett värde blir det en sträng.

Mystisk gåta. Precis som filmen 47.
Agwan
Inlägg: 1617
Blev medlem: 15 september 2009, 09:05:14

Re: Konstigt värde när jag skickar från uC till PC

Inlägg av Agwan »

Miramithe skrev:Fullt förståeligt när icecap flera ggr försökt hjälpa och påpekat fel som du avfärdar eller skiter helt i. Skit ska skit ha heter det.
Så var det ju inte riktigt. Icecap började ju med att slänga ur sig några förolämpningar vilket ju är perfekt om man vill att den som ställt frågan skall hamna i en sinnesstämning som inte passar för att ta emot efterkommande information, sedan svarade han på en fråga som inte ställts. Han såg ut att svara på frågan hur ett bra protokoll bör vara uppbyggt, inte på om det fanns någon anledning till att just siffran 47 eller möjligen någon annan konstant siffra skulle returneras. Icecaps svar "Då kvarstår dålig programmering." kan ju inte direkt ses som konstruktivt.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Konstigt värde när jag skickar från uC till PC

Inlägg av Al_Bundy »

Klas-Kenny skrev:
Al_Bundy skrev:Du gillar verkligen att kasta skit på min kod utan ens har sett den :P
Då får du väl ta och visa upp lite kod då, så folk slipper sitta och gissa..

Miramithe skrev:Fullt förståeligt när icecap flera ggr försökt hjälpa och påpekat fel som du avfärdar eller skiter helt i. Skit ska skit ha heter det.
Han säger bara "Dålig programmering". Hade jag varit lärare så hade det blivit ett IG direkt på en sådan kommentar. :wink:
Icecap skrev: Al: nej, det gör jag inte!
Och det behövs ju inte, du klarar det helt själv, gång efter gång!

Du har fått råd, du avfärder dom och du hade två möjligheter till varför fenomenet uppstår. Du förkastar den ena orsak, alltså kvarstår det bara den andra, så enkelt är det!

Och mina råd är inte för skoj skull, de är baserat på många års erfarenhet i alla möjliga tänkbara sammanhang.
Men du vet ju bättre än alla andra - i vanlig ordning - och då är det ju konstigt att du väldigt ofta inte förstår vad som går fel, inte kan analysera dig fram till det och samtidig vägrar ta råd och lära dig.

I de senaste par dagar haf jag suttit med kommunikation över serielänk - och det har varit en del knas på vägen. Men jag har löst dom steg för steg, analyserat vad som gick och inte gick och nu anser jag att den krypterade kommunikation jag har mellan 5 trådlösa enheter är på god gång. Och ja, det tar tid, det har tagit tid att planera protokollet, krypteringen, hur värden ska överföras osv. men då det jobb var klart var resten ganska enkelt.

Men om du får värdet 47 utan någon specifik orsak är det antingen fel på hårdvaran eller på programmet. Motbevisa det gärna, jag skulle uppskatta att lära något nytt.

Men om ditt "försvar" är att klaga på att jag påpekar det självklara ställer du dig själv i ett riktigt dåligt ljus.
Om du tar och kollar denna kod-del.
PC:n skickar en sträng som ser ut t.ex. "344;345;563;35;34;" och koden delar upp detta till olika delar. Men PC:n vill veta om processorn har fått rätt kod så processorn skickar tillbaka "344;345;563;35;34;" men istället blir det bara....47. Vi har haft en lärare som har hittat på vårt projekt och även han (mycket erfaren PIC-programmerare) förstår inte heller. Han tror att det har något med buffert att göra. Men att det fungerar många gånger förutom fåtal så står han även med frågetecken.

Kod: Markera allt

 static void get_values_from_flik_5()
      {
        int a = 0;
        String text;
        while (a == 0)
        {
          if(Serial.available() > 0)
          {
            text = Serial.readString();
            int firstcolon = text.indexOf(';');
            int secondcolon = text.indexOf(';', firstcolon+1);
            int thirdcolon = text.indexOf(';', secondcolon+1);
            int fourthcolon = text.indexOf(';', thirdcolon+1);
            int firthcolon = text.indexOf(';', fourthcolon+1);
            PHbor = string_to_float(text.substring(0, firstcolon));
            K = string_to_float(text.substring(firstcolon+1, secondcolon));
            Td = string_to_float(text.substring(secondcolon+1, thirdcolon));
            Ti = string_to_float(text.substring(thirdcolon+1, fourthcolon));
            MAX = string_to_float(text.substring(fourthcolon+1, firthcolon));
            Serial.flush();
            Serial.print(PHbor);
            Serial.print(";");
            Serial.print(K);
            Serial.print(";");
            Serial.print(Td);
            Serial.print(";");
            Serial.print(Ti);
            Serial.print(";");
            Serial.print(MAX);
            Serial.print("#");
            Serial.flush();            
            a = 1;                                                                 // Breake loop
          }
        }
      }
Miramithe
Inlägg: 1423
Blev medlem: 21 januari 2013, 17:45:10
Ort: Borlänge

Re: Sv: Konstigt värde när jag skickar från uC till PC

Inlägg av Miramithe »

Agwan skrev:
Miramithe skrev:Fullt förståeligt när icecap flera ggr försökt hjälpa och påpekat fel som du avfärdar eller skiter helt i. Skit ska skit ha heter det.
Så var det ju inte riktigt. Icecap började ju med att slänga ur sig några förolämpningar vilket ju är perfekt om man vill att den som ställt frågan skall hamna i en sinnesstämning som inte passar för att ta emot efterkommande information, sedan svarade han på en fråga som inte ställts. Han såg ut att svara på frågan hur ett bra protokoll bör vara uppbyggt, inte på om det fanns någon anledning till att just siffran 47 eller möjligen någon annan konstant siffra skulle returneras. Icecaps svar "Då kvarstår dålig programmering." kan ju inte direkt ses som konstruktivt.
Nu syftar jag på trådar tidigare, där vid olika tillfällen al vill ha hjälp men behandlar många av svaren som skit och förkastar de eller helt enkelt inte läser dom förstår icecap helt och hållet.
Skriv svar