Laden...

DALI/DSI Interface RS232 Ansteuerung mit C#

Erstellt von stas vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.707 Views
S
stas Themenstarter:in
3 Beiträge seit 2018
vor 6 Jahren
DALI/DSI Interface RS232 Ansteuerung mit C#

Hallo,

Ich arbeite derzeit an einen DALI-Projekt für die Uni und soll, über den mir bereitgestellten DALI Interface RS232 PS/S von Tridonic Web, Leuchtmittel ansteuern. Das DALI-Interface soll dazu dienen angeschlossene Leuchtmittel anzusteuern und stufenweise zu Dimmen, sodass eine Beleuchtungsstärke-Kurve in Abhängigkeit von der Dimm-Stufe dargestellt werden kann (Zukunftsmusik).

Derzeit habe ich das DALI-Interface via USB to Serial Port (dann rj45 Kabel zum DALI-Interface) angeschlossen und versuche eine Leuchte auszuschalten. Die Funktionsweise des DALI's ist gegeben den über die Test-Taste am DALI-Interface wird das Leuchtmittel an und aus geschaltet. Die Anbindung an den PC wird ebenfalls erkannt wie im Bild Link unten zu sehen. Somit gehe ich davon aus, dass es am Programmieren bzw. ggf. gebrauchter zusätzlicher Vorschaltung scheitert.

Als derzeitigen Ansatz verwende ich das Datenblatt von Tridonic (LINK DATENBLATT), wo ich entnehme, dass ich 5 Bytes an das DALI-Interface übergeben soll (Seite 7/8). Ich habe nach den Angaben die einfachste Variante gewählt 0x15, 0x00, 0x00, 0x00, 0x15 zu senden. 0x15/0b00010101 lässt mich das einfachste DALI Format nutzen -> DSI (WIKI LINK), womit ich den Light Level direkt über 4ten Byte ansteuere (2ter und 3ter somit 0x00). Da ich erstmal die Leuchte ausschalten will kommt 0x00 (Aus) als 4ter Byte laut Wiki DSI. Der 5te Byte ist laut Datenblatt ein XOR aus bisherigen Bytes somit gleich den 0x15 da alle anderen 0x00.

Leider bin ich neu in der C#-Programierung und auch RS232 Anbindung, womit ich sehr unsicher bin was mein Ansatz angeht. Ist der Weg über die SerialPort-Klasse richtig und ist es möglich über C# es zu realisieren? Das sind die Fragen die ich mir stelle. Unten habe ich meinen Code beigefügt der nichts bewirkt am Dali. Laut Datenblatt kann man die backward frame (auch 5 Bytes) sich auslesen lassen um zu schauen was das DALI-Interface so macht. Jedoch mit public int ReadByte() scheine ich nichts zu bekommen und die Command-Console geht auch sofort zu nach ablaufen des Codes zu.

Ich wäre für jede Unterstützung dankbar, mich in die richtige Richtung zu lenken. Grüße an alle!

C#-Ansatz ist wie folgt:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;

namespace ConsoleApp2
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //Mein USB Serial Port ist COM3 in Windows 10 Geräte-Manager
            SerialPort mySerialPort = new SerialPort("COM3");

            //Angaben aus DALI RS232 Datasheet Tridonic Webseite
            mySerialPort.BaudRate = 38400;
            mySerialPort.Parity = Parity.None;
            mySerialPort.StopBits = StopBits.One;
            mySerialPort.DataBits = 8;

            //RTS + Voltage und DTR - Voltage
            mySerialPort.RtsEnable = true;
            mySerialPort.DtrEnable = false;

            mySerialPort.Open();

            //mySerialPort.Write(new byte[] { 0b00010101, 0x00, 0x00, 0x00, 0b00010101 }, 0, 5); In Bit
            mySerialPort.Write(new byte[] { 0x15, 0x00, 0x00, 0x00, 0x15 }, 0, 5);

            mySerialPort.Close();
        }
    }
}

888 Beiträge seit 2007
vor 6 Jahren

Die RS232-Anbindung sollte grundsätzlich genormt sein.
Probier es mal hier mit:
Template SerialPort

S
stas Themenstarter:in
3 Beiträge seit 2018
vor 6 Jahren

Hallo,

danke für deine Antwort. Ich habe das Template heruntergeladen und bei Nutzung erhalte ich folgende Warnungen (Errors).

Sowie ich das Template verstehe muss ich folgende Zeile anpassen (Code ab 127 im SerialConnector.cs) (BILD).

Da steht, dass aus ASCII jetzt Bytes gemacht werden d.h. ich soll mein Befehl aus 5 Bytes zuvor in ASCII angeben richtig?
Das wäre laut dieser Webseite (LINK) wie folgt:
0x15 -> NAK
0x00 -> NUL also
NAKNULNULNULNAK muss als Eingabe erfolgen. Leider tut sich dann nichts an der Leuchte. Habe ich das mit dem Template richtig verstanden? Sollte ich davon ausgehen das die Anbindung fehlerhaft ist?

Grüße

16.807 Beiträge seit 2008
vor 6 Jahren

Bitte beachte [Hinweis] Wie poste ich richtig? 6.1 Bilder als Dateianhang hochladen

Noch besser: Verwende BB-Tags und poste die Fehlermeldung als Test.
Dafür gibt es das ERROR-Tag. Dafür ist es da.
Das gilt auch für den ersten Beitrag. Du hat schließlich heute bei Deiner Registrierung diese Regeln zwei mal als gelesen und verstanden markiert.

Dann gibt es evtl auch eine Antwort. 👍

L
136 Beiträge seit 2015
vor 6 Jahren

Hallo stas,

Erstmal vorweg...ich habe mir das Datenblatt des Gateways nicht angesehen.

Auf einer DALI-Linie können 64 Geräte adressiert werden, welche dann wiederum gruppiert werden.

Also muss das Vorschaltgeräte adressiert sein und über das Gateway auch bestimmt DIESE Adresse angesprochen werden.

Aber mal im Ernst...PC=>C#=>USB/RS232=>Kabellänge=>Gateway=>DALI=>EVG

Besorg Dir ein ordentliches Gateway (z.B. mit BACnet/IP oder Modbus/IP) und kümmere Dich um die Umsetzung der Dimm-Rampe bzw. Konstantlichtregelung oder was Du da vor hast.
-> Zur Klarstellung, TRIDONIC hat sehr gute Produkte!

Btw. ist Dein Vorhaben mit einer SPS einfacher zu realisieren als mit PC und C#, zumal Du in C# noch nicht so bewandert bist.

Gruss Lhyn

S
stas Themenstarter:in
3 Beiträge seit 2018
vor 6 Jahren

Hallo,
danke für die Antworten. Es ist mir bewusst, dass die DALI Adressierung angesprochen werden muss, jedoch wenn ich alles über Broadcast/Global Befehl (Alle Lampen) anspreche wäre das Problem nicht gegeben. Darüber hinaus dachte ich es sei ein leichteres mit rs232 und der SerialPort-Klasse. Leider muss ich es über dem PC machen 😃 aber danke für die vorschlage.