Test

Dependencies:   mbed Modbus

Committer:
mbedhe
Date:
Tue Oct 22 09:20:58 2019 +0000
Revision:
0:bc6e22bac566
TEst

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbedhe 0:bc6e22bac566 1 #include "mbed.h"
mbedhe 0:bc6e22bac566 2
mbedhe 0:bc6e22bac566 3 /* ----------------------- Modbus includes ----------------------------------*/
mbedhe 0:bc6e22bac566 4 #include "mb.h"
mbedhe 0:bc6e22bac566 5 #include "mbport.h"
mbedhe 0:bc6e22bac566 6
mbedhe 0:bc6e22bac566 7 /* ----------------------- Defines ------------------------------------------*/
mbedhe 0:bc6e22bac566 8 #define REG_INPUT_START 1000
mbedhe 0:bc6e22bac566 9 #define REG_INPUT_NREGS 4
mbedhe 0:bc6e22bac566 10 #define SLAVE_ID 0x0A
mbedhe 0:bc6e22bac566 11
mbedhe 0:bc6e22bac566 12 //------------------------------------
mbedhe 0:bc6e22bac566 13 // Hyperterminal configuration
mbedhe 0:bc6e22bac566 14 // 9600 bauds, 8-bit data, no parity
mbedhe 0:bc6e22bac566 15 //------------------------------------
mbedhe 0:bc6e22bac566 16
mbedhe 0:bc6e22bac566 17 Serial pc_port(SERIAL_TX, SERIAL_RX);
mbedhe 0:bc6e22bac566 18
mbedhe 0:bc6e22bac566 19 DigitalOut myled(LED1);
mbedhe 0:bc6e22bac566 20 /*
mbedhe 0:bc6e22bac566 21 int main()
mbedhe 0:bc6e22bac566 22 {
mbedhe 0:bc6e22bac566 23 int i = 1;
mbedhe 0:bc6e22bac566 24 pc_port.printf("Hello World !\n");
mbedhe 0:bc6e22bac566 25 while(1) {
mbedhe 0:bc6e22bac566 26 wait(1);
mbedhe 0:bc6e22bac566 27 pc_port.printf("This program runs since %d seconds.\n", i++);
mbedhe 0:bc6e22bac566 28 myled = !myled;
mbedhe 0:bc6e22bac566 29 }
mbedhe 0:bc6e22bac566 30 }
mbedhe 0:bc6e22bac566 31 */
mbedhe 0:bc6e22bac566 32
mbedhe 0:bc6e22bac566 33 /* ----------------------- Static variables ---------------------------------*/
mbedhe 0:bc6e22bac566 34 static USHORT usRegInputStart = REG_INPUT_START;
mbedhe 0:bc6e22bac566 35 static USHORT usRegInputBuf[REG_INPUT_NREGS];
mbedhe 0:bc6e22bac566 36
mbedhe 0:bc6e22bac566 37 /* ----------------------- Start implementation -----------------------------*/
mbedhe 0:bc6e22bac566 38 int
mbedhe 0:bc6e22bac566 39 main( void )
mbedhe 0:bc6e22bac566 40 {
mbedhe 0:bc6e22bac566 41 eMBErrorCode eStatus;
mbedhe 0:bc6e22bac566 42
mbedhe 0:bc6e22bac566 43 eStatus = eMBInit( MB_RTU, SLAVE_ID, 0, 9600, MB_PAR_NONE );
mbedhe 0:bc6e22bac566 44
mbedhe 0:bc6e22bac566 45 /* Enable the Modbus Protocol Stack. */
mbedhe 0:bc6e22bac566 46 eStatus = eMBEnable( );
mbedhe 0:bc6e22bac566 47
mbedhe 0:bc6e22bac566 48 // Initialise some registers
mbedhe 0:bc6e22bac566 49 usRegInputBuf[1] = 0x1234;
mbedhe 0:bc6e22bac566 50 usRegInputBuf[2] = 0x5678;
mbedhe 0:bc6e22bac566 51 usRegInputBuf[3] = 0x9abc;
mbedhe 0:bc6e22bac566 52
mbedhe 0:bc6e22bac566 53 for( ;; )
mbedhe 0:bc6e22bac566 54 {
mbedhe 0:bc6e22bac566 55 ( void )eMBPoll( );
mbedhe 0:bc6e22bac566 56
mbedhe 0:bc6e22bac566 57 /* Here we simply count the number of poll cycles. */
mbedhe 0:bc6e22bac566 58 usRegInputBuf[0]++;
mbedhe 0:bc6e22bac566 59 }
mbedhe 0:bc6e22bac566 60 }
mbedhe 0:bc6e22bac566 61
mbedhe 0:bc6e22bac566 62 eMBErrorCode
mbedhe 0:bc6e22bac566 63 eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs )
mbedhe 0:bc6e22bac566 64 {
mbedhe 0:bc6e22bac566 65 eMBErrorCode eStatus = MB_ENOERR;
mbedhe 0:bc6e22bac566 66 int iRegIndex;
mbedhe 0:bc6e22bac566 67
mbedhe 0:bc6e22bac566 68 if( ( usAddress >= REG_INPUT_START )
mbedhe 0:bc6e22bac566 69 && ( usAddress + usNRegs <= REG_INPUT_START + REG_INPUT_NREGS ) )
mbedhe 0:bc6e22bac566 70 {
mbedhe 0:bc6e22bac566 71 iRegIndex = ( int )( usAddress - usRegInputStart );
mbedhe 0:bc6e22bac566 72 while( usNRegs > 0 )
mbedhe 0:bc6e22bac566 73 {
mbedhe 0:bc6e22bac566 74 *pucRegBuffer++ =
mbedhe 0:bc6e22bac566 75 ( unsigned char )( usRegInputBuf[iRegIndex] >> 8 );
mbedhe 0:bc6e22bac566 76 *pucRegBuffer++ =
mbedhe 0:bc6e22bac566 77 ( unsigned char )( usRegInputBuf[iRegIndex] & 0xFF );
mbedhe 0:bc6e22bac566 78 iRegIndex++;
mbedhe 0:bc6e22bac566 79 usNRegs--;
mbedhe 0:bc6e22bac566 80 }
mbedhe 0:bc6e22bac566 81 }
mbedhe 0:bc6e22bac566 82 else
mbedhe 0:bc6e22bac566 83 {
mbedhe 0:bc6e22bac566 84 eStatus = MB_ENOREG;
mbedhe 0:bc6e22bac566 85 }
mbedhe 0:bc6e22bac566 86
mbedhe 0:bc6e22bac566 87 return eStatus;
mbedhe 0:bc6e22bac566 88 }
mbedhe 0:bc6e22bac566 89
mbedhe 0:bc6e22bac566 90 eMBErrorCode
mbedhe 0:bc6e22bac566 91 eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegisterMode eMode )
mbedhe 0:bc6e22bac566 92 {
mbedhe 0:bc6e22bac566 93 eMBErrorCode eStatus = MB_ENOERR;
mbedhe 0:bc6e22bac566 94 int iRegIndex;
mbedhe 0:bc6e22bac566 95
mbedhe 0:bc6e22bac566 96 if (eMode == MB_REG_READ)
mbedhe 0:bc6e22bac566 97 {
mbedhe 0:bc6e22bac566 98 if( ( usAddress >= REG_INPUT_START )
mbedhe 0:bc6e22bac566 99 && ( usAddress + usNRegs <= REG_INPUT_START + REG_INPUT_NREGS ) )
mbedhe 0:bc6e22bac566 100 {
mbedhe 0:bc6e22bac566 101 iRegIndex = ( int )( usAddress - usRegInputStart );
mbedhe 0:bc6e22bac566 102 while( usNRegs > 0 )
mbedhe 0:bc6e22bac566 103 {
mbedhe 0:bc6e22bac566 104 *pucRegBuffer++ =
mbedhe 0:bc6e22bac566 105 ( unsigned char )( usRegInputBuf[iRegIndex] >> 8 );
mbedhe 0:bc6e22bac566 106 *pucRegBuffer++ =
mbedhe 0:bc6e22bac566 107 ( unsigned char )( usRegInputBuf[iRegIndex] & 0xFF );
mbedhe 0:bc6e22bac566 108 iRegIndex++;
mbedhe 0:bc6e22bac566 109 usNRegs--;
mbedhe 0:bc6e22bac566 110 }
mbedhe 0:bc6e22bac566 111 }
mbedhe 0:bc6e22bac566 112 }
mbedhe 0:bc6e22bac566 113
mbedhe 0:bc6e22bac566 114 if (eMode == MB_REG_WRITE)
mbedhe 0:bc6e22bac566 115 {
mbedhe 0:bc6e22bac566 116 if( ( usAddress >= REG_INPUT_START )
mbedhe 0:bc6e22bac566 117 && ( usAddress + usNRegs <= REG_INPUT_START + REG_INPUT_NREGS ) )
mbedhe 0:bc6e22bac566 118 {
mbedhe 0:bc6e22bac566 119 iRegIndex = ( int )( usAddress - usRegInputStart );
mbedhe 0:bc6e22bac566 120 while( usNRegs > 0 )
mbedhe 0:bc6e22bac566 121 {
mbedhe 0:bc6e22bac566 122 usRegInputBuf[iRegIndex] = ((unsigned int) *pucRegBuffer << 8) | ((unsigned int) *(pucRegBuffer+1));
mbedhe 0:bc6e22bac566 123 pucRegBuffer+=2;
mbedhe 0:bc6e22bac566 124 iRegIndex++;
mbedhe 0:bc6e22bac566 125 usNRegs--;
mbedhe 0:bc6e22bac566 126 }
mbedhe 0:bc6e22bac566 127 }
mbedhe 0:bc6e22bac566 128 }
mbedhe 0:bc6e22bac566 129
mbedhe 0:bc6e22bac566 130 return eStatus;
mbedhe 0:bc6e22bac566 131 }
mbedhe 0:bc6e22bac566 132
mbedhe 0:bc6e22bac566 133
mbedhe 0:bc6e22bac566 134 eMBErrorCode
mbedhe 0:bc6e22bac566 135 eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNCoils,
mbedhe 0:bc6e22bac566 136 eMBRegisterMode eMode )
mbedhe 0:bc6e22bac566 137 {
mbedhe 0:bc6e22bac566 138 return MB_ENOREG;
mbedhe 0:bc6e22bac566 139 }
mbedhe 0:bc6e22bac566 140
mbedhe 0:bc6e22bac566 141 eMBErrorCode
mbedhe 0:bc6e22bac566 142 eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNDiscrete )
mbedhe 0:bc6e22bac566 143 {
mbedhe 0:bc6e22bac566 144 return MB_ENOREG;
mbedhe 0:bc6e22bac566 145 }
mbedhe 0:bc6e22bac566 146