NLDelphi logo

Apada
Start Forum Nieuws Artikelen Links E mail Statistieken
NLDelphi

Ga Terug   NLDelphi > Vraagbaak > Algemeen

Antwoord
 
Onderwerpopties Zoek in onderwerp Stem op Onderwerp Weergavemodus
Oud 21-Apr-06, 09:20   #1
Tommy
Bite me!
 
Tommy's Avatar
 
Geregistreerd op: Jan 2002
Locatie: Rdam
Berichten: 564
Omni 3750 pin automaat rs232

Hello,

Op werk ben ik momenteel bezig, of beter gezegd; wil ik bezig gaan met het aansluiten van een Omni 3750 (pin automaat) op een pc. Dit alles via een rs232 connector en gekoppeld aan ons backoffice systeem.

Probleem is, een zeer onduidelijke beschrijving van het protocol waar mee het beestje zou moeten gaan werken. Uiteraard het bedrijf gebeld waar we het demo model van de omni 3750 vandaan heben, daar ging men uitzoeken wat ze konden betekenen (iedereen is daar helaas vrij of niet aanwezig vandaag), maar omdat ik toch al verder wil gaan vroeg ik mij af of iemand misschien wat voorbeeld code al zou hebben, en deze zou willen delen. Eigenlijk is een verduidelijking van het protocol voldoende, een voorbeeld stringetje in delphi code.

Het openen van een comport is geen punt, het versturen van een stringetje of het parsen van een stringetje (of hex waarde) wil óók nog wel lukken, alleen krijg ik het helaas nog niet voor elkaar om het apparaat terug te laten brabbelen.
__________________
No. Try not.
Do or do not, there is no try.
Tommy is offline   Met citaat antwoorden
Oud 23-Apr-06, 10:09   #2
Loom
Senior Member
 
Geregistreerd op: Sep 2002
Berichten: 479
Stuur je het apparaat op de juiste snelheid, parity, stopbits ed aan?
Verder is het zo dat zonder een beschrijving wat je moet sturen en wat je moet terug ontvangen je eigenlijk nauwelijks verder kunt.
Als ik zoek op het internet staat er dat je het apparaat ook via ethernet kan benaderen. Is dat misschien niet wat makkelijker? Met telnet of zo.
__________________
Het recht is als licht, het kan gebogen worden
Loom is offline   Met citaat antwoorden
Oud 24-Apr-06, 07:32   #3
Thaddy
Senior Member
 
Thaddy's Avatar
 
Geregistreerd op: Dec 2004
Locatie: Amsterdam
Berichten: 1.550
Zorg dat de instellingen goed staan:
Voor de meeste pin terminals is dat 9600 bps 8, 1 parity bit
Voor oudere terminals - hele oude - 2400 bps 8, 1.
Je kunt gewoon bijvoorbeeld Tcomm32 gebruiken voor het aansturen.
__________________
I never lie? Think again, what do you answer about having read the license agreement....
Thaddy is offline   Met citaat antwoorden
Oud 24-Apr-06, 11:02   #4
Tommy
Bite me!
 
Tommy's Avatar
 
Geregistreerd op: Jan 2002
Locatie: Rdam
Berichten: 564
@Loom & Thaddy;

Jazeker, 9600 Baud 7 E com 1, en het zou ook moeten kloppen aangezien ik continu #21 (NAK) terugkrijg.

Voor de communicatie gebruik de Async componenten van Turobpower (TApdComport) en ik begin mij een dingetje af te vragen. Om de communicatie te starten met de automaat zou ik STX + [data] + ETX + LRC moeten doorsturen. De data is een string. Alleen wat ik me nu dus afvraag, hoe stuur ik die commando's dan goed door? Niet als string lijkt me, tot nu toe heb ik het op deze manier gedaan:

Code:
const
  STX = #02;  // Start of Text
  ETX = #03;  // End of Text
  EOT = #04;  // End of Transmission
  ENQ = #05;  // Enquiry
  ACK = #06;  // Acknowledge
  NAK = #21;  // Neg. Acknowledge
  LRC = #00;  // unto FF	Longitudinal Redundancy Check

[knipje]

procedure TForm1.Button1Click(Sender: TObject);
var
  Msgtype,
  Terminalnumber,
  MsgVersion,
  Amount,
  Productinfo,
  Receiptnumber,
  Transactiontype,
  Lengthadditionalinfo,
  indicatoraddinfo,
  addinformation : string;
  MokUp : string;

begin

{  Msgtype             := '00C1';
  Terminalnumber   := '00135204'; // 00135204
  MsgVersion         := '1';  // 0 = geen add information | 1 = add information
  Amount              := '00000009000'; //11 posities, laaste 2 decimalen
  Productinfo         := '                    '; //20 posities, future use 
  Receiptnumber       := '      '; //6 posities, future use 
  Transactiontype     := '00'; //(00 = purchase)
  Lengthadditionalinfo:= '003'; // length add information
  indicatoraddinfo    := '01';  // 01 = currency | 02 = productinformation (only for petrol) | 03 = only for horeca
  addinformation      := 'EUR'; // Contents of add. information
}
  MokUp := '00C100000001000000010000EUROTRX 10          000001';

  Comport.PutString(STX + MokUp + ETX + LRC);

procedure TForm1.ComportTriggerAvail(CP: TObject; Count: Word);
var
  I : Word;
  C : Char;
begin
  al(inttostr(count) + ' count');

    for I := 1 to Count do
    begin
      C := Comport.GetChar;
      case c of
      #0 : al('NULL');
      #1 : al('SOH');
      #2 : al('STX');
      #3 : al('ETX');
      #4 : al('EOT');
      #5 : al('ENQ');
      #6 : al('ACK');
      #7 : al('BEL');
      #8 : al('BS');
      #9 : al('TAB');
      #10 : al('LF');
      #21 : al('NAK');
      end;
    end;

end;
(al is een add line voor een memo! )
Wat dus continu in #21 resulteert.

Ziet iemand misschien een fout in mijn communicatie string (het stx gedeelte)


Overigens, die mokup regel komt uit een test programmatje wat ik van mn leverancier kreeg (die geen test code heeft helaas).
__________________
No. Try not.
Do or do not, there is no try.
Tommy is offline   Met citaat antwoorden
Oud 24-Apr-06, 11:02   #5
dennisvh
Senior Member
 
Geregistreerd op: Jun 2005
Locatie: Tilburg
Berichten: 952
Ik krijg het vermoeden dat je fout in de LRC zit. De LRC is geen constante, maar een checksum methode (vergelijkbaar met bv een CRC check). Je zult dus de LRC checksum van je bericht moeten berekenen, en deze waarde als LRC byte aan je bericht toevoegen.

Heb hier nog wel een LRC routine liggen als je die nodig hebt.
dennisvh is offline   Met citaat antwoorden
Oud 24-Apr-06, 14:27   #6
Tommy
Bite me!
 
Tommy's Avatar
 
Geregistreerd op: Jan 2002
Locatie: Rdam
Berichten: 564
Jep het was inderdaad de LRC routine, nu deze goed is gaat het allemaal een stuk beter (ook dit helpt, een serial port monitor, http://www.snapfiles.com/get/advspmonitor.html).

De (walter heck -(C)-) lrc routine:
Code:
function com_get_lrc(Source: string) : integer;
var
  i: integer;
  ResultInt: integer;
begin
  ResultInt := 0;

  for i:= length(Source) downto 1 do
  begin
    ResultInt := ResultInt xor Ord(Source[i]);
  end;

  Result := ResultInt;
end;
__________________
No. Try not.
Do or do not, there is no try.
Tommy is offline   Met citaat antwoorden
Antwoord

Bookmarks


Momenteel bekijken: 1 (0 leden en 1 gasten en/of zoekmachine bots) actieve gebruikers dit onderwerp
 
Onderwerpopties Zoek in onderwerp
Zoek in onderwerp:

Geavanceerd zoeken
Weergavemodus Stem op dit onderwerp:
Stem op dit onderwerp::

Berichting Regels
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Aan
Smilies zijn Aan
[IMG] code is Aan
HTML code is Uit

Forumnavigatie


Alle tijden zijn GMT +1. De tijd is nu 20:35.


Forum software: vBulletin, versie 3.8.4
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Copyright ©2008, NLDelphi.com (Dutch Delphi programming)