From 6f01fe62864c5b2f24adea1de37aa622189a32cb Mon Sep 17 00:00:00 2001 From: armink Date: Sat, 1 Mar 2014 17:06:13 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E3=80=90=E4=BF=AE=E6=94=B9=E3=80=91F?= =?UTF-8?q?reeModbus=E4=B8=BB=E6=9C=BA=E4=BA=8B=E4=BB=B6=E5=A4=84=E7=90=86?= =?UTF-8?q?=E5=8F=8A=E6=96=B9=E6=B3=95=E6=89=A7=E8=A1=8C=E9=83=A8=E5=88=86?= =?UTF-8?q?=E6=BA=90=E7=A0=81=EF=BC=8C=E4=BD=BF=E5=BE=97=E5=9C=A8=E4=B8=BB?= =?UTF-8?q?=E6=9C=BA=E5=B9=BF=E6=92=AD=E5=86=99=E4=BB=8E=E6=9C=BA=E7=9A=84?= =?UTF-8?q?=E8=BF=87=E7=A8=8B=E4=B8=AD=EF=BC=8C=E4=B9=9F=E5=90=8C=E6=97=B6?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=B8=BB=E6=9C=BA=E7=BC=93=E5=86=B2=E5=8C=BA?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: armink --- FreeModbus 主机分析图.vsd | Bin 192512 -> 193536 bytes FreeModbus/modbus/functions/mbfunccoils_m.c | 7 ++++- FreeModbus/modbus/functions/mbfuncdisc_m.c | 7 ++++- FreeModbus/modbus/functions/mbfuncholding_m.c | 14 ++++++++-- FreeModbus/modbus/functions/mbfuncinput_m.c | 7 ++++- FreeModbus/modbus/include/mb_m.h | 1 + FreeModbus/modbus/include/mbconfig.h | 4 +-- FreeModbus/modbus/mb_m.c | 24 ++++++++++++------ FreeModbus/modbus/rtu/mbrtu_m.c | 10 +++++--- 9 files changed, 56 insertions(+), 18 deletions(-) diff --git a/FreeModbus 主机分析图.vsd b/FreeModbus 主机分析图.vsd index 51b680934a69986930fa84abf18d73a873b092bd..6e6c68b0dd57fe8b98d944a5697a32b96c7ce256 100644 GIT binary patch delta 34954 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 diff --git a/FreeModbus/modbus/functions/mbfunccoils_m.c b/FreeModbus/modbus/functions/mbfunccoils_m.c index c78ad10..324bed5 100644 --- a/FreeModbus/modbus/functions/mbfunccoils_m.c +++ b/FreeModbus/modbus/functions/mbfunccoils_m.c @@ -120,7 +120,12 @@ eMBMasterFuncReadCoils( UCHAR * pucFrame, USHORT * usLen ) eMBException eStatus = MB_EX_NONE; eMBErrorCode eRegStatus; - if( *usLen >= MB_PDU_SIZE_MIN + MB_PDU_FUNC_READ_SIZE_MIN ) + /* If this request is broadcast, and it's read mode. This request don't need execute. */ + if ( xMBMasterRequestIsBroadcast() ) + { + eStatus = MB_EX_NONE; + } + else if ( *usLen >= MB_PDU_SIZE_MIN + MB_PDU_FUNC_READ_SIZE_MIN ) { vMBMasterGetPDUSndBuf(&ucMBFrame); usRegAddress = ( USHORT )( ucMBFrame[MB_PDU_REQ_READ_ADDR_OFF] << 8 ); diff --git a/FreeModbus/modbus/functions/mbfuncdisc_m.c b/FreeModbus/modbus/functions/mbfuncdisc_m.c index 5cc35e2..ed865ed 100644 --- a/FreeModbus/modbus/functions/mbfuncdisc_m.c +++ b/FreeModbus/modbus/functions/mbfuncdisc_m.c @@ -104,7 +104,12 @@ eMBMasterFuncReadDiscreteInputs( UCHAR * pucFrame, USHORT * usLen ) eMBException eStatus = MB_EX_NONE; eMBErrorCode eRegStatus; - if( *usLen >= MB_PDU_SIZE_MIN + MB_PDU_FUNC_READ_SIZE_MIN ) + /* If this request is broadcast, and it's read mode. This request don't need execute. */ + if ( xMBMasterRequestIsBroadcast() ) + { + eStatus = MB_EX_NONE; + } + else if( *usLen >= MB_PDU_SIZE_MIN + MB_PDU_FUNC_READ_SIZE_MIN ) { vMBMasterGetPDUSndBuf(&ucMBFrame); usRegAddress = ( USHORT )( ucMBFrame[MB_PDU_REQ_READ_ADDR_OFF] << 8 ); diff --git a/FreeModbus/modbus/functions/mbfuncholding_m.c b/FreeModbus/modbus/functions/mbfuncholding_m.c index ffbe294..ef81062 100644 --- a/FreeModbus/modbus/functions/mbfuncholding_m.c +++ b/FreeModbus/modbus/functions/mbfuncholding_m.c @@ -294,7 +294,12 @@ eMBMasterFuncReadHoldingRegister( UCHAR * pucFrame, USHORT * usLen ) eMBException eStatus = MB_EX_NONE; eMBErrorCode eRegStatus; - if( *usLen >= MB_PDU_SIZE_MIN + MB_PDU_FUNC_READ_SIZE_MIN ) + /* If this request is broadcast, and it's read mode. This request don't need execute. */ + if ( xMBMasterRequestIsBroadcast() ) + { + eStatus = MB_EX_NONE; + } + else if( *usLen >= MB_PDU_SIZE_MIN + MB_PDU_FUNC_READ_SIZE_MIN ) { vMBMasterGetPDUSndBuf(&ucMBFrame); usRegAddress = ( USHORT )( ucMBFrame[MB_PDU_REQ_READ_ADDR_OFF] << 8 ); @@ -397,7 +402,12 @@ eMBMasterFuncReadWriteMultipleHoldingRegister( UCHAR * pucFrame, USHORT * usLen eMBException eStatus = MB_EX_NONE; eMBErrorCode eRegStatus; - if( *usLen >= MB_PDU_SIZE_MIN + MB_PDU_FUNC_READWRITE_SIZE_MIN ) + /* If this request is broadcast, and it's read mode. This request don't need execute. */ + if ( xMBMasterRequestIsBroadcast() ) + { + eStatus = MB_EX_NONE; + } + else if( *usLen >= MB_PDU_SIZE_MIN + MB_PDU_FUNC_READWRITE_SIZE_MIN ) { vMBMasterGetPDUSndBuf(&ucMBFrame); usRegReadAddress = ( USHORT )( ucMBFrame[MB_PDU_REQ_READWRITE_READ_ADDR_OFF] << 8U ); diff --git a/FreeModbus/modbus/functions/mbfuncinput_m.c b/FreeModbus/modbus/functions/mbfuncinput_m.c index 728ecc0..653414f 100644 --- a/FreeModbus/modbus/functions/mbfuncinput_m.c +++ b/FreeModbus/modbus/functions/mbfuncinput_m.c @@ -103,7 +103,12 @@ eMBMasterFuncReadInputRegister( UCHAR * pucFrame, USHORT * usLen ) eMBException eStatus = MB_EX_NONE; eMBErrorCode eRegStatus; - if( *usLen >= MB_PDU_SIZE_MIN + MB_PDU_FUNC_READ_SIZE_MIN ) + /* If this request is broadcast, and it's read mode. This request don't need execute. */ + if ( xMBMasterRequestIsBroadcast() ) + { + eStatus = MB_EX_NONE; + } + else if( *usLen >= MB_PDU_SIZE_MIN + MB_PDU_FUNC_READ_SIZE_MIN ) { vMBMasterGetPDUSndBuf(&ucMBFrame); usRegAddress = ( USHORT )( ucMBFrame[MB_PDU_REQ_READ_ADDR_OFF] << 8 ); diff --git a/FreeModbus/modbus/include/mb_m.h b/FreeModbus/modbus/include/mb_m.h index abe4889..15ebb0e 100644 --- a/FreeModbus/modbus/include/mb_m.h +++ b/FreeModbus/modbus/include/mb_m.h @@ -389,6 +389,7 @@ void vMBMasterSetCBRunInMasterMode( BOOL IsMasterMode ); USHORT usMBMasterGetPDUSndLength( void ); void vMBMasterSetPDUSndLength( USHORT SendPDULength ); void vMBMasterSetCurTimerMode( eMBMasterTimerMode eMBTimerMode ); +BOOL xMBMasterRequestIsBroadcast( void ); eMBMasterErrorEventType eMBMasterGetErrorType( void ); void vMBMasterSetErrorType( eMBMasterErrorEventType errorType ); eMBMasterReqErrCode vMBMasterWaitRequestFinish( void ); diff --git a/FreeModbus/modbus/include/mbconfig.h b/FreeModbus/modbus/include/mbconfig.h index 0862c70..89030b7 100644 --- a/FreeModbus/modbus/include/mbconfig.h +++ b/FreeModbus/modbus/include/mbconfig.h @@ -116,8 +116,8 @@ PR_BEGIN_EXTERN_C * And if slave is not respond in this time,the master will process this timeout error. * Then master can send other frame */ #define MB_MASTER_TIMEOUT_MS_RESPOND (100 ) -/*! \brief The total slaves in Modbus Master system.Default 16. - * Note : The slave ID must be continuous from 0.*/ +/*! \brief The total slaves in Modbus Master system. Default 16. + * \note : The slave ID must be continuous from 1.*/ #define MB_MASTER_TOTAL_SLAVE_NUM ( 16 ) #endif diff --git a/FreeModbus/modbus/mb_m.c b/FreeModbus/modbus/mb_m.c index 962bb13..4e7c4b2 100644 --- a/FreeModbus/modbus/mb_m.c +++ b/FreeModbus/modbus/mb_m.c @@ -259,7 +259,7 @@ eMBMasterPoll( void ) static USHORT usLength; static eMBException eException; - int i; + int i , j; eMBErrorCode eStatus = MB_ENOERR; eMBMasterEventType eEvent; eMBMasterErrorEventType errorType; @@ -305,16 +305,24 @@ eMBMasterPoll( void ) for (i = 0; i < MB_FUNC_HANDLERS_MAX; i++) { /* No more function handlers registered. Abort. */ - if (xMasterFuncHandlers[i].ucFunctionCode == 0) - { + if (xMasterFuncHandlers[i].ucFunctionCode == 0) { break; } - else if (xMasterFuncHandlers[i].ucFunctionCode - == ucFunctionCode) - { + else if (xMasterFuncHandlers[i].ucFunctionCode == ucFunctionCode) { vMBMasterSetCBRunInMasterMode(TRUE); - eException = xMasterFuncHandlers[i].pxHandler(ucMBFrame, - &usLength); + /* If master request is broadcast, + * the master need execute function for all slave. + */ + if ( xMBMasterRequestIsBroadcast() ) { + usLength = usMBMasterGetPDUSndLength(); + for(j = 1; j <= MB_MASTER_TOTAL_SLAVE_NUM; j++){ + vMBMasterSetDestAddress(j); + eException = xMasterFuncHandlers[i].pxHandler(ucMBFrame, &usLength); + } + } + else { + eException = xMasterFuncHandlers[i].pxHandler(ucMBFrame, &usLength); + } vMBMasterSetCBRunInMasterMode(FALSE); break; } diff --git a/FreeModbus/modbus/rtu/mbrtu_m.c b/FreeModbus/modbus/rtu/mbrtu_m.c index 55ff739..4756f57 100644 --- a/FreeModbus/modbus/rtu/mbrtu_m.c +++ b/FreeModbus/modbus/rtu/mbrtu_m.c @@ -395,10 +395,9 @@ xMBMasterRTUTimerExpired(void) eSndState = STATE_M_TX_IDLE; vMBMasterPortTimersDisable( ); - /* If timer mode is convert delay ,then Master is idel now. */ + /* If timer mode is convert delay, the master event then turns EV_MASTER_EXECUTE status. */ if (eMasterCurTimerMode == MB_TMODE_CONVERT_DELAY) { - vMBMasterCBRequestScuuess( ); - vMBMasterRunResRelease( ); + xNeedPoll = xMBMasterPortEventPost( EV_MASTER_EXECUTE ); } return xNeedPoll; @@ -433,5 +432,10 @@ void vMBMasterSetCurTimerMode( eMBMasterTimerMode eMBTimerMode ) { eMasterCurTimerMode = eMBTimerMode; } + +/* The master request is broadcast? */ +BOOL xMBMasterRequestIsBroadcast( void ){ + return xFrameIsBroadcast; +} #endif