Relaiskarte ansprechen in PureBasic

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Ironsmurf
Beiträge: 111
Registriert: 04.01.2006 12:57
Computerausstattung: AMD FX(tm)-6300 Six-Core Processor
3.50 GHz / 8 GB Ram
Windows 7 / 64bit / Ultimate
Purebasic 5.20 LTS (Windows - x86)
Wohnort: Deutschland

Relaiskarte ansprechen in PureBasic

Beitrag von Ironsmurf »

Hallo zusammen

Ich habe 2 Relaiskarten, ich würdesie gerne direkt aus PureBasic heraus ansprechen.
Mit folgendem Code aus dem Forum habe ich auch schon erste Erfolge erzielen können, jedoch keine willkürlichen.

Code: Alles auswählen

If OpenSerialPort(0, "COM1", 300, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
  Debug "Success"
Else
  Debug "Failed"
EndIf

i=0
Dim ucMsg.b(4)
ucMsg(0) = 27 ; ESC, Anfang der Nachricht
ucMsg(1) = 1 ; ID-Adresse
ucMsg(2) = Asc("@") ; Kommando 64
ucMsg(3) = 1 ; hier schalten sie verschiedene Relais an oder aus
ucMsg(4) = ucMsg(0) ! ucMsg(1) ! ucMsg(2) ! ucMsg(3)
For i= 0 To 4
  Debug ucMsG(i)
Next i
Hat jemand einen Tip für mich, wie ich gezielt ein Relais an oder aus schalte ?
Anbei das Kommunikationsprotokoll, werde leider nicht ganz schlau daraus.

Das Kommunikationsprotokoll

Wer mit eigener Software die Relais-Interfaces ansteuern will, muß sich mit dem Ansteuerprotokoll beschäftigen. Die Relaiskarte empfängt Daten der seriellen Schnittstelle mit 9600 Baud, 8 Bit, No Parity, 2 Stoppbits. Es wird keine Rückantwort benötigt. Bis zu 16 Karten hängen an der TXD-Leitung des PC.

Jede Steuernachricht vom PC besteht aus genau 5 Bytes:
1. 27 ESC, Anfang der Nachricht
2. ID-Adresse 1 bis 16 oder 255 als Generaladresse
3. Kommando 64 ... 74, (siehe Tabelle 1)

4. Parameter 1 z.B. Bitmuster oder leerer Parameter 0
5. Parameter 2 z.B. leerer Parameter 0



Befehl Kommandobyte Parameter 1 Parameter 2
Direktausgabe 64 Bitmuster 0
EEPROM programmieren 66 EE-Adresse Byte
Programmstart Endlos-Durchlauf 68 0 0
Programmstop 70 0 0
ID-Adresse zuweisen 72 ID-Adresse 0
Programmstart Einfach-Durchlauf 74 0 0

Das Relais-Interface kennt zwei grundsätzliche Betriebsarten:
1. Die direkte Ausgabe von Schaltzuständen über das Kommando 64.

2. Die Ausgabe von intern im EEPROM gespeicherten Bitmustern. Die Daten müssen zuvor mit dem Kommando 66 übertragen werden, und das Programm muß mit dem Kommando 68 für endlose Wiederholungen oder mit dem Kommando 74 für einmaligen Ablauf gestartet werden.


Vielen Dank für eure Mühe im voraus
Es kommt immer auf die Sichtweise des Betrachters an.
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Relaiskarte ansprechen in PureBasic

Beitrag von H.Brill »

Hatte mal vor längerer Zeit eine Eigenbau-Karte
von Graffiti programmiert. Finde den Code aber
im Moment nicht. War aber so ähnlich :

Code: Alles auswählen

;wert1 = MC-Nummer (1-154)
Dim Buffer.c(4)
Buffer(0) = 27      ; ESC - Anfang der Nachricht
Buffer(1) = 255    ; ID - Adresse
Buffer(2) = 72      ; Kommando
Buffer(3) = wert1  ; Parameter Bitmuster oder 0
Buffer(4) = 0        ; nicht benutzt
WriteSerialPortData(#Serialport, *Buffer, 5)
; oder mal Buffer so schicken : @Buffer()
Das ging auch über einen AVR + EPROM.
Da mußt du mal ausprobieren.
Zuletzt geändert von H.Brill am 17.04.2011 09:20, insgesamt 1-mal geändert.
PB 6.10
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Relaiskarte ansprechen in PureBasic

Beitrag von DarkDragon »

Code: Alles auswählen

OpenSerialPort(0, "COM1", 9600, #PB_SerialPort_NoParity, 8, 2, #PB_SerialPort_NoHandshake, 1024, 1024)
So müsstest du OpenSerialPort aufrufen und nicht mit 300 Baud und 1 Stoppbit. Und

Code: Alles auswählen

ucMsg(4) = 0
laut
Dir hat geschrieben:Direktausgabe 64 Bitmuster 0
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten