string variable per CAN netz senden

mwatermann
2007-03-29
2009-06-10
  • mwatermann - 2007-03-29

    hallo,

    wenn ich eine netzwerkvariable anlege, funktioniert alles einwandfrei, solange es keine vom typ STRING ist.

    lege ich eine string (sogar in der gleichen netzwerk datei) an, wird diese bei änderung nicht übertragen.

    gibt es bei netzwerk variablen vom typ STRING einschränkungen oder klappt es einfach nicht?

     
  • Martin Wunsch - 2007-03-29

    Ich habe mich auch schon mit Netzvariablen versucht. So wie es aussieht, lassen sich Bits, Bytes, Integer's, Words und DWords problemlos übertragen. Bei Strings hatte ich dieselben Probleme; ich vermute, daß auch Real-Variablen Probleme verursachen.

    Byte-Array's zu verschicken habe ich nicht probiert; sollte das funktionieren, hätte man nur die Umwandlungen zu managen.

    Gruß

    Martin

     
  • mwatermann - 2007-03-30

    moin,

    real vars stellen kein problem dar. bis auf strings hat bislang nichts probleme bereitet und wir arbeiten mit geschätzten 50 bis 100 netzvariablen die wir über can zwischen zwei controllern hin und herschicken.

    jetzt ist erstmals das problem mit den strings aufgetreten.

    die idee mit dem byte array ist gut (wenn auch umständlich: auf der einen seite zerlegen, auf der anderen zusammensetzen). werde das mal versuchen.

    irgendjemand von 3S noch eine idee?

     
  • franklin - 2007-03-30

    moin moin,

    versuche mich momentan auch an string-variablen.

    habs soweit am laufen das ein string(7) funktioniert,

    alles was größer ist geht leider nicht.

    bin ebenfalls für tipps dankbar.

    mfg

    franklin

     
  • mwatermann - 2007-03-30

    hast du ganz normal einen string der länge 7 (string(7)) angelegt oder musstest du sonst noch irgendwie basteln?

    würde ja auhc mal beim 3S support nachfragen, nur leider hab ich bislang dort niemanden erreicht...

     
  • franklin - 2007-03-30

    moin,

    habe eine variable ganz normal als string(7) deklariert.

    das funzt auch, mache ich string(8) oder mehr gehts nicht mehr.

    leider

    habe mich durch sämtliche doku gewühlt, konnte aber nichts finden warum und wieso es nicht klappen soll.

    werde noch weiter forschen und falls was brauchbares rauskommt wieder posten.

    mfg

    franklin

     
  • mwatermann - 2007-03-30

    dito

     
  • franklin - 2007-03-30

    moin,

    habe ein bischen telefoniert und folgendes rausbekommen:

    es kann am can bus liegen. das datenformat ist 8 zeichen.

    bei string(7) wird immer noch ein "ende" zeichen mit übertragen.

    und... 7+1 = 8

    alles was größer geht somit nicht.

    auf meine frage warum dann array's mit 64 worten funktionieren habe ich keine plausible antwort erhalten, die daten sollen dann wohl irgendwie anders gepackt werden.

    nun ja, dann geht man wohl den umständlichen weg und zerbröselt auf der einen seite den string und backt ihn auf der anderen wieder zusammen.

    schön ist das nicht, aber was nützt es.

    mfg

    franklin

     
  • mwatermann - 2007-03-30

    das is meines erachtens blöd(sinn)... wir haben große netzwerkdateien, mit ca. 20 variablen unterschiedlicher typen, die ebenfalls gepackt werden und in bis zu 5 PDOs verschickt werden... das funzt ja auch...

    naja...

     
  • Martin Wunsch - 2007-03-31

    Da wird wohl n Unterschied gemacht zwischen Variablen in Programmen und Variablen in Dateien.

    Gibt's nen einfachen Weg für die Konvertierung String <-> Byte-Array?

    Gruß

    Martin

     
  • mwatermann - 2009-06-04

    push

    sind momentan wieder über das problem gestolpert.

    leider scheint es immer noch keine lösung dafür zu geben...

    gibt es aber vllt. eine einfach alternative, wie man strings zuverlässig über netzwerkvariablen übertragen kann?

    evtl. hat ja auch mal jemand von 3S eine idee? (außer der, dass mit array von byte zu machen)

     
  • Gnu0815 - 2009-06-07

    Tach,

    auf PDO Ebene können nun mal nicht mehr als 8Byte übertragen werden. Deshalb ist es sinnvoll für komplexe Datenstrukturen über ein höheres Protokoll zu übertragen. Bei CANOpen bietet sich SDO gerade zu an. Der SDO Server verwaltet dann einen "String" (char array) Objekt und die Clients können dann per SDO Upload ihre Werte übertragen.

    Wenn CANOpen nicht unterstützt wird, dann kann man sich natürlich auch eine proprietäre Frickellösung mit einem seriellen Stream über PDO "nachbasteln".

     
  • mwatermann - 2009-06-10

    ...und CoDeSys unterstützt in netzwerklisten nur PDO's, seh ich das richtig?! schade...

     

Log in to post a comment.