-
AuteurDes postes
-
10 novembre 2022 à 16:28 #24424
cpiga
ParticipantAvez-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
Carlo10 novembre 2022 à 16:45 #24426theremino
KeymasterToutes 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.
10 novembre 2022 à 16:55 #24428cpiga
ParticipantPrise 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
Carlo10 novembre 2022 à 16:57 #24430cpiga
ParticipantAutre chose… mais le dossier “theremino1” où puis-je le trouver dans le système de fichiers?
10 novembre 2022 à 18:13 #24432cpiga
Participantil 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 à tous10 novembre 2022 à 19:22 #24434cpiga
ParticipantJ'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?
10 novembre 2022 à 19:57 #24437cpiga
ParticipantCeci 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….
10 novembre 2022 à 21:27 #24439theremino
KeymasterSur 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#easyslotEt ici aussi:
https://www.theremino.com/downloads/foundations#mmfMais 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. -
AuteurDes postes
- Vous devez être connecté pour répondre à ce sujet.