Просмотр 8 сообщений - 1 через 8 (из 25 Всего)
  • автор
    Сообщений
  • #24424
    cпига
    участник

    Avete 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.
    Приветствия
    Carlo

    #24426
    theremino
    Keymaster

    Tutte le applicazioni thereminiche scrivono i valori negli Slot, quindi anche il sismografo lo fa.
    Gli Slot sono valori Float (4 байт) nel file mappato in memoria che si chiama “Термино1”
    я “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 è.

    #24428
    cпига
    участник

    Поддержка Matlab в MemoryMappedFile.
    I valori float come sono ordinati nel file? Sequenzialmente dallo slot 1 на? Potrei scrivere una serie di funzioni (da condividere) per rendere più pulito e ordinato il lavoro…
    Хорошо, 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.
    Чао
    Carlo

    #24430
    cпига
    участник

    Еще одна вещь… но файл “theremino1” dove lo trovo nel file system?

    #24432
    cпига
    участник

    кажется, я понимаю, что “Термино1” 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…
    Привет всем

    #24434
    cпига
    участник

    Я написал это, но это не работает:

    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?

    • Этот ответ был изменен 3 лет, 11 месяцы тому назад от cпига.
    • Этот ответ был изменен 3 лет, 11 месяцы тому назад от cпига.
    #24437
    cпига
    участник

    Это другая версия:

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

    #24439
    theremino
    Keymaster

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

    E anche qui:
    https://www.theremino.com/downloads/foundations#mmf

    Ma 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 немного (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.

Просмотр 8 сообщений - 1 через 8 (из 25 Всего)
  • Вы должны войти в систему, чтобы ответить на эту тему.