AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Relaiskarte K8056 von Velleman seriell ansteuern

Relaiskarte K8056 von Velleman seriell ansteuern

Ein Thema von HaGü · begonnen am 22. Mai 2006 · letzter Beitrag vom 24. Apr 2008
Antwort Antwort
Seite 2 von 5     12 34     Letzte » 
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#11

Re: Relaiskarte K8056 von Velleman seriell ansteuern

  Alt 24. Mai 2006, 00:28
moin Hagü,

du musst deine Checksumme noch Konvertieren.

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 + FloatToStr(checksum);<-- hier

  messagestring:= messagestring+messagestring;
  ApdComPort1.Output:= messagestring;
  showmessage (FloatToStr(checksum)); <-- hier

end;
raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
HaGü

Registriert seit: 18. Apr 2006
Ort: Cochem
19 Beiträge
 
#12

Re: Relaiskarte K8056 von Velleman seriell ansteuern

  Alt 24. Mai 2006, 12:00
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, kommt anschließend wieder runter. Arg langsam).
Delphi-Quellcode:
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);
Bis bald und Grüsse von der Mosel
HaGü
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Relaiskarte K8056 von Velleman seriell ansteuern

  Alt 24. Mai 2006, 13:04
Hai HaGü,

ich würde das ganze so aufbauen das man auch erkennt was, wo im Code passiert
Delphi-Quellcode:
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;
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.
Stephan B.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.752 Beiträge
 
Delphi 10.4 Sydney
 
#14

Re: Relaiskarte K8056 von Velleman seriell ansteuern

  Alt 24. Mai 2006, 13:17
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
Klaus
  Mit Zitat antworten Zitat
24. Mai 2006, 13:34
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
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#16

Re: Relaiskarte K8056 von Velleman seriell ansteuern

  Alt 24. Mai 2006, 13:36
Zitat von Klaus01:
... Aber wie das ganze gesendet werden soll, müßte eigentlich in den Unterlagen zu der Relaiskarte stehen. ...
Noch eine Anmerkung: Wenn ich das richtig gelesen haben muss die gesamte Instruction sequence (also Byte 1 bis 5) zweimal gesendet werden.
Stephan B.
  Mit Zitat antworten Zitat
HaGü

Registriert seit: 18. Apr 2006
Ort: Cochem
19 Beiträge
 
#17

Re: Relaiskarte K8056 von Velleman seriell ansteuern

  Alt 24. Mai 2006, 16:46
Hallo Sharky, Hallo Klaus,

ich muß gleich erstmal alles ausprobieren.Danke für die Arbeit.
Stimmt, ich muß den Befehl zweimal senden. Ich mache dies indem ich den Befehl als 'messagestring' mit:
Delphi-Quellcode:
  messagestring:= messagestring+messagestring;
  ApdComPort1.Output:= messagestring;
sende.

Grüße von der Mosel
HaGü
  Mit Zitat antworten Zitat
HaGü

Registriert seit: 18. Apr 2006
Ort: Cochem
19 Beiträge
 
#18

Re: Relaiskarte K8056 von Velleman seriell ansteuern

  Alt 25. Mai 2006, 17:02
Hallo Leute,

werd euch mal den genauen Text abschreiben, vielleicht hab ich was übersehen.
Zitat:
Die K8056-Karte über RS232-Befehle ansteuern.
1. Anweisungen für den Entwurf der Software:
Weil die Befehle aus einer Kette von ASCII-Zeichen bestehen, ist es einfach Software, die über
einen seriellen Port des PC die Befehle überträgt, zu entwerfen.

Einstellungen für den Port P:
Baud: 2400
Paritätt: keine
Databits: 8
Stopbits:1

Zur Bedienung mit einem Kabel muß 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 Zuvelässigkeit, sorgen Sie am besten für eine Pause von minimal
300ms zwischen 2 verschiedenen Befehlen.

2. Befehlsfolge:
Um einen Befehl auszuführen, muss die richtige Befehlsreihenfolge der K8056 übertragen werden.
1. CHR$(13)
2. Kartenadresse(1...255)
3. Befehl
4. Adresse (1..255) oder Relaisnummer('1'..'9'ASCII)
5. 'checksum' Summe prüfen (2-Komplement der Summe der 4 vorigen Bytes +1)

3. Befehle
´E´: Nothalt für alle karten, ungeachtet die Adresse. Achtung, Relais, die durch 'Open-Collector'-
Ausgänge eingeschaltet wurden, werden durch diesen Befehl nicht ausgeschaltet.)
´D´: Display-Adresse. Alle Karte zeigen binaär ihre heutige Adresse.
(LD1 : MSB, LD8 : LSB)
´S´: Relais einstellen. 'S'-Befehl soll durch Relais #'1' bis '8' gefolgt werden.
´C´: Relais löschen. 'C'-Befehl soll durch Relais #'1' bis '8' ('9' löscht alle Relais zur gleichen
Zeit) gefolgt werden.
´T´: Toggle-Relais umschalten. 'T'-Befehl soll durch Relais #'1' bis '8' gefolgt werden.
´A´: Die heutige Adresse einer Karte wechseln. 'A'-Befehl soll durch die neue Adresse gefolgt
werden (1..255).
´F´: Alle Karten auf Adresse 1 (Standart)
´B´: Byte senden. Ermöglicht es, den Status alle Relais mit einem Befehl zu steuern, dadurch,
dass ein Byte mit dem Relais-Status für jedes Relais gesendet Wird (MSB : Relais 1 LSB :
Relais acht)'Wenn ich 8 schreibe zeigt der sich'
Vielleicht sehe ich vor lauter Bäumen den Wald nicht und deshalb das Problem nicht.
Ich wünsche Euch einen schönen Vatertag
HaGü
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.752 Beiträge
 
Delphi 10.4 Sydney
 
#19

Re: Relaiskarte K8056 von Velleman seriell ansteuern

  Alt 25. Mai 2006, 17:22
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
http://k8056.free.fr/k8056_20051007.tgz mit Quelltext,
vielleicht kannst Du dir da ein paar Inspirationen holen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
HaGü

Registriert seit: 18. Apr 2006
Ort: Cochem
19 Beiträge
 
#20

Re: Relaiskarte K8056 von Velleman seriell ansteuern

  Alt 25. Mai 2006, 23:11
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ü
  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 12:38 Uhr.
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