দেখার 8 পোস্ট - 1 মাধ্যমে 8 (এর 25 মোট)
  • লেখক
    পোস্ট
  • #24424
    cpiga
    অংশগ্রাহক

    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 “Theremino1”
    আমি “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
    cpiga
    অংশগ্রাহক

    Matlab supporta i 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.
    Ciao
    Carlo

    #24430
    cpiga
    অংশগ্রাহক

    Un’altra cosa… ma il file “theremino1” dove lo trovo nel file system?

    #24432
    cpiga
    অংশগ্রাহক

    Mi 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…
    হ্যালো সবাই

    #24434
    cpiga
    অংশগ্রাহক

    Ho 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?

    • এই উত্তর পরিবর্তন করা হয়েছে 3 বছর, 11 মাসের পূর্বে দ্বারা cpiga.
    • এই উত্তর পরিবর্তন করা হয়েছে 3 বছর, 11 মাসের পূর্বে দ্বারা cpiga.
    #24437
    cpiga
    অংশগ্রাহক

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

    #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 মোট)
  • আপনি এই বিষয়ে উত্তর দিতে লগ ইন করতে হবে.