mohamedwajdi kharrat / Mbed 2 deprecated TP3_RBT_2GII_Ex2

Dependencies:   mbed

Committer:
mohamedwajdi
Date:
Fri Apr 02 10:38:15 2021 +0000
Revision:
0:ecb5de3a3147
Child:
1:fcdfb51a34c8
TP3 RBT 2GII Ex2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mohamedwajdi 0:ecb5de3a3147 1 #include "mbed.h"
mohamedwajdi 0:ecb5de3a3147 2 #include "mb.h"
mohamedwajdi 0:ecb5de3a3147 3
mohamedwajdi 0:ecb5de3a3147 4 #define BITS_OUT_START 0x1001 //Bits de sorties (fonctions 1 et 5)
mohamedwajdi 0:ecb5de3a3147 5 #define BITS_OUT_NBITS 16
mohamedwajdi 0:ecb5de3a3147 6 #define BITS_OUT_BYTES BITS_OUT_NBITS/8 //16/8 = 2 octets
mohamedwajdi 0:ecb5de3a3147 7
mohamedwajdi 0:ecb5de3a3147 8 #define BITS_IN_START 0x2001 //Bits d'entées (fonction 2)
mohamedwajdi 0:ecb5de3a3147 9 #define BITS_IN_NBITS 16
mohamedwajdi 0:ecb5de3a3147 10 #define BITS_IN_BYTES BITS_IN_NBITS/8 //16/8 = 2 octets
mohamedwajdi 0:ecb5de3a3147 11
mohamedwajdi 0:ecb5de3a3147 12 #define REG_OUT_START 0x3001 //Registres de sorties (fonctions 3 et 6)
mohamedwajdi 0:ecb5de3a3147 13 #define REG_OUT_NREGS 4
mohamedwajdi 0:ecb5de3a3147 14
mohamedwajdi 0:ecb5de3a3147 15 #define REG_IN_START 0x4001 //Registres d'entées (fonction 4)
mohamedwajdi 0:ecb5de3a3147 16 #define REG_IN_NREGS 4
mohamedwajdi 0:ecb5de3a3147 17
mohamedwajdi 0:ecb5de3a3147 18 #define SLAVE_ID 0x07
mohamedwajdi 0:ecb5de3a3147 19
mohamedwajdi 0:ecb5de3a3147 20 static USHORT BitsOutStart = BITS_OUT_START; // (fonctions 1 et 5)
mohamedwajdi 0:ecb5de3a3147 21 static UCHAR BitsOut[BITS_OUT_BYTES] = {0xA5,0x5A};
mohamedwajdi 0:ecb5de3a3147 22 static USHORT BitsInStart = BITS_IN_START; // (fonction 2)
mohamedwajdi 0:ecb5de3a3147 23 static UCHAR BitsIn[BITS_IN_BYTES] = {0x3C,0xC3};
mohamedwajdi 0:ecb5de3a3147 24 static USHORT RegOutStart = REG_OUT_START; // (fonctions 3 et 6)
mohamedwajdi 0:ecb5de3a3147 25 static USHORT RegOut[REG_OUT_NREGS] = {0x0123,0x4567,0x89AB,0xCDEF};
mohamedwajdi 0:ecb5de3a3147 26 static USHORT RegInStart = REG_IN_START; // (fonction 4)
mohamedwajdi 0:ecb5de3a3147 27 static USHORT RegIn[REG_IN_NREGS] = {0x1122,0x3344,0x5566,0x7788};
mohamedwajdi 0:ecb5de3a3147 28
mohamedwajdi 0:ecb5de3a3147 29 int main() {
mohamedwajdi 0:ecb5de3a3147 30 eMBInit( MB_RTU, SLAVE_ID, 0, 9600, MB_PAR_NONE );
mohamedwajdi 0:ecb5de3a3147 31 eMBEnable();
mohamedwajdi 0:ecb5de3a3147 32
mohamedwajdi 0:ecb5de3a3147 33 PwmOut moteur(PB_11);
mohamedwajdi 0:ecb5de3a3147 34 PwmOut Led1(PB_10);
mohamedwajdi 0:ecb5de3a3147 35 AnalogIn Pot(PA_0);
mohamedwajdi 0:ecb5de3a3147 36 DigitalIn BP1(PA_8,PullUp);
mohamedwajdi 0:ecb5de3a3147 37 DigitalIn BP2(PB_12,PullUp);
mohamedwajdi 0:ecb5de3a3147 38 DigitalOut Led2(PB_8);
mohamedwajdi 0:ecb5de3a3147 39 float Rap_Cyc=0;
mohamedwajdi 0:ecb5de3a3147 40
mohamedwajdi 0:ecb5de3a3147 41 moteur.period_ms(.....);
mohamedwajdi 0:ecb5de3a3147 42 Rap_Cyc=0;
mohamedwajdi 0:ecb5de3a3147 43 RegOut[0]=0;
mohamedwajdi 0:ecb5de3a3147 44 while(1) {
mohamedwajdi 0:ecb5de3a3147 45 //**** 1 ****//
mohamedwajdi 0:ecb5de3a3147 46 eMBPoll();
mohamedwajdi 0:ecb5de3a3147 47 //**** 2 ****//
mohamedwajdi 0:ecb5de3a3147 48 if(BitsOut[0] & 0x01) Led2=......;
mohamedwajdi 0:ecb5de3a3147 49 else Led2=.......;
mohamedwajdi 0:ecb5de3a3147 50 Rap_Cyc = ................/100.0;
mohamedwajdi 0:ecb5de3a3147 51 //**** 3 ****//
mohamedwajdi 0:ecb5de3a3147 52 if(!BP1 && Rap_Cyc <......) {
mohamedwajdi 0:ecb5de3a3147 53 Rap_Cyc = Rap_Cyc + .........;
mohamedwajdi 0:ecb5de3a3147 54 moteur = Rap_Cyc;
mohamedwajdi 0:ecb5de3a3147 55 wait(0.5);
mohamedwajdi 0:ecb5de3a3147 56 }
mohamedwajdi 0:ecb5de3a3147 57 if(!BP1 && Rap_Cyc > ........){
mohamedwajdi 0:ecb5de3a3147 58 Rap_Cyc = Rap_Cyc - ........;
mohamedwajdi 0:ecb5de3a3147 59 moteur = Rap_Cyc;
mohamedwajdi 0:ecb5de3a3147 60 wait(0.5);
mohamedwajdi 0:ecb5de3a3147 61 }
mohamedwajdi 0:ecb5de3a3147 62 Led1 = ..................;
mohamedwajdi 0:ecb5de3a3147 63 //**** 4 ****//
mohamedwajdi 0:ecb5de3a3147 64 RegOut[0] = Rap_Cyc * ........;
mohamedwajdi 0:ecb5de3a3147 65 RegOut[1] = Pot.read() * .......;
mohamedwajdi 0:ecb5de3a3147 66 //**** 5 ****//
mohamedwajdi 0:ecb5de3a3147 67 if(!BP1) BitsIn[0] &=......;
mohamedwajdi 0:ecb5de3a3147 68 else BitsIn[0] |=......;
mohamedwajdi 0:ecb5de3a3147 69 if(!BP2) BitsIn[0] &=......;
mohamedwajdi 0:ecb5de3a3147 70 else BitsIn[0] |=......;
mohamedwajdi 0:ecb5de3a3147 71 RegIn[0] = ....................;
mohamedwajdi 0:ecb5de3a3147 72 }
mohamedwajdi 0:ecb5de3a3147 73 }
mohamedwajdi 0:ecb5de3a3147 74
mohamedwajdi 0:ecb5de3a3147 75
mohamedwajdi 0:ecb5de3a3147 76
mohamedwajdi 0:ecb5de3a3147 77
mohamedwajdi 0:ecb5de3a3147 78
mohamedwajdi 0:ecb5de3a3147 79
mohamedwajdi 0:ecb5de3a3147 80
mohamedwajdi 0:ecb5de3a3147 81
mohamedwajdi 0:ecb5de3a3147 82
mohamedwajdi 0:ecb5de3a3147 83
mohamedwajdi 0:ecb5de3a3147 84
mohamedwajdi 0:ecb5de3a3147 85
mohamedwajdi 0:ecb5de3a3147 86
mohamedwajdi 0:ecb5de3a3147 87
mohamedwajdi 0:ecb5de3a3147 88
mohamedwajdi 0:ecb5de3a3147 89
mohamedwajdi 0:ecb5de3a3147 90
mohamedwajdi 0:ecb5de3a3147 91
mohamedwajdi 0:ecb5de3a3147 92
mohamedwajdi 0:ecb5de3a3147 93
mohamedwajdi 0:ecb5de3a3147 94
mohamedwajdi 0:ecb5de3a3147 95
mohamedwajdi 0:ecb5de3a3147 96
mohamedwajdi 0:ecb5de3a3147 97
mohamedwajdi 0:ecb5de3a3147 98
mohamedwajdi 0:ecb5de3a3147 99
mohamedwajdi 0:ecb5de3a3147 100
mohamedwajdi 0:ecb5de3a3147 101
mohamedwajdi 0:ecb5de3a3147 102
mohamedwajdi 0:ecb5de3a3147 103
mohamedwajdi 0:ecb5de3a3147 104
mohamedwajdi 0:ecb5de3a3147 105
mohamedwajdi 0:ecb5de3a3147 106
mohamedwajdi 0:ecb5de3a3147 107
mohamedwajdi 0:ecb5de3a3147 108 // Procedure résevée pour les bits de sorties (Foction 1 et 5)
mohamedwajdi 0:ecb5de3a3147 109 // pucRegBuffer => coils buffer usAddress => coils address
mohamedwajdi 0:ecb5de3a3147 110 // usNCoils => coils number eMode => read or write
mohamedwajdi 0:ecb5de3a3147 111 eMBErrorCode
mohamedwajdi 0:ecb5de3a3147 112 eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNCoils, eMBRegisterMode eMode )
mohamedwajdi 0:ecb5de3a3147 113 {
mohamedwajdi 0:ecb5de3a3147 114 eMBErrorCode eStatus = MB_ENOERR;
mohamedwajdi 0:ecb5de3a3147 115 int iIntRegIndex;
mohamedwajdi 0:ecb5de3a3147 116 int iIntBufNum;
mohamedwajdi 0:ecb5de3a3147 117 int iIntBitNum;
mohamedwajdi 0:ecb5de3a3147 118 int iExtRegIndex=0;
mohamedwajdi 0:ecb5de3a3147 119 int iExtBufNum;
mohamedwajdi 0:ecb5de3a3147 120 int iExtBitNum;
mohamedwajdi 0:ecb5de3a3147 121 UCHAR ucTemp;
mohamedwajdi 0:ecb5de3a3147 122 if( ( usAddress >= BITS_OUT_START )
mohamedwajdi 0:ecb5de3a3147 123 && ( usAddress + usNCoils <= BITS_OUT_START + BITS_OUT_NBITS ) )
mohamedwajdi 0:ecb5de3a3147 124 {
mohamedwajdi 0:ecb5de3a3147 125 iIntRegIndex = ( int )( usAddress - BitsOutStart );
mohamedwajdi 0:ecb5de3a3147 126
mohamedwajdi 0:ecb5de3a3147 127 while( usNCoils > 0 )
mohamedwajdi 0:ecb5de3a3147 128 {
mohamedwajdi 0:ecb5de3a3147 129 iIntBufNum=iIntRegIndex/8;
mohamedwajdi 0:ecb5de3a3147 130 iIntBitNum=iIntRegIndex%8;
mohamedwajdi 0:ecb5de3a3147 131 iExtBufNum=iExtRegIndex/8;
mohamedwajdi 0:ecb5de3a3147 132 iExtBitNum=iExtRegIndex%8;
mohamedwajdi 0:ecb5de3a3147 133
mohamedwajdi 0:ecb5de3a3147 134 switch ( eMode )
mohamedwajdi 0:ecb5de3a3147 135 {
mohamedwajdi 0:ecb5de3a3147 136 case MB_REG_READ:
mohamedwajdi 0:ecb5de3a3147 137 // Read coils
mohamedwajdi 0:ecb5de3a3147 138 if(iExtBitNum==0){
mohamedwajdi 0:ecb5de3a3147 139 pucRegBuffer[iExtBufNum]=0;
mohamedwajdi 0:ecb5de3a3147 140 }
mohamedwajdi 0:ecb5de3a3147 141 ucTemp=(BitsOut[iIntBufNum]>>iIntBitNum) & 1;
mohamedwajdi 0:ecb5de3a3147 142 pucRegBuffer[iExtBufNum]|=ucTemp<<iExtBitNum;
mohamedwajdi 0:ecb5de3a3147 143 break;
mohamedwajdi 0:ecb5de3a3147 144
mohamedwajdi 0:ecb5de3a3147 145 case MB_REG_WRITE:
mohamedwajdi 0:ecb5de3a3147 146 // Write coils
mohamedwajdi 0:ecb5de3a3147 147 ucTemp=BitsOut[iIntBufNum]&(~(1<<iIntBitNum));
mohamedwajdi 0:ecb5de3a3147 148 ucTemp|=((pucRegBuffer[iExtBufNum]>>iExtBitNum) & 1)<<iIntBitNum;
mohamedwajdi 0:ecb5de3a3147 149 BitsOut[iIntBufNum]=ucTemp;
mohamedwajdi 0:ecb5de3a3147 150 break;
mohamedwajdi 0:ecb5de3a3147 151 }
mohamedwajdi 0:ecb5de3a3147 152 iIntRegIndex++;
mohamedwajdi 0:ecb5de3a3147 153 iExtRegIndex++;
mohamedwajdi 0:ecb5de3a3147 154 usNCoils--;
mohamedwajdi 0:ecb5de3a3147 155
mohamedwajdi 0:ecb5de3a3147 156 }
mohamedwajdi 0:ecb5de3a3147 157 }
mohamedwajdi 0:ecb5de3a3147 158 else
mohamedwajdi 0:ecb5de3a3147 159 {
mohamedwajdi 0:ecb5de3a3147 160 eStatus = MB_ENOREG;
mohamedwajdi 0:ecb5de3a3147 161 }
mohamedwajdi 0:ecb5de3a3147 162 return eStatus;
mohamedwajdi 0:ecb5de3a3147 163 }
mohamedwajdi 0:ecb5de3a3147 164
mohamedwajdi 0:ecb5de3a3147 165 // Procedure résevée pour les bits d'entrées (Foction 2)
mohamedwajdi 0:ecb5de3a3147 166 // pucRegBuffer => discrete buffer usAddress => discrete address
mohamedwajdi 0:ecb5de3a3147 167 // usNDiscrete => discrete number
mohamedwajdi 0:ecb5de3a3147 168 eMBErrorCode
mohamedwajdi 0:ecb5de3a3147 169 eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNDiscrete )
mohamedwajdi 0:ecb5de3a3147 170 {
mohamedwajdi 0:ecb5de3a3147 171 eMBErrorCode eStatus = MB_ENOERR;
mohamedwajdi 0:ecb5de3a3147 172 int iIntRegIndex;
mohamedwajdi 0:ecb5de3a3147 173 int iIntBufNum;
mohamedwajdi 0:ecb5de3a3147 174 int iIntBitNum;
mohamedwajdi 0:ecb5de3a3147 175 int iExtRegIndex=0;
mohamedwajdi 0:ecb5de3a3147 176 int iExtBufNum;
mohamedwajdi 0:ecb5de3a3147 177 int iExtBitNum;
mohamedwajdi 0:ecb5de3a3147 178 UCHAR ucTemp;
mohamedwajdi 0:ecb5de3a3147 179 if( ( usAddress >= BITS_IN_START )
mohamedwajdi 0:ecb5de3a3147 180 && ( usAddress + usNDiscrete <= BITS_IN_START + BITS_IN_NBITS ) )
mohamedwajdi 0:ecb5de3a3147 181 {
mohamedwajdi 0:ecb5de3a3147 182 iIntRegIndex = ( int )( usAddress - BitsInStart );
mohamedwajdi 0:ecb5de3a3147 183
mohamedwajdi 0:ecb5de3a3147 184 while( usNDiscrete > 0 )
mohamedwajdi 0:ecb5de3a3147 185 {
mohamedwajdi 0:ecb5de3a3147 186 iIntBufNum=iIntRegIndex/8;
mohamedwajdi 0:ecb5de3a3147 187 iIntBitNum=iIntRegIndex%8;
mohamedwajdi 0:ecb5de3a3147 188 iExtBufNum=iExtRegIndex/8;
mohamedwajdi 0:ecb5de3a3147 189 iExtBitNum=iExtRegIndex%8;
mohamedwajdi 0:ecb5de3a3147 190
mohamedwajdi 0:ecb5de3a3147 191 // Read discrete inputs
mohamedwajdi 0:ecb5de3a3147 192 if(iExtBitNum==0){
mohamedwajdi 0:ecb5de3a3147 193 pucRegBuffer[iExtBufNum]=0;
mohamedwajdi 0:ecb5de3a3147 194 }
mohamedwajdi 0:ecb5de3a3147 195 ucTemp=(BitsIn[iIntBufNum]>>iIntBitNum) & 1;
mohamedwajdi 0:ecb5de3a3147 196 pucRegBuffer[iExtBufNum]|=ucTemp<<iExtBitNum;
mohamedwajdi 0:ecb5de3a3147 197
mohamedwajdi 0:ecb5de3a3147 198 iIntRegIndex++;
mohamedwajdi 0:ecb5de3a3147 199 iExtRegIndex++;
mohamedwajdi 0:ecb5de3a3147 200 usNDiscrete--;
mohamedwajdi 0:ecb5de3a3147 201 }
mohamedwajdi 0:ecb5de3a3147 202 }
mohamedwajdi 0:ecb5de3a3147 203 else
mohamedwajdi 0:ecb5de3a3147 204 {
mohamedwajdi 0:ecb5de3a3147 205 eStatus = MB_ENOREG;
mohamedwajdi 0:ecb5de3a3147 206 }
mohamedwajdi 0:ecb5de3a3147 207 return eStatus;
mohamedwajdi 0:ecb5de3a3147 208 }
mohamedwajdi 0:ecb5de3a3147 209
mohamedwajdi 0:ecb5de3a3147 210 // Procedure résevée pour les registres de sorties (Foction 3 et 6)
mohamedwajdi 0:ecb5de3a3147 211 // pucRegBuffer => holding register buffer usAddress holding => register address
mohamedwajdi 0:ecb5de3a3147 212 // usNRegs holding register number eMode => read or write
mohamedwajdi 0:ecb5de3a3147 213 eMBErrorCode
mohamedwajdi 0:ecb5de3a3147 214 eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegisterMode eMode )
mohamedwajdi 0:ecb5de3a3147 215 {
mohamedwajdi 0:ecb5de3a3147 216 eMBErrorCode eStatus = MB_ENOERR;
mohamedwajdi 0:ecb5de3a3147 217 int iRegIndex;
mohamedwajdi 0:ecb5de3a3147 218
mohamedwajdi 0:ecb5de3a3147 219 if( ( usAddress >= REG_OUT_START ) &&
mohamedwajdi 0:ecb5de3a3147 220 ( usAddress + usNRegs <= REG_OUT_START + REG_OUT_NREGS ) )
mohamedwajdi 0:ecb5de3a3147 221 {
mohamedwajdi 0:ecb5de3a3147 222 iRegIndex = ( int )( usAddress - RegOutStart );
mohamedwajdi 0:ecb5de3a3147 223 switch ( eMode )
mohamedwajdi 0:ecb5de3a3147 224 {
mohamedwajdi 0:ecb5de3a3147 225 //*** Pass current register values to the protocol stack. ***
mohamedwajdi 0:ecb5de3a3147 226 case MB_REG_READ:
mohamedwajdi 0:ecb5de3a3147 227 while( usNRegs > 0 )
mohamedwajdi 0:ecb5de3a3147 228 {
mohamedwajdi 0:ecb5de3a3147 229 *pucRegBuffer++ = ( UCHAR ) ( RegOut[iRegIndex] >> 8 );
mohamedwajdi 0:ecb5de3a3147 230 *pucRegBuffer++ = ( UCHAR ) ( RegOut[iRegIndex] & 0xFF );
mohamedwajdi 0:ecb5de3a3147 231 iRegIndex++;
mohamedwajdi 0:ecb5de3a3147 232 usNRegs--;
mohamedwajdi 0:ecb5de3a3147 233 }
mohamedwajdi 0:ecb5de3a3147 234 break;
mohamedwajdi 0:ecb5de3a3147 235
mohamedwajdi 0:ecb5de3a3147 236 //***Update current register values with new values from the protocol stack.***
mohamedwajdi 0:ecb5de3a3147 237 case MB_REG_WRITE:
mohamedwajdi 0:ecb5de3a3147 238 while( usNRegs > 0 )
mohamedwajdi 0:ecb5de3a3147 239 {
mohamedwajdi 0:ecb5de3a3147 240 RegOut[iRegIndex] = *pucRegBuffer++ << 8;
mohamedwajdi 0:ecb5de3a3147 241 RegOut[iRegIndex] |= *pucRegBuffer++;
mohamedwajdi 0:ecb5de3a3147 242 iRegIndex++;
mohamedwajdi 0:ecb5de3a3147 243 usNRegs--;
mohamedwajdi 0:ecb5de3a3147 244 }
mohamedwajdi 0:ecb5de3a3147 245 }
mohamedwajdi 0:ecb5de3a3147 246 }
mohamedwajdi 0:ecb5de3a3147 247 else
mohamedwajdi 0:ecb5de3a3147 248 {
mohamedwajdi 0:ecb5de3a3147 249 eStatus = MB_ENOREG;
mohamedwajdi 0:ecb5de3a3147 250 }
mohamedwajdi 0:ecb5de3a3147 251 return eStatus;
mohamedwajdi 0:ecb5de3a3147 252 }
mohamedwajdi 0:ecb5de3a3147 253 // Procedure résevée pour les registres de sorties (Foction 4)
mohamedwajdi 0:ecb5de3a3147 254 // pucRegBuffer => input register buffer usAddress => input register address
mohamedwajdi 0:ecb5de3a3147 255 // usNRegs input register number
mohamedwajdi 0:ecb5de3a3147 256 eMBErrorCode
mohamedwajdi 0:ecb5de3a3147 257 eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs )
mohamedwajdi 0:ecb5de3a3147 258 {
mohamedwajdi 0:ecb5de3a3147 259 eMBErrorCode eStatus = MB_ENOERR;
mohamedwajdi 0:ecb5de3a3147 260 int iRegIndex;
mohamedwajdi 0:ecb5de3a3147 261
mohamedwajdi 0:ecb5de3a3147 262 if( ( usAddress >= REG_IN_START )
mohamedwajdi 0:ecb5de3a3147 263 && ( usAddress + usNRegs <= REG_IN_START + REG_IN_NREGS ) )
mohamedwajdi 0:ecb5de3a3147 264 {
mohamedwajdi 0:ecb5de3a3147 265 iRegIndex = ( int )( usAddress - RegInStart );
mohamedwajdi 0:ecb5de3a3147 266 while( usNRegs > 0 )
mohamedwajdi 0:ecb5de3a3147 267 {
mohamedwajdi 0:ecb5de3a3147 268 *pucRegBuffer++ = ( unsigned char )( RegIn[iRegIndex] >> 8 );
mohamedwajdi 0:ecb5de3a3147 269 *pucRegBuffer++ = ( unsigned char )( RegIn[iRegIndex] & 0xFF );
mohamedwajdi 0:ecb5de3a3147 270 iRegIndex++;
mohamedwajdi 0:ecb5de3a3147 271 usNRegs--;
mohamedwajdi 0:ecb5de3a3147 272 }
mohamedwajdi 0:ecb5de3a3147 273 }
mohamedwajdi 0:ecb5de3a3147 274 else
mohamedwajdi 0:ecb5de3a3147 275 {
mohamedwajdi 0:ecb5de3a3147 276 eStatus = MB_ENOREG;
mohamedwajdi 0:ecb5de3a3147 277 }
mohamedwajdi 0:ecb5de3a3147 278 return eStatus;
mohamedwajdi 0:ecb5de3a3147 279 }