Welke programmeer taal voor het analyseren van een ihex file? en meer ;)

Hallo allemaal,

Een vraagje.

Van de machines die ons bedrijf verlaten, lezen we kort voordien een eeprom van de besturing uit.
In dit eeprom staat data over urenstanden, softwareversies enz.
Na deze data wordt opgeslagen in een .ihex bestand.

Graag zou ik een tool willen maken waarmee bepaalde data uit het ihex bestand gehaald en als leesbare tekst in een document geplaatst wordt.
Ik denk aan de volgende stappen die dit tool zou moeten maken:
1. Open bestand.
2. Lees data van opgegeven “adres”.
3. Converteer data van hexadecimale getallen naar decimale getallen.
4. Plak deze decimale waarden op een bepaalde plek in een document.
Of plaats deze data voorzien van een begeleidende tekst in een document.
bijvoorbeeld: softwareversie master : 01.00.09
5. Sluit het databestand.
6. Sluit het tekst document.

Hoe zouden jullie dit aanvliegen en mbv. welke software tools?
Ik heb ervaring met C en een beetje met javascript.
Het mag in een andere taal zijn als de leercurve niet te lang duurt voor een 50 plusser ?.

Ik zoek ook nog iets waarmee ik eigen standaard teksten in een mail, document enz. kan plakken, seriematige handelingen automatiseren enz.
(Zoiets als Autohotkey)
Daarbij zou ik dan gebruik willen maken van de software tools van bovenstaande uitdaging.

buckfast_beekeeper

Golden Member

Heb je geen documentatie hoe het bestand is opgebouwd? Dat lijkt me al de eerste stap. Al eens geprobeerd het bestand met Notepad++ te openen. Wat zie je dan? Is eht xml? Dan heb je te maken met nodes en is het niet zo moeilijk.

Van Lambiek wordt goede geuze gemaakt.

Ik zou beginnen met het zoeken op een site als github om te zien in hoeverre zoiets al beschikbaar is.
Als je op github zoekt naar "intel hex", dan heb je op de eerste pagina met zoekresultaten al een library te pakken:
https://github.com/martin-helmich/libcintelhex

reading can seriously damage your ignorance

Ik zou een standaard tooltje gebruiken om ihex in bin om te zetten.

Dan is het programmatje (in C) iets als

code:



struct config_s {
  unsigned char pad1[12];
  unsigned char v1, v2, v3, pad2; // version info at offset 12
  unsigned char pad3;
};

main (int argc, char **argv)
{
   int fd; 
   struct config_s config;

   fd = open (argv[1], O_RDONLY); 
   read (fd, &config, sizeof (&config)):
   printf ("version: %d.%d.%d", config.v1, config.v2, config.v2);
   exit (0);
}
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
bprosman

Golden Member

Intel hex .iHEX verteld alleen hoe (en waar) een bestand opgeslagen word en iets over een eventuele checksum.
Het zegt niets over de inhoud.
Staat bijvoorbeeld je software versie op de eerste 5 plaatsen in het bestand (bijvoorbeeld) ?

In dit eeprom staat data over urenstanden, softwareversies enz.

Neem aan (hoop) dat er gedocumenteerd is wat waar staat.

Ik zoek ook nog iets waarmee ik eigen standaard teksten in een mail, document enz. kan plakken, seriematige handelingen automatiseren enz.
(Zoiets als Autohotkey)

VB.net ? C.NET ? Als het om Microsoft Word gaat ?

[Bericht gewijzigd door bprosman op vrijdag 12 juni 2020 17:03:17 (24%)

De jongere generatie loopt veel te vaak zijn PIC achterna.

@drieske

Om de files te bekijken is misschien iets als ultraedit al voldoende (in ctrl-h mode kun je alles in hex bekijken (data plus adressen) + zoeken/muteren).

Verder zijn er ook veel gratis hex editors met meer opties. Zie: https://listoffreeware.com/best-free-hex-editor-software-windows/

En als je de structuur in kaart hebt gebracht kun je met C (of bijna elke andere taal) de zaak converteren naar een text file en verder verwerken.

Als je een eprom uitleest krijg je gewoonlijk een brei van data. Oftewel een onwijze lijst van hexadecimale getallen. Door de eprom uitlezer wordt die lijst in een bestand gezet. Heel vaak is dat bestand dan een lijst van regels die elk bijvoorbeeld 8 bytes bevatten. Elke regel begint dan met het adres van het eerste byte.

Bijvoorbeeld:

00000000 56 6F 6F 72 62 65 65 6C 64 20 76 61 6E 20 65 65 Voorbeeld van ee
00000010 6E 20 68 65 78 2D 65 64 69 74 6F 72 2E n hex-editor.

Het eerste byte dat de waarde #56 heeft en de hooftletter V representeerd staat dus op epromadres 00000000. Het 17 byte (#6E) in de Eprom staat dus op adres #00000010 of 16 decimaal.

Vroeger had je programma's als bijvoorbeeld Norton commander (Tegenwoordig midnight commander onder Linux) die dit soort van bestanden konden weergeven zoals hierboven staat. Tegenwoordig heb je editors die je zo kunt instellen dat een bestand op een dergelijke manier wordt weergegeven. Tektronix/sony had een logic analyzer die dit kon met seriële data.

Alleen heb je er niet veel aan. De brei van data blijft een brei van data. Toevallig leesbare strings (van meldingen bijvoorbeeld) kun je wel lezen ja. Maar gegevens als meetdata, timing dingen enzo zul je niet kunnen herkennen.

Je kunt er alleen iets mee als je een exacte omschrijving hebt van wat elk byte in de eprom betekend. Of je hebt een programma dat bij die machine geleverd is en dat de data representeert. Zonder deze info kun je gewoon niets met deze data.

In dit eeprom staat data over urenstanden, softwareversies enz.

Is dit echt zo? Een eprom kun je namelijk niet wissen of beschrijven. Als je in een eprom 1 bit wil veranderen moet je de betreffende eprom er uit halen helemaal wissen onder een UV lamp (Duurt een half uur.) en daarna weer helemaal opnieuw beschrijven met de oude data waar je dat ene bit hebt aangepast. Daarna de eprom weer terug in het voetje plaatsen en de machine opnieuw opstarten. Ik geloof daarom niet dat de urentellerstanden in een eprom staan staan. Die moeten normaal gesproken dynamisch als de machine in bedrijf is worden opgeslagen. In de tijd van de eproms werden dergelijke tijdelijke gegevens in een speciaal en erg dure soort nvram geheugen opgeslagen. Dat waren kleine geheugens van soms niet meer dan enkele bytes groot. Die nvrams werden bijvoorbeeld gebruikt in terminals om de gegevens van de seriële poort instellingen en de te gebruiken karakterset te bewaren. Die rammetjes gingen wel eens stuk en dan was men in paniek. De reparatie was betrekkelijk eenvoudig.

[Bericht gewijzigd door Ex-fietser op vrijdag 12 juni 2020 17:23:04 (26%)

big_fat_mama

Zie Paulinha_B

Wat wordt het alweer allemaal ingewikkeld gemaakt. Unix/Linux heeft alle gevraagde tools vlotjes achter de hand. Os/X misschien ook wel, dat ken ik niet.

bv de dump bekijken:
hexdump -C mijndump.ihex

mail met bijlage:
uuencode mijn.doc mijn.doc | mailx -s "hier is mijn doc" jantje @ pierkedop . com

&c &c

Wat te gebruiken om data uit de dump te plukken hangt af van de opmaak van de data, zoals reeds gezegd. Met awk moet er heel wat mogelijk zijn. Zelf zou ik wellicht python gebruiken, dat is voor Windows ook beschikbaar dacht ik. In python (maar allicht ook in C) moet het te doen zijn om de hele eeprom-inhoud in een string of array te lezen, en daar kun je dan in lezen en zoeken naar hartelust.

edit @hierboven: het gaat over een eeprom niet over een eprom.
Ik dacht dat het bv. gebruikelijk is dat een apparaat, als men op de "uit"knop drukt, zijn hele config en instellingen naar een eeprom schrijft, om bij het inschakelen de toestand van bij het uitschakelen te kunnen hernemen. Toch?

[Bericht gewijzigd door big_fat_mama op vrijdag 12 juni 2020 18:29:45 (14%)

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord
Arco

Special Member

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Alvast hartelijk dank voor de hele rits reacties.

Waar welke data in het ihex staat is bekend.
En idd. het is een eeprom.
Ik ben al bezig geweest om de inhoud te bekijken met HxD hex-editor.

Tot nu toe heb ik alleen ervaring met embedded programmering in C.
Ik maak het niet ingewikkeld, bij pointers moet ik altijd even nadenken.
Daarom graag eenvoudig.
Het hoeft ook geen sjiek of complex tool te worden.

M'n collega had al eens iets gemaakt in C#, maar hij denkt achteraf dat er in andere talen meer voorbeelden of libs te vinden waren.

Op 12 juni 2020 17:17:02 schreef big_fat_mama:

mail met bijlage:
uuencode mijn.doc mijn.doc | mailx -s "hier is mijn doc" jantje @ pierkedop . com

&c &c

Wat bedoel je hiermee?

Arco

Special Member

Als het voor Windows is kan ik daar best een tooltje voor maken eventueel. Bij interesse stuur maar een PM.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
big_fat_mama

Zie Paulinha_B

Dat is een commando dat men zo kan intikken op de commandline, en als alles goed is dan komt er mail aan bij jantje met als "subject" "hier is mijn doc" en als bijlage het bestand mijn.doc

Ik heb nog wat zitten denken op dit verhaal, een mogelijke benadering in de Linux-omgeving zou kunnen zijn:
een "wrapper"-script in bash, dat zelfs desgewenst vanuit cron ("scheduler") of vanuit een task scheduler zoals ansible kan getriggerd worden, en dan volgende doet:
1/ eeprom lezen, in een tempfile schrijven
2/ script in python of bash dat de tempfile leest en er zinnige leesbare informatie uithaalt, en in een leesbaar document wegschrijft
3/ optioneel, het document afdrukken
4/ het document per mail uitsturen
9/ de diverse tempfiles opkuisen

Het meeste werk zou wellicht nog gaan naar het opzetten van de mail relay, installeren van de nodige packages &c.

Bemerk overigens dat in mijn verhaal geen sprake is van een hexdump, hexdump kan handig zijn bij het analyseren van de eeprom-inhoud maar is voor de dagelijkse routine niet nodig. Tenzij dit natuurlijk de enige beschikbare manier is om de eeprom in te lezen.

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord

Op 12 juni 2020 19:17:08 schreef Arco:
Als het voor Windows is kan ik daar best een tooltje voor maken eventueel. Bij interesse stuur maar een PM.

Dank voor het aanbod, maar ik wil proberen zelf iets te maken. Om er van te leren maar ook voor als er naderhand wat aangepast moet worden.

@b_f_m: Hexdump is idd de enige manier. En vergeten te melden, ik werk met een Windows PC.

big_fat_mama

Zie Paulinha_B

Als u wilt knoeien minder geschikte tools gebruiken, dan is dat uw zaak. U doet maar!

Maar als er ruimte is voor alternatieven, denk dan eens aan een RaspBerry - die kan een dergelijk klusje op zijn sokken aan - of aan een virtuele Linux binnen uw Windows-omgeving.

[Bericht gewijzigd door big_fat_mama op vrijdag 12 juni 2020 19:52:42 (50%)

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord

Dit lijkt me een geschikte klus voor python.

even uitzoeken welke bibliotheek je nodig hebt, maar zelfs PDF/Word moet geen probleem zijn.

GMT+1
big_fat_mama

Zie Paulinha_B

Aan de inkomende kant lijken mij zelfs geen extra libraries nodig. Om gelijk-in-een-keer uit te voeren in "dure" formaten kan het aangewezen zijn, maar in de Unix-aanpak worden dat aparte taken.

In mijn ogen is het een essentiële zwakte van de DOS-applicatiearchitectuur dat al het werk in een enkele executable moet gebeuren; de Unixwereld heeft altijd al gestreefd naar een keten van kleine procesjes die elks hun eigen specifieke specialisme bedrijven. Conversie van een .txt naar een .pdf of .doc hoort een apart proces te zijn, los van de "core business" van het uitlezen van een dump van een eeprom.

Met excuus aan onze T/S voor het min of meer kapen van zijn topic :)

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord

Op 12 juni 2020 19:56:21 schreef Progger:
Dit lijkt me een geschikte klus voor python.

Toen ik begon te lezen dacht ik al, zou het al gezegd zijn? Ja dus. Ik zou ook Python pakken. Niet te moeilijk, libraries beschikbaar (ongetwijfeld). Goed onderhoudbaar. Bekende taal, dus iemand anders kan er ook nog aan klussen, ...

C# zou ook nog kunnen. Dan heb je iets handiger een user interface maar wel heel veel meer meuk er omheen.

[Bericht gewijzigd door flipflop op vrijdag 12 juni 2020 20:32:05 (13%)

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
bprosman

Golden Member

Dank voor het aanbod, maar ik wil proberen zelf iets te maken. Om er van te leren maar ook voor als er naderhand wat aangepast moet worden.

Misschien krijg je de source er wel bij :+

In mijn ogen is het een essentiële zwakte van de DOS-applicatiearchitectuur dat al het werk in een enkele executable moet gebeuren;

Onzin, "Pipe" structuren bestaan al sinds het oude DOS :
https://ss64.com/nt/syntax-redirection.html

En ook : COPY mytext.txt > LPT1: werkt prima.

Overigens zou ik het nu (in 2020) ook in Python doen. Als je iets van Basic gewend bent ben je daar zo in thuis.

[Bericht gewijzigd door bprosman op vrijdag 12 juni 2020 21:30:22 (10%)

De jongere generatie loopt veel te vaak zijn PIC achterna.

Eens met big_fat_mama op een Linux machientje doe je dit met een een paar regels script (bash, python, perl, PHP, waar je kronkels maar uitkomen)

Als je een virtueel Linux machientje teveel gedoe vindt en dat is hier eigenlijk wel zo dan kan je met Cygwin al deze tools in Windows krijgen.

code:



 echo hello | hexdump -v  -e '/1  "%_ad#    "' -e '/1
  "%02X hex"' -e '/1 " = %03i dec"' -e '/1 " = %03o oct"' -e '/1 "
= _%c\_\n"'
           0#    68 hex = 104 dec = 150 oct = _h_
           1#    65 hex = 101 dec = 145 oct = _e_
           2#    6C hex = 108 dec = 154 oct = _l_
           3#    6C hex = 108 dec = 154 oct = _l_
           4#    6F hex = 111 dec = 157 oct = _o_
           5#    0A hex = 010 dec = 012 oct = _

Je ihex file kan je heel simpel met hexdump decoderen. Hierboven een voorbeeld hoe je de data 'hello' kan formatteren.
Stel je hebt een file abc.dat met heel veel sensorwaardes, byte 3 wil je hebben, decimaal:
hexdump -n1 -s3 -e '"de temperatuur is %i graden\n"' abc.dat

Een nette email maken van bovenstaande doe je met wat html en het commando 'mail'. Een docx kan ook, maar .docx of .doc is natuurlijk 'zum kotsen', dan liever een pdf als het toch moet.
(Mensen willen liever geen aparte documentjes open)

bprosman

Golden Member

Python is er ook voor Windows en is PowerShell nog bij velen tamelijk onbekend maar zit er toch al een tijdje standaard in. Een VM lijkt me tamelijk overdreven.

https://pypi.org/project/IntelHex/

[Bericht gewijzigd door bprosman op vrijdag 12 juni 2020 22:30:40 (11%)

De jongere generatie loopt veel te vaak zijn PIC achterna.
Sine

Moderator

Inderdaad, waar hebben we het over?

Op een windows doos zijn het ook een paar regels script, ik zie niet wat het OS daar mee te maken heeft.

Stijnos

Golden Member

Je kan dit in vrijwel elke taal doen denk ik. Kies wat je het beste ligt.
Ik vind python leuk, maar ik vind scripting wat foutgevoeliger, maar dat is waarschijnlijk gewoon door minder ervaring.
Ik ben fan van C# voor dit soort tools.
Daarmee ,als je wat ervaring hebt, heb je zo'n tooltje binnen een paar uurtjes gemaakt. Erg makkelijk om ui te maken, file openen, etc. Libs heb je niet nodig, want .net heeft ongeveer alles wel en legio voorbeelden en mensen die al eens eerder tegen een probleem zijn aangelopen op google te vinden

Op 12 juni 2020 22:42:28 schreef Sine:
Inderdaad, waar hebben we het over?

Op een windows doos zijn het ook een paar regels script, ik zie niet wat het OS daar mee te maken heeft.

Niets, maar de handige GNU tooltjes als hexdump, csplit, awk e.d. vind je bij mijn weten niet standaard op Windows.

big_fat_mama

Zie Paulinha_B

waar hebben we het over?

Op een manier geef ik u grif gelijk. Alleen blijkt er een verschil in instelling te zijn tussen "windows"mensen en "unix"mensen. De ene kijkt liever niet onder de motorkap, de andere vindt dat heel normaal. De ene wil alles in een enkele executable doen, liefst zelfs in een enkel bronbestand, de andere smeert de actie uit over zoveel mogelijk verschillende deelprocessen.

Ja, men kan pipen en output-redirecten onder Windows, maar ik zie het zelden of nooit gebeuren. Ja, er bestaat powershell, maar zelden heb ik van iets zo'n "foei"-gevoel gehad - toegegeven, na een slechts oppervlakkige blik. En ik moet er de eerste entoesiaste gebruiker nog van ontmoeten, het beste dat ik al heb gehoord kwam zowat neer op "ja, men kan daarmee wel iets gedaan krijgen" ...

Kortom, alles wat men in Unix kan doen kan men ook in Windows, en vice versa. Maar in de praktijk zie ik twee redelijk tegenovergestelde instellingen en "common practice"s.

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord
Arco

Special Member

Pipen/redirect is iets uit het dos tijdperk wat nu nauwelijks/niet meer wordt gebruikt door fatsoenlijke programmeurs... ;)
(er is totaal geen noodzaak meer toe)

De ene kijkt liever niet onder de motorkap, de andere vindt dat heel normaal.

Ook bij Windows vind je genoeg onder de motorkap. Het rommelen met een commandprompt in Linux door eindgebruikers is niet meer van deze tijd...
Het kost maar weinig moeite om een 'programma op maat' met fatsoenlijke userinterface te maken.

Ik heb al heel veel Windows software gemaakt, en dat werkt (bijna altijd) snel en zonder enig probleem.
(o.a. software voor kritische toepassingen als meldcentrales met tot honderden telefoonlijnen erop)

Als er in Windows al problemen zijn, dan zijn die bijna altijd terug te voeren op brakke third-party drivers, of brak geschreven software.
De maandagmorgenversies van Windows uitgesloten dan... ;) (NT3.5, ME, Vista, Windows 8...)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com