+ Antworten
Ergebnis 1 bis 9 von 9
  1. #1
    Registriert seit
    Aug 2008
    Ort
    Flensburg
    Beiträge
    385

    Standard eDIP Display Routine

    Hallo Liebe Fangemeinde,
    heute möchte ich schon mal eines meiner Ergebnisse an die Gemeinde zurück geben.
    Kurz zur Entstehung: Es hatte mich gestört, dass ich das Protokoll auf dem Display deaktivieren muss. Wobei Herstellerseitig ja nicht dazu geraten wird. Bei meinen ersten Gehversuchen mit dem Display stellte ich weiterhin fest, dass bei der Übertragung wohl Zeilen verschluckt werden. Also habe ich mich seit gestern Abend an die Arbeit gemacht und diese kleine Funktion Entwickelt. Genau genommen ist es ja "nur" aus kleinen Schnipseln (ich kann kein PHP bzw. lerne es erst seit IPS) zusammenkopiert. So ist die Umlaute- und Sonderzeichenumsetzung hier aus dem Forum....

    Nun braucht man sich also weder um die Umlaute und Sonderzeichen, noch um die Prüfsummen etc. kümmern.
    Ggf. muss das Timing angepasst werden. Bei mir geht es mit 4 hundertstel fehlerfrei. Allerdings hängt das Display derzeit noch an einem USB<->Netzwerk host. Ich Vermute dass wenn die Latenz vom LAN wegfällt, die Wartezeit vergrößert werden muss.
    Über Feedbeck freue ich mich natürlich.

    Hier die Funktion:
    PHP-Code:
    <?
        
    function edip_send($f_cport$string)
        
    /////////////////////////////////////////////////////////////////////////
        //
        // Version:       1.0
        // Datum:         31.01.2010
        // Autor:         Sven Kurzhals sven@kurzhals.com
        //
        // Beschreibung:    Funktion um IPSYMCON die Kommunikation mit den eDIP Displays
        //                     zu erleichtern insbesondere den Rahmen und die Prüfsumme
        //                für das Smallprotokoll zu bilden
        //
        // Aufruf:        edip_send(ID des eDIP Ports, Text);
        //
        /////////////////////////////////////////////////////////////////////////
        
    {
        
    $wartezeit=5;
        
    //*********************************************************************
        // Sonderzeichen wandeln
        //*********************************************************************
            
    $string str_replace("Ä","Ä",$string);
            
    $string str_replace("ä","ä",$string);
            
    $string str_replace("Ö","Ö",$string);
            
    $string str_replace("ö","ö",$string);
            
    $string str_replace("%F6","ö",$string);
            
    $string str_replace("%FC","ü",$string);
            
    $string str_replace("Ãœ","Ü",$string);
            
    $string str_replace("ü","ü",$string);
            
    $string str_replace("ß","ß",$string);
            
    $string str_replace("Ä""\x8E"$string);
            
    $string str_replace("ä""\x84"$string);
            
    $string str_replace("Ö""\x99"$string);
            
    $string str_replace("ö""\x94"$string);
            
    $string str_replace("ü""\x81"$string);
            
    $string str_replace("Ü""\x9A"$string);
            
    $string str_replace("ß""\xE1"$string);
            
    $string str_replace(",""\xFB"$string);   // Komma in Sonderzeichen
        //mehrfache Leerzeichen raus
            
    $string str_replace("  "" "$string);
            
    $string str_replace("  "" "$string);
            
    $string str_replace("  "" "$string);
            
    $string str_replace("  "" "$string);
        
    //*********************************************************************
        // Prüfsumme und andere Tags für das Smallprotokoll Bilden
        //*********************************************************************
            
    $string $string.chr(13); //`nen Abschlusszeichen ans Ende zufügen
            
    $string chr(17).chr(strlen($string)).$string//<DC1>=chr(17) und die Länge voranstellen
            
    $s1 0;
            for(
    $i 0$i strlen($string); $i++)
                {
                
    $s1 $s1 ord(substr($string$i1));  // Prüfsumme Bilden... hierzu alle Byte Saldieren
                
    }
                
    $string .= chr($s1 256); // Modulo 256 der Summe aller Byte an den String hängen
        //*********************************************************************
        // und wech damit über z.b. die Serielle
        //*********************************************************************
            
    COMPort_SendText($f_cport,$string);
            
    ips_sleep($wartezeit);
        }
    ?>
    Und so sieht ein Teil des Aufrufes bei mir aus:
    PHP-Code:
    <?
        
    include=edipsend.php;
        
    $Pos1=0;        $Pos2=65;   $Pos3=95;
        
    $Pos4=135;  $Pos5=180;  $Pos6=210;
        
    $cport=47948 /*[eDIP]*/;

        
    edip_send($cport,"#DL#TA#ZF4#ZW0");        // Bildschirm löschen
            //#TA   = Terminal ausschalten    #ZF4  = Font einstellen
            //#ZW0  = 90grad ausgabe         #YH50 = Helligkeit
    //****************************************************************
        
    edip_send($cport,"#GD0,14,240,14"); // Linie Zeichnen
    //****************************************************************
        
    $Zeile=15;
        
    edip_send($cport,"#ZL".$Pos1.",".$Zeile." Sensor");
        
    edip_send($cport,"#ZL".$Pos2.",".$Zeile." Ist");
        
    edip_send($cport,"#ZL".$Pos3.",".$Zeile." Soll");
        
    edip_send($cport,"#ZL".$Pos4.",".$Zeile." Steller");
        
    edip_send($cport,"#ZL".$Pos5.",".$Zeile." RF");
        
    edip_send($cport,"#ZL".$Pos6.",".$Zeile." Adj.");
    //****************************************************************
        
    edip_send($cport,"#GD0,24,240,24"); //Linie Zeichnen
    //****************************************************************
        
    ...
        
    etc.
        ...
    ?>
    [EDIT 07.02.2010]
    Nachtrag:
    Nach Intensivem auseinandersetzen mit dem Display habe ich nun festgestellt, dass wenn das Protokoll eingeschaltet ist (J2 offen), das Display außer die <ack> und <nack> von sich aus gar nichts mehr sendet :-( Es mus also aktiv abgefragt werden ob was im Puffer zur abholung liegt. Mit ´nem Portanalysator habe ich nun mal geguckt wie die von EA das in ihrer Terminal-SW machen... dort ist es so, dass die alle 1 sekunde die abfrage sequenz senden und dann einfach horchen ob was kommt. Dies halte ich für nicht Praktikabel. Ich habe mal versucht alle 1 sekunde die abholsequenz (<DC2> 1 I bcc) zu senden. Hm joa... grundsätzlich geht das so..... aaaaber IPS saust dann bei mir auf so ca. 90% CPU last. Alo bleibt eigentlich nur PIN 20 des Displays (Data in Sendbuffer) zu verwenden könnte man z.b. auf "RI"oder DSR o.ä. legen und im IPS auswerten. Also ist dies Projekt mangels Zeit zunächst mal auf Eis gelegt.... aber nicht gestorben ;-)
    Eine Sache ist mir noch aufgefallen, die mir von anfang an nicht ganz klar war und vielleicht gerade neu-einsteigern hilft: Wenn man die zu sende Zeichenkette an das Display mit einem <ESC> = chr(27) beginnt muss man die Zahlenwerte z.b. Koordinatenangaben als byte senden. Verwendet man jedoch das # als ersatz für das <ESC>, dann kann man die Koordinaten ganz gemütlich als String senden. Dieser Umstand geht wohl so nicht klar aus dem Manual hervor.... oder ich hab´s überlesen. Kurzes Beispiel:
    PHP-Code:
        edip_send($cport,chr(27)."GD".chr(0).chr(14).chr(240).chr(14)); // Linie Zeichnen
        
    edip_send($cport,"#GD 0,14,240,14"); // Linie Zeichnen 
    beide Zeilen bewirken das gleiche ;-)
    Geändert von _Sven_ (07.02.10 um 08:44 Uhr)

  2. #2
    Registriert seit
    Nov 2008
    Ort
    Heidelberg
    Beiträge
    580

    Genial!!!

    Du bist der Held - genau das hat beim EDIP noch gefehlt, um perfekt zu sein.

    Vielen Dank dafür!
    Gruß
    dreamy1

  3. #3
    Registriert seit
    Jan 2007
    Ort
    Nidda(Hessen)
    Beiträge
    7,331

    Hallo Sven,

    wertest Du auch irgendwo ACK und NAK aus. Ansonsten hat es ja nicht viel Sinn.
    Gruß Rainer


    Unmögliches wird sofort erledigt, Wunder dauern etwas länger.


  4. #4
    Registriert seit
    Aug 2008
    Ort
    Flensburg
    Beiträge
    385

    Ack und NACK werden wie man als Fachmann sicherlich aus dem Quelltext ersehen kann nicht ausgewertet.
    Um Ehrlich zu sein bin ich noch nicht soweit, dass ich die Daten aus dem Display empfange. Das ist erst der 2. Schritt. Diese Funktion bildet hierfür aber das Fundament. Der geübte PHP Programmierer wird aber sicherlich selbst Ack und Nack auswerten können. Später möchte ich das sicherlich in die Funktion integrieren. Das wird denn dann Version 2

    Weiterhin wird NICHT geprüft, ob mehr als 64 Zeichen gesendet werden.

    Auch wird NICHT geprüft, ob die Serielle Schnittstelle vorhanden und auch
    Empfangsbereit ist.

    Und es lassen sich keine Blider in Blöcken damit senden, da ein chr(13) an die Zeichenfolge drangehängt wird.

    Nun hatte ich auch nicht den Anspruch gestellt diese Funktion für alle zu schreiben, sondern für mich.. und wenn es jemand gebrauchen kann freue ich mich

    LG aus Handewitt

    Nun kommt eben Phase 2... Daten vom Display empfangen ;-) Mal sehen wie das so klappt.... Macht ja irgenwie schon sinn, wenn man das Dingens Interaktiv nutzen kann.

  5. #5
    Registriert seit
    Nov 2008
    Ort
    Heidelberg
    Beiträge
    580

    Zitat Zitat von RWN Beitrag anzeigen
    Hallo Sven,

    wertest Du auch irgendwo ACK und NAK aus. Ansonsten hat es ja nicht viel Sinn.
    Rainer,

    sei mir bitte nicht böse, aber mit solchen Bemerkungen -auch wenn sie sachlich sind- raubst Du jedem Newbie die Illusion, einen Schritt weiterzukommen.

    Ich finde es gut, dass hier Lösungsansätze gepostet werden, auch wenn diese (noch) nicht perfekt sind. Jeder fängt mal klein an, und da sind genau solche Postings wie der des Threaderstellers immens hilfreich. Und vielleicht Anreiz für die PHP-Freaks hier, um diese dann perfekt zu machen :-)

    Wenn im Forum nur noch das Posten perfekt funktionierender PHP-Scripts erlaubt ist, wird die Hürde für einen PHP-Einsteiger nur noch größer - der sucht nämlich einfach gestrickte Beispiele, die er nachvollziehen kann und mit denen er PHP erlernen kann.

    Sorry für OT!
    Gruß
    dreamy1

  6. #6
    Registriert seit
    Jan 2007
    Ort
    Nidda(Hessen)
    Beiträge
    7,331

    @ dreamy, schlecht geschlafen!

    Das war eine ganz normale Frage. Sven hat es ja in seiner Antwort geschrieben das es der nächste Schritt ist.

    Denk was du willst. Koppschüttel.
    Gruß Rainer


    Unmögliches wird sofort erledigt, Wunder dauern etwas länger.


  7. #7
    Registriert seit
    Sep 2005
    Beiträge
    1,429

    Hi,

    ich hatte heute Nachmittag auch schon darüber gegrübelt, was diese Funktion für einen Sinn haben soll, da fehlende Pakete doch eh nicht erkannt und erneuert gesendet werden?

    Deshalb ist die Frage von Rainer hier sicherlich berechtigt.
    Im Moment sehe ich mit dieser Funktion nur Nachteile im Betrieb bzw. wird doch nur die Prüfsumme berechnet aber nicht ausgewertet.
    Wenn das mit der Funktion 2.0 dann mal umgesetzt ist, läßt sich das sicherlich gut implementieren.
    Also mach' mal weiter damit.


    Grüße,
    Doc

  8. #8
    Registriert seit
    Jul 2010
    Beiträge
    43

    Hallo Sven, wo muß man deinen ersten Code genau hinterlegen um ihn aufrufen bzw. einbinden zu können?

  9. #9
    Registriert seit
    Aug 2008
    Ort
    Flensburg
    Beiträge
    385

    Hallo,
    das Script liegt bei mir im \ipsymcon\scripts
    Ich habe es als eigenständiges Script direkt im IPS angelegt.

    //Sven

Ähnliche Themen

  1. xBEE und eDIP auf Leiterplatte
    Von andrge im Forum IPS-868 / ProJET, XBee, ZigBee, XPort
    Antworten: 5
    Letzter Beitrag: 21.01.10, 21:35
  2. edip schläft ein und wird nicht wieder wach
    Von NBA im Forum Alles rund um den PC
    Antworten: 4
    Letzter Beitrag: 11.11.09, 22:51
  3. EDIP Frage
    Von Philbo im Forum Alles rund um den PC
    Antworten: 2
    Letzter Beitrag: 23.04.08, 18:53
  4. EDip Display Wireless mit XBee
    Von Keule im Forum IPS-868 / ProJET, XBee, ZigBee, XPort
    Antworten: 46
    Letzter Beitrag: 25.03.07, 13:37
  5. Anwendungsbeispiel: 1-Wire Display - Feedback?
    Von Markus im Forum 1-Wire, M-BUS
    Antworten: 2
    Letzter Beitrag: 20.02.07, 17:05