lognplot - logging and plotting data from micro's Tracing data on a modern laptop
Goed Evening, iedereen. Glade te zien nogal wat mensen rond. Deze taak is van een log- en plot-tool die ik in de vorige maand gecreëerd heb. De content van deze presentatie is een beetje, wie ik ben, wat dit is. En dan hoop ik dat ik wat demo's gegeven heb over wat ik heb gedaan. Dus, wie ben ik? Ja, ik werk nu op Demcon als een software-engineer. Ik gebruik programma's, Python, C, en Rust. En ik heb ook andere projecten gewerkt, zoals PPCI en Rust-Python. En deze presentatie heb ik aan het presenteren van de log- en plot-tool. Dat vind ik goed. Dus wat is deze taak? Dit zal een beetje een weirde taak zijn. Het is een beetje fijn, maar wat ik wilde maken was een tool die je kan visualiseren data van systemen. En dit met live data en ook zoombaar. Dus laten we eerst beginnen met een beetje motivatie. Waarom heb ik dit gedaan? Zoals ik dit morning heb, bijna alle taak hier. De motivatie is omdat je kan. En voor mij is dat ook zo, het is genoeg. Maar er is meer motivatie hier. Dus als je de bug-systemen hebt, is er eigenlijk twee typen van de bugging. Je gebruikt de GDB en je begint het programma en je stopt en steppt je programma, inspect verbaals, maak verbaalwatches en het is allemaal heel leuk en de tooling is ook heel goed. Maar het is niet altijd werk. Als je een controler hebt, bijvoorbeeld een motion state, wil je de programma niet stoppen in de middel, want de state zal de ruimte verblijven, die is niet goed. Dus we kunnen niet de programma niet brengen. Dus wat doen we? Bijvoorbeeld, je kunt printf of je een LED kan toggel. Of je kan verbaalsverbaals kunnen monitoren. En ik denk dat we beter kunnen doen in deze gebied. Dus wat is de systemverbaalsverbaals gevolgd? Het inspecteert de system in de test. We hebben de hele machine gebouwd en we doen een test met het. En typisch met deze soort set-ups is dat het testen is geïnspansief. De tijd is limit. Je hebt een lab. Je bent niet de enige die de lab heeft. De test zegt tijd, dus misschien zegt het 1 uur. Dus in ieder geval heb je 8 attempten. Nou, dat is niet veel. Ook de bedrijven zijn limit.  Elektriciteit, water, wat je kunt gebruiken, het is niet infinite. Dan kan je je test niet doubled nog steeds. Een ander probleem met het systemverbaalsverbaalsverbaalsverbaalsverbaalsverbaalsverbaalsvermaalsverbaalsverband is. shortly test. Je runde de test, je runde hem weer, precies hetzelfde.SLU Staff, je runde hem weer, je runde het of meer, Michelle. Valuele resultaten. So van deWork 2 is... ..sim Conc homework inatomnoepen met de worship of meer. Je doet de test eens en je hebt alle data die je nodig hebt. Sommige van mijn eigen ervaring hier met de traging van data. Ik heb in de laatste jaren several tragingutiliteiten in Matlab, in C-Sharp, veel scripten in Python met verschillende libraries. En ik was niet, ja, echt blij met dit resultaat. De meeste van deze libraries zijn geïnteresseerd om smooth grap te creëren voor publicaties, die dan niet handig te gebruiken in een refreshing manier of in een live data manier. Wel, misschien is er al een existente project, er zijn veel projecten. Ik heb hier een aantal, maar er zijn veel meer. En na deze talk, ik hoop dat ik je feedback van de project van MIST heb gegeven. Ik wil een list maken in de README, waarin ik veel alternatieve alternaties oplopen om data te visualiseren van een live systeem. KST-plot uit KDE, dat is heel goed. Dat is heel gematuurd. Je kunt heel grote CSV-files loaden, maar het werkt op de CSV-files, dus je moet eerst de CSV-file creëren. Er is nog een project, PlotJugler. Het ziet er ervan uit. Ik moet het meer proberen. Sigrock is een echt cool user interface, maar het is echt geïnteresseerd om data te krijgen van logic analyzers. Er zijn nog meer tools, GTKWave, maar het is meer voor digital logic. In dat gebied is het natuurlijk de ROS operating system, het R2T, ook een plottige tool, maar dan ben je opgemaakt met ROS. Er is ook een tool STM Studio, waarin je een STM processor te monitoren. En dan is er natuurlijk een hele sleutel van webbase tools, maar ik wil het op desktop runnen. Dat is een beetje motivatie. Ik wil veel, maar ik wil iets anders. Wat wil ik eigenlijk? Eerst wil ik een desktop-applicatie. Ik wil het online in de lab doen, en ik wil niet wat cloud willen doen.  Natuurlijk heb je data en cloud is goed, omdat je je data kunt shareen, maar nu wil ik het op mijn laptop houden. Ik wil zoom en pan en appendata kunnen zoomen. Ook log het op een file, preferably niet csv, maar ja, de eerste prototype zal misschien csv zijn. En ik wil data van veel verschillende sources krijgen. Normaal heb je een systeem met veel verschillende processors. Ik ga nu naar het programma dat ik heb gecreëerd om dit te doen, een beetje over de design en hoe het gemaakt is. Het toplevel is echt een simpel idee. We hebben een plottool en we hebben een TCP connectie, en we hebben verschillende systemen. We hebben een PC en een microcontroller. En we senden de data van de microcontroller en de PLC-systeem naar het plottool. Oké. Zoals gebruik, ja, iets zoals dit. We hebben een microcontroller en we hebben een Python script interfacing met deze microcontroller. De Python script zal data over TCP senden. En daarnaast hebben we een oscilloscope en die is ook interfacing met, bijvoorbeeld de FISA bus of, ja, een Python library die je kunt communiceren met de oscilloscope. En dit zal ook de data senden naar het plottool. Een noten is dat de dataaero is een directie. En dit maakt het voor wat interessante dingen. Bijvoorbeeld, we kunnen de Python script interfacing met een microcontroller en streamen dezelfde data naar het plottool. En daarnaast, we kunnen de file van het plottool en weer feeden via een TCP-connectie naar het plottool. Dus dan heb je een soort van recordingsmechanisme van wat er gebeurt. Als je dit met al je dataa doet, kan je het replayen. Dus nu voor het eerst demo. Dus dit demo heb ik gecreëerd met een GUI met rust en gtk, dat is precies dit concept. Dit is een demo van een R-record, een tool die de microfoon van deze laptop loopt en streamt het naar standaard output. En dan piep ik het in een script, waarin we deze binary format en het via TCP senden naar het plottool. Als ik dit begin, heb ik een print van de data. En in dit is de rusttool en ik kan deze data dragen hier en je ziet de data volgen in. Ik kan ook zoomen naar de laatste 30 seconden of de laatste 10 seconden of zelfs de laatste seconde, dat is leuk.  Als ik dit doe, kan ik misschien wat nois maken. Sommige data, oké, dat is goed. Je kunt ook dit data dragen en je kunt dit data zoomen met het scrollen in. Dus dit is handy. Dit is goed. We kunnen ook de CPU usage van dit programma checken. Het is hier. Dus we zien dat, wanneer het ingestieerd is, een fair amount of data, de usage is niet zo groot. Maar je ziet de memorie increasing, maar ja, dat is wat je verwacht. Het is audio data, het is niet opgebreid met wat. Het is goed. Ik zal dit stoppen voor nu. Ik zal het niet doen, maar... Dus wat is de design van dit log-tool? Het primaire idee is om een gebruikbare library te hebben, die in andere applicaties kan zijn om deze plotting functie te hebben en een showcase tool te hebben. Wat je gewoon zag, was de showcase tool. Het showcase is... Dit is een mooie graf en het werkt... Ja, dit is wat het kan doen. Dus de graf van het programma dat je in je eigen applicatie kunt inkleden. Dat is de design. Dus zoals je hier kunt zien, er is een log- en plot-tool en de library zal er verschillende dingen zijn. Dat is de graf. Een charting functie of een charting functie waarin je de graf draagt. Dan een TSDB, dat staat voor Time Series Database waarin je de data in zoek een vorm dat je kunt zoeken en pennen. En ook een TCP server waarin je de data kan krijgen. Noten dat de erro's de pendenties indiceren. Dus je kunt de TCP server en de Time Series Database gebruiken. Dus, er zijn verschillende parten van deze log- en plot-librer. Ik zal nu vooral zoomen naar de Time Series Database. Hoe dat werkt. Een sitenote. Time Series Database is heel interessant. Het is een nieuwe schema van Database, speciaal voor Time Series. Wat ik heb gemaakt was niet echt een Time Series Database maar de ideeën zijn simpel. Er zijn property's van de Time Series Database. Ik heb er een aantal oplossingen gemaakt. Data kan alleen appended. Dus ik ga nu een beetje over hoe deze signal data is in memorie. Wat ik deed was een soort B3 en groepen de samples in batchen en meten meten data voor elk batch.  Wat betekent dat? Dat betekent dat we de data in, als separate samples. We splitten het in batchen van een aantal samples. Voor elk batch hebben we een set meten data. Zoals als de eerste sample was de laatste sample gekregen. Wat was de minimaal value? Wat was de maximaal value? Wat was de standaard deviation? We houden van dat voor elk batch. We organiseren deze batchen in een B3. Dat is een 3-structure met groepen, meten meten en meten meten. De samples zijn in meten meten. En elk meten meten meten data over de samples maar meten meten meten data. Wat kunnen we nu doen als we deze data visualiseren? Als we uitzoomen we alleen gaan naar een beurt we zullen niet naar de raw samples gaan. Maar als we uitzoomen gaan we alleen naar een halfweg de tree. Dus als we we draaien de plot, we draaien de access en we draaien de curves, op vergelijking van onze zoom-levels en we draaien de legenden. Wat betekent dit? In zoom-out-vorm, als je in de plot zoekt, zie je de min, max, min en standard deviations, zoals deze plek hier. Dus je ziet de min lijn in de middel en dan de transparant region die de min en max van deze signal uitstek. En als je remembert van de treestructure, de vorige graf was gemaakt van intermediate-levelnoten, dus niet echt zoekt naar de leafnoten. Als we zoomen in, zie je individuele data points en als je iets ziet zoals dit, dan zijn we echt op de leafnoten, maar alleen op de specifieke deel die je zoekt in de data. Dit is in de nutshell hoe deze zoom-functionale werkt. Dus, zoals ik al zei, ik demoed de eerste demo met de rust-implementatie, dus er zijn eigenlijk twee implementaties. Eén in Python en één in rust. Dus waarom heb ik het zo gedaan? Python is handig. Als je wilt proberen uit een nieuwe idee, Python is ideal omdat het heel snel werkt. Maar de performance is misschien niet zo goed. Dus dat is waarom ik ook een rustversie gemaakt heb, waarin het compa is echt een machinecode. Voordat de rustversie gemaakt is op GTK en de Python op PyQ, maar het is goed om twee redundant implementaties te proberen.  In de rustversie gebruik ik TokioRustCrate, dat is een networking-crate om TCP-connecties te handelen, en ook een C-wrapper rond de rustlibrer, zodat je deze van C-code kan gebruiken. Je kunt het linken naar deze library, om bijvoorbeeld te senden data van je programma. Dus ik demoer nu andere dingen. We hebben al de audio-signal gezien, dat is leuk. Maar wat ik ook snel op deze programma editte, was de rendering tijd van het graf als een signal, want we kunnen renderen signalen. In deze graf zie je de rendering tijd van deze plot. Dus de rendering tijd is altijd rond 4 milliseconds. Zo ja, je kunt ook zoeken op deze. Een andere demo dat ik heb, dit is een batch download demo. Je hebt een recording gemaakt en wil gewoon kijken naar deze data en kijken wat er gebeurd is. Je kunt een Python script maken, waarin we de SQLite database, CSV file, TXT file, whatever je hebt, en senden het naar deze tool. En deze script zal 10 miljoen samples naar de plotting tool senden. Het zal wat tijd nemen, maar niet zo lang. Dus we kunnen het gelaten. En dan kan je deze data zoeken. Dus deze zijn 10 miljoen data points. En dan kan je het zoeken als de vorige. En dit is een andere demo, waarin het geluid wordt gemaakt. En het zal twee traces senden. Je kan ook... ...dragen verschillende traces in het programma. Dus dit is de Rust versie. Ik kan ook de Python versie demoen. Dus dit is de Python with PyQ-versie. Als je het preferer bent om Python te gebruiken, kan je deze gebruiken. Je kunt hier... je kunt hier met verschillende views switchen. Ik heb deze gevoel dat je er verschillende plots kan hebben. Maar ik zal nu een plot gebruiken. En je kunt hier ook zoeken. En ik kan de... Ik kan dezelfde demo als vorige en de data senden niet naar het Rust programma, maar naar het Python programma. En hier kan je ook benefiten van de schrijven, waarin je de hardware separate van de GUI gaat visualiseren. Want nu heb ik dezelfde signalen, maar in deze Python versie. En zoals je kunt zien, ik implementeerde in de Python versie al iets extra's, dat deze color indikert dat deze signalen soortig live zijn. En de data was arrived recent. En dan kan je ze ook dragen hier. 