![]() |
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ü |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
moin Hagü,
du musst deine Checksumme noch Konvertieren.
Delphi-Quellcode:
raik
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 + FloatToStr(checksum);<-- hier messagestring:= messagestring+messagestring; ApdComPort1.Output:= messagestring; showmessage (FloatToStr(checksum)); <-- hier end; |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Hallo Kiar,
nach 2 Flaschen Wein und die halbe Nacht, kam ich auf eine ähnliche Idee. Die Fehlermeldungen sind zwar alle weg, die Karte wird aber trotzdem nicht angesprochen. Eine LED an der Leitung zeigt mit zwar das etwas gesendet wird, aber noch nicht das richtige. Hab mir sorgar was eingebaut um das gesendete anzeigen zulassen, aber... Habe auch VB installiert, obwohl ich davon überhaupt keine Ahnung habe, sieht aber ähnlich aus wie Delphi.(VB nur als Notlösung, :wall: kommt anschließend wieder runter. Arg langsam).
Delphi-Quellcode:
Bis bald und Grüsse von der Mosel
procedure TForm1.Button4Click(Sender: TObject);
var messagestring:string; checksum:extended; address:integer; factor:integer; begin address:= 1; factor:= 1; checksum := (255 - ((((13 + address + Ord('T') + Ord(factor)) / 256) - Int((13 + address + Ord('T') + Ord(factor)) / 256)) * 256)) + 1; messagestring := Char(13) + (inttostr(address)) + 'T' + (inttostr(factor)) + (floattostr(checksum)); messagestring:= messagestring+messagestring; ApdComPort1.Output:= messagestring; panel1.caption := FloatToStr(checksum); showmessage (messagestring); HaGü |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Hai HaGü,
ich würde das ganze so aufbauen das man auch erkennt was, wo im Code passiert ;-)
Delphi-Quellcode:
Was mir noch nicht klar ist: Die Prüfsumme kann ja kein Byte sein. Da ja die Summe von 4 Byte nicht in ein Byte passt. Andererseits wird aber ein Byte an die Karte gesendet. :gruebel:
type
TCommandSet = array[1..4] of Byte; const Cmd_Start = 13; Cmd_Nothalt = Ord('E'); //: Nothalt Cmd_DisplayAdress = Ord('D'); //: Display-Adresse Cmd_SetRelay = Ord('S'); //: Relais einstellen Cmd_ClearRelay = Ord('C'); //: Relais löschen Cmd_ToggleRelay = Ord('T'); //: Toggle-Relais Cmd_ChangeCardAdress = Ord('A'); //: Adresse einer Karte wechseln Cmd_SetAllCarsToOne = Ord('F'); //: Alle Karten auf Adresse 1 Cmd_SendByte = Ord('B'); //: Byte senden Relay_1 = Ord('1'); Relay_2 = Ord('2'); Relay_3 = Ord('3'); Relay_4 = Ord('4'); Relay_5 = Ord('5'); Relay_6 = Ord('6'); Relay_7 = Ord('7'); Relay_8 = Ord('8'); AllRealy = Ord('9'); // Nur für Command S und C function Zweierkomplement(aValue: Integer): Integer; var neg: Boolean; iDez: Integer; begin iDez := aValue; neg := iDez < 0; if (neg) then iDez := iDez * -1; iDez := iDez xor $FFFF; Inc(iDez); result := iDez; end; function CalcCheckSum(aValue: TCommandSet): Integer; var summ: Integer; ndx: Integer; begin summ := 0; for ndx := Low(aValue) to High(aValue) do begin summ := summ + aValue[ndx]; end; result := Zweierkomplement(summ) + 1; end; procedure TDemoForm.btn_testClick(Sender: TObject); var CommandSet: TCommandSet; CheckSum: Integer; begin CommandSet[1] := Cmd_Start; CommandSet[2] := 1; // Karte 1 CommandSet[3] := Cmd_ToggleRelay; CommandSet[4] := Relay_1; CheckSum := CalcCheckSum(CommandSet); // Und hier jetzt der Code um die 4 Byte des CommandSets und die Prüfsumme zu senden end; |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
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. 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) Ich denke Du mußt die Bytes einzeln zu der Karte schicken Out32(Addresse:Integer; Wert:byte);stdcall;export; external 'INPOUT32.DLL'; out32(com2,$13); out32(com2,$31); out32(com2,$84); // sende 'T' out32(com2,$31); checksum := ( ($13+$31+$84+$31) XOR $FF) +1; // hoffe das 2er Komplement ist so richtig gebildet // checksum := (umme(Byte1 - Byte4) bitweise XOR FF)+1 out32(com2,checksum); dann müssen m.E. weitere Befehle gesendet werden, solange bis der Befehl 'B' gesendet wird. Aber wie das ganze gesendet werden soll, müßte eigentlich in den Unterlagen zu der Relaiskarte stehen. Grüße Klaus |
DP-Maintenance
Dieses Thema wurde von "Sharky" von "Windows API / MS.NET Framework API" nach "Sonstige Fragen zu Delphi" verschoben.
Ich verschiede das mal. Mit API hat es nicht mehr viel zu tun |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Zitat:
|
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Hallo Sharky, Hallo Klaus,
ich muß gleich erstmal alles ausprobieren.Danke für die Arbeit. :wink: Stimmt, ich muß den Befehl zweimal senden. Ich mache dies indem ich den Befehl als 'messagestring' mit:
Delphi-Quellcode:
sende.
messagestring:= messagestring+messagestring;
ApdComPort1.Output:= messagestring; Grüße von der Mosel HaGü |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Hallo Leute,
werd euch mal den genauen Text abschreiben, vielleicht hab ich was übersehen. Zitat:
Ich wünsche Euch einen schönen Vatertag HaGü |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Na, so ganz steige ich da auch nicht durch.
Aber wie fit bist denn Du in C? Hier gibt es ein Steuerungsprogramm für Linux in C geschrieben ![]() vielleicht kannst Du dir da ein paar Inspirationen holen. Grüße Klaus |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Hallo Klaus,
c habe ich mal vor 10 Jahren probiert und sein gelassen, da ich nur ab und zu programmiere. Aber da ich mir derzeit eine Sternwarte selber baue und die natürlich auch steuern möchte, habe ich angefangen mich wieder intensiver damit zu beschäftigen. Delphi hab ich ausgewählt, weil es doch weit verbreitet ist und ich einige kommerzielle Programmierer kenne, die aber auf Datenbanken und wirtschaftliche Programme spezialisiert sind. Morgen treff ich mich mit ´nem Kuppel der in C++ programmiert und wir werden uns der Sache mal in C++ annehmen. Vielleicht ist dann die portation leichter. Jetzt noch eine 2. Sprache lernen muß nicht sein. Aber Grundwissen wäre trotzdem nicht schlecht. Es freud mich aber, nicht alleine mit einem großen Fragezeichen dazustehen. Sobald ich ein Ergebnis habe, poste ich es natürlich. Die Karte ist nicht schlecht und es gibt bestimmt mehr Möglichkeiten die Karte zu nutzen. Bis bald HaGü |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Hier leute! Warum denn so umständlich?
Das Beispielprogramm, welches beim K8056 dabei ist, verwendet das Actix-X Element MicrosoftComm, welches man auch nach Delphi inportieren kann. Dann kann man es genau so verwenden, wie in VB auch. Hab ich auch so gemacht! |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Hallo Cyberbob,
jetzt weiß ich gar nicht mehr weiter. Bin Anfänger, bitte, was meinst Du jetzt :gruebel: . Ich möchte ja keinen fertigen Code haben, aber ein paar Tips oder Hinweise wären schon nicht schlecht. Grüsse von der Mosel HaGü P.S. Lasse mich auch gerne mit der Nase draufstossen. |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Ganz einfach... ?
Ich hab mir die Karte auch vor einiger Zeit gekauft. Habe mir auch das Beispielsteuerprogramm heruntergeladen, den Quellcode analysiert und festgestllt, das die Daten mit dem ActiveX Object MicrosoftComm übertragen werden. Dieses kann man auch in Delphi Installieren. Komponente/ActiveX importieren/Microsoft Comm Control 6.0 (Version 1.1) und dann auf Installieren Klicken. Einfach installieren und du kannst es verwenden wie in VB. Natürlich mit den Delphi-konformen Befehlen ( aus CHR$(13) wird also Chr(13) oder auch #13 ) Schau mal ob ich von meinem Programm den Quelltext finde... |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Habe mir gerade Die mscomm32.ocx gesaugt und installiert.
Die Version 6.00.8169 ist aber von 1998, gibt es vielleicht eine neuere? Werde Morgen wieder reinschauen. Gepannt wie ein Flitzebogen HaGü |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Ich hab die auch. Beim alten Notebook hats noch funktioniert. Hab jetzt allerdings ein neues ohne Serielle Schnittstelle, sodass ichs nicht mehr Testen kann.
|
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Hai HaGü,
bei meinem Code war wohl die Berechnung des zweierkomplements falsch :oops: Aber Klaus01 hat ja den richtigen Code geschreiben:
Delphi-Quellcode:
Wenn ich Probleme mit der seriellensteuerung von Geräten hatte habe ich immer versucht zu ermitteln was denn das "Herstellerprogramm" sendet. Dafür einfach zwei Serielleschnittstellen mit einem Null-Modem kabel verbinden. Auf Com1 sendet das Programm und auf Com2 werden mit Hyperterminal oder einem eingenen Delphiprogramm die Daten empfangen. Dann kann man einmal genau vergleichen was das Originalprogramm sendet und was dein Programm sendet.
function Zweierkomplement(aValue: Integer): Integer;
begin result := (aValue xor $FF) + 1; end; Zum Empfang ist es gut ein Programm zu haben welches mit den Zahlenwert der empfangenen Byte anzeigt. Dadurch hat man keine Probleme wenn der ASCII-Wert ein Steuerzeichen oder nicht darstellbares zeichen ist. |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Hallo Leute,
in C++ haben wir es rausbekommen. Die Checksumme haben wir so berechnet: Zitat:
Einfach bei Zitat:
Zitat:
Auch ist es wichtig die Com-Schnittstelle richtig zu öffnen. Wenn man DTR und RTS abschaltet, funktioniert es direkt, da man ja nur eine 2-Draht Verbindung hat, bringt es nichts wenn die Schnittstelle auf ein Steuersignal über RTS bzw. DTR wartet. Zitat:
Zitat:
Werde mal bischen rumdoktern. Vielleicht hat ja von Euch einer eine Idee. Bis dann HaGü |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Zitat:
|
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Hallo HaGü,
Zitat:
![]() Das Delphi Pendant dazu wäre shortInt. unsigned char entspricht dem Byte. [edit] schön, daß Du schon weitergekommen bist [/edit][i] Grüße Klaus |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Hallo Leute,
ich bin soweit. Kann die Karte jetzt ansteuern, die einzelnen relais ein-/anschalten sowie alle an und alle aus. Was ich noch nicht hinbekommen habe, ist die Deklaration der Variablen. Darum habe ich halt die CheckSumme per Hand ausgerechnet, war eh nicht schwer, da sich der Wert nur um eins Verschiebt. Habe also für jedes Relais eine RadioGroup erstellt.
Delphi-Quellcode:
für Relais 2 und
procedure TForm1.RadioGroup2Click(Sender: TObject);
var BefehlRG21, BefehlRG22: Char; CheckSummeRG21, CheckSummeRG22: String; begin Start := Char(13); KartenAdresse := Char(1); BefehlRG21 := 'S'; BefehlRG22 := 'C'; RelaisNr := '2'; CheckSummeRG21:= Char(109); ChecksummeRG22:= Char(125); if RadioGroup2.Items[RadioGroup2.ItemIndex]= 'an' then S:= Start + KartenAdresse + BefehlRG21 + RelaisNr + CheckSummeRG21; if RadioGroup2.Items[RadioGroup2.ItemIndex]= 'aus' then S:= Start + KartenAdresse + BefehlRG22 + RelaisNr + CheckSummeRG22; C:= C+C; SerialPortNG1.SendString(S); Edit1.Text:= S;
Delphi-Quellcode:
für Relais 1.
procedure TForm1.RadioGroup1Click(Sender: TObject);
var BefehlRG11, BefehlRG12: Char; CheckSummeRG11, CheckSummeRG12: String; begin Start := Char(13); KartenAdresse := Char(1); BefehlRG11 := 'S'; BefehlRG12 := 'C'; RelaisNr := '1'; CheckSummeRG11:= Char(110); ChecksummeRG12:= Char(126); if RadioGroup1.Items[RadioGroup1.ItemIndex]= 'an' then S:= Start + KartenAdresse + BefehlRG11 + RelaisNr + CheckSummeRG11; if RadioGroup1.Items[RadioGroup1.ItemIndex]= 'aus' then S:= Start + KartenAdresse + BefehlRG12 + RelaisNr + CheckSummeRG12; C:= C+C; SerialPortNG1.SendString(S); Edit1.Text:= S; end; Wer möcht kann gerne den kompletten Code haben. Er muß mir nur zeigen, wie ich ihn hier verlinken kann. Ich Danke schon mal Allen die mir geholfen haben und noch helfen werden. :cheers: und werde fleisig weiter :coder: . Mit Grüssen von der Mosel HaGü |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Liste der Anhänge anzeigen (Anzahl: 1)
Wer lesen kann ist klar im Vorteil.
Wenn man alles liest, ist der Vorteil noch größer. Unten stets. |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Moin Moin
ich benutze die c-control Staion um die Relaiskarte anzusteuern. in VB lässt sich die Befehlsfolge wie im Beispiel aufbauen. Ich habe übrigends nicht die erfahrung gemacht das der Befehlssatz 2x gesendet werden muss. put 13 put 1 Kartenadresse put 66 B befehl put 1h Byte für Relais hier 00000001 Checksumm=13+1+66+1h Checksumm=(Checksumm XOR FFh) +1 put checksumm näheres auch im c-control Forum. :roll: MfG Arno |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Hallo Arno,
es geht auch mit einmal senden. Laut Beschreibung von Velleman "Zur Bedienung mit einem Kabel muss die Sequenz von Befehlen mindestens zweimal gesendet werden. Zur drahtlosen Bedienung empfehlen wir, dass die Sequenz von Befehlen fünfmal hintereinander gesendet wird. Für eine höhere Zuverlässigkeit, sorgen Sie am besten für eine Pause von minimal 300ms zwischen 2 verschiedenen Befehlen" Grüsse von der Mosel HaGü |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Für die, die immernoch nicht verstanden haben, wie man die Checksummen ausrechnet (mich eingeschlossen) poste ich hier mal ne Liste, die die richtigen Summen enthält. Ich habe einfach bei den Befehlen eine FOR-Schleife von 0 bis 255 durchlaufen lassen und geguck wo das Relai schaltet.
Hier ist die Tabelle
Code:
PS: Set = Relai einschalten; Clear = Relai ausschalten; Toogle = Relai umschalten
Relai | Set | Clear | Toogle
============================ 1 | 110 | 126 | 109 2 | 109 | 125 | 108 3 | 108 | 124 | 107 4 | 107 | 123 | 106 5 | 106 | 122 | 105 6 | 105 | 121 | 104 7 | 104 | 120 | 103 8 | 103 | 119 | 102 Alle | 102 | 118 | - Emergency Break / Notaus: 124 |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Die Checksumme kann aber auch berechnet werden, was einfacher ist, wenn man mehr als eine Karte betreibt.
|
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Mal ne dumme Frage - vergisst man aber mal:
-Stimmt Baudrate, Parität, DBs, SBs -Ist das Kabel richtig belegt -Stimmen die Handshakes (wenn vorhanden) Probier mal alles mit dem Hyperterminal aus. Ich könnte bei gelegenheit auch noch ne RS232 Compo beisteuern. Oder die Primitive nehen die in der OS Sparte liegt EDEComPort imho... Tobi |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Zitat:
wenn die Karten von 1..255 nummeriert werden, dann wird die Karte 1 GANZ BESTIMMT NICHT mit $31 angesprochen, sondern mit $01. Ausserdem ist CR 13 oder $0D (oder soll es DC3 sein, das wäre $13), und "T" ist 84 oder $54 ... Ohne Anspruch auf Vollständigkeit. Gruss Reinhard |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Sorry, ich habe da noch eine Frage.
Ich versuche es nun mit dem ActiveX-Steuerelement MSComm. Dazu versuchte ich den VB-Code in Delphi zu übersetzen. Ich weiß nicht, ob es klappt, weil mein Problem ist, dass er Lizenz-Fehler zur MSComm anzeigt. Was nun? Bitte um Hilfe. |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Zitat:
Wenn du willst sende ich dir ne 1A ComPort Komponente die IMHO mit jedem Delphi läuft... Wenn du da was umschreibst wäre das unnötige Arbeit ;-) Und was ist wenn auf dem Benutzerrechner das ActiveX element fehlt ;-) wäre doch auch doof also ich würd mir das nochmal gut überlegen ;-) |
Re: Relaiskarte K8056 von Velleman seriell ansteuern
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:43 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