Commit c6477633 authored by Pavel Vainerman's avatar Pavel Vainerman

(ModbusSlave): добавил отдельный тест на чтение "нескольких регистров"

parent e247e42a
......@@ -1580,12 +1580,14 @@ ModbusRTU::mbErrCode MBSlave::much_real_read( const ModbusRTU::ModbusData reg, M
<< ModbusRTU::dat2str(reg) << "(" << (int)reg << ") " << " count=" << count
<< " mbfunc=" << fn << endl;
int mbfunc = checkMBFunc ? fn : default_mbfunc;
auto it = iomap.end();
int i = 0;
int mbfunc = checkMBFunc ? fn : default_mbfunc;
ModbusRTU::RegID regID = genRegID(reg, mbfunc);
// ищем регистр.. "пропуская дырки"..
// ведь запросить могут начиная с "несуществующего регистра"
for( ; i < count; i++ )
{
it = iomap.find(regID + i);
......
......@@ -166,6 +166,18 @@
<item id="2024" mbs="1" mbreg="129" nbit="1" iotype="DI" name="Test write nbit 1 (reg2)" textname="Тестовый регистр для проверки записи nbit (reg 2)"/>
<item id="2025" mbs="1" mbreg="129" nbit="5" iotype="AI" name="Test write nbit 5 (reg2)" textname="Тестовый регистр для проверки записи nbit (reg 2)"/>
<!-- read 03 count=10 -->
<item default="1" id="2026" mbs="1" mbreg="130" iotype="AI" name="Test_CountRead03_1" textname="Тестовый регистр для 0x03"/>
<item default="2" id="2027" mbs="1" mbreg="131" iotype="AI" name="Test_CountRead03_2" textname="Тестовый регистр для 0x03"/>
<item default="3" id="2028" mbs="1" mbreg="132" iotype="AI" name="Test_CountRead03_3" textname="Тестовый регистр для 0x03"/>
<item default="4" id="2029" mbs="1" mbreg="133" iotype="AI" name="Test_CountRead03_4" textname="Тестовый регистр для 0x03"/>
<item default="5" id="2030" mbs="1" mbreg="134" iotype="AI" name="Test_CountRead03_5" textname="Тестовый регистр для 0x03"/>
<item default="6" id="2031" mbs="1" mbreg="135" iotype="AI" name="Test_CountRead03_6" textname="Тестовый регистр для 0x03"/>
<item default="7" id="2032" mbs="1" mbreg="136" iotype="AI" name="Test_CountRead03_7" textname="Тестовый регистр для 0x03"/>
<item default="8" id="2033" mbs="1" mbreg="137" iotype="AI" name="Test_CountRead03_8" textname="Тестовый регистр для 0x03"/>
<item default="9" id="2034" mbs="1" mbreg="138" iotype="AI" name="Test_CountRead03_9" textname="Тестовый регистр для 0x03"/>
<item default="10" id="2035" mbs="1" mbreg="139" iotype="AI" name="Test_CountRead03_10" textname="Тестовый регистр для 0x03"/>
<item id="10000" iotype="DI" name="TestMode_S" textname="Тестовый датчик"/>
</sensors>
......
......@@ -1031,6 +1031,7 @@ TEST_CASE("Write(0x06,0x10): nbit", "[modbus][mbslave][mbtcpslave][writenbit]")
}
}
// -------------------------------------------------------------
#if 0
TEST_CASE("check-mbfunc", "[modbus][mbslave][mbtcpslave][mbfunc]")
{
using namespace VTypes;
......@@ -1038,5 +1039,32 @@ TEST_CASE("check-mbfunc", "[modbus][mbslave][mbtcpslave][mbfunc]")
//...
}
#endif
// -------------------------------------------------------------
TEST_CASE("read03(04) 10 registers", "[modbus][mbslave][mbtcpslave][readmore]")
{
using namespace VTypes;
InitTest();
ModbusRTU::ModbusData tREG = 130;
int num = 10;
SECTION("Test: read03")
{
ModbusRTU::ReadOutputRetMessage ret = mb->read03(slaveaddr, tREG, num);
for( int i=0; i<num; i++ )
{
REQUIRE( ret.data[i] == (i+1) );
}
}
SECTION("Test: read04")
{
ModbusRTU::ReadInputRetMessage ret = mb->read04(slaveaddr, tREG, num);
for( int i=0; i<num; i++ )
{
REQUIRE( ret.data[i] == (i+1) );
}
}
}
// -------------------------------------------------------------
/*! \todo Доделать тесты на считывание с разными prop_prefix.. */
......@@ -11,6 +11,7 @@ cd -
./uniset2-start.sh -f ./tests-with-sm $* -- --confile mbslave-test-configure.xml --e-startup-pause 10 \
--mbs-name MBSlave1 --mbs-type TCP --mbs-inet-addr 127.0.0.1 --mbs-inet-port 20048 --mbs-my-addr 0x01 \
--mbs-askcount-id SVU_AskCount_AS --mbs-respond-id RespondRTU_S --mbs-respond-invert 1 \
--mbs-filter-field mbs --mbs-filter-value 1 --dlog-add-levels any
--mbs-filter-field mbs --mbs-filter-value 1
# --dlog-add-levels any
#--mbs-check-mbfunc 1
#--dlog-add-levels any
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment