Python Serial. Rs232 kommunikation Rfid iso18000 6B

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
jeja2000
Inlägg: 98
Blev medlem: 30 mars 2005, 07:44:54
Ort: Lyrestad
Kontakt:

Python Serial. Rs232 kommunikation Rfid iso18000 6B

Inlägg av jeja2000 »

Kanske dum fråga egentligen, men totalt stopp i hjärnan.

Om man har dokumenterat Host Packet:
Head 0xA0
Len 0x04
Address är tomt men enligt annat ställe 0xFF
Command 0x89
Repeat 0xFF
Check ?

Jag antar att dessa fälten motsvarar en byte, 8 bitar. Så långt inget konstigt.

Checksum verkar i C räknas ut genom att addera alla och köra en NOT +1

Kod: Markera allt

sum = (~sum) +1 
Skickar man alla bitarna i en sträng, eller var för sig.

Tacksam för en knuff i rätt riktning så löser det sej säkert.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Python Serial. Rs232 kommunikation Rfid iso18000 6B

Inlägg av sodjan »

Det bör vara minst ett frågetecken någonstans, ifall det är något du frågar.

> Jag antar att dessa fälten motsvarar en byte, 8 bitar. Så långt inget konstigt.

Ja, med de värdena som är angiva i hex så blir det ju bytes.

> Checksum verkar i C räknas ut genom att addera alla och köra en NOT +1

Det finns massor av metoder att räkna ut checksumma. Antingen behöver
du verifiera från någon dokumentation hur det görs just här, eller genom
att du har en känt korrekt transaktion där du kan testa din teori
kring checksumma och se om det stämmer.

> Skickar man alla bitarna i en sträng, eller var för sig.

Tja, det är ju en filosofisk fråga. På själva serielinan så kommer de
alltid att komma "var för sig". Hur du sedan löser det i din kod spelar
ju mindre roll. Gör det som är praktiskt och rätt utifrån vad koden
gör för övrigt, vilken miljl det körs i o.s.v.

> Tacksam för en knuff i rätt riktning så löser det sej säkert.

Börja med att ställa någon fråga, så får vi se... :-)

Det står "Python" i rubriken, vad har det med detta att göra?
jeja2000
Inlägg: 98
Blev medlem: 30 mars 2005, 07:44:54
Ort: Lyrestad
Kontakt:

Re: Python Serial. Rs232 kommunikation Rfid iso18000 6B

Inlägg av jeja2000 »

Ja värdena är ju i hex.

Själva implementationen kommer ske i Python troligtvis.

Angående Checksum så beskrivs det i dokumentationen såhär:

Kod: Markera allt

unsigned char Checksum(unsigned char *uBuff, unsigned char *uBuffLen)
{
     unsigned char i, uSum = 1;
     for(i=0;i<uBuffLen;i++){
          uSum = uSum + uBuff[i];
     }
     uSum = (~uSum) +1;
     return uSum;
}
Då bör man väl skicka alla hexvärden i en lista/array till denna funktionen.
Vilken summerar värdena och sen kör en not + en på summan?
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Python Serial. Rs232 kommunikation Rfid iso18000 6B

Inlägg av sodjan »

Dokumentation för vadå? Länk?
Är det något speciellt du ska implementera?

Men om du vill ha en checksumma enligt den C koden
så är det ju bara att skriva om det i Python. Men du kan
ju inte från oss om det är *rätt* checksumma, vi har ju
inte en susning om vad du håller på med.
jeja2000
Inlägg: 98
Blev medlem: 30 mars 2005, 07:44:54
Ort: Lyrestad
Kontakt:

Re: Python Serial. Rs232 kommunikation Rfid iso18000 6B

Inlägg av jeja2000 »

Ni kan få en länk till dokumentationen jag fått.

http://www.boxedsolutions.se/rfid-userguide.pdf

Min tanke är att implementera Rfid läsaren så att jag senare kan läsa Rfid taggar med Raspberry pi. Men nu under test och utveckling får det bli utveckling på min Ubuntu dator.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Python Serial. Rs232 kommunikation Rfid iso18000 6B

Inlägg av sodjan »

OK.
Den länken hade kunnat varit med från början. :-)
Det sätter ju det hela i sitt rätta sammanhang.

Men då är det väl bara att köra enligt specifikationen.
Inte världens bästa datablad, men det bör fungera... :-)
jeja2000
Inlägg: 98
Blev medlem: 30 mars 2005, 07:44:54
Ort: Lyrestad
Kontakt:

Re: Python Serial. Rs232 kommunikation Rfid iso18000 6B

Inlägg av jeja2000 »

Sorry, missade det.

Men om jag har fattat dokumentationen rätt. Så

Sätter man Head först sen längden, addressen, command, Data sist checksum
0xA0 0x04 0xFF 0x89 0xFF 0x2F

Det jag inte fattar med python är hur man räknar med char( en byte)

Nån som är python kunnig som vet om man manuellt behöver dra av 255 om värdet går över? I C har jag för mej att adderar man 1 till 255 om det är en char så blir det 1. Men Python verkar lägga ihop allt.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Python Serial. Rs232 kommunikation Rfid iso18000 6B

Inlägg av sodjan »

Det är väl bara att summera på och göra en "reminder" (% operatorn).

Kod: Markera allt

>>> a = 123 + 212 + 23 + 34 + 34 + 56 + 44 + 56
>>> print a
582
>>> b = a % 256
>>> print b
70
>>> c = 2 * 256 + 70
>>> print c
582
>>>
Så 70 är din checksumma före den sista operationen.
Användarvisningsbild
Icecap
Inlägg: 26628
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Python Serial. Rs232 kommunikation Rfid iso18000 6B

Inlägg av Icecap »

<språkpolis>
Remainder (betyder "Rest"/"Kvarvarande")

Inte Remeinder (betyder "komma ihåg"/"Påminna")

Men OK, det är ju ett bokstav det skiljer på...
</språkpolis>

Messerschmitt
Användarvisningsbild
Jan Almqvist
Inlägg: 1652
Blev medlem: 1 oktober 2013, 20:48:26
Ort: Orust

Re: Python Serial. Rs232 kommunikation Rfid iso18000 6B

Inlägg av Jan Almqvist »

<divisionsfritt alternativ>

bitvis and med 255.

</divisionsfritt alternativ>
Användarvisningsbild
Icecap
Inlägg: 26628
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Python Serial. Rs232 kommunikation Rfid iso18000 6B

Inlägg av Icecap »

Rent faktisk är det så att har man en byte som summationsvariabel behöver man inte göra mer, den är bara på 8 bit ändå. Men Python är ju inte så så det är klart att man måste AND'a med 255. Men i "vanliga" µC kan man oftast räkna med att en unsigned char är på 8 bit, det är dock något man måste kolla för att vara säker på!
jeja2000
Inlägg: 98
Blev medlem: 30 mars 2005, 07:44:54
Ort: Lyrestad
Kontakt:

Re: Python Serial. Rs232 kommunikation Rfid iso18000 6B

Inlägg av jeja2000 »

En fråga på Sodians Exempel bara för att mitt huvud ska hänga med.

Är beräkningen för hexadecimalt?
7B D4 17 22 22 38 2C 38

Så är jag helt med på 70 sen kommer väl om jag inte missförstått ~ operatorn alldeles för mycket.

checksum = (~70) +1

Borde inte NOT vända 1 och 0 binärt?

Så checksum = 185 + 1
alltså 186 decimalt. BA hexadecimalt?

Men i Python får jag ett negativt värde med ~operatorn. -71 Vilket såklart inte är en unsigned char.
Användarvisningsbild
Jan Almqvist
Inlägg: 1652
Blev medlem: 1 oktober 2013, 20:48:26
Ort: Orust

Re: Python Serial. Rs232 kommunikation Rfid iso18000 6B

Inlägg av Jan Almqvist »

<fulhack>

kolla om checksum är mindre än 0, i så fall lägg till 256.

-71 + 256 = 185

</fulhack>
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Python Serial. Rs232 kommunikation Rfid iso18000 6B

Inlägg av sodjan »

> Är beräkningen för hexadecimalt?

Helt ointressant för mitt exempel. Beräkning som beräkning...

Det finns flera metoder att invertera bitarna, t.ex.:

Kod: Markera allt

>>> a = 70
>>> b =  a ^ 255
>>> print bin(a), bin(b)
0b01000110
0b10111001
>>>
>>> a = 70
>>> b = 255 - a
>>> print bin(a), bin(b)
0b01000110
0b10111001
Så:

Kod: Markera allt

>>> a = 123 + 212 + 23 + 34 + 34 + 56 + 44 + 56
>>> checksum = ((a % 256) ^ 255) + 1
>>> print checksum, bin(a % 256), bin((a % 256) ^ 255), bin(checksum)
186 0b01000110 0b010111001 0b10111010
jeja2000
Inlägg: 98
Blev medlem: 30 mars 2005, 07:44:54
Ort: Lyrestad
Kontakt:

Re: Python Serial. Rs232 kommunikation Rfid iso18000 6B

Inlägg av jeja2000 »

Jo att det är ointressant för beräkningen är jag med på. Men det var mest för att se om jag tänkte rätt med min hexadecimala översättning av de decimala talen. Var kanske lite otydlig.

Jag får tacka för hjälpen hittills.

Nu räknar checksum rätt iallafall enligt demo programmet. Nästa steg är att få nån respons från enheten.
Skriv svar