svrmtd.htm

来自「串口调试工具 用于串口调 试的很方便」· HTM 代码 · 共 801 行 · 第 1/2 页

HTM
801 行
字号
<p><font size="3"><strong>Syntax</strong></font></p>

<p>mbusrv.<font size="3">ReadOutputStatus(Addr ,DataStart
,Quantity ,vCoilValues );</font></p>

<p><font size="3">HRESULT ReadOutputStatus([in] short Addr , [in]
long DataStart , [in] short Quantity , [out] VARIANT* vCoilValues
, [out,retval] long* plRetVal);</font></p>

<p><font size="3"><strong>Return Value </strong></font></p>

<p><font size="3">A error code if the function failed or mbErrOk
if succeed. </font></p>

<p><font size="3"><strong>Parameters </strong></font></p>

<p><font size="3">Addr - Slave Address</font></p>

<p><font size="3">DataStart - Starting Address</font></p>

<p><font size="3">Qtd - number of registers to read </font></p>

<p><font size="3">vCoilValues - array with coils read.</font></p>

<p><font size="3"><strong>Remarks</strong></font></p>

<p>Reads the status of discrete outputs (0<i>x</i> references,
coils) in the slave, the first coil 00001 is 0, second 00002 is 1
and so on. <font size="3">vCoilValues</font> return the coil on
Boolean format (True - On , False - Off).</p>

<p><strong>example</strong>:</p>

<p>Dim vCoils AS Variant </p>

<p>Dim lError As Long </p>

<p>lError = mbusrv.<font size="3">ReadOutputStatus(17,19,37,</font>vCoils)
; 'Reads coils 00020 ... 0056 from slave 17</p>

<p><font size="3"><strong>See also: </strong></font><a
href="svrprp.htm#modsrv.RaiseError"><font size="3"><strong>RaiseError</strong></font></a><font
size="3"><strong> , </strong></font><a href="srvctes.htm"><font
size="3"><strong>Error Codes</strong></font></a><font size="3"><strong>
.</strong></font></p>

<p>&nbsp;</p>

<p><a name="CModbus::ReadInputStatus"></a><font size="5"><strong>ReadInputStatus</strong></font></p>

<p>mbusrv.<font size="3">ReadInputStatus(Addr ,DataStart
,Quantity ,vCoilValues );</font></p>

<p><font size="3">HRESULT ReadInputStatus([in] short Addr , [in]
long DataStart , [in] short Quantity , [out] VARIANT* vCoilValues
, [out,retval] long* plRetVal);</font></p>

<p><font size="3"><strong>Return Value </strong></font></p>

<p><font size="3">A error code if the function failed or mbErrOk
if succeed.</font></p>

<p><font size="3"><strong>Parameters </strong></font></p>

<p><font size="3">Addr - Slave Address</font></p>

<p><font size="3">DataStart - Starting Address</font></p>

<p><font size="3">Qtd - number of registers to read </font></p>

<p><font size="3">vCoilValues - array with coils read.</font></p>

<p><font size="3"><strong>Remarks</strong></font></p>

<p>Reads the status of discrete inputs (1<i>x</i> references) in
the slave, the first input 10001 is 0, second 10002 is 1 and so
on.<font size="3">vCoilValues</font> return the coil on Boolean
format (True - On , False - Off).</p>

<p><strong>example</strong>:</p>

<p>Dim vCoils AS Variant </p>

<p>Dim lError As Long </p>

<p>lError = mbusrv.<font size="3">ReadIntputStatus(17,196,22,</font>vCoils)
; 'Reads inputs 10197 ... 10218 from slave 17</p>

<p><font size="3"><strong>See also: </strong></font><a
href="svrprp.htm#modsrv.RaiseError"><font size="3"><strong>RaiseError</strong></font></a><font
size="3"><strong> , </strong></font><a href="srvctes.htm"><font
size="3"><strong>Error Codes</strong></font></a><font size="3"><strong>
.</strong></font></p>

<p><a name="CModbus::PresetSingleRegister"></a><font size="5"><strong>PresetSingleRegister</strong></font></p>

<p>mbusrv.<font size="3">PresetSingleRegister(Addr, Register ,
RegValue, [ vRealType]<strong> </strong>)</font></p>

<p><font size="3">HRESULT PresetSingleRegister([in] short Addr ,
[in] long Register , [in] VARIANT RegValue , [in,optional]
VARIANT vRealType , [out,retval] long* lRetval);</font></p>

<p>&nbsp;</p>

<p><font size="3"><strong>Return Value </strong></font></p>

<p><font size="3">A error code if the function failed or mbErrOk
if succeed. </font></p>

<p><font size="3"><strong>Parameters </strong></font></p>

<p><font size="3">Addr - Slave Address</font></p>

<p><font size="3">Register - Register Address</font></p>

<p><font size="3">RegValue - Preset Data</font></p>

<p><font size="3">vRealType - inverse the order of registers when
reading real number mbREAL_NORMAL(default) (not reversed)
mbREAL_REVERSE (reverse order).</font></p>

<p><font size="3"><strong>Remarks</strong></font></p>

<p>Presets a single holding register (4<i>x</i> reference). , the
first register 40001 is 0, second 40002 is 1 and so on.When the
data is a float number you are actually setting 2 registers and
with a double number 4 registers are set.</p>

<p><strong>example</strong>:</p>

<p>Dim lError As Long </p>

<p>lError = mbusrv.<font size="3">PresetSingleRegister(17,1,3</font>)
; 'preset register 40002 to 03 in slave device 17 </p>

<p><font size="3"><strong>See also: </strong></font><a
href="svrprp.htm#modsrv.RaiseError"><font size="3"><strong>RaiseError</strong></font></a><font
size="3"><strong> , </strong></font><a href="srvctes.htm"><font
size="3"><strong>Error Codes</strong></font></a><font size="3"><strong>
,</strong></font><a href="#CModbus::PresetMultipleRegisters"><font
size="3"><strong>PresetMultipleRegisters</strong></font></a></p>

<p><a name="CModbus::ForceSingleCoil"></a><font size="5"><strong>ForceSingleCoil</strong></font></p>

<p>mbusrv.<font size="3">ForceSingleCoil(Addr, Coil, CoilValue)</font></p>

<p><font size="3">HRESULT ForceSingleCoil([in] short Addr , [in]
long Coil , [in] VARIANT_BOOL CoilValue , [out,retval] long*
plRetVal);</font></p>

<p><font size="3"><strong>Return Value </strong></font></p>

<p><font size="3">A error code if the function failed or mbErrOk
if succeed. </font></p>

<p><font size="3"><strong>Parameters </strong></font></p>

<p><font size="3">Addr - Slave Address</font></p>

<p><font size="3">Coil - Coil Address</font></p>

<p><font size="3">CoilValue - Force Data - TRUE (ON) , FALSE
(OFF).</font></p>

<p><font size="3"><strong>Remarks</strong></font></p>

<p>Force a single Coil (0<i>x</i> reference). , the first coil
00001 is 0, second 00002 is 1 and so on.</p>

<p><strong>example</strong>:</p>

<p>Dim lError As Long </p>

<p>lError = mbusrv.<font size="3">ForceSingleCoil(17,172,</font>TRUE)
; 'force coil 173 ON in slave device 17</p>

<p><font size="3"><strong>See also: </strong></font><a
href="svrprp.htm#modsrv.RaiseError"><font size="3"><strong>RaiseError</strong></font></a><font
size="3"><strong> , </strong></font><a href="srvctes.htm"><font
size="3"><strong>Error Codes</strong></font></a><font size="3"><strong>
,</strong></font><a href="#CModbus::PresetMultipleRegisters"><font
size="3"><strong>PresetMultipleRegisters</strong></font></a></p>

<p><a name="CModbus::PresetMultipleRegisters"></a><font size="5"><strong>PresetMultipleRegisters</strong></font></p>

<p>mbusrv.PresetMultipleRegisters(Addr, DataStart ,
Quantity,vRegValues,[vRealType]) </p>

<p>HRESULT PresetMultipleRegisters([in] short Addr , [in] long
DataStart , [in] short Quantity , [in] VARIANT vRegValues ,
[in,optional] VARIANT vRealType , [out,retval] long* plRetVal);</p>

<p><font size="3"><strong>Return Value </strong></font></p>

<p><font size="3">Error code if the function failed or mbErrOk if
succeed. </font></p>

<p><font size="3"><strong>Parameters </strong></font></p>

<p><font size="3">Addr - Slave Address</font></p>

<p><font size="3">DataStart - Starting Address</font></p>

<p>Quantity<font size="3"> - number of registers to write</font></p>

<p>vRegValues - Presets values Data</p>

<p><font size="3">wRealType - inverse the order of registers when
reading real number mbREAL_NORMAL(default) (not reversed)
mbREAL_REVERSE (reverse order).</font></p>

<p><font size="3"><strong>Remarks</strong></font></p>

<p>Presets values of holding registers (4<i>x</i> references) ,
the first register 40001 is 0, second 40002 is 1 and so on. When
the data is a float number you are actually setting 2 registers
and with a double number 4 registers are set.</p>

<p><strong>example</strong>:</p>

<p>Dim lError As Long </p>

<p>Dim aRegs() as Long</p>

<p>'preset two registers starting at 40002 to 00 0A and 01 02
hex, in slave device 17. </p>

<p>Redim aRegs(0 To 1)</p>

<p>aRegs(0)=&amp;H000A<br>
aRegs(1)=&amp;H0102<br>
<br>
lError = mbusrv.<font size="3">PresetMultipleRegisters(17,1,2,</font>CVar(aRegs))
</p>

<p><font size="3"><strong>See also: </strong></font><a
href="svrprp.htm#modsrv.RaiseError"><font size="3"><strong>RaiseError</strong></font></a><font
size="3"><strong> , </strong></font><a href="srvctes.htm"><font
size="3"><strong>Error Codes</strong></font></a><font size="3"><strong>
, </strong></font><a href="#CModbus::PresetSingleRegister"><font
size="3"><strong>PresetSingleRegister</strong></font></a></p>

<p>&nbsp;</p>

<p><a name="CModbus::ForceMultipleCoils"></a><font size="5"><strong>ForceMultipleCoils</strong></font></p>

<p>mbusrv.ForceMultipleCoils(Addr, DataStart , Quantity ,
vCoilValues) </p>

<p>HRESULT ForceMultipleCoils([in] short Addr , [in] long
DataStart , [in] short Quantity , [in] VARIANT vCoilValues ,
[out,retval] long* plRetVal);</p>

<p><font size="3"><strong>Return Value </strong></font></p>

<p><font size="3">Error code if the function failed or mbErrOk if
succeed. </font></p>

<p><font size="3"><strong>Parameters </strong></font></p>

<p><font size="3">Addr - Slave Address</font></p>

<p>DataStart<font size="3"> - Starting Address</font></p>

<p>Quantity<font size="3"> - number of registers to read </font></p>

<p>vCoilValues - Force values Data True (ON) , False (OFF).</p>

<p><font size="3"><strong>Remarks</strong></font></p>

<p>Force values of coils (0<i>x</i> references). , the first coil
00001 is 0, second 00002 is 1 and so on.</p>

<p><strong>example</strong>:</p>

<p>Dim lError As Long<br>
Dim abCoils() As Boolean;<br>
<br>
'force a series of 2 coils starting at coil 00020 in slave device
17. </p>

<p>Redim abCoils(0 to 2)</p>

<p>abCoils(0)=True 'ON<br>
abCoils(1)=False 'OFF</p>

<p><br>
lError = mbusrv.<font size="3">ForceMultipleCoils(17,19,</font>2,CVar(abCoils))
</p>

<p><font size="3"><strong>See also: </strong></font><a
href="svrprp.htm#modsrv.RaiseError"><font size="3"><strong>RaiseError</strong></font></a><font
size="3"><strong> , </strong></font><a href="srvctes.htm"><font
size="3"><strong>Error Codes</strong></font></a><font size="3"><strong>
,</strong></font><a href="#CModbus::ForceSingleCoil"><font
size="3"><strong>ForceSingleCoil</strong></font></a></p>

<p>&nbsp;</p>

<p><a name="CModbus::TxRxMessage"></a><font size="5"><strong>TxRxMessage</strong></font></p>

<p>mbusrv.TxRxMessage(vQuery, QueryLength, vResponse, RespLength,
[vNumOfBytesRead])</p>

<p>HRESULT TxRxMessage([in] VARIANT vQuery , [in] short
QueryLength , [out] VARIANT* vResponse, [in] short RespLength,
[out,optional] VARIANT* vNumOfBytesRead , [out,retval] long*
plRetVal);</p>

<p><font size="3"><strong>Return Value </strong></font></p>

<p><font size="3">Error code if the function failed or mbErrOk if
succeed. </font></p>

<p><font size="3"><strong>Parameters </strong></font></p>

<p>vQuery - Query message using RTU- Frame format. (input), this
must be a byte array.</p>

<p>QueryLength - Query size. (input)</p>

<p>vResponse - Response from device (output). The response is
returned in a byte array.</p>

<p>RespLength - Response Size. (input) . This value must be 0 if
you do not know the response size, all bytes the slave sent to
master will be in abyResponse buffer.</p>

<p>vNumOfBytesRead-A variable that will be set with the number of
bytes read from device.</p>

<p><font size="3"><strong>Remarks</strong></font></p>

<p><font size="3">This function allow to send general modbus
function to a slave or create new modbus functions implemented in
a particular device model.</font></p>

<p><font size="3"><strong>example:</strong></font></p>

<p><font size="3">This example show how to create a new modbus
function. Supose we want to implement Modbus function 8
(Diagnostics) for checking communication. The function will be
called LoopbackTest, it just send message and verify if the
device return the same bytes of the query.</font></p>

<blockquote>
    <p><font size="3">'<br>
    'Example how to create new modbus function<br>
    '<br>
    Function LoopbackTest(nAddr As Integer) As Long<br>
    <br>
    Const QUERY_LENGHT = 6<br>
    Const nReplyLength = 6<br>
    Dim abyQuery() As Byte<br>
    Dim vReply As Variant<br>
    Dim nError As Long<br>
    Dim iReg As Integer<br>
    Dim iRetry As Integer<br>
    <br>
    ReDim abyQuery(0 To QUERY_LENGHT)<br>
    <br>
    'new modbus message see modbus protcol on www.modicon.com<br>
    abyQuery(0) = nAddr 'ADDR<br>
    abyQuery(1) = 8 'Function<br>
    abyQuery(2) = 0 'diag. code=0<br>
    abyQuery(3) = 0<br>
    abyQuery(4) = &amp;HA5<br>
    abyQuery(5) = &amp;H37<br>
    <br>
    Do<br>
    nError = m_ModbusServer.TxRxMessage(CVar(abyQuery),
    QUERY_LENGHT, vReply, nReplyLength) 'send message to device<br>
    If (nError = mbErrOk) Then 'interpret response ,<br>
    For iReg = 0 To QUERY_LENGHT - 1<br>
    If (abyQuery(iReg) &lt;&gt; vReply(iReg)) Then<br>
    nError = mbErrInvResp<br>
    Exit For<br>
    End If<br>
    Next iReg<br>
    <br>
    <br>
    End If<br>
    <br>
    iRetry = iRetry + iRetry<br>
    <br>
    Loop While ((iRetry &lt; m_ModbusServer.Retries) And (mbErrOk
    &lt;&gt; nError))<br>
    <br>
    LoopbackTest = nError<br>
    <br>
    End Function 'end LoopBackTest</font></p>
</blockquote>

<p><font size="3"><strong>See also: </strong></font><a
href="srvctes.htm"><font size="3"><strong>Error Codes</strong></font></a><font
size="3"><strong> </strong></font></p>
</body>
</html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?