DLL - Setzen der Ausgänge

Antworten
abacom
Site Admin
Beiträge: 3313
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

DLL - Setzen der Ausgänge

Beitrag von abacom » Montag 13. Oktober 2008, 11:39

Step



Anmeldungsdatum: 30.01.2007
Beiträge: 67

Verfasst am: 16.08.2007 10:05 Titel: DLL - Setzen der Ausgänge

--------------------------------------------------------------------------------

Hallo,
ich bin dabei, eine DLL für einen Temperatursensor zu erstellen. Dabei soll, solange der Sensor gesucht bzw. die Temperatur ausgelesen wird, ein Ausgang zur Kontrolle HIGH gesetzt werden (also auf 5). Die Werte werden bei mir allerdings immer erst am Ende der <CALCULATE>-Routine übergeben (also nach der Tastaturabfrage mit "if PInput^[SEARCH] > 2.5 then" usw.). Kann man das Signal auch sofort übergeben, also direkt nach dem Einstieg in der CALCULATE-Routine - oder mache ich hier einen Denkfehler. (Falls mein Problem nicht rüberkommt ... ... kann ich hier auch kurz einen Auszug aus dem Quelltext posten ... ?).

Die DLL wird mit Delphi erstellt.

Gruß Stephan

Nach oben


abacom
Site Admin


Anmeldungsdatum: 30.06.2006
Beiträge: 898

Verfasst am: 16.08.2007 12:02 Titel:

--------------------------------------------------------------------------------

Natürlich können Sie jeden Ausgang an beliebiger Stelle der CALCULATE-Procedure setzen:

Code:
Procedure Calculate ...;
begin
POutput^[0]:=MyTemperature;
POutput^[1]:=5; // Output 1 high
...
end;


Natürlich übernimmt ProfiLab die Werte erst nach Verlassen der Procedure, aber das sollte selbstverständlich sein. In Ihrem Fall muss CALCULATE daher "gedanklich" mehrmals durchlaufen werden.

1. Durchlauf: Ausgang auf HIGH
2. Durchlauf: Temperatur auslesen
3. DurchLauf: Ausgang wieder auf LOW

Sie brauchen also eine Statusvariable (ähnlich einem Programmzähler). Es sei empfohlen dafür z.B. PUSER[0]^ zu verwenden.

Sinngemäss sieht die Source dann so ähnlich aus:

Code:
Procedure Calulate
begin
case round(PUser^[PGM_Counter]) of
0:
begin
POutput^[1]:=5; // Output HIGH
PUser^[PGM_Counter]:=PUser^[PGM_Counter]+1;
end;
1:
begin
if ReadTemperatureReady then
begin
POutput^[0]:=ReadTemperature;
PUser^[PGM_Counter]:=PUser^[PGM_Counter]+1;
end;
end;
2:
begin
POutput^[1]:=0; // Output LOW
PUser^[PGM_Counter]:=0;
end;
end;
end;


Zuletzt bearbeitet von abacom am 16.08.2007 12:21, insgesamt einmal bearbeitet

Nach oben


kpaul



Anmeldungsdatum: 29.09.2006
Beiträge: 43
Wohnort: Rosenheim
Verfasst am: 16.08.2007 12:08 Titel:

--------------------------------------------------------------------------------

Hallo,

Neben dem Beispiel in der Profilab-Hilfe sind im Forum auch mehrere
Links für DLL-Beispiele in Delphi zu finden z.B. http://www.kpaul.ag.vu/downloads.html

Gruß kpaul

Nach oben


Step



Anmeldungsdatum: 30.01.2007
Beiträge: 67

Verfasst am: 16.08.2007 12:19 Titel:

--------------------------------------------------------------------------------

Hallo Abacom,

abacom hat Folgendes geschrieben:
Natürlich übernimmt ProfiLab die Werte erst nach Verlassen der Procedure, aber das sollte selbstverständlich sein.


Genau DAS war meine Frage! Wenn dem so ist, so bin ich zumindest was mein Delphi-Programm angeht beruhigt ... und selbstverständlich war es für mich nun nicht ...
Hintergrund: Ich möchte gerne im PL-Programm anzeigen lassen, ob die Routine auf dem 1-Wire-Netz sucht, oder nicht. Ich habe mich jetzt fürs erste damit beholfen, einen BEEP am Anfang und Ende auszugeben - so habe ich wenigstens eine Kontrolle ob sich etwas tut.

kpaul, danke für den Link. Eine Frage zu der DLL von Hygrosens: Ich nehme an, du benutzt das Hygrosens-Modul, oder?

Stephan

Nach oben


kpaul



Anmeldungsdatum: 29.09.2006
Beiträge: 43
Wohnort: Rosenheim
Verfasst am: 16.08.2007 14:40 Titel:

--------------------------------------------------------------------------------

Ja,
verwende ich in meiner Heizungssteuerung, ist also Tag und Nacht im Einsatz.
Über Hygrosens-Temperaturmessmodul sind auch schon mehrere Beiträge im Forum
kpaul

Nach oben


Step



Anmeldungsdatum: 30.01.2007
Beiträge: 67

Verfasst am: 16.08.2007 18:46 Titel: !

--------------------------------------------------------------------------------

kpaul:
Ich wollte auch erst das Hygrosens-Modul nehmen, aber ich habe mir zwischenzeitlich einen Adapter für die 1-Wire-Sensoren selber gebaut und wollte die natürlich auch selbst softwaremässig ansprechen - was jetzt auch gelungen ist (mit Delphi).
Wo ich nun soweit war, wollte ich das zum Anlass nehmen, mal eine DLL für ProfiLab zu entwickeln, da ich diese geniale Möglichkeit von PL sicherlich öfter brauchen werde.

Abacom:
Danke für die ausführliche Antwort (ich habe mich gewundert, dass ein schon existierender Artikel plötzlich immer wieder anders aussieht und wollte schon meinen Browser überprüfen ... )
Die Idee mit der Statusvariable ist einfach zu implementieren und sehr flexibel - DANKE!

Stephan
ABACOM support

Antworten

Zurück zu „DLL-Programmierung“