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();
}
}
}
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
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. 👍
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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
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.