2016-04-28 2 views
-1

J'essaie d'implémenter un protocole ModBus RTU sur un périphérique UART en utilisant STM32F4-Discovery Board.Comment mapper l'adresse du registre Modbus en utilisant C/C++

Je prévois d'implémenter la fonctionnalité maître et esclave en utilisant Modbus RTU.

Voici mes questions

Comment pourrais-je déplacer mes données reçues dans UART à MODBUS et transmettre des données de la couche de MODBUS à UART, en utilisant C/C++, S'il vous plaît fournir un certain bout de code qui peut me aider à comprendre votre explication. (A partir de maintenant, je pense à proposer des APIs s'il vous plaît suggérer quelques modèles)

Deuxièmement, comment pourrais-je implémenter les registres et les bobines Modbus. Je voulais dire comment pourrais-je définir l'adresse comme spécifié dans le Manuel d'application ModBus. S'il vous plaît expliquez-moi avec un extrait de code. Ci-dessous quelque chose que j'ai essayé de mettre en œuvre.

/*Global Array, Structure and Variable Declarations*/ 
/* So to access Discrete_Output_Coils[2345] 
    the valid address to include in the protocol would be 
    so we have to access address 0x929 to read the 
    data.*/ 
const unsigned short int Discrete_Output_Coils[4999]; 
const unsigned short int Discrete_Input_Contacts[4999]; 
const unsigned short int Analog_Input_Register[4999]; 
const unsigned short int Anlog_output_Holding_Register[4999]; 
+2

Votre question est trop large. Commencez par commencer par master * ou * slave, mais pas les deux. Deuxièmement, lisez les spécifications Modbus. Troisièmement, commencez par une implémentation très simple et très simple où vous envoyez ou recevez une trame et rien d'autre. Il ne sert à rien d'essayer de penser à la mise en œuvre du registre, si vous n'avez pas le trieur de transmission de base. – user694733

Répondre

0

Je suis d'accord avec user694733. Vous devriez aller pas à pas. Par exemple, vous devez définir vos spécifications matérielles (c'est-à-dire, de quel signal et de quel type sont-elles?) La réponse à ces questions vous dira combien de registres et de quel type seront significatifs pour votre "périphérique". , mappez chaque signal sur un registre, puis essayez de faire une seule opération de lecture/écriture de registre avec une vérification CRC incorporée (programmée) pour les bobines ou analogiques.Ajustez le protocole jusqu'à ce qu'il obtienne ce que vous attendiez, et couvre le reste d'un seul type de registre (bobine, analogique) Ensuite, développez l'implémentation à plusieurs opérations de lecture/écriture de registres Par ailleurs, mettre des déclarations de tableau ne montre pas d'effort pour résoudre le problème.Vous demandez à la communauté de faire tout le travail. Si vous voulez un peu plus de code pour commencer avec google un peu plus. Voici un lien vers une bibliothèque que vous pouvez étudier pour voir si elle correspond à votre demande: http://libmodbus.org/download/