|
|
|||||||||
|
||||||||||
![]() |
|
|
#1 |
|
Bite me!
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. |
|
|
|
|
|
#2 |
|
Registered User
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 |
|
|
|
|
|
#3 |
|
Registered User
Geregistreerd op: Dec 2004
Locatie: Amsterdam
Berichten: 1.526
|
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.... |
|
|
|
|
|
#4 |
|
Bite me!
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;
)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. |
|
|
|
|
|
#5 |
|
Registered User
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. |
|
|
|
|
|
#6 |
|
Bite me!
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. |
|
|
|
![]() |
| Bookmarks |
| Momenteel bekijken: 1 (0 leden en 1 gasten en/of zoekmachine bots) actieve gebruikers dit onderwerp | |
| Onderwerpopties | Zoek in onderwerp |
| Weergavemodus | Stem op dit onderwerp: |
|
|