Ankündigung

Einklappen
Keine Ankündigung bisher.

ESP8266 KNX mit ETS

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mumpf
    antwortet
    Hi Thomas,

    nochmal ich... beschäftige mich immer noch mit Updatefähigkeit von knxprod-Versionen. IMHO macht hier CreateKnxProd einen Fehler! Ich habe testweise mal ein Gerät angelegt mit Version 10, das dann in Version 11 mit 1 neuen ParameterTyp, neuen Parameter und einem neuen KO versehen. Bei "ReplaceVersions" auch eine 10 eingetragen.

    Die 11 konnte ich nicht importieren, dann habe ich ins XML geschaut und folgendes gesehen:

    Code:
                <ComObjectRefs>
                  <ComObjectRef Id="M-00FA_A-0014-0B-0000_O-1_R-1" RefId="M-00FA_A-0014-0B-0000_O-1" />
                  <ComObjectRef Id="M-00FA_A-0014-0B-0000_O-2_R-2" RefId="M-00FA_A-0014-0B-0000_O-2" />
                  <ComObjectRef Id="M-00FA_A-0014-0B-0000_O-3_R-3" RefId="M-00FA_A-0014-0B-0000_O-3" />
                  <ComObjectRef Id="M-00FA_A-0014-0B-0000_O-4_R-4" RefId="M-00FA_A-0014-0B-0000_O-4" />
                  <ComObjectRef Id="M-00FA_A-0014-0B-0000_O-5_R-5" RefId="M-00FA_A-0014-0B-0000_O-5" />
                  <ComObjectRef Id="M-00FA_A-0014-0B-0000_O-6_R-6" RefId="M-00FA_A-0014-0B-0000_O-6" />
                  <ComObjectRef Id="M-00FA_A-0014-0B-0000_O-7_R-7" RefId="M-00FA_A-0014-0B-0000_O-7" />
                  <ComObjectRef Id="M-00FA_A-0014-0B-0000_O-8_R-8" RefId="M-00FA_A-0014-0B-0000_O-8" />
                  <ComObjectRef Id="M-00FA_A-0014-0B-0000_O-9_R-9" RefId="M-00FA_A-0014-0B-0000_O-9" />
                  <ComObjectRef Id="M-00FA_A-0014-0B-0000_O-10_R-10" RefId="M-00FA_A-0014-0B-0000_O-10" />
                  <ComObjectRef Id="M-00FA_A-0014-0B-0000_O-11_R-11" RefId="M-00FA_A-0014-0B-0000_O-11" />
                  <ComObjectRef Id="M-00FA_A-0014-0B-0000_O-12_R-12" RefId="M-00FA_A-0014-0B-0000_O-12" />
                  <ComObjectRef Id="M-00FA_A-0014-0B-0000_O-13_R-13" RefId="M-00FA_A-0014-0B-0000_O-13" />
                  <ComObjectRef Id="M-00FA_A-0014-0B-0000_O-14_R-14" RefId="M-00FA_A-0014-0B-0000_O-14" />
                </ComObjectRefs>
    Soweit ist das OK, die   0014-0B  endete vorher mit "A", und die "O-14" ist auch neu. Passt. Aber im ChannelIndependentBlock:
    Code:
                    <ComObjectRefRef RefId="M-00FA_A-0014-0A-0000_O-1_R-1" />
                    <ComObjectRefRef RefId="M-00FA_A-0014-0A-0000_O-2_R-2" />
                    <ComObjectRefRef RefId="M-00FA_A-0014-0A-0000_O-3_R-3" />
                    <ComObjectRefRef RefId="M-00FA_A-0014-0A-0000_O-4_R-4" />
                    <ComObjectRefRef RefId="M-00FA_A-0014-0A-0000_O-5_R-5" />
                    <ComObjectRefRef RefId="M-00FA_A-0014-0A-0000_O-6_R-6" />
                    <ComObjectRefRef RefId="M-00FA_A-0014-0A-0000_O-7_R-7" />
                    <ComObjectRefRef RefId="M-00FA_A-0014-0A-0000_O-8_R-8" />
                    <ComObjectRefRef RefId="M-00FA_A-0014-0A-0000_O-9_R-9" />
                    <ComObjectRefRef RefId="M-00FA_A-0014-0A-0000_O-10_R-10" />
                    <ComObjectRefRef RefId="M-00FA_A-0014-0A-0000_O-11_R-11" />
                    <ComObjectRefRef RefId="M-00FA_A-0014-0A-0000_O-12_R-12" />
                    <ComObjectRefRef RefId="M-00FA_A-[COLOR=#FF0000]0014-0A[/COLOR]-0000_O-13_R-13" />
                  </ParameterBlock>
                </ChannelIndependentBlock>
    Hier werden alle ComObjectRefRef immer noch mit   0014-0A  generiert und das neue KO (die O-14) steht nicht drin.

    Nachtrag: Nachdem ich manuell alle ID's auf 0014-0B geändert habe, konnte ich importieren und ein Update machen.

    Nachtrag 2: Inzwischen glaube ich, dass Du beim erneuten öffnen nicht sauber abräumst. Ich hab mir mit mal die Version 10 und 11 angeschaut und wollte dann noch eine 12 machen (leider weiß ich nicht mehr exakt die Editier-Schritte, ich versuche die aber noch zu reproduzieren). In der 12 (als SaveAs von der 11) hatte ich dann alle ParameterTypes von 10 (mit 0014-0A), von 11 (mit 0014-0B) und von 12 (mit 0014-0C). Dann kamen alle Parameter von 10 mit der ParameterID 0014-0C-nn, aber mit der Typreferenz auf den Parametertyp von 10 (0014-0A), gefolgt von allen Parametern von 11 wieder mit der ParameterID 0014-0C-nn, wobei nn einfach fortlaufend weiter nummeriert wurde und wieder die Typreferenz auf den Parametertyp von 11 (0014-0B) und dann die Parameter von 12. Hier mal repräsentative Ausschnitte:
    Code:
                <Parameters>
                  <Parameter Id="M-00FA_A-[COLOR=#FF0000]0014-0C[/COLOR]-0000_P-1" Name="StartupDelay" ParameterType="M-00FA_A-[COLOR=#FF0000]0014-0A[/COLOR]-0000_PT-DelaySeconds" Text="Anlaufzeit des Moduls nach Neustart" Value="10">
                    <Memory CodeSegment="M-00FA_A-0014-0C-0000_RS-04-00000" Offset="0" BitOffset="0" />
                  </Parameter>
                  <Parameter Id="M-00FA_A-[COLOR=#FF0000]0014-0C[/COLOR]-0000_P-2" Name="Heartbeat" ParameterType="M-00FA_A-[COLOR=#FF0000]0014-0A[/COLOR]-0000_PT-DelaySeconds" Text="'In Betrieb' Signal senden (0=nicht senden)" Value="600">
                    <Memory CodeSegment="M-00FA_A-0014-0C-0000_RS-04-00000" Offset="4" BitOffset="0" />
                  </Parameter>
    ...
    
                  <Parameter Id="M-00FA_A-[COLOR=#FF0000]0014-0C[/COLOR]-0000_P-[COLOR=#FF0000]43[/COLOR]" Name="StartupDelay" ParameterType="M-00FA_A-[COLOR=#FF0000]0014-0B[/COLOR]-0000_PT-DelaySeconds" Text="Anlaufzeit des Moduls nach Neustart" Value="10">
                    <Memory CodeSegment="M-00FA_A-0014-0C-0000_RS-04-00000" Offset="144" BitOffset="0" />
                  </Parameter>
                  <Parameter Id="M-00FA_A-[COLOR=#FF0000]0014-0C[/COLOR]-0000_P-[COLOR=#FF0000]44[/COLOR]" Name="Heartbeat" ParameterType="M-00FA_A-[COLOR=#FF0000]0014-0B[/COLOR]-0000_PT-DelaySeconds" Text="'In Betrieb' Signal senden (0=nicht senden)" Value="600">
                    <Memory CodeSegment="M-00FA_A-0014-0C-0000_RS-04-00000" Offset="148" BitOffset="0" />
                  </Parameter>
    ...
                  <Parameter Id="M-00FA_A-[COLOR=#FF0000]0014-0C[/COLOR]-0000_P-[COLOR=#FF0000]129[/COLOR]" Name="StartupDelay" ParameterType="M-00FA_A-[COLOR=#FF0000]0014-0C[/COLOR]-0000_PT-DelaySeconds" Text="Anlaufzeit des Moduls nach Neustart" Value="10">
                    <Memory CodeSegment="M-00FA_A-0014-0C-0000_RS-04-00000" Offset="434" BitOffset="0" />
                  </Parameter>
                  <Parameter Id="M-00FA_A-[COLOR=#FF0000]0014-0C[/COLOR]-0000_P-[COLOR=#FF0000]130[/COLOR]" Name="Heartbeat" ParameterType="M-00FA_A-[COLOR=#FF0000]0014-0C[/COLOR]-0000_PT-DelaySeconds" Text="'In Betrieb' Signal senden (0=nicht senden)" Value="600">
                    <Memory CodeSegment="M-00FA_A-0014-0C-0000_RS-04-00000" Offset="438" BitOffset="0" />
                  </Parameter>
    Das alles in einem xml, ohne es manuell zu editieren. Konsequenterweise wurden passend viele ParameterRef erzeugt und auch entsprechend viele ParameterRefRef... Wie gesagt, ich versuch nochmal rauszufinden, welche Editierschritte notwendig sind...

    Das alles nur zur Info, ich nutze die CreateKnxProd normalerweise nicht zum editieren, sondern nur zum Signieren, insofern stört mich der Fehler jetzt nicht besonders...

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi Thomas,

    ich habe mal wieder eine Frage: Auch wenn ich immer noch nicht erfolgreich mit dem Teilprojekt war, mein Logikmodul auf den SAMD zu bringen - was aber daran liegt, dass ich meine knxprod nochmal komplett umbaue - so ist mir trotzdem folgendes in den Sinn gekommen:

    Die ETS (zumindest ab 5.7.x) macht intern mehr Sachen über die Seriennummer des KNX-Gerätes, in der Annahme, dass diese Seriennummern eindeutig sind. Ich habe bisher nur in der CreateKnxProd eine Möglichkeit gefunden, eine Seriennummer anzugeben. Aber eigentlich müsste ich diese doch in der Firmware vergeben, oder? Ich will ja eigentlich nur eine knxprod für mehrere Instanzen eines Gerätetyps haben (z.B. 10 Temp/Hum-Sensoren oder auch 3 Logikmodule). Müsste man nicht eine Methode zur Vergabe der Seriennummer haben? Oder - falls die Seriennummer in der knxprod eine Bedeutung hat - zumindest etwas, um einen Suffix an die Seriennummer zu hängen, um diese eindeutig zu machen?

    Ich sehe bei mir einen Bedarf von min. 3 Logikmodulen und würde dann einfach 2 GPIO unterschiedlich auf Masse legen und so 4 mögliche Seriennummern bekommen. Oder - falls es das beim SAMD gibt, irgendeine Prozessor-Id an die Seriennummer hängen, um es eindeutig zu machen.

    Ich will nur verhindern, dass mir zukünftig die ETS bei einem Unload von einem Gerät gleich alle löscht, nur weil alle die gleiche Seriennummer haben...

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • SebastianObi
    antwortet
    Ich verwende die Siemens BCU. Natürlich wird in der Loop noch diverses gemacht, was bei mir zu diesem Problem geführt hatte.
    Zitat von Bernator Beitrag anzeigen
    #define BYTE_TIMEOUT 3
    Ich habe dies nun auf 5 erhöht. Damit gibt es bei mir keine Probleme mehr.

    Danke für den Tipp.

    Einen Kommentar schreiben:


  • Bernator
    antwortet
    Welche BCU verwendest du genau? TPUART oder NCN oder....
    Ist das die gesamte Debug Ausgabe, also von Anfang an oder fehlt da was?
    So wie es hier aussieht bekommst du Timeouts zwischen den Bytes, dann wird der bisher empfangene Frame verworfen und von vorne begonnen....

    Setz mal testhalber
    Code:
    #define BYTE_TIMEOUT 3
    in tpuart_data_link_layer.cpp etwas rauf, evtl. ist das zu knapp bemessen. Was machst du sonst noch in der loop? Ich vermute nämlich stark das hier etwas länger blockiert und somit die bytes zu langsam abgeholt werden....

    Einen Kommentar schreiben:


  • SebastianObi
    antwortet
    Nur kein Stress, es kommt auf ein paar Tage nicht drauf an für diese unwichtige Änderung.

    Ich habe ein Problem gefunden.
    Mit der Version "async tpuart_data_link_layer version (#21)" bekomme ich keine Kommunikation mehr zustande mit dem SAMD21 und TPUART.
    Folgende Fehler werden ausgegeben:

    imeout during RX_L_DATA
    got U_CONFIGURE_IND: 0x11
    got UNEXPECTED: 0x91
    got UNEXPECTED: 0xA6
    got U_STATE_IND: 0x7F
    got UNEXPECTED: 0xE3
    got L_ACKN_IND
    got L_ACKN_IND
    got U_CONFIGURE_IND: 0xD
    Timeout during RX_L_DATA
    got L_ACKN_IND
    Timeout during RX_L_DATA
    got U_STATE_IND: 0xFF
    got UNEXPECTED: 0xF2
    got L_ACKN_IND
    got L_ACKN_IND
    got UNEXPECTED: 0xE1
    got U_CONFIGURE_IND: 0x1
    got L_ACKN_IND
    got UNEXPECTED: 0xA2
    Timeout during RX_L_DATA
    got U_STATE_IND: 0xFF
    got UNEXPECTED: 0xF2
    got L_ACKN_IND
    got L_ACKN_IND
    got UNEXPECTED: 0xE1
    got U_CONFIGURE_IND: 0x1
    got L_ACKN_IND
    got UNEXPECTED: 0xA2
    Timeout during RX_L_DATA
    Ohne diese Änderung funktioniert es noch ohne Probleme.
    Bitte bei Gelegenheit mal prüfen.

    Danke

    Einen Kommentar schreiben:


  • thesing
    antwortet
    Ich habe die Anzahl der Einträge für AT und GAT im CreateKnxProd auf ushort.MaxValue erhöht und die GAT auf das größere Format umgestellt. Evtl. muss man im AssociationTable::nextAsap und AssociationTable::translateAsap noch operator[](i + 1) mit operator[](i) und umgekehrt tauschen. Ich habe leider heute keine Zeit mehr das zu testen/zu debuggen. Den entsprechenden Verweis auf die Spezifikation hab ich ins commit-Kommentar geschrieben. Ich komme vor Sonntag Abend oder Montag Abend nicht zu mehr.

    Einen Kommentar schreiben:


  • thesing
    antwortet
    Ich kann die Anzahl problemlos erhöhen. Dann wird es aber nicht mehr mit ETS4 gehen. Bin aber am WE unterwegs.

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi,

    Zitat von SebastianObi Beitrag anzeigen
    ich habe festgestellt, dass die Anzahl an Gruppenadressen auf 255 beschränkt ist
    das könnte auch ein Problem bei mir werden. Bei meinem avisierten Ziel von 240 (+2) KO und einem bisherigen Geräteschnitt von ca. 1,3 GA pro KO wird das mit 255 GA knapp. Aber vielleicht komme ich gar nicht auf so viele KO, weil der Speicher im SAMD gar nicht für die ganzen Parameter reicht .

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • SebastianObi
    antwortet
    Hallo,

    ich habe festgestellt, dass die Anzahl an Gruppenadressen auf 255 beschränkt ist. Im AssociationTableObject steht nur 1 Byte für die GA zur Verfügung. Lässt sich das erweitern? Ich habe das selbst probier, blicke aber im Detail nicht durch, da wohl an diversen Stellen Anpassungen notwendig sind.

    Einen Kommentar schreiben:


  • thesing
    antwortet
    Ja der ProgMode sollte sich problemlos per ETS setzten lassen. Hat eigentlich jemand einen Geschwindigkeitszuwachs beim programmieren beobachtet? Ich hatte letztens die MAX_APDU_SIZE nach oben gesetzt.

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Dann werde ich das heute Nachmittag ausprobieren. Ich finde es immer praktisch, wenn man über KNX feststellen kann, ob man das richtige Gerät an der Hand hat, und da ich wahrscheinlich 3 logikmodule haben werde (pro Stockwerk eines), könnte ich das Mal in Zukunft brauchen.

    Deine Antwort sagt mir aber, das man den ProgMode per Bus einschalten kann. Ich hatte vermutet, dass das nicht klappt...

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • thesing
    antwortet
    Die Led wird aktuell nur in KnxFacade:rogMode geändert. Damit das funktioniert, müsste man das digitalwrite dort rausnehmen und im KnxFacade::loop die Led an oder ausschalten je nachdem ob _bau.deviceObject().progMode() true ist oder nicht.

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi Thomas und Bernhard,

    ihr seid klasse, vielen Dank! Ich konnte mit der letzten Version die KNX-Demo auf meinen SAMD zum laufen bringen, auch wenn der DPT9 hier noch immer 0.00 sendet, aber das stört mich derzeit nicht... ich werde jetzt erstmal versuchen, ob mein Logikmodul zum fliegen kommt.

    Vielen Dank erstmal und Grüße,
    Waldemar

    P.S.: Was mir noch aufgefallen ist: Ich kann über die ETS prüfen, ob die PA programmiert worden ist, aber nicht die Prog-LED zum blinken bringen... sollt das gehen?

    Einen Kommentar schreiben:


  • thesing
    antwortet
    Der Aufruf würde ja in etwa:
    ((SamdPlatform&)knx.platform()).foobar();
    sein.
    Besser wäre noch KnxFacade zum Template KnxFacade<P, B> zu machen. Dann könnte die Facade in eine parameterlosen Konstruktor die BauSystemB und die Platform auch selbst erzeugen und man würde durch knx.platform() auch den richtigen Typ erhalten. Bei der Gelegenheit kann man auch gleich eine Methode knx.bau() anlegen.
    Zuletzt geändert von thesing; 24.07.2019, 21:28.

    Einen Kommentar schreiben:


  • Bernator
    antwortet
    Zitat von thesing Beitrag anzeigen
    Dann kann man platfomspezifische Methoden mit platform.foobar() aufrufen.
    Damit geht aber der Zusammenhang mit dem "Stack" verloren, besser wäre aus meiner Sicht in der facade die platform als member anzulegen dann könnte man knx.platform.foobar() aufrufen und man sieht sofort wohin die methode gehört?


    Einen Kommentar schreiben:

Lädt...
X