![]() |
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ü |
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 |
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. |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
mit inpout32 habe ich noch nicht gearbeitet,
nach der Durchsicht dieser WebSeite ![]() erscheint es mir aber das inpout32 für parallele Schnittstellen ist. Grüße Klaus |
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ü |
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: ![]() Grüße Klaus |
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?????????? |
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. |
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:
Bitte bitte helfen, sonst wird es wieder eine lange Nacht.
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; |
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:10 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