Thread View: dk.edb.system.unix
3 messages
3 total messages
Started by Leif Neland
Wed, 20 Mar 2013 14:58
perl, unsigned to signed word
Author: Leif Neland
Date: Wed, 20 Mar 2013 14:58
Date: Wed, 20 Mar 2013 14:58
38 lines
2447 bytes
2447 bytes
Nogle data l�ses ind med unpack(C$len) og derefter
my $len = scalar(@packet);
for($i = 0; $i < $len; $i+=2) {
$data[$j++] = ($packet[$i] << 8) + $packet[($i+1)];
}
return @data;
Men temperaturen er en signed 16-bit integer/10.
Det betyder at temperaturen i disse tider er omkring 6550 grader...
S� jeg vil:
if ($data[TEMP]>=0x8000) {$data[TEMP]-=0x10000;}
Dette burde vel kunne g�re det, men er der en elegantere perl-metode at
konvertere en 16-bit unsigned til signed?
Men det ville vel v�re mere korrekt at unpack'e med en SSSSSSs i den
forventede l�ngde; jeg formoder
s A signed short integer
S An unsigned short integer
er 16-bit tal?
Jeg er ikke s� meget for at eksperimentere, da hvar gang jeg henstarter
programmet, skal det finde inverterne ude p� RS422-bussen, og det kan
tage nogle minutter.
S� vidt jeg kan se, r�bes der ud p� bussen: Hvem er derude? og begge
invertere svarer samtidig. Der skal sp�rges et antal gange, f�r der
kommer et svar fra hver, der kan skilles ad. :-(
Leif
--
Husk k�relys bagp�, hvis din bilfabrikant har taget den idiotiske
beslutning at undlade det.
Re: perl, unsigned to signed word
Author: Anders Wegge Keller
Date: Wed, 20 Mar 2013 17:12
Date: Wed, 20 Mar 2013 17:12
13 lines
2051 bytes
2051 bytes
Leif Neland <leif@neland.dk> writes: > Så vidt jeg kan se, råbes der ud på bussen: Hvem er derude? og begge > invertere svarer samtidig. Der skal spørges et antal gange, før der > kommer et svar fra hver, der kan skilles ad. :-( Har dine invertere ikke hver deres adresse? Så er du da sikker på at få nogle ubrugelige resultater. Hvad er det forresten for en type? -- /Wegge Leder efter redundant peering af dk.*,linux.debian.*
Re: perl, unsigned to signed word
Author: Leif Neland
Date: Wed, 20 Mar 2013 18:21
Date: Wed, 20 Mar 2013 18:21
45 lines
2985 bytes
2985 bytes
Anders Wegge Keller kom med denne ide:
> Leif Neland <leif@neland.dk> writes:
>
>> S� vidt jeg kan se, r�bes der ud p� bussen: Hvem er derude? og begge
>> invertere svarer samtidig. Der skal sp�rges et antal gange, f�r der
>> kommer et svar fra hver, der kan skilles ad. :-(
>
> Har dine invertere ikke hver deres adresse? S� er du da sikker p� at
> f� nogle ubrugelige resultater. Hvad er det forresten for en type?
Det er en eversolar 3000.
Uden at skulle kloge mig alt for meget, s� har hver enhed p�
RS422-bussen en 1-bytes adresse.
N�r programmet starter op, siger det
Jeg er master p� adresse 0, alle derude, glem jeres adresser. (3 gange)
Derefter
Master her, Er der nogen invertere derude?
- ja, jeg har serienummer 1829019821038
- ja, jeg har serienummer 1323029183092
Inverter 1829019821038, du har adresse 0xAA
- Master, jeg har adresse AA
Derefter g�r en l�kke igang:
Master til enhed AA: Status?
- enhed AA til master: <data>
vent 10 sekunder.
slut p� l�kke
En gang hvert minut sp�rger master om der er kommet ny til
Efter et indeterminabelt tidsrum svarer den anden inverter ind, den f�r
adresse 0xAB og den tages med i l�kken.
N�r det bliver m�rkt, g�r inverterne i standby, og de svarer ikke f�r
n�ste daggry, hvor det hele starter forfra.
Har en inverter ikke svaret p� 10 foresp�rgsler, glemmes den, og den
sp�rges ikke i l�kken.
Jeg har ikke pr�vet om inverterne husker deres adresse natten over.
Leif
--
Husk k�relys bagp�, hvis din bilfabrikant har taget den idiotiske
beslutning at undlade det.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads