[Programmation] PIC32MZ MODBUS TCP communication - Page 3
Répondre à la discussion
Page 3 sur 3 PremièrePremière 3
Affichage des résultats 61 à 67 sur 67

PIC32MZ MODBUS TCP communication



  1. #61
    Jojo2504

    Re : PIC32MZ MODBUS TCP communication


    ------

    Merci pour l'explication des endians ! j'ai compris !

    par contre j'ai un petit problème:

    #define ReadDiscreteOutputStatus 1
    #define ReadDiscreteInputStatus 2
    #define ReadOutputRegisters 3
    #define ReadInputRegisters 4
    #define ForceSingleCoil 5
    #define PresetSingleRegister 6
    #define ForceMultipleCoils 15
    #define PresetMultipleRegisters 16

    Tu déclares toutes ces fonctions mais perso dans n'importe quelle fichiers je n'en ai pas ... je l'ai déclare seulement dans ce programme ne vaudrait-il pas mieux faire un programme avec les fonctions existantes dans mon fichier tcp.h ?

    -----

  2. #62
    Jack
    Modérateur

    Re : PIC32MZ MODBUS TCP communication

    Sur certains systèmes d'exploitation, le LSB sera en premier (little-endian) en mémoire et pour d'autres se sera le MSB(big-endian)
    Pour être exact, ce n'est pas un problème de système d'exploitation, mais de processeur.

    Tu déclares toutes ces fonctions mais perso dans n'importe quelle fichiers je n'en ai pas
    Je n'ai pas bien compris le sens de cette phrase, mais en tout cas, ilne s'agit pas de fonction, mais de constantes symboliques qui seront traitées par le préprocesseur avant la phase de compilation.
    Si ces définitions doivent être utilisées dans plusieurs fichiers ou pour créer une bibliothèque, on les place dans un fichier .h si cela répond à ta question.

  3. #63
    Johnplayer

    Re : PIC32MZ MODBUS TCP communication

    Il y a des sérieuses lacunes au niveau prog. Confondre une constante déclarée dans une directive pré-processeur et une fonction... De plus, une fonction en pré-processeur ça s'appelle une macro. A mon avis, il serait bien d'approfondir tes bases en C avant de t'attaquer à ce genre de programmes.

  4. #64
    Bluedeep

    Re : PIC32MZ MODBUS TCP communication

    Citation Envoyé par Jojo2504 Voir le message
    Merci pour l'explication des endians ! j'ai compris !

    par contre j'ai un petit problème:
    Oui, et la solution est là dans ton cas : https://c.developpez.com/cours/?page=langage-c

  5. #65
    Jojo2504

    Re : PIC32MZ MODBUS TCP communication

    Oui je sais je n'ai jamais fait du C sur des pic32 c'est la première fois !! Je suis en stage de validation de DUT et franchement je n'est pas le choix du projet... Je galère et c'est pas finis ... Beaucoup de langage que je ne comprend pas et le code que je ne comprend pas à 100% non plus ...

  6. #66
    Johnplayer

    Re : PIC32MZ MODBUS TCP communication

    Le gros problème, c'est que je peux te donner un coup de main pour la partie protocole modbus mais pas la partie programmation PIC32.

    Juste une question comme ça, tu est obligé de passer par un PIC ou tu peux utiliser une plateforme style RaspberryPi?

  7. #67
    Jojo2504

    Re : PIC32MZ MODBUS TCP communication

    Je suis obligé de passer pas un PIC j'ai télécharger la stack freemodbus après avoir réalisé plusieurs étapes de prise en main de la carte d'évaluation (liaison série) aujourd'hui je bloque car le type énuméré: eMBErrorCode n'est pas reconnu...

    Nous avons décidé de réaliser une communication MODBUS RTU finalement car cette solution est plus simple.

    après je pense avoir réglé tout les problèmes de fichier et d'en-tête.



    Fichier APP.c

    Code:
    /* ----------------------- Modbus includes ----------------------------------*/
    #include "peripheral/adc/plib_adc.h"
    #include "../debug_usb_cdc_copy/mb.h"
    #include "../debug_usb_cdc_copy/mbport.h"
    #include "app.h"
    #include "system_definitions.h"
    #include "system_config.h"
    
    
    //#include <stdio.h>
    
    
    // Configuration Bit settings
    // SYSCLK = 80 MHz (8MHz Crystal/ FPLLIDIV * FPLLMUL / FPLLODIV)
    // PBCLK = 40 MHz
    // Primary Osc w/PLL (XT+,HS+,EC+PLL)
    // WDT OFF
    // Other options are don't care
    //
    
    
    
    /* ----------------------- Defines ------------------------------------------*/
    #define REG_INPUT_START 1000
    #define REG_INPUT_NREGS 4
    
    /* ----------------------- Static variables ---------------------------------*/
    static unsigned short   usRegInputStart = REG_INPUT_START;
    static unsigned short  usRegInputBuf[REG_INPUT_NREGS];
    
    /* ----------------------- Start implementation -----------------------------*/
    void APP_Tasks( void )
    {
    	eMBErrorCode eStatus;
    
    	eStatus = eMBInit(MB_RTU,0x01,2,921600,MB_PAR_NONE);
    
        /* Enable the Modbus Protocol Stack. */
    	eStatus = eMBEnable(  );
    
    	for( ;; )
    	{
            ( void )eMBPoll(  );
    
            /* Here we simply count the number of poll cycles. */
            usRegInputBuf[0]++;
    	}
    }
    
    eMBErrorCode eMBRegInputCB( unsigned char * pucRegBuffer, unsigned short usAddress, unsigned short usNRegs )
    {
        eMBErrorCode    eStatus = MB_ENOERR;
        
        int             iRegIndex;
    
        if( ( usAddress >= REG_INPUT_START )
            && ( usAddress + usNRegs <= REG_INPUT_START + REG_INPUT_NREGS ) )
        {
            iRegIndex = ( int )( usAddress - usRegInputStart );
            while( usNRegs > 0 )
            {
                *pucRegBuffer++ = ( unsigned char )( usRegInputBuf[iRegIndex] >> 8 );
                *pucRegBuffer++ = ( unsigned char )( usRegInputBuf[iRegIndex] & 0xFF );
                
                iRegIndex++;
                usNRegs--;
            }
        }
        else
        {
            eStatus = MB_ENOREG;
        }
    
        return eStatus;
    }
    
    eMBErrorCode eMBRegHoldingCB( unsigned char * pucRegBuffer, unsigned short usAddress, unsigned short usNRegs, eMBRegisterMode eMode )
    {
         
        return MB_ENOREG;
    }
    
    
    eMBErrorCode eMBRegCoilsCB( unsigned char * pucRegBuffer, unsigned short usAddress, unsigned short usNCoils, eMBRegisterMode eMode )
    {
        return MB_ENOREG;
    }
    
    eMBErrorCode eMBRegDiscreteCB( unsigned char * pucRegBuffer, unsigned short usAddress, unsigned short usNDiscrete )
    {
        return MB_ENOREG;
    }
    Voici le code que j'ai utiliser pour écrire mon code:

    http://https://github.com/armink/Fre...ster-RTT-STM32
    Dernière modification par Jojo2504 ; 19/06/2017 à 11h44.

Page 3 sur 3 PremièrePremière 3

Discussions similaires

  1. communication MODBUS RTU
    Par Samikerc dans le forum Électronique
    Réponses: 0
    Dernier message: 05/08/2014, 15h18
  2. communication modbus PIC16F877
    Par invitef57db61e dans le forum Électronique
    Réponses: 19
    Dernier message: 28/11/2012, 23h44
  3. la communication via Modbus
    Par invitef44aa575 dans le forum Électronique
    Réponses: 37
    Dernier message: 02/04/2012, 17h39
  4. Communication modbus sur Ethernet
    Par mayonaise dans le forum Internet - Réseau - Sécurité générale
    Réponses: 6
    Dernier message: 24/11/2011, 20h00
  5. Modbus Protocol Communication
    Par invitec782be84 dans le forum Électronique
    Réponses: 1
    Dernier message: 27/02/2008, 20h40
Découvrez nos comparatifs produits sur l'informatique et les technologies.