mohamedwajdi kharrat / Mbed 2 deprecated TP3_RBT_2GII_Ex1

Dependencies:   mbed Modbus

Committer:
mohamedwajdi
Date:
Fri Apr 02 10:15:16 2021 +0000
Revision:
0:09f6f55b32fa
TP3 RBT 2GII Ex1

Who changed what in which revision?

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