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
Thema durchsuchen
Ansicht
Themen-Optionen

Relaiskarte K8056 von Velleman seriell ansteuern

Ein Thema von HaGü · begonnen am 22. Mai 2006 · letzter Beitrag vom 24. Apr 2008
Antwort Antwort
Seite 3 von 5     123 45      
Benutzerbild von Cyberbob
Cyberbob

Registriert seit: 24. Jan 2005
Ort: Karben
626 Beiträge
 
Delphi XE7 Architect
 
#21

Re: Relaiskarte K8056 von Velleman seriell ansteuern

  Alt 25. Mai 2006, 23:37
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!
Christian
  Mit Zitat antworten Zitat
HaGü

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

Re: Relaiskarte K8056 von Velleman seriell ansteuern

  Alt 26. Mai 2006, 00:30
Hallo Cyberbob,

jetzt weiß ich gar nicht mehr weiter.
Bin Anfänger, bitte, was meinst Du jetzt .
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.
  Mit Zitat antworten Zitat
Benutzerbild von Cyberbob
Cyberbob

Registriert seit: 24. Jan 2005
Ort: Karben
626 Beiträge
 
Delphi XE7 Architect
 
#23

Re: Relaiskarte K8056 von Velleman seriell ansteuern

  Alt 26. Mai 2006, 00:43
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...
Christian
  Mit Zitat antworten Zitat
HaGü

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

Re: Relaiskarte K8056 von Velleman seriell ansteuern

  Alt 26. Mai 2006, 01:13
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ü
  Mit Zitat antworten Zitat
Benutzerbild von Cyberbob
Cyberbob

Registriert seit: 24. Jan 2005
Ort: Karben
626 Beiträge
 
Delphi XE7 Architect
 
#25

Re: Relaiskarte K8056 von Velleman seriell ansteuern

  Alt 26. Mai 2006, 01:16
Ich hab die auch. Beim alten Notebook hats noch funktioniert. Hab jetzt allerdings ein neues ohne Serielle Schnittstelle, sodass ichs nicht mehr Testen kann.
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

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

Re: Relaiskarte K8056 von Velleman seriell ansteuern

  Alt 26. Mai 2006, 07:48
Hai HaGü,

bei meinem Code war wohl die Berechnung des zweierkomplements falsch Aber Klaus01 hat ja den richtigen Code geschreiben:
Delphi-Quellcode:
function Zweierkomplement(aValue: Integer): Integer;
begin
  result := (aValue xor $FF) + 1;
end;
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.
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.
Stephan B.
  Mit Zitat antworten Zitat
HaGü

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

Re: Relaiskarte K8056 von Velleman seriell ansteuern

  Alt 27. Mai 2006, 11:12
Hallo Leute,

in C++ haben wir es rausbekommen.
Die Checksumme haben wir so berechnet:
Zitat:
void ResetRelais(int Nr){
char achSData[6]="";
signed char cCheckSum=0;
int result=0;

achSData[0]=13;
achSData[1]=1;
achSData[2]='C';
achSData[3]=Nr+48;
cCheckSum=achSData[0]+achSData[1]+achSData[2]+achSData[3];
cCheckSum=TwosComplement(cCheckSum);
achSData[4]=cCheckSum;

result=SendData(achSData, 5);
Die Beschreibung von Velleman ist falsch.
Einfach bei
Zitat:
'checksum' Summe prüfen (2-Komplement der Summe der 4 vorigen Bytes +1)
das
Zitat:
+1
weglassen, dann klappt es auch mit dem Nachbarn.

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:
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
Habe jetzt nur noch das Problem mit der richtigen deklaration der Variablen. C++ braucht
Zitat:
signed Char
, Delphi????. Die cCheckSum besteht ja aus Buchstaben und Zahlen.
Werde mal bischen rumdoktern.
Vielleicht hat ja von Euch einer eine Idee.

Bis dann
HaGü
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

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

Re: Relaiskarte K8056 von Velleman seriell ansteuern

  Alt 27. Mai 2006, 11:55
Zitat von HaGü:
... Habe jetzt nur noch das Problem mit der richtigen deklaration der Variablen. ...
Da über die Serielle immer nur ein Byte nach dem anderen gesendet wird kannst Du die Variabeln auch als Byte deklarieren würde ich sagen.
Stephan B.
  Mit Zitat antworten Zitat
Klaus01

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

Re: Relaiskarte K8056 von Velleman seriell ansteuern

  Alt 27. Mai 2006, 12:15
Hallo HaGü,

Zitat:
signed char

Unter signed char versteht man einen Datentyp in C++. Sein niedrigster Wert ist -128, sein höchster 127. Seine Größe beträgt 8 Bit. (as)
das habe ich hierher: ->http://www.computer-tipps.net/blexikon28.html
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
Klaus
  Mit Zitat antworten Zitat
HaGü

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

Re: Relaiskarte K8056 von Velleman seriell ansteuern

  Alt 29. Mai 2006, 00:07
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:
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]= 'anthen
  S:= Start + KartenAdresse + BefehlRG21 + RelaisNr + CheckSummeRG21;
  if RadioGroup2.Items[RadioGroup2.ItemIndex]= 'austhen
  S:= Start + KartenAdresse + BefehlRG22 + RelaisNr + CheckSummeRG22;
  C:= C+C;
  SerialPortNG1.SendString(S);
  Edit1.Text:= S;
für Relais 2 und
Delphi-Quellcode:
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]= 'anthen
  S:= Start + KartenAdresse + BefehlRG11 + RelaisNr + CheckSummeRG11;
  if RadioGroup1.Items[RadioGroup1.ItemIndex]= 'austhen
  S:= Start + KartenAdresse + BefehlRG12 + RelaisNr + CheckSummeRG12;
  C:= C+C;
  SerialPortNG1.SendString(S);
  Edit1.Text:= S;
end;
für Relais 1.

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.
und werde fleisig weiter .

Mit Grüssen von der Mosel
HaGü
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


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 11:17 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