IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Envoi d'une trame via liaison série


Sujet :

C++

  1. #41
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    vector c'est le tableau C++ (cf FAQ). C'est comme un tableau normal, mais en beaucoup mieux. Il remplace le tableau C classique.

    Il faut que tu rajoutes l'include
    Et oui en effet, c'est un ";" qu'il fallait mettre. Faute de frappe !
    Il y avait d'autres fautes, j'ai vraiment pas fait attention à ce que j'écrivais.

    Voici le code correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    #include <vector>
     
    int main()
    {
       // ...
       // code pour création liaison série
       // ...
       std::vector<unsigned char> tab(12); // tableau C++ de 12 unsigned char
       tab[0] = 0x30;
       tab[1] = 0x34;
       tab[2] = 0x30;
       tab[3] = 0x33;
       tab[4] = 0x30;
       tab[5] = 0x32;
       tab[6] = 0x30;
       tab[7] = 0x31;
       tab[8] = 0x32;
       tab[9] = 0x35;
       tab[10] = 0x43;
       tab[11] = 0x41;
     
       WriteFile(SPort, &tab[0], tab.size() ,&nb,0);
     
       return 0;
    }

  2. #42
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 117
    Points : 29
    Points
    29
    Par défaut
    Ah oui, génial merci beaucoup, je comprend

    Effectivement je n'avais pas mis l'include déjà !

    Je vois ça et je te redis ..

  3. #43
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 117
    Points : 29
    Points
    29
    Par défaut
    Voilà, j'ai testé le programme et la tram est propre d'après le logiciel Portmon (le sniffer de port COM).

    Une dernière étape me reste à réaliser : le CRC.

    Déjà, est ce que le CRC est obligatoire dans le dialogue pour qu'un esclave puisse répondre ? Ou est ce facultatif ?

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
         CRC=0xFFFF;    // calcul du CRC
        for(k=0;k<5;k++)
        {
            CRC=tab[k]^CRC;
            for(l=0;l<7;l++)
            {
                R=CRC%2;
                CRC=CRC>>1;
                CRC=CRC/2;
                if(R=1)
                {
                    CRC=CRC^0xA001;
                }
            }
        }
        CRC_MSB=CRC_MSB>>CRC;
        CRC_MSB=CRC_MSB/256;
     
        CRC_LSB=CRC_LSB&255;
     
        tab[6] = CRC_MSB;    //CRC (poid fort)
        tab[7] = CRC_LSB;    //CRC (poid faible)
    J'ai testé ceci, mais sans succès, et je ne vois pas vraiment le problème. Souci d'opérateur dans les calculs ? autres choses ?

  4. #44
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 117
    Points : 29
    Points
    29
    Par défaut
    Autre question :

    Je n'ai en aucun cas à ajouter de caractères de début et de fin de tram ?

    Merci d'avance

  5. #45
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Le CRC, c'est pour faire du contrôle d'erreur lors d'une transmission. C'est utile si tu as des milieux de transmission bruités. Je sais pas si t'en as vraiment besoin dans ton cas... A priori non, mais bon sans plus d'infos...

  6. #46
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    salut,

    c'est pas les implémentations MODBUS en C++ qui manque sur le net
    une petite recherche : http://members.tripod.com/~mbserver/
    pour Windows (MFC)

    oui la CRC est obligatoire sinon la trame ne sera pas considérée correcte par le partenaire de comm

    @+

  7. #47
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 117
    Points : 29
    Points
    29
    Par défaut
    Bonjour,

    je viens de découvrir, par mon maitre, via un programme en assembleur (assez conséquent), que mon problème ne vient pas du tout de là !

    Je dois respecter une forme de trame et certains caractère précis à lui envoyer pour que celle ci soit en accord avec le module esclave.

    S'il y a des pro de l'assembleur, alors là vous me sauverait la vie !! Toutes les clé de mes difficultés se cachent dedans ! On y trouve apparemment les registres à lesquelles je dois m'adresser, ainsi que le première caractère à envoyer et les codes fonctions.

    Le premier caractère attendu serait "?", l'adresse de la forme : 0x1000 pour l'esclave 1, un code fonction de 0 pour la lecture (1 pour un RAZ, 2 pour un déblocage, 3 pour le blocage).

    Dites moi ce que vous en pensait SVP

    Voici le programme en assembleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    ;******************************************************************************
    ;     PROGRAMATION  DU  8031  POUR  LA  MISE  EN RESEAU  DE  PHOTOCOPIEUSES   *
    ;                           protocole    JBUS                                 *
    ;******************************************************************************
     
                            cpu     "8051.TBL"
                            hof     "INT8"
                            incl    "REGDAL.ASM"
     
                            org     0000H           ;reset
                            ljmp    INIT
     
                            org     0BH             ;interruption Timer 0
                            ljmp    IT_TIMER0
     
                            org     23H             ;interruption du port s‚rie
                            ljmp    IT_SERIE
     
     
    ;******************************************************************************
    ;           declaration des registres de travail                              *
    ;******************************************************************************
     
            NB_COPIEL:      equ     30H           ;nbre de photocopies,val basse
            NB_COPIEH:      equ     31H           ;val haute
     
            ETAPER_L:       equ     32H           ;etape grafcet reception
            ETAPER_H:       equ     33H
     
            ETAPET_L:       equ     34H           ;etape grafcet emission
            ETAPET_H:       equ     35H
     
            TEMPO0:         equ     36H
            TEMPO1:         equ     37H
            TEMPO2:         equ     38H
     
            ADRL:           equ     39H           ;adresse station
            ADRH:           equ     3AH
     
            CLIGNOT1:       equ     3BH
            CLIGNOT2:       equ     3CH
     
    ;                registres bits
     
            ETAT0:          equ     00H
            ETAT1:          equ     01H
            ENVOI_REP:      equ     02H
            AT_RET:         equ     03H
            AUTO_COPIE:     equ     04H
            TRANS:          equ     05H
            CLIGNOT:        equ     06H
     
    ;                I/O
     
            E_DEF:          equ     P3_3     ;( P3_3)
            E_TOP:          equ     P3_2     ;( P3_2)
            S_RELAIS:       equ     P1_2
            S_LED:          equ     P1_5
            S_TXD:          equ     P1_7
            S_RXD:          equ     P1_6
     
     
     
    ;******************************************************************************
    ;                INITIALISATION REGISTRES                                     *
    ;******************************************************************************
     
                            org      100h
     
            INIT:           mov      A,#50H         ;Validation du Timer 0
                            mov      TCON,A         ;Validation du Timer 1
     
                            mov      A,#22H         ;  Timer0 en mode 2
                            mov      TMOD,A         ;  Timer1 en mode 2
     
                            mov      A,#00H         ;chargement de TH0 pour avoir une
                            mov      TH0,A          ;interruption pour 0.278 ms
                                                    ; (256*12/11.059)
     
                            mov      A,#0FDH        ;chargement de TH1 pour avoir une
                            mov      TH1,A          ;transmission … 9600 bauds
                                                    ;0FE pour 7,3728  Mhz
                                                    ;0FD pour 11,059  Mhz
     
                            mov      A,#0D0H        ;liaison serie mode 3 (1 bit START,8 bits
                            mov      SCON,A         ;DONNEES,1 bit PARITE,1 bit STOP )
     
                            clr      S_TXD           ; RS485 en reception
                            clr      S_RXD
     
                            mov      ETAPER_L,#{LOW ETAPER_0}
                            mov      ETAPER_H,#{HIGH ETAPER_0}
     
                            mov      ETAPET_L,#{LOW ETAPET_0}
                            mov      ETAPET_H,#{HIGH ETAPET_0}
     
     
                            mov      A,#92H         ; Validation Interruption s‚rie
                            mov      IE,A           ; et timer 0
     
                            mov      NB_COPIEL,#00H ; initialise nbre de photocopies
                            mov      NB_COPIEH,#00H
     
                            mov      CLIGNOT1,#05H
                            setb     AUTO_COPIE
     
    ;******************************************************************************
    ;                          PROGRAMME PRINCIPAL                                *
    ;******************************************************************************
     
            PRGP:           mov      DPTR,#0FFFFH     ;lecture de
                            movx     A,@DPTR          ; l'adresse
                            acall    HEX_ASCII
                            mov      ADRL,DPL         ; recup‚ration adresse basse
                            mov      ADRH,DPH
     
                            mov      C,AUTO_COPIE
                            mov      S_RELAIS,C
     
                            jnb      E_TOP,sst1
                            clr      ETAT1
                            mov      TEMPO1,#28H
                            mov      A,TEMPO0
                            jnz      sst3
                            setb     ETAT0
                            sjmp     sst2
            sst1:           mov      TEMPO0,#80H
                            mov      A,TEMPO1
                            jnz      sst3
                            setb     ETAT1
            sst2:           jnb      ETAT0,sst3
                            jnb      ETAT1,sst3
                            clr      ETAT0
                            clr      ETAT1
                            mov      DPH,NB_COPIEH
                            mov      DPL,NB_COPIEL
                            inc      DPTR
                            mov      NB_COPIEH,DPH
                            mov      NB_COPIEL,DPL
     
            sst3:           jb       AT_RET,cont5          ; Attente de retournement en cours
                            jnb      ENVOI_REP,cont4       ; Emission d'une r‚ponse
                            clr      ENVOI_REP
                            setb     AT_RET
                            mov      TEMPO2,#20H
     
            cont5:          mov       A,TEMPO2
                            cjne      A,#00,cont4
                            clr       AT_RET
                            setb      TRANS
                            setb      S_TXD                  ; RS485 en ‚mission
                            setb      S_RXD
                            mov       A,#"="
                            acall     PARITE
                            mov       SBUF,A                ; Envoi du premier caractŠre
     
    ; Conditions d'allumage de la LED
     
            cont4:          mov       c,E_TOP
                            cpl       c                      ; Entree TOP
     
                            orl       c,TRANS                ; Transmission
     
                            jb        E_DEF,cont7            ; Entr‚e defaut
                            orl       c,clignot
     
            cont7:          jb        AUTO_COPIE,cont8       ; Autorisation copie
                            orl       c,clignot
     
            cont8:                            ;   ( rien )
                            mov       S_LED,c
                            sjmp      PRGP
     
    ;******************************************************************************
    ;   GESTION DES INTERRUPTIONS SERIES  (RI ET TI)                              *
    ;******************************************************************************
     
            IT_SERIE:       push     ACC
                            push     PSW
                            push     REG0
                            push     REG1
                            push     DPH
                            push     DPL
                            jb       TI,IT_TRS
                            mov      A,SBUF
                            clr      RI
                            mov      DPH,ETAPER_H
                            mov      DPL,ETAPER_L
                            acall    APPEL_ETAPE
                            sjmp     FIN_IT_SERIE
     
            IT_TRS:         clr      TI                  ; gestion de l'interruption
                            mov      DPH,ETAPET_H
                            mov      DPL,ETAPET_L
                            acall    APPEL_ETAPE
     
            FIN_IT_SERIE:   pop      DPL
                            pop      DPH
                            pop      REG1
                            pop      REG0
                            pop      PSW
                            pop      ACC
                            reti
     
            APPEL_ETAPE:    push     ACC
                            mov      A,#00H                    ;appel d'‚tapes
                            jmp      @A+DPTR
     
     
    ;******************************************************************************
     
     
            ETAPER_0:       pop      ACC
                            cjne     A,#"?",SAUTR
                            mov      ETAPER_L,#{LOW ETAPER_1}
                            mov      ETAPER_H,#{HIGH ETAPER_1}
                            ret
     
            ETAPER_1:       pop      ACC
                            cjne     A,ADRH,IDENTIF                  ;Test d‚but adresse
                            mov      ETAPER_L,#{LOW ETAPER_2}
                            mov      ETAPER_H,#{HIGH ETAPER_2}
                            ret
             IDENTIF:       cjne     A,#"*",SAUTR
                            mov      ETAPER_L,#{LOW ETAPER_30}
                            mov      ETAPER_H,#{HIGH ETAPER_30}
                            ret
     
            ETAPER_2:       pop      ACC
                            cjne     A,ADRL,SAUTR                   ;Test fin de l'adresse
                            mov      ETAPER_L,#{LOW ETAPER_3}
                            mov      ETAPER_H,#{HIGH ETAPER_3}
                            ret
     
            ETAPER_3:       pop      ACC
                            cjne     A,#"0",F1
                            mov      ETAPER_L,#{LOW ETAPER_4}        ;Fonction 0
                            mov      ETAPER_H,#{HIGH ETAPER_4}       ;Lecture ‚tat
                            ret
            F1:             cjne     A,#"1",F2
                            mov      ETAPER_L,#{LOW ETAPER_10}       ;Fonction 1
                            mov      ETAPER_H,#{HIGH ETAPER_10}      ;Raz compteur
                            ret
            F2:             cjne     A,#"2",F3
                            mov      ETAPER_L,#{LOW ETAPER_20}       ;Fonction 2
                            mov      ETAPER_H,#{HIGH ETAPER_20}      ;Autorisation copie
                            RET
            F3:             cjne     A,#"3",SAUTR
                            mov      ETAPER_L,#{LOW ETAPER_21}       ;Fonction 3
                            mov      ETAPER_H,#{HIGH ETAPER_21}      ;Interdiction copie
                            ret
     
            SAUTR:          mov      ETAPER_L,#{LOW ETAPER_0}    ;initialisation des ‚tapes
                            mov      ETAPER_H,#{HIGH ETAPER_0}
                            ret
     
     
    ;******************************************************************************
    ;*       Fonction 0 = Envoi de l'‚tat du photocopieur                         *
    ;******************************************************************************
     
            ETAPER_4:       pop      ACC
                            cjne     A,#0DH,SAUTR                     ;Attend  CR
                            setb     ENVOI_REP
                            mov      ETAPET_L,#{LOW ETAPET_0}
                            mov      ETAPET_H,#{HIGH ETAPET_0}
                            sjmp     SAUTR
     
            ETAPER_10:      pop      ACC
                            cjne     A,#0DH,SAUTR                     ;Attend  CR
                            mov      NB_COPIEH,#00H
                            mov      NB_COPIEL,#00H
                            setb     ENVOI_REP
                            mov      ETAPET_L,#{LOW ETAPET_0}
                            mov      ETAPET_H,#{HIGH ETAPET_0}
                            sjmp     SAUTR
     
            ETAPER_20:      pop      ACC
                            cjne     A,#0DH,SAUTR                     ;Attend  CR
                            mov      NB_COPIEH,#00H
                            mov      NB_COPIEL,#00H
                            setb     AUTO_COPIE
                            setb     ENVOI_REP
                            mov      ETAPET_L,#{LOW ETAPET_0}
                            mov      ETAPET_H,#{HIGH ETAPET_0}
                            sjmp     SAUTR
     
            ETAPER_21:      pop      ACC
                            cjne     A,#0DH,SAUTR                     ;Attend  CR
                            mov      NB_COPIEH,#00H
                            mov      NB_COPIEL,#00H
                            clr      AUTO_COPIE
                            setb     ENVOI_REP
                            mov      ETAPET_L,#{LOW ETAPET_0}
                            mov      ETAPET_H,#{HIGH ETAPET_0}
                            sjmp     SAUTR
     
     
     
            ETAPER_30:      pop      ACC
                            cjne     A,#0DH,SAUTR                     ;Attend  CR
                            mov      ETAPET_L,#{LOW ETAPET_20}
                            mov      ETAPET_H,#{HIGH ETAPET_20}
                            setb     ENVOI_REP
                            sjmp     SAUTR
     
            ETAPET_0:       pop      ACC
                            mov      A,ADRH                      ;adresse station pds fort
                            acall    PARITE
                            mov      SBUF,A
                            mov      ETAPET_L,#{LOW ETAPET_1}
                            mov      ETAPET_H,#{HIGH ETAPET_1}
                            ret
     
            ETAPET_1:       pop      ACC
                            mov      A,ADRL                       ;adresse station pds faible
                            acall    PARITE
                            mov      SBUF,A
                            mov      ETAPET_L,#{LOW ETAPET_2}
                            mov      ETAPET_H,#{HIGH ETAPET_2}
                            ret
     
            ETAPET_2:       pop      ACC
                            jnb      E_DEF,SET
                            mov      A,#7FH
                            anl      NB_COPIEH,A   ; mise … 0 du 16Š bit
                            ljmp     APRES
            SET:            mov      A,#80H
                            orl      NB_COPIEH,A   ; mise … 1 du 16Š bit
            APRES:          jnb      AUTO_COPIE,SET2
                            mov      A,#0BFH
                            anl      NB_COPIEH,A   ; mise … 0 du 16Š bit
                            ljmp     APRES2
            SET2:           mov      A,#40H
                            orl      NB_COPIEH,A   ; mise … 1 du 15Š bit
            APRES2:         mov      A,NB_COPIEH
                            acall    HEX_ASCII
                            mov      A,DPH
                            acall    PARITE
                            mov      SBUF,A
                            mov      ETAPET_L,#{LOW ETAPET_3}
                            mov      ETAPET_H,#{HIGH ETAPET_3}
                            ret
     
            ETAPET_3:       pop      ACC
                            mov      A,NB_COPIEH                  ;valeur compteur pds fort
                            acall    HEX_ASCII
                            mov      A,DPL
                            acall    PARITE
                            mov      SBUF,A
                            mov      ETAPET_L,#{LOW ETAPET_4}
                            mov      ETAPET_H,#{HIGH ETAPET_4}
                            ret
     
            ETAPET_4:       pop      ACC
                            mov      A,NB_COPIEL                  ;valeur compteur pds faible
                            acall    HEX_ASCII
                            mov      A,DPH
                            acall    PARITE
                            mov      SBUF,A
                            mov      ETAPET_L,#{LOW ETAPET_5}
                            mov      ETAPET_H,#{HIGH ETAPET_5}
                            ret
     
            ETAPET_5:       pop      ACC
                            mov      A,NB_COPIEL                  ;valeur compteur pds faible
                            acall    HEX_ASCII
                            mov      A,DPL
                            acall    PARITE
                            mov      SBUF,A
                            mov      ETAPET_L,#{LOW ETAPET_6}
                            mov      ETAPET_H,#{HIGH ETAPET_6}
                            ret
     
            ETAPET_6:       pop      ACC
                            mov      A,#0DH                       ;envoi CR
                            acall    PARITE
                            mov      SBUF,A
                            mov      ETAPET_L,#{LOW ETAPET_7}
                            mov      ETAPET_H,#{HIGH ETAPET_7}
                            ret
     
            ETAPET_7:       pop     ACC
                            clr     S_TXD                         ; RS485 en reception
                            clr     S_RXD
                            clr     TRANS
                            ret
     
            ETAPET_20:      pop      ACC
                            mov      A,ADRH                      ;adresse station pds fort
                            acall    PARITE
                            mov      SBUF,A
                            mov      ETAPET_L,#{LOW ETAPET_21}
                            mov      ETAPET_H,#{HIGH ETAPET_21}
                            ret
     
            ETAPET_21:      pop      ACC
                            mov      A,ADRL                       ;adresse station pds faible
                            acall    PARITE
                            mov      SBUF,A
                            mov      ETAPET_L,#{LOW ETAPET_22}
                            mov      ETAPET_H,#{HIGH ETAPET_22}
                            ret
     
            ETAPET_22:      pop      ACC
                            mov      A,#0DH                       ;envoi CR
                            acall    PARITE
                            mov      SBUF,A
                            mov      ETAPET_L,#{LOW ETAPET_23}
                            mov      ETAPET_H,#{HIGH ETAPET_23}
                            ret
     
            ETAPET_23:      pop     ACC
                            clr     S_TXD                         ; RS485 en reception
                            clr     S_RXD
                            clr     TRANS
                            ret
     
    ;*****************************************************************************
    ;*                        CALCUL DE PARITE                                   *
    ;*****************************************************************************
     
     
            PARITE:         mov     C,PSW0                       ;calcul de parite paire
                            cpl     C                            ;parite paire -> impaire
                            mov     TB8,C                        ;mise de la parite ds TB8
                            ret
     
    ;*****************************************************************************
    ;*                   CONVERSION  8 Bits vers Hexa Ascii
    ;*                    Entr‚e = ACC      retour : DPTR
    ;*****************************************************************************
     
     
            HEX_ASCII:      push    ACC
                            anl     A,#0FH                ; partie basse
                            acall   HEX_ASCII4
                            mov     DPL,A
                            pop     ACC
                            swap    A
                            anl     A,#0FH                ; partie haute
                            acall   HEX_ASCII4
                            mov     DPH,A
                            ret
     
            HEX_ASCII4:     cjne    A,#0AH,TEST
            TEST:           jc      T2
                            add     A,#37H
                            ret
            T2:             add     A,#30H
                            ret
     
    ;*****************************************************************************
    ;*                       INTERRUPTION TIMER 0
    ;*****************************************************************************
     
     
            IT_TIMER0:      push     ACC
                            push     PSW
                            mov      A,TEMPO0
                            jz       STI0
                            dec      TEMPO0
            STI0:           mov      A,TEMPO1
                            jz       STI1
                            dec      TEMPO1
            STI1:           mov      A,TEMPO2
                            jz       STI2
                            dec      TEMPO2
            STI2:
                            djnz     CLIGNOT2,STI5
                            djnz     CLIGNOT1,STI5
                            mov      C,CLIGNOT
                            cpl      C
                            mov      CLIGNOT,C
                            mov      CLIGNOT1,#05H
     
            STI5:           pop      PSW
                            pop      ACC
                            retI
     
            VERSION:        dfb      "V0.1  02/09/91"
    J'ai proposé ceci comme tram au module :

    std::vector<unsigned char> tab(8); // tableau C++ de 12 unsigned char
    tab[0] = '?'; //début
    tab[1] = '1'; //adresse
    tab[2] = '0'; //adresse
    tab[3] = '0'; //code fonction
    tab[4] = '0D'; //Fin

    Sans grand succès mais j'en suis sur que ça tiens plus qu'à un détail

    Dites moi ce que vous en pensez SVP

    Merci beaucoup d'avance pour votre aide !

  8. #48
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 117
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par stephdim Voir le message
    salut,

    c'est pas les implémentations MODBUS en C++ qui manque sur le net
    une petite recherche : http://members.tripod.com/~mbserver/
    pour Windows (MFC)

    oui la CRC est obligatoire sinon la trame ne sera pas considérée correcte par le partenaire de comm

    @+
    Salut,

    merci pour ta réponse

    En fait, le problème, c'est l'esclave. Je manque d'informations sur ce module là. La seule information que j'ai, c'est le programme assembleur interne au micro-contrôleurs. La tram que je dois faire est spécifique à celui ci malheureusement, et il faut décoder chaque éléments. C'est plus compliqué que je ne le pensais

  9. #49
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 117
    Points : 29
    Points
    29
    Par défaut
    Pour information, j'ai mis un second topic pour le programme assembleur, dans un salon adéquate à celui ci.


Discussions similaires

  1. Envois et reception d'une trame via Port Serie (com)
    Par samirraoui dans le forum VB.NET
    Réponses: 3
    Dernier message: 11/05/2015, 13h15
  2. Envoyer une trame via port série
    Par Lacmé dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 21/04/2015, 08h52
  3. envoi d'une trame via rs232 avec SOH CR LF
    Par tibjedi dans le forum C
    Réponses: 4
    Dernier message: 24/04/2013, 14h06
  4. Problème avec l'envoi d'une trame TCP
    Par fredoBreton dans le forum API, COM et SDKs
    Réponses: 14
    Dernier message: 17/11/2005, 20h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo