anyKode Marilou
ContentsIndexHome
PreviousUpNext
Device::Message (M32, void *, M32, void *, M32, M32 *, M32 *, void *)

Message envoie un message à la device. Le système MODA fonctionne par émission / réception de messages entre le programme utilisateur et le moteur nmpPhysics qui simule, entre autre, les équipements embarqués.

C++
M32 Message(M32 Message, void * pDataIn, M32 iDataInByteSize, void * pDataOut, M32 iDataOutByteSize, M32 * pReturnedByteSize, M32 * piDeviceResponse, void * pReserved);
Parameters 
Description 
M32 Message 
[in] Message à envoyer à la device 
void * pDataIn 
[in] Pointeur sur les donnée à transmettre à la device, peut être NULL 
M32 iDataInByteSize 
[in] Taille des données transmises en octet(s). Si la device juge que les données transmises sont trop courtes, elle répond MODA_EARGUMENT_OUTOFMEMORY. Par exemple une consigne moteur est codée sur un flottant (float) de 4 octets ... 
void * pDataOut 
[out] Buffer de reception de la réponse de la device, peut être NULL 
M32 iDataOutByteSize 
[out] Taille du buffer de réception
Le buffer de réception doit être de taille suffisante: Consulter la documentation du message pour connaître la taille exacte. Si le buffer est trop petit, la device répond MODA_ERESPONSE_OUTOFMEMORY 
M32 * pReturnedByteSize 
[out] Taille réellement utilisée par le réponse, peut être NULL
Donne la taille, en octet(s), qui est réellement utilisée par le réponse. La taille est inférieure ou égale à la taille du buffer de réception. L'interprétation des octets de la réponse est fonction du Message. 
M32 * piDeviceResponse 
[out] Pointeur sur le message d'erreur de le device, peut être NULL
Si piDeviceResponse est non NULL, Message remplit l' entier (M32) pointé piDeviceResponse avec le code de retour de la device, si le message lui est parvenu. 
void * pReserved 
[in] Réservé pour messages groupés (voir DevicesGroup). Si le message ne concerne pas un groupe, pReserved doit être NULL. 

MODA_EOK si le système à pu transmettre le message à la device, une valeur erreur sinon (voir Message d'erreurs MODA)

Fonctionnement:

MODA optimise les appels réseau en supprimant la trame de réponse du serveur lorsque celle ci n'est pas nécessaire : par exemple changer une consigne moteur ou une position servo-moteur ne nécessite pas de réponse de la part du serveur. La réponse est automatiquement déclenchée lorsque: 

 

  • Une réponse est requise (pDataOut non NULL) : par exemple la lecture d'une mesure de distance, ou/et
  • Le code de retour de la device est souhaité (piDeviceResponse non NULL).

 

La réponse comporte 2 messages d'erreurs : celui du système (retourné par Message) et celui de la device (déposé dans piDeviceResponse). 

 

Le fait d'ignorer le code de retour de la device accélère considérablement les échanges réseaux puisque une seul trame est transite entre le programme utilisateur et le serveur. Lorsque piDeviceResponse est non NULL, 2 trames sont requises. 

 

Traitement du message par le serveur MODA:
État de la device 
Action MODA 
On 
Le message est transmis à la device. Le code d'erreur retourné par piDeviceResponse est celui de la device elle même et l'erreur système est MODA_EOK
Off 
Le Message n'est pas transmis. Le code d'erreur retourné par piDeviceResponse est MODA_EDEVICEISOFF et l'erreur système est MODA_EOK
AutoOn 
Si la device est Off, elle est démarrée par MODA puis le message est transmis.
Si la device est On, le message est transmit directement. 

MODA met à disposition les classes Devicexxxxx pour les devices qui sont inclues dans le moteur de simulation. Ces classes, par exemple DeviceMotor, exportent des fonctions qui évitent au programmeur d'utiliser le système de messages : par exemple le code source de DeviceMotor::SetVelocityRPS (DeviceMotor.cpp de ModaSTD) 

 

bool DeviceMotor::SetVelocityRPS( float RdPerSec,M32 *pDeviceResponse,void *pReserved)
    {
    M32 ret=Message(Moda::STDCoreDevicesMessages::COREDEVICEMOTOR_SETVELOCITY,&RdPerSec,sizeof(RdPerSec),NULL,NULL,0,pDeviceResponse,pReserved);
    return(ret==Moda::Commons::MODA_EOK);
    }
Documentation v4.7 (18/01/2015), Copyright (c) 2015 anyKode. All rights reserved.
What do you think about this topic? Send feedback!