>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<
Bij mijn weten is CS een signaal lijn (pin) van de serieële poort. Die zul je dus blijkbaar (even kort) moeten activeren zodat het ontvangende apparaat weet dat hij zijn buffer kan gaan uitlezen.Hu9o schreef op 26 May 2003 @ 12:58:
Weet iemand wat die "CS" inhoud?
Hoe je die signaal lijn precies activeert hangt af van OS en programmeertaal
|_____vakje______|
OS is Win NT, dat zal wel mogeljk zijn. Maar de programeertaal is HP VEE (Visual Engineering Enviorment) en daar zal het een veel groter probleem mee zijn. Denk namelijk dat je vanuit die omgeving niet direct toegang kan krijgen tot de afzonderlijke pinnen. Misschien met een ActiveX component
>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<
Kun je een stukje posten zodat we kunnen zien in welk zinsverband het staat ?
[ Voor 24% gewijzigd door farlane op 26-05-2003 23:07 ]
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
| Positie | 0 | 1 | 2 | 3 | 4 |
| teken | A | T | Z | NoB=5 | CS |
Apparaat uitzetten
| Positie | 0 | 1 | 2 | 3 | 4 |
| teken | A | T | Q | NoB=5 | CS |
NoB=Number of Bytes
Een string moet opgebouwd zijn uit, zoals hierboven beschreven.
Alleen hoe de CS verzonden moet worden is me nog een vraag.
Als het zo is dat het een teken is om aan te geven dat de buffer uitgelezen kan worden, welk teken mag dit wezen dan?
>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<
For it is the doom of men that they forget... Huidige en vroegere hardware specs The Z80 is still alive!
Verwijderd
Er zijn verschillende manieren hoe die gebruikt kan zijn. Tel alle karakters (behalve de CS) bij elkaar op. Voor aanzetten is het resultaat 124 hex en voor uitzetten 11B hex.
Aangezien je waarschijnlijk maar een byte kunt sturen, kun je resp 24h en 1Bh proberen. Als dat niet werkt, kun je proberen de waarden te inverteren (XOR met FFh) of om ze af te trekken van 100h en het resultaat van die bewerking te gebruiken.
Heb al contact met de leverancier opgenomen, maar die wisten het zelf ook niet... Dus die vraag gingen hun weer aan de fabriekant stellen. Kortom dat zal nog wel een tijdje duren...
>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<
Zo scherp als een voetbal!
>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<
Er zijn standaard checksum routines ( CRC8 , CRC16 etc ), maar als het een duits apparaat is worden die vast niet gebruikt.Hu9o schreef op 27 May 2003 @ 10:20:
Checksum zou idd ook nog wel een goeie kunnen zijn. Maar die berekening die jij noemt, is dat een standaard berekening of bedenkt iedere fabrikant z'n eigen checksum berekening:?
Heb al contact met de leverancier opgenomen, maar die wisten het zelf ook niet... Dus die vraag gingen hun weer aan de fabriekant stellen. Kortom dat zal nog wel een tijdje duren...
Ze zijn vaak nogal blij met het OR/XOR'en van de bytes:
Bijvoorbeeld de checksum van het Siemens 3964R protocol
1
2
3
4
5
6
7
8
| static byte calc_lrc(byte *data, sword size) { byte result; result = 0; while(size--) result ^= *data++; return(result); } |
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Verwijderd
Nee, daarom ook de verschillende opties. En er kunnen er meer zijn. En sommige fabrikanten voegen nog een kleine offset toeHu9o schreef op 27 mei 2003 @ 10:20:
Checksum zou idd ook nog wel een goeie kunnen zijn. Maar die berekening die jij noemt, is dat een standaard berekening of bedenkt iedere fabrikant z'n eigen checksum berekening:?
Checksum is NIET hetzelfde als een CRC. Een checksum is een simpele optelling, een CRC is dat zeker niet.farlane schreef op 27 May 2003 @ 11:23:
[...]
Er zijn standaard checksum routines ( CRC8 , CRC16 etc ), maar als het een duits apparaat is worden die vast niet gebruikt.
Ze zijn vaak nogal blij met het OR/XOR'en van de bytes:
Het is idd niet hetzelfde, maar ze worden beide gebruikt om fouten in een bericht te detecteren. Ze hebben dus wel eenzelfde functieVerwijderd schreef op 27 May 2003 @ 16:53:
Checksum is NIET hetzelfde als een CRC. Een checksum is een simpele optelling, een CRC is dat zeker niet.
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Verwijderd
Een CRC heeft echter wat voordelen:
* het verwisselen van twee bytes zal zeker een verschillend resultaat opleveren (bij een checksum dus niet)
* het omvallen van eenzelfde bit in twee verschillende bytes zal ook een verschillend resultaat geven (en bij een checksum niet)
* een CRC kan (meen ik) tot op zekere hoogte gebruikt worden om fouten te corrigeren
[ Voor 4% gewijzigd door Verwijderd op 28-05-2003 09:53 ]
1
2
| "CS" bedeutet "Checksumme". Sie ist das letzte Byte ener Sendesequenz. Alle Bytes, auber CS (VCR), werdern met XOR verknüppft. |
Dit betekent, zoals al eerder geopperd werd, dat het een Checksum betreft. Deze moet dus berekend worden doormiddel van een XOR.
Ik weet wel wat de XOR functie inhoud:
1
2
3
4
5
| X Y XOR 0 0 0 0 1 1 1 0 1 1 1 0 |
Maar deze kan steeds twee parameters vergelijken, hoe moeten de checksum nou bepaald worden? Want er ziten in totaal iets van 40 bits in de string waaruit de checksum bepaald meot worden.
edit:
mr Google zei:
letter1
letter2
XOR
letter3
XOR
letter4
CS
[ Voor 8% gewijzigd door Hu9o op 28-05-2003 11:28 ]
>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<
Verwijderd
Hierin staat het volgende voorbeeld ( Wat dit nou met XOR te maken heeft???)
1
2
3
4
5
6
| ATZ5 CS = (~(Byte1 + Byte2 + Byte3 + Byte4))+1 CS = (~(0x41+0x54+0x5A+0x05))+1 CS = (~(0xF4)))+1 CS = (0x0B)+1 CS = 0x0C |
Dit voorbeeld is nog wel te volgen. Maar wat opvalt hierin zijn twee dingen:
- Voor cijfers wordt niet de ASCII code van het cijfer gebruikt, maar de rechtstreeks het hex getal.
- Er staat het ~-teken in. Het voorbeeld was een C voorbeeld stond in de meel.
Vraag: Wat betekend het ~ -teken
Waarschijnlijk is het iets als:
while CS > FF do CS - FF
(maar dat werkt niet bij andere commandos)
Iemand die hier antwoord op heeft?
edit: typo
[ Voor 8% gewijzigd door Hu9o op 03-06-2003 15:04 ]
>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<
Men doet dus:
1
2
3
4
5
6
| for t:= 1 to (number_of_bytes - 1) do
begin
cs := cs + byte[t];
end;
invert(cs)
cs := cs + 1; |
ik vermoed dat als je alle bytes inclusief de CS bij elkaar telt, er nul uit moet komen (als byte).
bij het voorbeeld klopt dat in elk geval
[ Voor 10% gewijzigd door EXX op 03-06-2003 15:23 ]
For it is the doom of men that they forget... Huidige en vroegere hardware specs The Z80 is still alive!
Die tilde moet een logische NOT zijn, dus praktisch in bijv. Pascal/Delphi:Hu9o schreef op 03 June 2003 @ 14:20:
- Er staat het ~-teken in. Het voorbeeld was een C voorbeeld stond in de meel.
Vraag: Wat betekend het ~ -teken* Hu9o bitwise invert
1
2
3
| CS := $F4; // Rest v/d berekening ff overgeslagen CS := not(CS)+1; CS := CS and $FF; // om de eventuele hogere bytes af te kappen |
Zo scherp als een voetbal!
Nope, een NOT in pascal geeft true of false en geen waarde (tenminste dat zou niet moeten).Reptile209 schreef op 03 June 2003 @ 15:27:
[...]
Die tilde moet een logische NOT zijn, dus praktisch in bijv. Pascal/Delphi:
code:
1 2 3 CS := $F4; // Rest v/d berekening ff overgeslagen CS := not(CS)+1; CS := CS and $FF; // om de eventuele hogere bytes af te kappen
Wat ze hier doen is niets anders dan het twee-complement van de som van de bytes, wat in Assembly ook wel NEGATE wordt genoemd:
NEG 0x00 -> 0x00
NEG 0xff -> 0x01
Volgens mij zit ik met mijn oorsponkelijke vermoeden juist: samen met de CS moet alles bij elkaar opgeteld nul opleveren (zonder carry).
byte1+byt2+byte3+byte4 = 0xf4
0xF4 + CS = 0x100.
Conder acht te slaan op de carry (dus puur byte als datatype gebruiken) is het resultaat dus 0x00.
For it is the doom of men that they forget... Huidige en vroegere hardware specs The Z80 is still alive!
En dat optellen klop idd voor ieder commando.
>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<