Befehl zum Relais schalten



  • Ich steuere über den Borland C++ Builder und die RS232 Schnittstelle eine Relaiskarte an. Klappt alles prima. Momentan habe ich eine Funktion geschrieben mit der ich einzelne Relais einschalten kann:

    void CloseRelay(unsigned char, unsigned char, unsigned char, unsigned char)

    Nun muß ich aber im Programm immer alle vier Werte angeben, egal ob ich auch nur ein Relais schalten will --> CloseRelay(3,0,0,0)

    Wie kann ich es lösen damit ich immer nur das entsprechende Relais alleine übergeben kann? Z.B.: CloseRelay(3) oder CloseRelay(1,5,2)

    MFG 😕



  • Hallo,
    was erwartet denn deine Hardware? Sind die Bit zum schalten der Relais in einem Byte oder in 16 Bit?

    Grundsätzlich kannst du dir ein Statuswort für die Relais anlegen und mit und (&), oder (|) die entsprechenden Bit beeinflussen und du sendest immer das Satauswort an deine Hardware.

    Evi48



  • Erlär mir mal das mit dem Statuswort 😕



  • hier mal ein einfaches beispiel:

    typedef unsigned char u_char;
    
    // wichtig ist, dass jeweils nur ein einzelnes bit gesetzt ist
    enum Relays
    {
      Relay1 = 0x01,  // 00000001b
      Relay2 = 0x02,  // 00000010b
      Relay3 = 0x04,  // 00000100b
      Relay4 = 0x08,  // 00001000b
    };
    
    // sollen es mehr relais sein, dann einen anderen datentyp verwenden
    enum RelayAction
    {
      raOpen  = 0x10, // 00010000b
      raClose = 0x20, // 00100000b
    };
    
    void CloseRelay(u_char State) 
    {
      // Relais 1 verarbeiten
      // -> prüfen welche Bits gesetzt sind
      if (State & Relay1)
      {
        // Relais 1 schliessen
        if (State & raClose) 
        {
        }
      }
    
      // ...
    }
    
    // im Programm Relais 1 und 3 schliessen
    u_char State = Relay1 | Relay3 | raClose;
    
    CloseRelay(State);
    


  • Ich blick da nicht durch...

    mein Problem ist eigentlich nur: Wie kann ich eine Funktion machen mit mehreren Übergabewerten z.B:

    void CloseRelay(int a, int b, int c)

    ...bei der ich aber nicht unbedingt alle Werte angeben muß? Momentan muß ich es immer so angeben CloseRelay(1,4,0) ich möchte aber CloseRelay(1,4) !

    Oder ist es irgendwie möglich das immer nur die Werte in der Klammer als Summe übergeben werden?

    Meine Steuerung hat 16 Relais, es wäre deshalb wichtig, weil ich sonst wenn ich ein Relais schalten will, immer noch 15 mal die 0 eingeben muß.

    😕 😕 😕



  • da helfen default-parameter

    void CloseRelay(int a = 0, int b = 0, int c = 0);
    

    oder folgendes:

    void CloseRelay(int a, int b, int c)
    {  
      // ... was machen mit a, b, c
    }
    
    void CloseRelay(int a, int b)
    {
      CloseRelay(a, b, 0);
    }
    
    void CloseRelay(int a)
    {
      CloseRelay(a, 0, 0);
    }
    


  • oder überlandene Funktionen.



  • @Sunday: Perfekt, genau das hab ich gesucht 😉 Danke

    void CloseRelay(int a = 0, int b = 0, int c = 0);


Anmelden zum Antworten