Commencer
Bienvenue dans le guide du SDK Home I/O.
Ce guide décrit ce qu’est le SDK, comment il fonctionne et où trouver des informations supplémentaires.
Le SDK Home I/O est composé d’une bibliothèque .NET 2.0 (EngineIO.dll), de la documentation correspondante,
d’outils et de quelques exemples pour vous aider à démarrer.
Cette bibliothèque permet à du code personnalisé d’accéder aux points d’E/S (Entrées/Sorties) de la simulation.
Fonctionnement¶
La communication inter-processus (IPC) s’effectue à travers un fichier de mémoire partagée (EngineIO.dll).
La mémoire est divisée en trois groupes : Entrées (Inputs), Sorties (Outputs) et Mémoires (Memories).
Ces groupes sont une convention que nous avons définie, en partant du point de vue d’un contrôleur.
Chaque point d’E/S — qu’il s’agisse d’une entrée, d’une sortie ou d’une mémoire — possède une adresse mémoire unique
, un nom et une valeur.
Points importants à considérer lors de l’utilisation de la bibliothèque EngineIO.dll :
- La classe MemoryMap est un Singleton, ce qui signifie qu’une seule instance peut exister à la fois. Cette instance représente une copie en cache du fichier mémoire partagé.
- La méthode MemoryMap.Instance.Update() est responsable de la synchronisation entre votre copie en cache et le fichier mémoire partagé. Cette méthode doit être appelée chaque fois que vous souhaitez accéder aux dernières valeurs d’E/S ou recevoir des notifications d’événements.
Exemple simple montrant comment allumer et éteindre les lumières du salon à l’aide de C#.
using System;
using System.Threading;
using EngineIO;
namespace EngineIO.Samples
{
class Program
{
//In this sample we are switching the living room light on and off 10 times.
static void Main(string[] args)
{
//We are using a MemoryBit which we get from the MemoryMap.
//You can find all the memory addresses at the Memory Addresses page.
MemoryBit livingRoomLight = MemoryMap.Instance.GetBit(0, MemoryType.Output);
for (int i = 0; i < 10; i++)
{
livingRoomLight.Value = !livingRoomLight.Value;
//When using a memory value before calling the Update method we are using a cached value.
Console.WriteLine("Light is on? " + livingRoomLight.Value);
//Calling the Update method will write the livingRoomLight.Value to the memory map.
MemoryMap.Instance.Update();
Thread.Sleep(1000);
}
//When we no longer need the MemoryMap we should call the Dispose method to release all the allocated resources.
MemoryMap.Instance.Dispose();
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}
Chaque groupe (Entrées, Sorties et Mémoires) prend en charge les types de données suivants :
| Type de donnée | Plage de valeurs | Remarques |
|---|---|---|
| Bit | True or False | |
| Byte | 0 to 255 | |
| Short | -3,768 to 32,767 | |
| Int | -2,147,483,648 to 2,147,483,647 | |
| Long | 9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | |
| Float | -3.403 × 1038 to 3.403 × 1038 | |
| Double | -1.798 × 10 308 to 1.798 × 10308 | |
| String | 64 UNICODE Characters | |
| DateTime | 00:00:00, January 1, 0001 through 23:59:59, December 31, 9999 | Représente un instant dans le temps, généralement exprimé sous forme de date et d’heure. |
| TimeSpan | -10675199.02:48:05.4775808 to 10675199.02:48:05.4775807 | Représente un intervalle de temps exprimé en jours, heures, minutes, secondes et fractions de seconde (positif ou négatif). |
Outil Engine I/O Explorer¶
Vous trouverez l’outil Engine I/O Explorer à l’intérieur du fichier ZIP du SDK. Cet outil vous permet d’explorer facilement les adresses mémoire, noms, types et valeurs des points d’E/S. C’est un outil très utile lors des phases de développement.
Informations supplémentaires¶
Veuillez consulter les exemples inclus dans le SDK — ils montrent de bonnes pratiques sur l’utilisation de la bibliothèque EngineIO.dll.