Projektname

Umbau von 2×2 LED Matrix Anzeigen aus Bahnhofsdisplays.

Der Treff hat zwei große Bahnhofdisplays mit LED Matrix-Anzeigen und in der Summe 4 Bahnhofsuhren gespendet bekommen. Den Fortschitt beim entschlüsseln des Anzeige-Protokolls und die folgenden Projekte dokumentieren wir hier.

Linksammlungen für weitergehende Projekte:

Wir aktuell entwickelt. Siehe https://repos.ctdo.de/ctdo/dfi-led-matrix

Kommunikation mit dem Display (Boardcomputer)

Baud: 19200

Erste Informationssammlung (Ohne CRC Informationen):

ID = 001D = 01H
001D = 30 30 31
XX XX XX = ID

END = 1B?

Status Abfrage
00000000 02 53 30 30 31 30 31 9C   03 02 53 30 30 31 30 31  .S00101...S00101
00000010 9C 03                                              ..


Eine einzelne Anfrage schickt:
02 53 XX XX XX 30 31 9C 03


Anzeige löschen
00000000 02 44 30 30 31 30 31 8B   03 02 44 30 30 31 30 31  .D00X01...D00101
00000010 8B 03                                              ..

Eine einzelne Anfrage schickt:
02 44 XX XX XX 30 31 8B 03

Zeile löschen ( Klingt komisch / Keine Zeile in der Anfrage zu sehen )
00000000 02 5A 30 30 31 30 31 95   03 02 5A 30 30 31 30 31  .Z00101...Z00101
00000010 95 03                                              ..

Eine einzelne Anfrage schickt:
02 5A XX XX XX 30 31 95 03


Text senden ( In diesem Fall ist der Text "TEST" und die Zeile "1" )
00000000 02 49 30 30 31 30 31 31   30 31 1B 30 46 4C 31 54  .I00101101.0FL1T
00000010 45 53 54 B0 03 02 49 30   30 31 30 31 31 30 31 1B  EST...I00101101.
00000020 30 46 4C 31 54 45 53 54   B0 03                    0FL1TEST..

31 30 31 31   30 31 1B 30 46 4C 31 54 45 53 54 CRC-8/DARC   0xB0

Hier mit Text "TEST" und Zeile "2"
00000000 02 49 30 30 31 30 31 31   30 32 1B 30 46 4C 31 54  .I00101102.0FL1T
00000010 45 53 54 B3 03 02 49 30   30 31 30 31 31 30 32 1B  EST...I00101102.
00000020 30 46 4C 31 54 45 53 54   B3 03                    0FL1TEST..

Hier mit Text "T" und Zeile "1"

00000000 02 49 30 30 31 30 30 38   30 31 1B 30 46 4C 31 54  .I00100801.0FL1T
00000010 FA 03 02 49 30 30 31 30   30 38 30 31 1B 30 46 4C  ...I00100801.0FL
00000020 31 54 FA 03                                        1T..

Hier mit Text "T" und Zeile "2"
00000000 02 49 30 30 31 30 30 38   30 32 1B 30 46 4C 31 54  .I00100802.0FL1T
00000010 F9 03 02 49 30 30 31 30   30 38 30 32 1B 30 46 4C  ...I00100802.0FL
00000020 31 54 F9 03                                        1T..

Eine einzelne Anfrage schickt:
02 49 XX XX XX 30 31 31 30 31 1B 30 46 4C 31 54 45 53 54 B0 03



FF = Fest
XX = ID
YY = Zeile
TT = Text ("TEST")
MM = Menge
AA = Ausrichtung (L|Z|R)
Menge = 7 + Anzahl an Zeichen


FF FF XX XX XX MM MM MM YY YY FF FF FF AA FF TT TT TT TT ?? FF
02 49 30 30 31 30 31 31 30 31 1B 30 46 4C 31 54 45 53 54 B0 03

02 49 30 31 39 30 30 38 30 31 1B 30 46 5A 31 54 E5 03   - Vom PC (Text "T" Zeile "1" Adresse "19")

Text senden funktion in JS:

function crc (string) {
    var cr = 255;

    var charArray = string.split('');
    for (var cx = 0; cx < charArray.length; cx++) {
        var stringValue = charArray[cx].charCodeAt(0);

        cr = cr ^ stringValue;
        
    }

    return (cr | 128);
}

function binStringToHex1(s) {
        var s2 = [], c;
        for ( var i = 0, l = s.length; i < l; ++i ) {
    c = s.charCodeAt(i);
                s2.push(
                        (c >> 4 ).toString(16),
                        (c & 0xF ).toString(16));
  }
        String.prototype.concat.apply('',s2);
        return s2;
}

function generateCommand(address, row, direction, message) {

var commandBegin = "I";

while (address.length < 3) {
    address = "0" + address;
}

if (row.length == 1) {
    row = "0" + row;
}

var messageWithoutLenghtAndCrc = row + String.fromCharCode(27) + "0F" + direction + "1" + message;
var lengthOfMessageWithoutCrc = messageWithoutLenghtAndCrc.length + "";

while (lengthOfMessageWithoutCrc.length < 3) {
    lengthOfMessageWithoutCrc = "0" + lengthOfMessageWithoutCrc;
}

var messageWithoutCrc = commandBegin + address + lengthOfMessageWithoutCrc + messageWithoutLenghtAndCrc;

var crcFromMessage = crc(messageWithoutCrc);
var messageWithCrc =  String.fromCharCode(2) + messageWithoutCrc + String.fromCharCode(crcFromMessage) + String.fromCharCode(3);

return messageWithCrc;
}

console.log(binStringToHex1(generateCommand("19", "1", "Z", "Hello World!")).join('').toUpperCase());

Toller VB Code

    befehl = "I"
            
    adresse = Trim(Str(adresseesse))
    Do While Len(adresse) < 3
        adresse = "0" + adresse
    Loop
    If Ausr(0).Value = True Then ausrichtung = "L"
    If Ausr(1).Value = True Then ausrichtung = "Z"
    If Ausr(2).Value = True Then ausrichtung = "R"
    string1 = Text1(0).Text
    zeile = Trim(Str(zei))
    If Len(zeile) = 1 Then zeile = "0" + zeile
    string1 = zeile + Chr(27) + "0F" + ausrichtung + "1" + string1
    laengeVonAllem = Trim(Str(Len(string1)))
    Do While Len(laengeVonAllem) < 3
        laengeVonAllem = "0" + laengeVonAllem
    Loop
    string1 = befehl + adresse + laengeVonAllem + string1
CRC_bilden:
    crcVonBefehl = CRC(string1)
    befehlMitCRC = Chr(2) + string1 + Chr(crcVonBefehl) + Chr(3)
    Sende_Telegram befehlMitCRC, COMnr
Function CRC(S As String) As Byte
Dim Cr, Cx
    Cr = 255
    For Cx = 1 To Len(S)
         Cr = Cr Xor Asc(Mid(S, Cx, 1))
    Next Cx
    Cr = Cr Or 128
    CRC = Cr
    
End Function
  • Zuletzt geändert: 16.02.2018 10:01
  • von silversonic