INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

Motorola S-Record



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

14.08.2017, 10:06
Beitrag #1

JATler Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: Jul 2017

2017
2017
DE


Deutschland
Motorola S-Record
Hallo,

ich habe ein file im Motorola S-Record Format und möchte die line checksum prüfen. Im Beispiel sind Start code, Record type und Cecksum bereits entfernt, also nur noch die Daten übrig. Gibt es ein Möglichkeit das ohne Schleife durch String Formatierung, Umwandlung oder ähnliches besser zu lösen ?

Gruß,
JATler


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
14.08.2017, 11:38
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 14.864
Registriert seit: May 2009

09SP1, 11SP1, 17
1995
DE_EN

10×××
Deutschland
RE: Motorola S-Record
Hallo JATler,

Zitat:Gibt es ein Möglichkeit das ohne Schleife durch String Formatierung, Umwandlung oder ähnliches besser zu lösen ?
Du hast einen Input-String.
Du willst mit dessen Inhalt eine Rechnung (mit Zahlenwerten!) durchführen.
Du willst dazu den String in seine Einzelwerte zerlegen und jeden Wert auch einzeln behandlen.

Warum willst du für all das auf eine Schleife und etwas Mathematik verzichten? (Wie soll das gehen?)
Was stört dich an deiner vorhandenen Lösung?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.08.2017, 11:58
Beitrag #3

jg Offline
CLD & CLED
LVF-Team

Beiträge: 14.975
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Motorola S-Record
Ich hätte es ähnlich gemacht. Allerdings stimmt deine Checksummen-Berechnung nicht, vgl. hier.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.08.2017, 12:07 (Dieser Beitrag wurde zuletzt bearbeitet: 14.08.2017 12:17 von JATler.)
Beitrag #4

JATler Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: Jul 2017

2017
2017
DE


Deutschland
RE: Motorola S-Record
Hallo GerdW,

ja, ich habe einen Input-String dessen Inhalt ich in Einzelwerte zerlegen und damit rechnen will und nein, ich will nicht jeden einzeln behandeln. Mein file hat über 20.000 Zeilen, sodass diese Schleifenlösung dauert. Ich hoffe auf eine etwas elegantere Lösung und schnellere Lösung. Um bei meinem Beispiel zu bleiben, ich will: 22h + 00h + 00h + 00h + 34h + 63h + ... + 69h rechnen, damit ist Chksum Berechnung noch nicht abgeschlossen, das ist aber das wesentliche Problem. Die Einzelwerte sind immer 2 Characters lang. Habe Versuche mit String deserialisieren und Tabellen-String nach Array gemacht (siehe Anhang), kriegs aber nicht hin.

Gruß
... oder anders gefragt:

Wie kann ich diesen String (ohne Schleife, mit einer Funktion) in ein 1D Array aus zwei Zeichen langen Strings umwandeln ?


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.08.2017, 12:50 (Dieser Beitrag wurde zuletzt bearbeitet: 14.08.2017 13:30 von GerdW.)
Beitrag #5

GerdW Offline
______________
LVF-Team

Beiträge: 14.864
Registriert seit: May 2009

09SP1, 11SP1, 17
1995
DE_EN

10×××
Deutschland
RE: Motorola S-Record
Hallo JATler,

Zitat:Wie kann ich diesen String (ohne Schleife, mit einer Funktion) in ein 1D Array aus zwei Zeichen langen Strings umwandeln?
Genau das ist der Knackpunkt.
Dein String ist eben in "normalem" Displaymode und du musst eben erstmal je zwei Zeichen nehmen und dann in eine Zahl umwandeln. Das geht am einfachsten mit einer Schleife…
Wenn der String schon im "Hex-Display" wäre, ginge es einfacher!

Zitat:Mein file hat über 20.000 Zeilen, sodass diese Schleifenlösung dauert.
Die Umwandlung und die Checksum-Berechnung in ein reentrant-VI programmieren. Dann die Zeilen deiner Datei einlesen und mit einer parallelisierten FOR-Loop abarbeiten. Mein Octacore hier arbeitet VIs bei effizienter Programmierung eben auch mit (nahezu) 8facher Geschwindigkeit ab… Big Grin

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.08.2017, 15:59
Beitrag #6

jg Offline
CLD & CLED
LVF-Team

Beiträge: 14.975
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Motorola S-Record
(14.08.2017 12:50 )GerdW schrieb:  Hallo JATler,

Zitat:Wie kann ich diesen String (ohne Schleife, mit einer Funktion) in ein 1D Array aus zwei Zeichen langen Strings umwandeln?
Genau das ist der Knackpunkt.
Dein String ist eben in "normalem" Displaymode und du musst eben erstmal je zwei Zeichen nehmen und dann in eine Zahl umwandeln. Das geht am einfachsten mit einer Schleife…
Wenn der String schon im "Hex-Display" wäre, ginge es einfacher!
Damit er sicher übertragbar ist, liegt so ein Motorola S-Record File aber im "ASCII-Modus" vor...

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.08.2017, 07:29 (Dieser Beitrag wurde zuletzt bearbeitet: 15.08.2017 07:40 von JATler.)
Beitrag #7

JATler Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: Jul 2017

2017
2017
DE


Deutschland
RE: Motorola S-Record
Moin,

also, mal zur Ansicht (siehe Anhang), die Schleifenlösung ist schon was langsames, mein "Nichtschleifenansatz" ist zwei- bis dreimal schneller. Parallelisierung ist natürlich ein Ansatz, da ich aber nicht genau weiß wie viele S-Records es sind muss man sicher einigen Gehirnschmalz in die "Verteilung" stecken. Ich hatte gehofft durch eine geschickte Transformation des Strings ein Array aus zwei-Zeichen-Strings zu erzeugen, welches ich dann auf die Funktion Hex-String-nach-Zahl gebe und dieses wiederum auf Array addieren usw. Da ist man ja mit der Funktion Tabellen-String nach Array auch nah dran, nur leider gibts im S-Record kein Trennzeichen. Kann ich nicht irgenwie eine Formatierung vorgeben die LV dazu veranlasst immer zwei Zeichen in ein Array-Element zu packen ?

Gruß,
JATler


Angehängte Datei(en)
13.0 .vi  test.vi (Größe: 19,47 KB / Downloads: 17)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.08.2017, 09:08 (Dieser Beitrag wurde zuletzt bearbeitet: 15.08.2017 09:08 von jg.)
Beitrag #8

jg Offline
CLD & CLED
LVF-Team

Beiträge: 14.975
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Motorola S-Record
Nette Umsetzung! Top1

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.08.2017, 09:13 (Dieser Beitrag wurde zuletzt bearbeitet: 15.08.2017 09:15 von GerdW.)
Beitrag #9

GerdW Offline
______________
LVF-Team

Beiträge: 14.864
Registriert seit: May 2009

09SP1, 11SP1, 17
1995
DE_EN

10×××
Deutschland
RE: Motorola S-Record
Hallo JATler,

Zitat:Kann ich nicht irgenwie eine Formatierung vorgeben die LV dazu veranlasst immer zwei Zeichen in ein Array-Element zu packen ?
Du könntest ScanFromString mit dem Format %2s verwenden - aber ob das jetzt schneller wird…

Zu deiner Umsetzung:
- Bei der zweiten Umsetzung würde ich das "-48" vor dem ArrayDecimate durchführen…

Hier noch ein anderer Ansatz:
   
Du musst nur die LookupTable (LUT) für die Umwandlung von ASCII-Wert in Zahlenwert vervollständigen, die Tipparbeit habe ich mir hier gespart…
(Edit: auch hier kann die Umwandlung über die LUT natürlich vor dem Decimate durchgeführt werden.)

Zitat:Parallelisierung ist natürlich ein Ansatz
Damit meinte ich die parallelisierte FOR-Loop wie im Bild.

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.08.2017, 09:39 (Dieser Beitrag wurde zuletzt bearbeitet: 15.08.2017 09:58 von JATler.)
Beitrag #10

JATler Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: Jul 2017

2017
2017
DE


Deutschland
RE: Motorola S-Record
... so, wird langsam, Faktor 7 bis 8 (siehe Anhang)

LUT ist nochmal ein schöner Ansatz, probier ich aus und danke für den Tip "ScanFromString mit dem Format %2s"

Warum würdest Du die "-48" vor dem ArrayDecimate durchführen ? Wenn ich das in beide Zweige packe habe ich doch die Chance auf Parallelisierung oder ?

Gruss


Angehängte Datei(en)
13.0 .vi  test.vi (Größe: 19,3 KB / Downloads: 13)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: