-
AutorePost
-
10 Novembre 2022 alle 16:28 #24424
cpiga
PartecipanteAvete idea se sia possibile acquisire l’input di un sismografo theremino a 3 canale su Matlab? Non riesco a trovare esempi di codice per capire come iniziare ad affrintare il problema.
Grazie anticipatamente a chiunque mi voglia dare una mano.
Saluti
Carlo10 Novembre 2022 alle 16:45 #24426theremino
Amministratore del forumTutte le applicazioni thereminiche scrivono i valori negli Slot, quindi anche il sismografo lo fa.
Gli Slot sono valori Float (4 byte) nel file mappato in memoria che si chiama “Theremino1”
I “Memory mapped file” sono file del sistema Windows e tutte le loro particolarità sono ben spiegate da Microsoft.Per cui a questo punto il problema non è tanto nostro (del sistema theremino) ma di Mathlab.
Se MathLab può leggere i MemoryMappedFile di Windows allora sei a posto.
Se non li può leggere allora noi non possiamo fare nulla per aiutarlo.Mi spiace ma non so dirti altro su MathLab, noi utilizziamo solo applicazioni OpenSource e MathLab non lo è.
10 Novembre 2022 alle 16:55 #24428cpiga
PartecipanteMatlab supporta i MemoryMappedFile.
I valori float come sono ordinati nel file? Sequenzialmente dallo slot 1 in poi? Potrei scrivere una serie di funzioni (da condividere) per rendere più pulito e ordinato il lavoro…
Ok, Matlab non è opensource ma esistono cloni opensource che possono condividere il codice (octave).
Quindi se ho capito bene.
Leggo i primi 4byte del mapped file ed ho il segnale sullo slot1.
Leggo i secondi 4 byte del mapped file ed ho il segnale sullo slot 2.
Leggo i terzi 4 byte del mapped file ed ho il segnale sullo slot 3,
Grazie mille per il sostegno.
Ciao
Carlo10 Novembre 2022 alle 16:57 #24430cpiga
PartecipanteUn’altra cosa… ma il file “theremino1” dove lo trovo nel file system?
10 Novembre 2022 alle 18:13 #24432cpiga
PartecipanteMi sembra di aver capito che “Theremino1” sia un non-persistent memory mapped file. Quindi non corrisponde ad uno specifico file nel file system. Matlab invece supporta solo i persistent memory mapped file. Quindi l’unica soluzione che mi viene in mente è scrivere un piccolo software in c# che acceda al non-persistent memory mapped file e lo copi su un persistent memory mapped file sul file sytem in un loop infinito a cui accede Matlab.
Altri suggerimenti su altre, più eleganti, soluzioni sono graditi…
Ciao a tutti10 Novembre 2022 alle 19:22 #24434cpiga
PartecipanteHo scritto questo ma non sembra funzionare:
using System; using System.IO; using System.IO.MemoryMappedFiles; using System.Threading; class Program { // Process B: static void Main(string[] args) { try { using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting("Theremino1")) { var mmf_persistent = MemoryMappedFile.CreateFromFile(@"Theremino1_persist", FileMode.Open); while (true) { mmf_persistent = mmf; } } } catch (FileNotFoundException) { Console.WriteLine("Memory-mapped file does not exist. Run HAL first."); } } }
Qualche suggerimento per metterlo apposto?
10 Novembre 2022 alle 19:57 #24437cpiga
PartecipanteQuesta un’altra versione:
using System; using System.IO; using System.IO.MemoryMappedFiles; using System.Threading; class Program { // Process B: static void Main(string[] args) { try { using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting("Theremino1")) { var mmf_persistent = MemoryMappedFile.CreateFromFile(@"Theremino1_persist", FileMode.Open, "Thermino1_persist"); byte[] buffer = new byte[4000]; int bytesRead; using (MemoryMappedViewStream stream_persist = mmf.CreateViewStream()) { BinaryWriter writer = new BinaryWriter(stream_persist); using (MemoryMappedViewStream stream = mmf_persistent.CreateViewStream()) { BinaryReader reader = new BinaryReader(stream); while (true) { bytesRead = reader.Read(buffer, 0, buffer.Length); writer.Write(buffer, 0, bytesRead); } } } } } catch (FileNotFoundException) { Console.WriteLine("Memory-mapped file does not exist. Run HAL first."); } } }
Ma Matlab vede sempre e solo il contenuto del file di zeri che ho scritto sul file system….
10 Novembre 2022 alle 21:27 #24439theremino
Amministratore del forumSul nostro sito abbiamo pubblicato molti esempi di lettura e scrittura dei MemoryMappedFile in vari linguaggi tra cui anche il C++
Li trovi qui:
https://www.theremino.com/downloads/foundations#easyslotE anche qui:
https://www.theremino.com/downloads/foundations#mmfMa c’è anche un’altra cosa che devi considerare:
1) I MemoryMappedFile cui accedono le app a 32 bit non sono gli stessi a cui accedono la app s 64 bit (casini di Windows e di SysWow64 ecc…)
2) Noi dobbiamo fare tutte le nostre applicazioni a 32 bit altrimenti dovremmo darle in due versioni, ma peggio ancora nessuno con i tablet e i mini pc potrebbe usarle.
3) Di conseguenza la tua app devi compilarla a 32 bit altrimenti non vede i MMF giusti, se li crea lei al volo e legge solo zeri. -
AutorePost
- Devi essere connesso per rispondere a questo topic.