Affichage d'un 8 des postes - 1 par 8 (de 25 total)
  • Auteur
    Des postes
  • #24424
    cpiga
    Participant

    Avez-vous une idée s'il est possible d'acquérir l'entrée d'un sismographe theremino a 3 canal sur Matlab? Je ne trouve aucun exemple de code pour comprendre comment commencer à résoudre le problème.
    Merci d'avance à tous ceux qui pourront m'aider.
    Salut
    Carlo

    #24426
    theremino
    Keymaster

    Toutes les applications theremini écrivent les valeurs dans les Slots, donc le sismographe aussi.
    Les emplacements sont des valeurs flottantes (4 octet) dans le fichier mappé en mémoire appelé “Theremino1”
    je “Fichier mappé en mémoire” ce sont des fichiers système Windows et toutes leurs particularités sont bien expliquées par Microsoft.

    Donc, à ce stade, le problème n'est pas tellement le nôtre (du système theremino) ma di Mathlab.
    Si MathLab peut lire Windows MemoryMappedFiles, vous êtes prêt à partir.
    S'il ne peut pas les lire, nous ne pouvons rien faire pour l'aider.

    Je suis désolé mais je ne peux pas vous en dire plus sur MathLab, nous n'utilisons que des applications OpenSource et MathLab n'est pas.

    #24428
    cpiga
    Participant

    Prise en charge de Matlab dans MemoryMappedFile.
    Les valeurs flottantes telles qu'elles sont triées dans le fichier? Séquentiellement à partir de la fente 1 sur? Je pourrais écrire un certain nombre de fonctions (partager) pour rendre le travail plus propre et plus ordonné…
    D'accord, Matlab n'est pas open source mais il existe des clones open source qui peuvent partager du code (octave).
    Donc si j'ai bien compris.
    J'ai lu les 4 premiers octets du fichier mappé et j'ai le signal sur slot1.
    je lis les secondes 4 octet du fichier mappé et j'ai le signal sur le slot 2.
    Je lis des tiers 4 octet du fichier mappé et j'ai le signal sur le slot 3,
    Merci beaucoup pour le soutien.
    Ciao
    Carlo

    #24430
    cpiga
    Participant

    Autre chose… mais le dossier “theremino1” où puis-je le trouver dans le système de fichiers?

    #24432
    cpiga
    Participant

    il me semble comprendre que “Theremino1” est un fichier mappé en mémoire non persistant. Il ne correspond donc pas à un fichier spécifique dans le système de fichiers. Matlab, d'autre part, ne prend en charge que les fichiers mappés en mémoire persistante. Donc, la seule solution à laquelle je peux penser est d'écrire un petit logiciel en c # qui accède au fichier mappé en mémoire non persistante et le copie dans un fichier mappé en mémoire persistante sur le système de fichiers dans une boucle infinie accessible par Matlab.
    Plus de conseils sur d'autres, plus élégant, les solutions sont les bienvenues…
    Bonjour à tous

    #24434
    cpiga
    Participant

    J'ai écrit ceci mais ça ne semble pas fonctionner:

    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.");
            }
        }
    }

    Quelques suggestions pour y remédier?

    • Cette réponse a été modifiée 3 années, 11 mois depuis par cpiga.
    • Cette réponse a été modifiée 3 années, 11 mois depuis par cpiga.
    #24437
    cpiga
    Participant

    Ceci est une autre version:

    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.");
            }
        }
    }

    Mais Matlab ne voit que le contenu du fichier de zéros que j'ai écrit dans le système de fichiers….

    #24439
    theremino
    Keymaster

    Sur notre site, nous avons publié de nombreux exemples de lecture et d'écriture de MemoryMappedFile dans divers langages dont C++

    Retrouvez-les ici:
    https://www.theremino.com/downloads/foundations#easyslot

    Et ici aussi:
    https://www.theremino.com/downloads/foundations#mmf

    Mais il y a aussi une autre chose que vous devez considérer:
    1) Les MemoryMappedFiles accessibles par les applications a 32 les bits ne sont pas les mêmes que ceux auxquels accèdent les applications 64 bit (désordre de Windows et SysWow64 etc…)
    2) Nous devons faire de toutes nos applications un 32 peu sinon il faudrait les donner en deux versions, mais pire encore, personne avec des tablettes et un mini pc ne pourrait les utiliser.
    3) Par conséquent, votre application doit compiler un 32 peu sinon il ne voit pas les bons MMF, si elle les crée à la volée et ne lit que des zéros.

Affichage d'un 8 des postes - 1 par 8 (de 25 total)
  • Vous devez être connecté pour répondre à ce sujet.