AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Jobliste Kommunikation mit externem Gerät

Ein Thema von DelphiManiac · begonnen am 17. Nov 2006 · letzter Beitrag vom 23. Nov 2006
 
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#2

Re: Jobliste Kommunikation mit externem Gerät

  Alt 18. Nov 2006, 01:34
Zitat von DelphiManiac:
Hallo,

ich bin zurzeit dabei eine Software für ein externen Gerät zu entwickeln.
Dieses Gerät kann sowohl seriell über RS232 als auch USB angesteuert werden angesteuert.
Als USB-Controller ist ein FTDI FT232BM eingebaut.

Nun meine Frage, ich kommuniziere mit dem Gerät folgendermaßen:
Ich habe ein Objekt vom Typ (TGeraet)

Geraet.GetStatus(Status:boolean);
Geraet.GetMesswert(Status:boolean);

Jede Funktion durchläuft bei mir ein Kommunikationsmodul,
dass zB.:
-->den Buffer mit dem Befehl füllt.
-->den Befehl abschicken
-->auf eine Antwort warten (pollen bis 7 Bytes am Port sind)
-->falls 7 Bytes da sind, diese vom Port lesen und bewerten
-->wenn nach einer bestimmten Zeit keine Antwort dann, rausspringen mit Fehlermeldung

Diese Kommunikation läuft bei mir nun im Hauptthread und wenn ich mehrer Befehle (GetXYT, SetSeriennummer....)
ausführe, dann hängt meine Anwendung zeitweise.
Ich habe versucht diese in einen extra Thread zu packen, denn ich von aussen anstosse, aber irgendwie klappt das nicht wie gewollt. Habe auch schon Luckies Tutorial zum Thema Thread gelesen.
Ich würde gerne eine Art Jobliste machen, die in einem Thread abläuft und immerwieder die Jobs (GetXYZ...) abarbeitet
und ich sie von aussen fülle.

Beispiel:
Joblist.Add(Get_YXZ)
Joblist.Add(SetSeriennummer('SN9090');

so dass ich Design von Logik trennen kann und es in einem extra Joblist Thread abläuft.

Hoffentlich könnt ihr mir dabei helfen...
Danke schonmal im Vorraus!!!

Gruß
DelphiManiac
Hallo,

was du als erstes brauchst, ist eine Statusmaschine für jeden Job, etwa in der Art:

Idle - SendHeader - Senddata - SendCRC - WaitforAnswer - RecvHeader - RecvData - RecvCRC

die Events verzweigen dann je nach Status und UnterStatus, z.B. RecvCRC -> CRCByte1, CRCByte2, CRCByte3, CRCByte4, hier werden die CRCs geprüft und wenn Ok -> Idle, usw. usw.

Die Jobliste kann dann den nächsten Job anleiern, wenn der Zustand Idle ist, indem sie das erste Byte in das Transmit Register schreibt und den Zustand auf SendHeader setzt, oder indem sie einen String übergibt (mit Header,Daten,CRC) und einen Writebefehl ans Com-Port schickt und den Status auf Sending setzt - ganz wie das System es erfordert.

Die Statusmaschine(n) sorgen dann selbst dafür, dass ein Job komplett abgewickelt wird, solange kein Fehler auftritt. Zweckmässig ist es, das ganze in eine Matrix aufzunehmen bzw. in eine Sprungtabelle, dann kann man auch keine Kombination vergessen:
Delphi-Quellcode:
  (zur besseren Formatierung)

Event-> Char Sent Char Recvd V24Error Timeout

Status:
Idle ??? ??? ??? ??? {should not happen}

SendHeader next Char rep Error rep Error rep Error
             Header done? -> Idle -> Idle -> Idle
             y->SendData

SendData next Char rep Error rep Error rep Error
             Data done? -> Idle -> Idle -> Idle
             y->SendCRC

.....
unvollständig, ich hoffe man erkennt das Prinzip. Zweckmässig ist eine Tabelle mit einer Routine für jede Kombination aus Status und Event. Die ist zugleich eine gute Dokumentation, auch genormte Protokolle werden vorzugsweise mit Statusmaschinen beschrieben.

Gruss Reinhard
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz