Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
luozhenger
rt-thread
提交
39465797
R
rt-thread
项目概览
luozhenger
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
39465797
编写于
11月 06, 2013
作者:
B
Bernard Xiong
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #194 from grissiom/eol-issue
freemodbus: fix eol
上级
fd281517
61ffa2c4
变更
44
展开全部
隐藏空白更改
内联
并排
Showing
44 changed file
with
8412 addition
and
8412 deletion
+8412
-8412
components/net/freemodbus-v1.6.0/Changelog.txt
components/net/freemodbus-v1.6.0/Changelog.txt
+329
-329
components/net/freemodbus-v1.6.0/bsd.txt
components/net/freemodbus-v1.6.0/bsd.txt
+25
-25
components/net/freemodbus-v1.6.0/gpl.txt
components/net/freemodbus-v1.6.0/gpl.txt
+340
-340
components/net/freemodbus-v1.6.0/lgpl.txt
components/net/freemodbus-v1.6.0/lgpl.txt
+504
-504
components/net/freemodbus-v1.6.0/modbus/ascii/mbascii.c
components/net/freemodbus-v1.6.0/modbus/ascii/mbascii.c
+485
-485
components/net/freemodbus-v1.6.0/modbus/ascii/mbascii.h
components/net/freemodbus-v1.6.0/modbus/ascii/mbascii.h
+56
-56
components/net/freemodbus-v1.6.0/modbus/functions/mbfunccoils.c
...ents/net/freemodbus-v1.6.0/modbus/functions/mbfunccoils.c
+269
-269
components/net/freemodbus-v1.6.0/modbus/functions/mbfunccoils_m.c
...ts/net/freemodbus-v1.6.0/modbus/functions/mbfunccoils_m.c
+345
-345
components/net/freemodbus-v1.6.0/modbus/functions/mbfuncdiag.c
...nents/net/freemodbus-v1.6.0/modbus/functions/mbfuncdiag.c
+29
-29
components/net/freemodbus-v1.6.0/modbus/functions/mbfuncdisc.c
...nents/net/freemodbus-v1.6.0/modbus/functions/mbfuncdisc.c
+125
-125
components/net/freemodbus-v1.6.0/modbus/functions/mbfuncdisc_m.c
...nts/net/freemodbus-v1.6.0/modbus/functions/mbfuncdisc_m.c
+146
-146
components/net/freemodbus-v1.6.0/modbus/functions/mbfuncholding.c
...ts/net/freemodbus-v1.6.0/modbus/functions/mbfuncholding.c
+308
-308
components/net/freemodbus-v1.6.0/modbus/functions/mbfuncholding_m.c
.../net/freemodbus-v1.6.0/modbus/functions/mbfuncholding_m.c
+396
-396
components/net/freemodbus-v1.6.0/modbus/functions/mbfuncinput.c
...ents/net/freemodbus-v1.6.0/modbus/functions/mbfuncinput.c
+122
-122
components/net/freemodbus-v1.6.0/modbus/functions/mbfuncinput_m.c
...ts/net/freemodbus-v1.6.0/modbus/functions/mbfuncinput_m.c
+132
-132
components/net/freemodbus-v1.6.0/modbus/functions/mbfuncother.c
...ents/net/freemodbus-v1.6.0/modbus/functions/mbfuncother.c
+88
-88
components/net/freemodbus-v1.6.0/modbus/functions/mbutils.c
components/net/freemodbus-v1.6.0/modbus/functions/mbutils.c
+141
-141
components/net/freemodbus-v1.6.0/modbus/include/mb.h
components/net/freemodbus-v1.6.0/modbus/include/mb.h
+417
-417
components/net/freemodbus-v1.6.0/modbus/include/mb_m.h
components/net/freemodbus-v1.6.0/modbus/include/mb_m.h
+258
-258
components/net/freemodbus-v1.6.0/modbus/include/mbconfig.h
components/net/freemodbus-v1.6.0/modbus/include/mbconfig.h
+124
-124
components/net/freemodbus-v1.6.0/modbus/include/mbframe.h
components/net/freemodbus-v1.6.0/modbus/include/mbframe.h
+87
-87
components/net/freemodbus-v1.6.0/modbus/include/mbfunc.h
components/net/freemodbus-v1.6.0/modbus/include/mbfunc.h
+80
-80
components/net/freemodbus-v1.6.0/modbus/include/mbport.h
components/net/freemodbus-v1.6.0/modbus/include/mbport.h
+175
-175
components/net/freemodbus-v1.6.0/modbus/include/mbproto.h
components/net/freemodbus-v1.6.0/modbus/include/mbproto.h
+83
-83
components/net/freemodbus-v1.6.0/modbus/include/mbutils.h
components/net/freemodbus-v1.6.0/modbus/include/mbutils.h
+108
-108
components/net/freemodbus-v1.6.0/modbus/mb.c
components/net/freemodbus-v1.6.0/modbus/mb.c
+412
-412
components/net/freemodbus-v1.6.0/modbus/mb_m.c
components/net/freemodbus-v1.6.0/modbus/mb_m.c
+362
-362
components/net/freemodbus-v1.6.0/modbus/rtu/mbcrc.c
components/net/freemodbus-v1.6.0/modbus/rtu/mbcrc.c
+98
-98
components/net/freemodbus-v1.6.0/modbus/rtu/mbcrc.h
components/net/freemodbus-v1.6.0/modbus/rtu/mbcrc.h
+36
-36
components/net/freemodbus-v1.6.0/modbus/rtu/mbrtu.c
components/net/freemodbus-v1.6.0/modbus/rtu/mbrtu.c
+354
-354
components/net/freemodbus-v1.6.0/modbus/rtu/mbrtu.h
components/net/freemodbus-v1.6.0/modbus/rtu/mbrtu.h
+64
-64
components/net/freemodbus-v1.6.0/modbus/rtu/mbrtu_m.c
components/net/freemodbus-v1.6.0/modbus/rtu/mbrtu_m.c
+429
-429
components/net/freemodbus-v1.6.0/modbus/tcp/mbtcp.c
components/net/freemodbus-v1.6.0/modbus/tcp/mbtcp.c
+158
-158
components/net/freemodbus-v1.6.0/modbus/tcp/mbtcp.h
components/net/freemodbus-v1.6.0/modbus/tcp/mbtcp.h
+53
-53
components/net/freemodbus-v1.6.0/port/port.c
components/net/freemodbus-v1.6.0/port/port.c
+39
-39
components/net/freemodbus-v1.6.0/port/port.h
components/net/freemodbus-v1.6.0/port/port.h
+68
-68
components/net/freemodbus-v1.6.0/port/portevent.c
components/net/freemodbus-v1.6.0/port/portevent.c
+58
-58
components/net/freemodbus-v1.6.0/port/portevent_m.c
components/net/freemodbus-v1.6.0/port/portevent_m.c
+61
-61
components/net/freemodbus-v1.6.0/port/portserial.c
components/net/freemodbus-v1.6.0/port/portserial.c
+189
-189
components/net/freemodbus-v1.6.0/port/portserial_m.c
components/net/freemodbus-v1.6.0/port/portserial_m.c
+192
-192
components/net/freemodbus-v1.6.0/port/porttimer.c
components/net/freemodbus-v1.6.0/port/porttimer.c
+107
-107
components/net/freemodbus-v1.6.0/port/porttimer_m.c
components/net/freemodbus-v1.6.0/port/porttimer_m.c
+157
-157
components/net/freemodbus-v1.6.0/port/user_mb_app.c
components/net/freemodbus-v1.6.0/port/user_mb_app.c
+349
-349
components/net/freemodbus-v1.6.0/port/user_mb_app.h
components/net/freemodbus-v1.6.0/port/user_mb_app.h
+54
-54
未找到文件。
components/net/freemodbus-v1.6.0/Changelog.txt
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/bsd.txt
浏览文件 @
39465797
Copyright (c) 2006 Christian Walter <wolti@sil.at>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Copyright (c) 2006 Christian Walter <wolti@sil.at>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
components/net/freemodbus-v1.6.0/gpl.txt
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/lgpl.txt
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/ascii/mbascii.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/ascii/mbascii.h
浏览文件 @
39465797
/*
* FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU.
* Copyright (c) 2006 Christian Walter <wolti@sil.at>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* File: $Id: mbascii.h,v 1.8 2006/12/07 22:10:34 wolti Exp $
*/
#ifndef _MB_ASCII_H
#define _MB_ASCII_H
#ifdef __cplusplus
PR_BEGIN_EXTERN_C
#endif
#if MB_SLAVE_ASCII_ENABLED > 0
eMBErrorCode
eMBASCIIInit
(
UCHAR
slaveAddress
,
UCHAR
ucPort
,
ULONG
ulBaudRate
,
eMBParity
eParity
);
void
eMBASCIIStart
(
void
);
void
eMBASCIIStop
(
void
);
eMBErrorCode
eMBASCIIReceive
(
UCHAR
*
pucRcvAddress
,
UCHAR
**
pucFrame
,
USHORT
*
pusLength
);
eMBErrorCode
eMBASCIISend
(
UCHAR
slaveAddress
,
const
UCHAR
*
pucFrame
,
USHORT
usLength
);
BOOL
xMBASCIIReceiveFSM
(
void
);
BOOL
xMBASCIITransmitFSM
(
void
);
BOOL
xMBASCIITimerT1SExpired
(
void
);
#endif
#ifdef __cplusplus
PR_END_EXTERN_C
#endif
#endif
/*
* FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU.
* Copyright (c) 2006 Christian Walter <wolti@sil.at>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* File: $Id: mbascii.h,v 1.8 2006/12/07 22:10:34 wolti Exp $
*/
#ifndef _MB_ASCII_H
#define _MB_ASCII_H
#ifdef __cplusplus
PR_BEGIN_EXTERN_C
#endif
#if MB_SLAVE_ASCII_ENABLED > 0
eMBErrorCode
eMBASCIIInit
(
UCHAR
slaveAddress
,
UCHAR
ucPort
,
ULONG
ulBaudRate
,
eMBParity
eParity
);
void
eMBASCIIStart
(
void
);
void
eMBASCIIStop
(
void
);
eMBErrorCode
eMBASCIIReceive
(
UCHAR
*
pucRcvAddress
,
UCHAR
**
pucFrame
,
USHORT
*
pusLength
);
eMBErrorCode
eMBASCIISend
(
UCHAR
slaveAddress
,
const
UCHAR
*
pucFrame
,
USHORT
usLength
);
BOOL
xMBASCIIReceiveFSM
(
void
);
BOOL
xMBASCIITransmitFSM
(
void
);
BOOL
xMBASCIITimerT1SExpired
(
void
);
#endif
#ifdef __cplusplus
PR_END_EXTERN_C
#endif
#endif
components/net/freemodbus-v1.6.0/modbus/functions/mbfunccoils.c
浏览文件 @
39465797
/*
* FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU.
* Copyright (c) 2006 Christian Walter <wolti@sil.at>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* File: $Id: mbfunccoils.c,v 1.8 2007/02/18 23:47:16 wolti Exp $
*/
/* ----------------------- System includes ----------------------------------*/
#include "stdlib.h"
#include "string.h"
/* ----------------------- Platform includes --------------------------------*/
#include "port.h"
/* ----------------------- Modbus includes ----------------------------------*/
#include "mb.h"
#include "mbframe.h"
#include "mbproto.h"
#include "mbconfig.h"
/* ----------------------- Defines ------------------------------------------*/
#define MB_PDU_FUNC_READ_ADDR_OFF ( MB_PDU_DATA_OFF )
#define MB_PDU_FUNC_READ_COILCNT_OFF ( MB_PDU_DATA_OFF + 2 )
#define MB_PDU_FUNC_READ_SIZE ( 4 )
#define MB_PDU_FUNC_READ_COILCNT_MAX ( 0x07D0 )
#define MB_PDU_FUNC_WRITE_ADDR_OFF ( MB_PDU_DATA_OFF )
#define MB_PDU_FUNC_WRITE_VALUE_OFF ( MB_PDU_DATA_OFF + 2 )
#define MB_PDU_FUNC_WRITE_SIZE ( 4 )
#define MB_PDU_FUNC_WRITE_MUL_ADDR_OFF ( MB_PDU_DATA_OFF )
#define MB_PDU_FUNC_WRITE_MUL_COILCNT_OFF ( MB_PDU_DATA_OFF + 2 )
#define MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF ( MB_PDU_DATA_OFF + 4 )
#define MB_PDU_FUNC_WRITE_MUL_VALUES_OFF ( MB_PDU_DATA_OFF + 5 )
#define MB_PDU_FUNC_WRITE_MUL_SIZE_MIN ( 5 )
#define MB_PDU_FUNC_WRITE_MUL_COILCNT_MAX ( 0x07B0 )
/* ----------------------- Static functions ---------------------------------*/
eMBException
prveMBError2Exception
(
eMBErrorCode
eErrorCode
);
/* ----------------------- Start implementation -----------------------------*/
#if MB_FUNC_READ_COILS_ENABLED > 0
eMBException
eMBFuncReadCoils
(
UCHAR
*
pucFrame
,
USHORT
*
usLen
)
{
USHORT
usRegAddress
;
USHORT
usCoilCount
;
UCHAR
ucNBytes
;
UCHAR
*
pucFrameCur
;
eMBException
eStatus
=
MB_EX_NONE
;
eMBErrorCode
eRegStatus
;
if
(
*
usLen
==
(
MB_PDU_FUNC_READ_SIZE
+
MB_PDU_SIZE_MIN
)
)
{
usRegAddress
=
(
USHORT
)(
pucFrame
[
MB_PDU_FUNC_READ_ADDR_OFF
]
<<
8
);
usRegAddress
|=
(
USHORT
)(
pucFrame
[
MB_PDU_FUNC_READ_ADDR_OFF
+
1
]
);
usRegAddress
++
;
usCoilCount
=
(
USHORT
)(
pucFrame
[
MB_PDU_FUNC_READ_COILCNT_OFF
]
<<
8
);
usCoilCount
|=
(
USHORT
)(
pucFrame
[
MB_PDU_FUNC_READ_COILCNT_OFF
+
1
]
);
/* Check if the number of registers to read is valid. If not
* return Modbus illegal data value exception.
*/
if
(
(
usCoilCount
>=
1
)
&&
(
usCoilCount
<
MB_PDU_FUNC_READ_COILCNT_MAX
)
)
{
/* Set the current PDU data pointer to the beginning. */
pucFrameCur
=
&
pucFrame
[
MB_PDU_FUNC_OFF
];
*
usLen
=
MB_PDU_FUNC_OFF
;
/* First byte contains the function code. */
*
pucFrameCur
++
=
MB_FUNC_READ_COILS
;
*
usLen
+=
1
;
/* Test if the quantity of coils is a multiple of 8. If not last
* byte is only partially field with unused coils set to zero. */
if
(
(
usCoilCount
&
0x0007
)
!=
0
)
{
ucNBytes
=
(
UCHAR
)(
usCoilCount
/
8
+
1
);
}
else
{
ucNBytes
=
(
UCHAR
)(
usCoilCount
/
8
);
}
*
pucFrameCur
++
=
ucNBytes
;
*
usLen
+=
1
;
eRegStatus
=
eMBRegCoilsCB
(
pucFrameCur
,
usRegAddress
,
usCoilCount
,
MB_REG_READ
);
/* If an error occured convert it into a Modbus exception. */
if
(
eRegStatus
!=
MB_ENOERR
)
{
eStatus
=
prveMBError2Exception
(
eRegStatus
);
}
else
{
/* The response contains the function code, the starting address
* and the quantity of registers. We reuse the old values in the
* buffer because they are still valid. */
*
usLen
+=
ucNBytes
;;
}
}
else
{
eStatus
=
MB_EX_ILLEGAL_DATA_VALUE
;
}
}
else
{
/* Can't be a valid read coil register request because the length
* is incorrect. */
eStatus
=
MB_EX_ILLEGAL_DATA_VALUE
;
}
return
eStatus
;
}
#endif
#if MB_FUNC_WRITE_COIL_ENABLED > 0
eMBException
eMBFuncWriteCoil
(
UCHAR
*
pucFrame
,
USHORT
*
usLen
)
{
USHORT
usRegAddress
;
UCHAR
ucBuf
[
2
];
eMBException
eStatus
=
MB_EX_NONE
;
eMBErrorCode
eRegStatus
;
if
(
*
usLen
==
(
MB_PDU_FUNC_WRITE_SIZE
+
MB_PDU_SIZE_MIN
)
)
{
usRegAddress
=
(
USHORT
)(
pucFrame
[
MB_PDU_FUNC_WRITE_ADDR_OFF
]
<<
8
);
usRegAddress
|=
(
USHORT
)(
pucFrame
[
MB_PDU_FUNC_WRITE_ADDR_OFF
+
1
]
);
usRegAddress
++
;
if
(
(
pucFrame
[
MB_PDU_FUNC_WRITE_VALUE_OFF
+
1
]
==
0x00
)
&&
(
(
pucFrame
[
MB_PDU_FUNC_WRITE_VALUE_OFF
]
==
0xFF
)
||
(
pucFrame
[
MB_PDU_FUNC_WRITE_VALUE_OFF
]
==
0x00
)
)
)
{
ucBuf
[
1
]
=
0
;
if
(
pucFrame
[
MB_PDU_FUNC_WRITE_VALUE_OFF
]
==
0xFF
)
{
ucBuf
[
0
]
=
1
;
}
else
{
ucBuf
[
0
]
=
0
;
}
eRegStatus
=
eMBRegCoilsCB
(
&
ucBuf
[
0
],
usRegAddress
,
1
,
MB_REG_WRITE
);
/* If an error occured convert it into a Modbus exception. */
if
(
eRegStatus
!=
MB_ENOERR
)
{
eStatus
=
prveMBError2Exception
(
eRegStatus
);
}
}
else
{
eStatus
=
MB_EX_ILLEGAL_DATA_VALUE
;
}
}
else
{
/* Can't be a valid write coil register request because the length
* is incorrect. */
eStatus
=
MB_EX_ILLEGAL_DATA_VALUE
;
}
return
eStatus
;
}
#endif
#if MB_FUNC_WRITE_MULTIPLE_COILS_ENABLED > 0
eMBException
eMBFuncWriteMultipleCoils
(
UCHAR
*
pucFrame
,
USHORT
*
usLen
)
{
USHORT
usRegAddress
;
USHORT
usCoilCnt
;
UCHAR
ucByteCount
;
UCHAR
ucByteCountVerify
;
eMBException
eStatus
=
MB_EX_NONE
;
eMBErrorCode
eRegStatus
;
if
(
*
usLen
>
(
MB_PDU_FUNC_WRITE_SIZE
+
MB_PDU_SIZE_MIN
)
)
{
usRegAddress
=
(
USHORT
)(
pucFrame
[
MB_PDU_FUNC_WRITE_MUL_ADDR_OFF
]
<<
8
);
usRegAddress
|=
(
USHORT
)(
pucFrame
[
MB_PDU_FUNC_WRITE_MUL_ADDR_OFF
+
1
]
);
usRegAddress
++
;
usCoilCnt
=
(
USHORT
)(
pucFrame
[
MB_PDU_FUNC_WRITE_MUL_COILCNT_OFF
]
<<
8
);
usCoilCnt
|=
(
USHORT
)(
pucFrame
[
MB_PDU_FUNC_WRITE_MUL_COILCNT_OFF
+
1
]
);
ucByteCount
=
pucFrame
[
MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF
];
/* Compute the number of expected bytes in the request. */
if
(
(
usCoilCnt
&
0x0007
)
!=
0
)
{
ucByteCountVerify
=
(
UCHAR
)(
usCoilCnt
/
8
+
1
);
}
else
{
ucByteCountVerify
=
(
UCHAR
)(
usCoilCnt
/
8
);
}
if
(
(
usCoilCnt
>=
1
)
&&
(
usCoilCnt
<=
MB_PDU_FUNC_WRITE_MUL_COILCNT_MAX
)
&&
(
ucByteCountVerify
==
ucByteCount
)
)
{
eRegStatus
=
eMBRegCoilsCB
(
&
pucFrame
[
MB_PDU_FUNC_WRITE_MUL_VALUES_OFF
],
usRegAddress
,
usCoilCnt
,
MB_REG_WRITE
);
/* If an error occured convert it into a Modbus exception. */
if
(
eRegStatus
!=
MB_ENOERR
)
{
eStatus
=
prveMBError2Exception
(
eRegStatus
);
}
else
{
/* The response contains the function code, the starting address
* and the quantity of registers. We reuse the old values in the
* buffer because they are still valid. */
*
usLen
=
MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF
;
}
}
else
{
eStatus
=
MB_EX_ILLEGAL_DATA_VALUE
;
}
}
else
{
/* Can't be a valid write coil register request because the length
* is incorrect. */
eStatus
=
MB_EX_ILLEGAL_DATA_VALUE
;
}
return
eStatus
;
}
#endif
/*
* FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU.
* Copyright (c) 2006 Christian Walter <wolti@sil.at>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* File: $Id: mbfunccoils.c,v 1.8 2007/02/18 23:47:16 wolti Exp $
*/
/* ----------------------- System includes ----------------------------------*/
#include "stdlib.h"
#include "string.h"
/* ----------------------- Platform includes --------------------------------*/
#include "port.h"
/* ----------------------- Modbus includes ----------------------------------*/
#include "mb.h"
#include "mbframe.h"
#include "mbproto.h"
#include "mbconfig.h"
/* ----------------------- Defines ------------------------------------------*/
#define MB_PDU_FUNC_READ_ADDR_OFF ( MB_PDU_DATA_OFF )
#define MB_PDU_FUNC_READ_COILCNT_OFF ( MB_PDU_DATA_OFF + 2 )
#define MB_PDU_FUNC_READ_SIZE ( 4 )
#define MB_PDU_FUNC_READ_COILCNT_MAX ( 0x07D0 )
#define MB_PDU_FUNC_WRITE_ADDR_OFF ( MB_PDU_DATA_OFF )
#define MB_PDU_FUNC_WRITE_VALUE_OFF ( MB_PDU_DATA_OFF + 2 )
#define MB_PDU_FUNC_WRITE_SIZE ( 4 )
#define MB_PDU_FUNC_WRITE_MUL_ADDR_OFF ( MB_PDU_DATA_OFF )
#define MB_PDU_FUNC_WRITE_MUL_COILCNT_OFF ( MB_PDU_DATA_OFF + 2 )
#define MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF ( MB_PDU_DATA_OFF + 4 )
#define MB_PDU_FUNC_WRITE_MUL_VALUES_OFF ( MB_PDU_DATA_OFF + 5 )
#define MB_PDU_FUNC_WRITE_MUL_SIZE_MIN ( 5 )
#define MB_PDU_FUNC_WRITE_MUL_COILCNT_MAX ( 0x07B0 )
/* ----------------------- Static functions ---------------------------------*/
eMBException
prveMBError2Exception
(
eMBErrorCode
eErrorCode
);
/* ----------------------- Start implementation -----------------------------*/
#if MB_FUNC_READ_COILS_ENABLED > 0
eMBException
eMBFuncReadCoils
(
UCHAR
*
pucFrame
,
USHORT
*
usLen
)
{
USHORT
usRegAddress
;
USHORT
usCoilCount
;
UCHAR
ucNBytes
;
UCHAR
*
pucFrameCur
;
eMBException
eStatus
=
MB_EX_NONE
;
eMBErrorCode
eRegStatus
;
if
(
*
usLen
==
(
MB_PDU_FUNC_READ_SIZE
+
MB_PDU_SIZE_MIN
)
)
{
usRegAddress
=
(
USHORT
)(
pucFrame
[
MB_PDU_FUNC_READ_ADDR_OFF
]
<<
8
);
usRegAddress
|=
(
USHORT
)(
pucFrame
[
MB_PDU_FUNC_READ_ADDR_OFF
+
1
]
);
usRegAddress
++
;
usCoilCount
=
(
USHORT
)(
pucFrame
[
MB_PDU_FUNC_READ_COILCNT_OFF
]
<<
8
);
usCoilCount
|=
(
USHORT
)(
pucFrame
[
MB_PDU_FUNC_READ_COILCNT_OFF
+
1
]
);
/* Check if the number of registers to read is valid. If not
* return Modbus illegal data value exception.
*/
if
(
(
usCoilCount
>=
1
)
&&
(
usCoilCount
<
MB_PDU_FUNC_READ_COILCNT_MAX
)
)
{
/* Set the current PDU data pointer to the beginning. */
pucFrameCur
=
&
pucFrame
[
MB_PDU_FUNC_OFF
];
*
usLen
=
MB_PDU_FUNC_OFF
;
/* First byte contains the function code. */
*
pucFrameCur
++
=
MB_FUNC_READ_COILS
;
*
usLen
+=
1
;
/* Test if the quantity of coils is a multiple of 8. If not last
* byte is only partially field with unused coils set to zero. */
if
(
(
usCoilCount
&
0x0007
)
!=
0
)
{
ucNBytes
=
(
UCHAR
)(
usCoilCount
/
8
+
1
);
}
else
{
ucNBytes
=
(
UCHAR
)(
usCoilCount
/
8
);
}
*
pucFrameCur
++
=
ucNBytes
;
*
usLen
+=
1
;
eRegStatus
=
eMBRegCoilsCB
(
pucFrameCur
,
usRegAddress
,
usCoilCount
,
MB_REG_READ
);
/* If an error occured convert it into a Modbus exception. */
if
(
eRegStatus
!=
MB_ENOERR
)
{
eStatus
=
prveMBError2Exception
(
eRegStatus
);
}
else
{
/* The response contains the function code, the starting address
* and the quantity of registers. We reuse the old values in the
* buffer because they are still valid. */
*
usLen
+=
ucNBytes
;;
}
}
else
{
eStatus
=
MB_EX_ILLEGAL_DATA_VALUE
;
}
}
else
{
/* Can't be a valid read coil register request because the length
* is incorrect. */
eStatus
=
MB_EX_ILLEGAL_DATA_VALUE
;
}
return
eStatus
;
}
#endif
#if MB_FUNC_WRITE_COIL_ENABLED > 0
eMBException
eMBFuncWriteCoil
(
UCHAR
*
pucFrame
,
USHORT
*
usLen
)
{
USHORT
usRegAddress
;
UCHAR
ucBuf
[
2
];
eMBException
eStatus
=
MB_EX_NONE
;
eMBErrorCode
eRegStatus
;
if
(
*
usLen
==
(
MB_PDU_FUNC_WRITE_SIZE
+
MB_PDU_SIZE_MIN
)
)
{
usRegAddress
=
(
USHORT
)(
pucFrame
[
MB_PDU_FUNC_WRITE_ADDR_OFF
]
<<
8
);
usRegAddress
|=
(
USHORT
)(
pucFrame
[
MB_PDU_FUNC_WRITE_ADDR_OFF
+
1
]
);
usRegAddress
++
;
if
(
(
pucFrame
[
MB_PDU_FUNC_WRITE_VALUE_OFF
+
1
]
==
0x00
)
&&
(
(
pucFrame
[
MB_PDU_FUNC_WRITE_VALUE_OFF
]
==
0xFF
)
||
(
pucFrame
[
MB_PDU_FUNC_WRITE_VALUE_OFF
]
==
0x00
)
)
)
{
ucBuf
[
1
]
=
0
;
if
(
pucFrame
[
MB_PDU_FUNC_WRITE_VALUE_OFF
]
==
0xFF
)
{
ucBuf
[
0
]
=
1
;
}
else
{
ucBuf
[
0
]
=
0
;
}
eRegStatus
=
eMBRegCoilsCB
(
&
ucBuf
[
0
],
usRegAddress
,
1
,
MB_REG_WRITE
);
/* If an error occured convert it into a Modbus exception. */
if
(
eRegStatus
!=
MB_ENOERR
)
{
eStatus
=
prveMBError2Exception
(
eRegStatus
);
}
}
else
{
eStatus
=
MB_EX_ILLEGAL_DATA_VALUE
;
}
}
else
{
/* Can't be a valid write coil register request because the length
* is incorrect. */
eStatus
=
MB_EX_ILLEGAL_DATA_VALUE
;
}
return
eStatus
;
}
#endif
#if MB_FUNC_WRITE_MULTIPLE_COILS_ENABLED > 0
eMBException
eMBFuncWriteMultipleCoils
(
UCHAR
*
pucFrame
,
USHORT
*
usLen
)
{
USHORT
usRegAddress
;
USHORT
usCoilCnt
;
UCHAR
ucByteCount
;
UCHAR
ucByteCountVerify
;
eMBException
eStatus
=
MB_EX_NONE
;
eMBErrorCode
eRegStatus
;
if
(
*
usLen
>
(
MB_PDU_FUNC_WRITE_SIZE
+
MB_PDU_SIZE_MIN
)
)
{
usRegAddress
=
(
USHORT
)(
pucFrame
[
MB_PDU_FUNC_WRITE_MUL_ADDR_OFF
]
<<
8
);
usRegAddress
|=
(
USHORT
)(
pucFrame
[
MB_PDU_FUNC_WRITE_MUL_ADDR_OFF
+
1
]
);
usRegAddress
++
;
usCoilCnt
=
(
USHORT
)(
pucFrame
[
MB_PDU_FUNC_WRITE_MUL_COILCNT_OFF
]
<<
8
);
usCoilCnt
|=
(
USHORT
)(
pucFrame
[
MB_PDU_FUNC_WRITE_MUL_COILCNT_OFF
+
1
]
);
ucByteCount
=
pucFrame
[
MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF
];
/* Compute the number of expected bytes in the request. */
if
(
(
usCoilCnt
&
0x0007
)
!=
0
)
{
ucByteCountVerify
=
(
UCHAR
)(
usCoilCnt
/
8
+
1
);
}
else
{
ucByteCountVerify
=
(
UCHAR
)(
usCoilCnt
/
8
);
}
if
(
(
usCoilCnt
>=
1
)
&&
(
usCoilCnt
<=
MB_PDU_FUNC_WRITE_MUL_COILCNT_MAX
)
&&
(
ucByteCountVerify
==
ucByteCount
)
)
{
eRegStatus
=
eMBRegCoilsCB
(
&
pucFrame
[
MB_PDU_FUNC_WRITE_MUL_VALUES_OFF
],
usRegAddress
,
usCoilCnt
,
MB_REG_WRITE
);
/* If an error occured convert it into a Modbus exception. */
if
(
eRegStatus
!=
MB_ENOERR
)
{
eStatus
=
prveMBError2Exception
(
eRegStatus
);
}
else
{
/* The response contains the function code, the starting address
* and the quantity of registers. We reuse the old values in the
* buffer because they are still valid. */
*
usLen
=
MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF
;
}
}
else
{
eStatus
=
MB_EX_ILLEGAL_DATA_VALUE
;
}
}
else
{
/* Can't be a valid write coil register request because the length
* is incorrect. */
eStatus
=
MB_EX_ILLEGAL_DATA_VALUE
;
}
return
eStatus
;
}
#endif
components/net/freemodbus-v1.6.0/modbus/functions/mbfunccoils_m.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/functions/mbfuncdiag.c
浏览文件 @
39465797
/*
* FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU.
* Copyright (c) 2006 Christian Walter <wolti@sil.at>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* File: $Id: mbfuncdiag.c,v 1.3 2006/12/07 22:10:34 wolti Exp $
*/
/*
* FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU.
* Copyright (c) 2006 Christian Walter <wolti@sil.at>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* File: $Id: mbfuncdiag.c,v 1.3 2006/12/07 22:10:34 wolti Exp $
*/
components/net/freemodbus-v1.6.0/modbus/functions/mbfuncdisc.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/functions/mbfuncdisc_m.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/functions/mbfuncholding.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/functions/mbfuncholding_m.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/functions/mbfuncinput.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/functions/mbfuncinput_m.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/functions/mbfuncother.c
浏览文件 @
39465797
/*
* FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU.
* Copyright (c) 2006 Christian Walter <wolti@sil.at>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* File: $Id: mbfuncother.c,v 1.8 2006/12/07 22:10:34 wolti Exp $
*/
/* ----------------------- System includes ----------------------------------*/
#include "stdlib.h"
#include "string.h"
/* ----------------------- Platform includes --------------------------------*/
#include "port.h"
/* ----------------------- Modbus includes ----------------------------------*/
#include "mb.h"
#include "mbframe.h"
#include "mbproto.h"
#include "mbconfig.h"
#if MB_FUNC_OTHER_REP_SLAVEID_ENABLED > 0
/* ----------------------- Static variables ---------------------------------*/
static
UCHAR
ucMBSlaveID
[
MB_FUNC_OTHER_REP_SLAVEID_BUF
];
static
USHORT
usMBSlaveIDLen
;
/* ----------------------- Start implementation -----------------------------*/
eMBErrorCode
eMBSetSlaveID
(
UCHAR
ucSlaveID
,
BOOL
xIsRunning
,
UCHAR
const
*
pucAdditional
,
USHORT
usAdditionalLen
)
{
eMBErrorCode
eStatus
=
MB_ENOERR
;
/* the first byte and second byte in the buffer is reserved for
* the parameter ucSlaveID and the running flag. The rest of
* the buffer is available for additional data. */
if
(
usAdditionalLen
+
2
<
MB_FUNC_OTHER_REP_SLAVEID_BUF
)
{
usMBSlaveIDLen
=
0
;
ucMBSlaveID
[
usMBSlaveIDLen
++
]
=
ucSlaveID
;
ucMBSlaveID
[
usMBSlaveIDLen
++
]
=
(
UCHAR
)(
xIsRunning
?
0xFF
:
0x00
);
if
(
usAdditionalLen
>
0
)
{
memcpy
(
&
ucMBSlaveID
[
usMBSlaveIDLen
],
pucAdditional
,
(
size_t
)
usAdditionalLen
);
usMBSlaveIDLen
+=
usAdditionalLen
;
}
}
else
{
eStatus
=
MB_ENORES
;
}
return
eStatus
;
}
eMBException
eMBFuncReportSlaveID
(
UCHAR
*
pucFrame
,
USHORT
*
usLen
)
{
memcpy
(
&
pucFrame
[
MB_PDU_DATA_OFF
],
&
ucMBSlaveID
[
0
],
(
size_t
)
usMBSlaveIDLen
);
*
usLen
=
(
USHORT
)(
MB_PDU_DATA_OFF
+
usMBSlaveIDLen
);
return
MB_EX_NONE
;
}
#endif
/*
* FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU.
* Copyright (c) 2006 Christian Walter <wolti@sil.at>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* File: $Id: mbfuncother.c,v 1.8 2006/12/07 22:10:34 wolti Exp $
*/
/* ----------------------- System includes ----------------------------------*/
#include "stdlib.h"
#include "string.h"
/* ----------------------- Platform includes --------------------------------*/
#include "port.h"
/* ----------------------- Modbus includes ----------------------------------*/
#include "mb.h"
#include "mbframe.h"
#include "mbproto.h"
#include "mbconfig.h"
#if MB_FUNC_OTHER_REP_SLAVEID_ENABLED > 0
/* ----------------------- Static variables ---------------------------------*/
static
UCHAR
ucMBSlaveID
[
MB_FUNC_OTHER_REP_SLAVEID_BUF
];
static
USHORT
usMBSlaveIDLen
;
/* ----------------------- Start implementation -----------------------------*/
eMBErrorCode
eMBSetSlaveID
(
UCHAR
ucSlaveID
,
BOOL
xIsRunning
,
UCHAR
const
*
pucAdditional
,
USHORT
usAdditionalLen
)
{
eMBErrorCode
eStatus
=
MB_ENOERR
;
/* the first byte and second byte in the buffer is reserved for
* the parameter ucSlaveID and the running flag. The rest of
* the buffer is available for additional data. */
if
(
usAdditionalLen
+
2
<
MB_FUNC_OTHER_REP_SLAVEID_BUF
)
{
usMBSlaveIDLen
=
0
;
ucMBSlaveID
[
usMBSlaveIDLen
++
]
=
ucSlaveID
;
ucMBSlaveID
[
usMBSlaveIDLen
++
]
=
(
UCHAR
)(
xIsRunning
?
0xFF
:
0x00
);
if
(
usAdditionalLen
>
0
)
{
memcpy
(
&
ucMBSlaveID
[
usMBSlaveIDLen
],
pucAdditional
,
(
size_t
)
usAdditionalLen
);
usMBSlaveIDLen
+=
usAdditionalLen
;
}
}
else
{
eStatus
=
MB_ENORES
;
}
return
eStatus
;
}
eMBException
eMBFuncReportSlaveID
(
UCHAR
*
pucFrame
,
USHORT
*
usLen
)
{
memcpy
(
&
pucFrame
[
MB_PDU_DATA_OFF
],
&
ucMBSlaveID
[
0
],
(
size_t
)
usMBSlaveIDLen
);
*
usLen
=
(
USHORT
)(
MB_PDU_DATA_OFF
+
usMBSlaveIDLen
);
return
MB_EX_NONE
;
}
#endif
components/net/freemodbus-v1.6.0/modbus/functions/mbutils.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/include/mb.h
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/include/mb_m.h
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/include/mbconfig.h
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/include/mbframe.h
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/include/mbfunc.h
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/include/mbport.h
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/include/mbproto.h
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/include/mbutils.h
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/mb.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/mb_m.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/rtu/mbcrc.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/rtu/mbcrc.h
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/rtu/mbrtu.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/rtu/mbrtu.h
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/rtu/mbrtu_m.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/tcp/mbtcp.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/modbus/tcp/mbtcp.h
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/port/port.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/port/port.h
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/port/portevent.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/port/portevent_m.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/port/portserial.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/port/portserial_m.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/port/porttimer.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/port/porttimer_m.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/port/user_mb_app.c
浏览文件 @
39465797
此差异已折叠。
点击以展开。
components/net/freemodbus-v1.6.0/port/user_mb_app.h
浏览文件 @
39465797
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录