Visita 8 mensajes - 1 mediante 8 (de 25 total)
  • Autor
    Mensajes
  • #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
    carlo

    #24426
    theremino
    Llave maestra

    Todas 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.

    #24428
    cpiga
    Partícipe

    Compatibilidad 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
    carlo

    #24430
    cpiga
    Partícipe

    Otra cosa… pero el archivo “Theremino1” ¿Dónde lo encuentro en el sistema de archivos??

    #24432
    cpiga
    Partícipe

    me 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 todos

    #24434
    cpiga
    Partícipe

    Escribí 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?

    • Esta respuesta se modificó 3 años, 11 meses hace por cpiga.
    • Esta respuesta se modificó 3 años, 11 meses hace por cpiga.
    #24437
    cpiga
    Partícipe

    Esta 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….

    #24439
    theremino
    Llave maestra

    En 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#easyslot

    y aquí también:
    https://www.theremino.com/downloads/foundations#mmf

    Pero 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.

Visita 8 mensajes - 1 mediante 8 (de 25 total)
  • Usted debe ser conectado para responder a este tema.