Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Relaiskarte K8056 von Velleman seriell ansteuern (https://www.delphipraxis.net/69932-relaiskarte-k8056-von-velleman-seriell-ansteuern.html)

HaGü 22. Mai 2006 14:42


Relaiskarte K8056 von Velleman seriell ansteuern
 
Hallo Leute,

bin rel. neu hier und bis jetzt nur im LeseStatus.
Da ich aber für mein Problem keine Lösung finden kann, schreibe ich heute mal.
Also, ich möchte die Relaikarte K8056 von Velleman seriell ansteuern.
Um einen Befehl auszuführen, muss die richtige Befehlsfolge übertragen werden.
Eigentlich sieht solch eine Befehlsfolge so aus:
1. CHR$(13)
2. Kartenadresse(1...255)
3. Befehl
4. Adresse (1...255) oder Relaisnummmer('1'..'9' ASCII)
5. 'checksum' Summe prüfen(2-Komplement der Summe der 4 vorigen Bytes +1)

Befehle:
'E': Nothalt
'D': Display-Adresse
'S': Relais einstellen
'C': Relais löschen
'T': Toggle-Relais
'A': Adresse einer Karte wechseln
'F': Alle Karten auf Adresse 1
'B': Byte senden. Ermöglicht es, den Status aler Relais mit einem Befehl zu steuern.

Ich versuche dauernd folgenden Befehl in verschiedenen Versionen und Fariationen zu senden:
CHR($13)+CHR($31)+CHR($84)+CHR($31)+CHR($98)
1. CHR($13)
2. CHR($31) - Kartenadresse 1
3. CHR($84) - Befehl('T' Toggle)
4. CHR($31) - Relaisnummer 1
5. CHR($98) - Checksumme

Was ist falsch und/oder wie funktionierts
Brauche dringend Hilfe

Mit Grüssen von der Mosel
HaGü

Klaus01 22. Mai 2006 15:02

Re: Relaiskarte K8056 von Velleman seriell ansteuern
 
Womit kommunizierst denn Du mit der Schnittstelle
AsyncPro, TSerial?

Würde eventuell helfen, Dein Problem zu lösen.
Grüße
Klaus

HaGü 22. Mai 2006 15:14

Re: Relaiskarte K8056 von Velleman seriell ansteuern
 
Hallo Klaus,

öffnen und schliessen mach ich mit inpout32.dll.
Habe aber auch die "TurboPower Async Professional" installiert.
Mein Listing bis jetzt wäre:
Delphi-Quellcode:
unit Relaiskarte1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    beenden1: TMenuItem;
    Relais1: TMenuItem;
    allean1: TMenuItem;
    alleaus1: TMenuItem;
    RadioGroup1: TRadioGroup;
    RadioGroup2: TRadioGroup;
    RadioGroup3: TRadioGroup;
    RadioGroup4: TRadioGroup;
    RadioGroup5: TRadioGroup;
    RadioGroup6: TRadioGroup;
    RadioGroup7: TRadioGroup;
    RadioGroup8: TRadioGroup;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure beenden1Click(Sender: TObject);
    procedure allean1Click(Sender: TObject);
    procedure alleaus1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);


  private
    { Private-Deklarationen }


  public
    { Public-Deklarationen }
  end;
var
  Form1: TForm1;
  ComHandle: THandle;
  f: TextFile;
  s: string;

implementation
{$R *.dfm}
{Funktionen aus "inpout32.dll" laden:}
procedure Out32(Addresse:Integer; Wert:byte);stdcall;export; external 'INPOUT32.DLL';
function Inp32(Addresse:Integer):Byte;stdcall;export; external 'INPOUT32.DLL';



procedure TForm1.beenden1Click(Sender: TObject);
begin
     RadioGroup1.ItemIndex:= 1;
     RadioGroup2.ItemIndex:= 1;
     RadioGroup3.ItemIndex:= 1;
     RadioGroup4.ItemIndex:= 1;
     RadioGroup5.ItemIndex:= 1;
     RadioGroup6.ItemIndex:= 1;
     RadioGroup7.ItemIndex:= 1;
     RadioGroup8.ItemIndex:= 1;
  FileClose(ComHandle);
  close;
end;

procedure TForm1.allean1Click(Sender: TObject);

begin

     RadioGroup1.ItemIndex:= 0;
     RadioGroup2.ItemIndex:= 0;
     RadioGroup3.ItemIndex:= 0;
     RadioGroup4.ItemIndex:= 0;
     RadioGroup5.ItemIndex:= 0;
     RadioGroup6.ItemIndex:= 0;
     RadioGroup7.ItemIndex:= 0;
     RadioGroup8.ItemIndex:= 0;
end;

procedure TForm1.alleaus1Click(Sender: TObject);
begin
     RadioGroup1.ItemIndex:= 1;
     RadioGroup2.ItemIndex:= 1;
     RadioGroup3.ItemIndex:= 1;
     RadioGroup4.ItemIndex:= 1;
     RadioGroup5.ItemIndex:= 1;
     RadioGroup6.ItemIndex:= 1;
     RadioGroup7.ItemIndex:= 1;
     RadioGroup8.ItemIndex:= 1;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
 {evtl. geöffnete Schnittstelle schließen:}
 CloseHandle(ComHandle);
 {COM2 per API-Funktion (CreateFile) öffnen:}
 ComHandle := CreateFile('COM2', GENERIC_READ or GENERIC_WRITE,
                           0, nil, OPEN_EXISTING, 0, 0);
 {Hinweis, ob Schnittstelle geöffnet werden konnte:}
 if ComHandle = INVALID_HANDLE_VALUE then
  begin
   beep;
   Label1.Caption := 'Fehler beim Öffnen von COM2';
  end
  else
   Label1.Caption := 'COM2 geöffnet';
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
   EscapeCommFunction(ComHandle, SETDTR);
   EscapeCommFunction(ComHandle, SETRTS);
   EscapeCommFunction(ComHandle, SETBREAK);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
   EscapeCommFunction(ComHandle, CLRDTR);
   EscapeCommFunction(ComHandle, CLRRTS);
   EscapeCommFunction(ComHandle, CLRBREAK);
end;





end.

Klaus01 22. Mai 2006 15:23

Re: Relaiskarte K8056 von Velleman seriell ansteuern
 
mit inpout32 habe ich noch nicht gearbeitet,
nach der Durchsicht dieser WebSeite http://sheepdogguides.com/dt4j.htm
erscheint es mir aber das inpout32 für parallele Schnittstellen ist.

Grüße
Klaus

HaGü 22. Mai 2006 15:40

Re: Relaiskarte K8056 von Velleman seriell ansteuern
 
Hallo Klaus,

ca. in der Mitte im Oberen Teil der Site steht: InpOut32 should also allow you to access your serial port.
Und ich kann, wie gesagt den Port aus- und einschalten. Getestet mit eine LED an den Strippen.
Ach ja, vielleicht wichtig, der Anschluß ist mit 2 Adern, müßte dann Asyncron sein.

Gruß Hagü

Klaus01 22. Mai 2006 16:46

Re: Relaiskarte K8056 von Velleman seriell ansteuern
 
Hallo HaGü,

mhm, ich denke da kann ich Dir nicht viel weiterhelfen
außer vielleicht mit diesem Link: http://ourworld.compuserve.com/homep..._Boyd/Dt5f.htm

Grüße
Klaus

HaGü 22. Mai 2006 16:56

Re: Relaiskarte K8056 von Velleman seriell ansteuern
 
Hallo Klaus,

bin gerade mit APRO am rumspielen, kann auch senden.
ich habe aber immernoch das problem mit dem richtigen String.
Habe einen Quelltext in VB gefunden, demnach brache ich nur die Zeilen:

checksum = (255 - ((((13 + address + Asc("T") + Asc(factor)) / 256) - Int((13 + address + Asc("T") + Asc(factor)) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "T" & factor & Chr$(checksum)

umzusetzen.
Aber wie??????????

Sharky 22. Mai 2006 17:14

Re: Relaiskarte K8056 von Velleman seriell ansteuern
 
Hai HaGü,

ersteinmal : "Herzlich Willkommen in der Delphi-PRAXiS" :hi:

In deinem Code sendest Du mit Chr($13) den ASCII Code 19 (Hex 13) an die Karte. Wenn ich das eben richtig gelesen habe wird bei der Karte ein sogenanntes Telegram aber mit Chr(13) oder Chr($D) eingeleitet.

Auch bei allen anderen Zahlen verwendest Du immer die HEX-Notation. Eventuell ist ja das dein Problem.

HaGü 23. Mai 2006 21:25

Re: Relaiskarte K8056 von Velleman seriell ansteuern
 
Hallo Leute,

hab heut` so ziemlich den ganzen Tag im Internet gesucht und auch Teile gefunden, auch hier.
Danke schon mal an ALLE.

Bin also jetzt soweit, das ich nur noch 3 Fehlermeldungen bekomme.
Aber was ist noch falsch?
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var messagestring:string;
    checksum:extended;
    address:integer;
    factor:integer;
begin

  checksum := (255 - ((((13 + address + Ord('T') + Ord(factor)) / 256) - (Int(13)) + address + Ord('T') + Ord(factor)) / 256)) * 256 + 1;
  messagestring := Char(13) + Char(address) + 'T' + factor + (checksum);

  messagestring:= messagestring+messagestring;
  ApdComPort1.Output:= messagestring;
  showmessage (checksum);

end;
Bitte bitte helfen, sonst wird es wieder eine lange Nacht.

HaGü 23. Mai 2006 21:45

Re: Relaiskarte K8056 von Velleman seriell ansteuern
 
Ach ja, die Fehlermeldungen,

[Fehler] Relaiskarte1.pas(157): Inkompatible Typen
[Fehler] Relaiskarte1.pas(157): Inkompatible Typen: 'String' und 'Extended'
[Fehler] Relaiskarte1.pas(161): Inkompatible Typen: 'String' und 'Extended'
[Fataler Fehler] Karte1.dpr(5): Verwendete Unit 'Relaiskarte1.pas' kann nicht compiliert werden

Gruß von der Mosel
HaGü


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:59 Uhr.
Seite 1 von 5  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz