Versuche mit FTDI Relais Board

OP #4397789
Lesenswert?
• ▲
▼
Hallo zusammen!

Ich Programmiere schon eine ganze weile in VB2010 aber jetzt möchte ich 
zum ersten mal Hardwareprogrammierung versuchen.

Habe mir dazu ein 4-Kanal USB Relaisboard gekauft (FTDI) es gibt dazu 
auch beispiele aber alle in VB6 oder früher

Kennt vielleicht von euch jemand Tutorials die VB2010 und USB 
Programmierung betreffen?


Mfg
Persönliche Seite #4397798
Lesenswert?
• ▲
▼
Du brauchst keine USB-Programmierung, denn die FTDI-Bausteine können 
über den dazugehörigen Devicetreiber exakt so wie /serielle 
Schnittstellen/ angesprochen werden.

Reicht das nicht, gibt es auch noch von FTDI eine 
DLL-Programmierschnittstelle, die Dir weitere Möglichkeiten gibt.

Aber mit USB-Programmierung hast Du in beiden Fällen nichts zu tun.
#4399311
Lesenswert?
• ▲
▼
Da das Gerät wie schon geschrieben wurde als virtueller COM-Port zu 
Verfügung steht, kannst Du grundsätzlich mal mit einem Programm wie 
Putty versuchen die Relais anzusteuern, dann weisst Du auch welche 
Befehle Du senden musst.

Da Du nicht gesagt hast, welche Karte genau und wo es Beispiele inn VB6 
dazu gibt ist das alles Stochern im Nebel
#4399340
Lesenswert?
• ▲
▼
Würde mich wundern, wenn Du mit Vor- und Nachname der Hardware, bzw. des 
Herstellers, im Internet, nicht Treiber- und Schnittstellenbeschreibung 
finden würdest.

Sollten die Hersteller, was ich nicht glaube, totale Geheimniskrämer 
sein, so sollte der Name des verwendeten Chips ausreichen. Normalerweise 
sprichst Du den Chip von FTDI an und kein Relais.

Wahrscheinlich sind andere Hersteller nicht so verschlossen. Die haben 
vielleicht eine andere Anzahl an Relais auf ihrer Hardware. Das Prinzip 
sollte aber immer gleich sein, da es auf einem Treiber des Herstellers 
basiert.

Übrigens: In vielen Fällen sind die Treiber bereits installiert, da in 
diesem Bereich FTDI groß geschrieben wird.
OP #4399354
Lesenswert?
• ▲
▼
Also ich bin jetzt Prinzipiell schon einen Schritt weiter, der 
Hersteller hat mir die Commands gesendet, jedoch funktionieren diese 
nicht, oder was wahrscheinlicher ist, ich mache etwas falsch.


Die Commands:
K1
ON: (DEC: 255,1,1)   <- Funktioniert
OFF: (DEC: 255,1,0)  <- Funktioniert Nicht

K2
ON: (DEC: 255,2,1)   <- Funktioniert Nicht
OFF: (DEC: 255,2,0)  <- Funktioniert Nicht

K3
ON: (DEC: 255,3,1)   <- Funktioniert Nicht
OFF: (DEC: 255,3,0)  <- Funktioniert Nicht

K4
ON: (DEC: 255,4,1)   <- Funktioniert Nicht
OFF: (DEC: 255,4,0)  <- Funktioniert Nicht



Angesprochen wird das ganze über den SerialPort:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button1.Click
        Dim bytearray() As Byte = {255, 1, 1}
        SerialPort1.Write(bytearray, 0, bytearray.Length)
    End Sub


Mache ich etwas bei meinem Code falsch oder stimmen die Commands nicht?


Hersteller FTDIChip (SainSmart) FT245RL

SerialPort Einstellungen:

BaudRate: 9600
DataBits: 8
DiscardNulle: False
DTREnable: False
Handshake: None
Parity: None
ParityReplace: 63
PortName: COM3
ReadBufferSize: 4096
ReadTimeOut: -1
ReceivedByte: 1
RTSEnable: False
StopBits: One
WriteBufferSize: 2048
WriteTimeout: -1
Gast #4399704
Lesenswert?
• ▲
▼
Ich habe auch eine Relaiskarte mit FTDI_Chip.
Da musste ein ByteArray mit zwei Feldern übertragen werden, wobei immer 
nur das erste Byte benutz wurde. Warum auch immer (vielleicht, weil ich 
eine Karte mit 4 Relais hatte, es vom Hersteller aber auch karten mit 8 
Relais gab).

Auf jeden Fall sah so die Funktion zum ein-/ausschalten der einzelnen 
Relais aus (in C# - sollte sich aber einfach an VB.NET anpassen lassen):
1
private void setRelais(int number, bool on) {
2
      switch (number) { 
3
        case 0:
4
          if (on == true)
5
          {
6
            sentBytes[0] = (byte)(sentBytes[0] | 2);
7
          }
8
          else {
9
            sentBytes[0] = (byte)(sentBytes[0] & 253);
10
          }
11
          break;
12
        case 1:
13
          if (on == true)
14
          {
15
            sentBytes[0] = (byte)(sentBytes[0] | 8);
16
          }
17
          else {
18
            sentBytes[0] = (byte)(sentBytes[0] & 247);
19
          }
20
          break;
21
        case 2:
22
          if (on == true)
23
          {
24
            sentBytes[0] = (byte)(sentBytes[0] | 32);
25
          }
26
          else {
27
            sentBytes[0] = (byte)(sentBytes[0] & 223);
28
          }
29
          break;
30
        case 3:
31
          if (on == true)
32
          {
33
            sentBytes[0] = (byte)(sentBytes[0] | 128);
34
          }
35
          else {
36
            sentBytes[0] = (byte)(sentBytes[0] & 127);
37
          }
38
          break;
39
      }
40
      myFtdiDevice.Write(sentBytes, 1, ref receivedBytes);
41
    }

Sieht so wie ich das sehe ähnlich dem aus, was deine Karte erwartet...
OP #4403624
Lesenswert?
• ▲
▼
Also vom Verkäufer habe ich das erhalten, was im Anhang steckt. Darunter 
befindet sich auch die Datei USB 8 Relay Manager v.1.4.exe

Man öffnet das Programm klickt auf OPEN RELAY BOARD und dann gehts los. 
Funktioniert einwandfei!

Ich schreibe in Vb.net folgendes Programm für Relais 1:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button1.Click

        SerialPort1.Open()
        Dim b As Byte() = {1}
        SerialPort1.Write(b, 0, b.Length)
        SerialPort1.Close()

    End Sub

Das ganze also mein Programm funktioniert aber NUR wenn ich vorher in 
der Datei: USB 8 Relay Manager v.1.4.exe auf OPEN RELAY BOARD geklickt 
habe, dann kann ich alles an das Board senden was ich will. Mache ich 
das nicht funktioniert gar nichts ich bekomme auch keine Fehlermeldung.

Muss ich noch etwas anderes tun ausser den Port zu öffnen?

Ich habe wirklich nur die paar Codezeilen die ich hier gepostet habe.

Serialport Einstellungen:
BaudRate: 9600
DataBits: 8
DiscardNulle: False
DTREnable: False
Handshake: None
Parity: None
ParityReplace: 63
PortName: COM3
ReadBufferSize: 4096
ReadTimeOut: -1
ReceivedByte: 1
RTSEnable: False
StopBits: One
WriteBufferSize: 2048
WriteTimeout: -1

Ich hoffe es kann mir jemand helfen
Angehängte Dateien:
#4407419
Lesenswert?
• ▲
▼
Hallo,

wenn da nicht nur ein FTDI drauf ist kann ich vielleicht helfen.
Wie wäre es mit einem Bild von beiden Seiten?
Bei meinen Relaiskarten wird immer ein Byte gesendet.

Jedes Bit eines Bytes steht für ein Relais. Ist es gesetzt zieht das 
Relais an wenn nicht ist es abgefallen.

Bin 00000001 = Hex 01 = Dec 01
Bin 00000010 = Hex 02 = Dec 02
Bin 00000100 = Hex 03 = Dec 04
Bin 00001000 = Hex 08 = Dec 08
Bin 00010000 = Hex 10 = Dec 16
Bin 00100000 = Hex 20 = Dec 32
Bin 01000000 = Hex 40 = Dec 64
Bin 10000000 = Hex 80 = Dec 128

Will man Relais 1 und 5 einschalten so sendet man 00010001. Bit 5 und 1 
sind gesetzt. Bin 00010001 = Hex 11 = Dec 17. Jetzt brauch man nur noch 
ein wenig Bitmanipulation und fertig.

wert = wert or (oder) Maske setzt das entsprechende Bit,
wert = wert and (und) not (negieren) Maske löscht es.

Ich denke bei dir stimmt die Baudrate, Parity, Anzahl Stopbits nicht.
Oder ich liege total daneben und die Relais hängen an den CBUSxx 
Anschlüssen. Dagegen spricht aber dein Code:
1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
2
   SerialPort1.Open()
3
   Dim b As Byte() = {1}
4
   SerialPort1.Write(b, 0, b.Length)
5
   SerialPort1.Close()
6
End Sub
Wie gesagt Bilder könnten helfen.

>Hersteller FTDIChip (SainSmart) FT245RL
Oh man das habe ich übersehen! Damit sollte dann klar sein das jedes 
Byte was gesendet wird den Zustand der Relais ändert. Jetzt braucht man 
nur noch die Zuordnung der Ausgänge zu den Relais. Mich würde es wundern 
wenn die vertauscht sind. Also Bit 1 Relais 1 usw. Baudrate etc. ist 
dann völlig egal.

Auch sehe ich in deinem Code kein
1
SerialPort1.PortName = "COM1"    // 1,2,3,4, ....
Dir ist schon klar das es mehr wie eine serielle Schnittstelle geben 
kann?

Also Schnittstelle öffnen und genau ein Byte senden und sofort wieder 
schließen damit die Bytes auch gesendet werden und nicht im Sendebuffer 
verhungern.

Gruß Rene

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren