Probleem bij apparaat aansturing volgens RS232

Pagina: 1
Acties:

  • Hu9o
  • Registratie: Mei 2001
  • Laatst online: 22-08 18:19

Hu9o

Schokkend

Topicstarter
Hallo mede tweakers,


Ik ben bezig met het ontwikkelen van een aanstuurmodule voor een apparaat.
Hiervoor heb ik documentatie (Duits) waarin staat welke string er verzonen moet worden om een bepaalde actie uit te laten voeren.

Het probleem is dat iedere regel eindigd met een "CS".
Ik heb al geprobeerd om een \n of \r te proberen, maar het werkt niet. Weet iemand wat die "CS" inhoud?

>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<


  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

Hu9o schreef op 26 May 2003 @ 12:58:
Weet iemand wat die "CS" inhoud?
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.

Hoe je die signaal lijn precies activeert hangt af van OS en programmeertaal

|_____vakje______|


  • Hu9o
  • Registratie: Mei 2001
  • Laatst online: 22-08 18:19

Hu9o

Schokkend

Topicstarter
Ok bedankt.

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 <<<<<<<<<<<<<<<<<<<<<<<<<


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
NT heeft sowieso problemen met het aansturen van poorten, direct

  • DRAFTER86
  • Registratie: April 2002
  • Laatst online: 07:00
Ik stuur een lcd aan via de lpt en daar staat CS voor chip select, daar kun je mee aangeven of de daaropvolgende data een commando of een parameter is.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21:31
Duitsers zijn vaak sterren in het verzinnen van protocollen maar CS is geen RS232 pin iig.

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.


Verwijderd

cs is een index register op je processor dacht ik

  • Hu9o
  • Registratie: Mei 2001
  • Laatst online: 22-08 18:19

Hu9o

Schokkend

Topicstarter
Apparaat aanzetten
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 <<<<<<<<<<<<<<<<<<<<<<<<<


  • EXX
  • Registratie: Juni 2001
  • Laatst online: 21:53

EXX

EXtended eXchange

Lijkt op een variant op de AT modem command set. Aangezien de lengte-indicator NoB 5 is, moet CS een bepaalde bytewaarde zijn. Ik zou zeggen: er zijn 256 mogelijkheden, poberen maar!

For it is the doom of men that they forget...           Huidige en vroegere hardware specs         The Z80 is still alive!


Verwijderd

CS is waarschijnlijk de checksum. Er zal wel beschreven staan hoe die berekent moet worden.
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.

  • Hu9o
  • Registratie: Mei 2001
  • Laatst online: 22-08 18:19

Hu9o

Schokkend

Topicstarter
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...

>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<


  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 02:19

Reptile209

- gers -

Over welk LCD hebben we het eigenlijk? Wie weet heeft iemand 'm liggen... ;)

Zo scherp als een voetbal!


  • Hu9o
  • Registratie: Mei 2001
  • Laatst online: 22-08 18:19

Hu9o

Schokkend

Topicstarter
We hebben het niet over een LCD. Het gaat hier om een gaspomp met 2 verwarmingselementen. Kleine kans dat iemand dit ding heeft liggen ;)

>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21:31
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...
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:

Bijvoorbeeld de checksum van het Siemens 3964R protocol
C++:
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

Hu9o 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:?
Nee, daarom ook de verschillende opties. En er kunnen er meer zijn. En sommige fabrikanten voegen nog een kleine offset toe
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:
Checksum is NIET hetzelfde als een CRC. Een checksum is een simpele optelling, een CRC is dat zeker niet.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21:31
Verwijderd 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.
Het is idd niet hetzelfde, maar ze worden beide gebruikt om fouten in een bericht te detecteren. Ze hebben dus wel eenzelfde functie

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

Punt was dat jij CRC aanhaalde als voorbeeld van een checksum routine. De functie is inderdaad min of meer hetzelfde.
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 ]


  • Hu9o
  • Registratie: Mei 2001
  • Laatst online: 22-08 18:19

Hu9o

Schokkend

Topicstarter
Ik heb net een berichtje gekregen van de fabriek in Duitsland, hierin stond het volgende:
code:
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:
code:
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

De code die farlane hierboven gaf, doet dit voor je. Je pakt een byte en XOR'ed dat met het volgende byte. Het gaat (dus) om een byte-wise XOR.

  • Hu9o
  • Registratie: Mei 2001
  • Laatst online: 22-08 18:19

Hu9o

Schokkend

Topicstarter
Ik heb ondertussen een meeltje van de fabrikant gekregen!

Hierin staat het volgende voorbeeld ( Wat dit nou met XOR te maken heeft???)
code:
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 :? * Hu9o bitwise invert

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 <<<<<<<<<<<<<<<<<<<<<<<<<


  • EXX
  • Registratie: Juni 2001
  • Laatst online: 21:53

EXX

EXtended eXchange

Ja, ze gebruiken voor het cijfer de hexwaarde 5, want dat is het in wezen ook: number of bytes vd message; 0x05 dus (en niet het ASCII character 5)

Men doet dus:

code:
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).

edit:

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!


  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 02:19

Reptile209

- gers -

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
Die tilde moet een logische NOT zijn, dus praktisch in bijv. Pascal/Delphi:
Delphi:
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!


  • EXX
  • Registratie: Juni 2001
  • Laatst online: 21:53

EXX

EXtended eXchange

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
Nope, een NOT in pascal geeft true of false en geen waarde (tenminste dat zou niet moeten).

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!


  • Hu9o
  • Registratie: Mei 2001
  • Laatst online: 22-08 18:19

Hu9o

Schokkend

Topicstarter
Ok bedankt!

En dat optellen klop idd voor ieder commando.

>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<

Pagina: 1