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> </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> </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)=&H000A<br>
aRegs(1)=&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> </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> </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) = &HA5<br>
abyQuery(5) = &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) <> 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 < m_ModbusServer.Retries) And (mbErrOk
<> 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 + -
显示快捷键?