-
AutorMensajes
-
10 noviembre 2022 a 16:28 #24424
cpiga
Partícipe¿Tiene alguna idea de si es posible adquirir la entrada de un sismógrafo de theremino a 3 canal en matlab? No puedo encontrar ningún ejemplo de código para descubrir cómo comenzar a abordar el problema..
Gracias de antemano a quien me pueda ayudar.
saludos
carlo10 noviembre 2022 a 16:45 #24426theremino
Llave maestraTodas las aplicaciones theremini escriben los valores en las Slots, entonces el sismógrafo también lo hace.
Las ranuras son valores flotantes (4 byte) en el archivo mapeado en memoria que se llama “Theremino1”
yo “Archivo mapeado en memoria” son archivos del sistema de Windows y todas sus particularidades están bien explicadas por Microsoft.Entonces a estas alturas el problema no es tanto nuestro (del sistema theremino) madre de Mathlab.
Si MathLab puede leer Windows MemoryMappedFiles, entonces está listo para comenzar.
Si no puede leerlos, entonces no podemos hacer nada para ayudarlo..Lo siento, pero no puedo contarte más sobre MathLab., solo usamos aplicaciones OpenSource y MathLab no es.
10 noviembre 2022 a 16:55 #24428cpiga
PartícipeCompatibilidad con Matlab y MemoryMappedFile.
Los valores flotantes tal como están ordenados en el archivo? Secuencialmente desde la ranura 1 en? Podría escribir una serie de funciones (para compartir) para hacer el trabajo más limpio y ordenado…
De acuerdo, Matlab no es de código abierto, pero hay clones de código abierto que pueden compartir código (octava).
Entonces si entiendo bien.
Leo los primeros 4 bytes del archivo asignado y tengo la señal en la ranura 1.
leo los segundos 4 byte del archivo asignado y tengo la señal en la ranura 2.
Leo a terceros 4 byte del archivo asignado y tengo la señal en la ranura 3,
Muchas gracias por el apoyo.
Ciao
carlo10 noviembre 2022 a 16:57 #24430cpiga
PartícipeOtra cosa… pero el archivo “Theremino1” ¿Dónde lo encuentro en el sistema de archivos??
10 noviembre 2022 a 18:13 #24432cpiga
Partícipeme parece entender que “Theremino1” es un archivo mapeado de memoria no persistente. Entonces no coincide con un archivo específico en el sistema de archivos. Matlab, por otro lado, solo admite archivos mapeados en memoria persistente. Entonces, la única solución que se me ocurre es escribir un pequeño software en C# que acceda al archivo asignado a la memoria no persistente y lo copie en un archivo asignado a la memoria persistente en el sistema de archivos en un bucle infinito al que accede Matlab..
Más consejos sobre otros, mas elegante, las soluciones son bienvenidas…
Hola a todos10 noviembre 2022 a 19:22 #24434cpiga
PartícipeEscribí esto pero no parece funcionar.:
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."); } } }Algunas sugerencias para arreglarlo?
10 noviembre 2022 a 19:57 #24437cpiga
PartícipeEsta es otra versión:
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."); } } }Pero Matlab solo ve el contenido del archivo de ceros que escribí en el sistema de archivos….
10 noviembre 2022 a 21:27 #24439theremino
Llave maestraEn nuestro sitio, hemos publicado muchos ejemplos de lectura y escritura de MemoryMappedFile en varios idiomas, incluido C++
Encuéntralos aquí:
https://www.theremino.com/downloads/foundations#easysloty aquí también:
https://www.theremino.com/downloads/foundations#mmfPero también hay otra cosa que debes considerar:
1) Los MemoryMappedFiles a los que acceden las aplicaciones a 32 los bits no son los mismos a los que accede la aplicación 64 poco (desorden de Windows y SysWow64, etc.…)
2) Tenemos que hacer que todas nuestras aplicaciones sean 32 poco de lo contrario tendríamos que darlos en dos versiones, pero peor aún, nadie con tabletas y mini pc podría usarlos.
3) En consecuencia, su aplicación tiene que compilar un 32 un poco de lo contrario, no ve los MMF correctos, si los crea sobre la marcha y solo lee ceros. -
AutorMensajes
- Usted debe ser conectado para responder a este tema.