Commit a9002edf authored by Pavel Vainerman's avatar Pavel Vainerman

Merge branch 'master' of git.eter:/projects/asu/uniset2

Conflicts: IDL/Processes/IOController_i.idl IDL/UniSetTypes/UniSetManager_i.idl IDL/UniSetTypes/UniSetObject_i.idl IDL/UniSetTypes/UniSetTypes_i.idl TODO Utilities/Admin/admin.cc Utilities/MBTester/MBSlave.cc Utilities/MBTester/MBSlave.h Utilities/MBTester/MBTCPServer.cc Utilities/MBTester/MBTCPServer.h Utilities/MBTester/mbrtuslave.cc Utilities/MBTester/mbrtutester.cc Utilities/MBTester/mbslave.cc Utilities/MBTester/mbtcpserver.cc Utilities/MBTester/mbtcptester.cc Utilities/NullController/NullController.cc Utilities/NullController/NullController.h Utilities/NullController/main.cc Utilities/SImitator/main.cc Utilities/SMonit/smonitor.cc Utilities/SViewer-text/main.cc Utilities/codegen/ctl-cpp-cc-alone-ask.xsl Utilities/codegen/ctl-cpp-cc-ask.xsl Utilities/codegen/ctl-cpp-common.xsl Utilities/codegen/ctl-cpp-main-alone.xsl Utilities/codegen/ctl-cpp-main.xsl Utilities/codegen/skel-main.cc Utilities/codegen/skel.h Utilities/codegen/tests/TestGen.h Utilities/codegen/tests/TestGenAlone.h conf/test.xml configure.ac extensions/DBServer-MySQL/DBServer_MySQL.cc extensions/DBServer-MySQL/DBServer_MySQL.h extensions/DBServer-MySQL/MySQLInterface.cc extensions/DBServer-MySQL/MySQLInterface.h extensions/DBServer-MySQL/main.cc extensions/DBServer-MySQL/test.cc extensions/DBServer-SQLite/DBServer_SQLite.cc extensions/DBServer-SQLite/DBServer_SQLite.h extensions/DBServer-SQLite/SQLiteInterface.cc extensions/DBServer-SQLite/main.cc extensions/DBServer-SQLite/test.cc extensions/IOControl/ComediInterface.cc extensions/IOControl/ComediInterface.h extensions/IOControl/IOControl.cc extensions/IOControl/IOControl.h extensions/IOControl/iocalibr.cc extensions/IOControl/iocontrol.cc extensions/IOControl/iotest.cc extensions/LogicProcessor/Element.cc extensions/LogicProcessor/Element.h extensions/LogicProcessor/LProcessor.cc extensions/LogicProcessor/LProcessor.h extensions/LogicProcessor/PassiveLProcessor.h extensions/LogicProcessor/Schema.cc extensions/LogicProcessor/Schema.h extensions/LogicProcessor/SchemaXML.cc extensions/LogicProcessor/TAND.cc extensions/LogicProcessor/TDelay.cc extensions/LogicProcessor/TDelay.h extensions/LogicProcessor/TOR.cc extensions/LogicProcessor/plogicproc.cc extensions/ModbusMaster/MBExchange.cc extensions/ModbusMaster/MBExchange.h extensions/ModbusMaster/MBTCPMaster.cc extensions/ModbusMaster/MBTCPMaster.h extensions/ModbusMaster/MBTCPMultiMaster.cc extensions/ModbusMaster/MBTCPMultiMaster.h extensions/ModbusMaster/RTUExchange.cc extensions/ModbusMaster/RTUStorage.cc extensions/ModbusMaster/RTUStorage.h extensions/ModbusMaster/main.cc extensions/ModbusMaster/mtr-conv.cc extensions/ModbusMaster/mtr-read.cc extensions/ModbusMaster/mtr-setup.cc extensions/ModbusMaster/multi-main.cc extensions/ModbusMaster/rtuexchange.cc extensions/ModbusMaster/rtustate.cc extensions/ModbusMaster/vtconv.cc extensions/ModbusSlave/MBSlave.cc extensions/ModbusSlave/MBSlave.h extensions/ModbusSlave/MBTCPMultiSlave.cc extensions/ModbusSlave/mbslave.cc extensions/ModbusSlave/mbtcp-multislave.cc extensions/ModbusSlave/start_tcp_multi_fg.sh extensions/RRDServer/RRDServer.cc extensions/RRDServer/RRDServer.h extensions/RRDServer/main.cc extensions/SMDBServer/SMDBServer.cc extensions/SMDBServer/SMDBServer.h extensions/SMDBServer/main.cc extensions/SMViewer/SMViewer.h extensions/SharedMemory/SharedMemory.cc extensions/SharedMemory/SharedMemory.h extensions/SharedMemory/smemory.cc extensions/SharedMemoryPlus/smemory-plus.cc extensions/UNetUDP/UDPPacket.cc extensions/UNetUDP/UNetExchange.cc extensions/UNetUDP/UNetExchange.h extensions/UNetUDP/UNetReceiver.cc extensions/UNetUDP/UNetReceiver.h extensions/UNetUDP/UNetSender.cc extensions/UNetUDP/UNetSender.h extensions/UNetUDP/unet-udp-tester.cc extensions/UNetUDP/unetexchange.cc extensions/UniNetwork/UniExchange.cc extensions/UniNetwork/UniExchange.h extensions/UniNetwork/uninet.cc extensions/include/Calibration.h extensions/include/DigitalFilter.h extensions/include/Extensions.h extensions/include/IOBase.h extensions/include/MTR.h extensions/include/PID.h extensions/include/SMInterface.h extensions/include/SingleProcess.h extensions/include/VTypes.h extensions/lib/Calibration.cc extensions/lib/Extensions.cc extensions/lib/IOBase.cc extensions/lib/MTR.cc extensions/lib/PID.cc extensions/lib/SMInterface.cc extensions/lib/SingleProcess.cc extensions/lib/UObject_SK.cc extensions/tests/SMemoryTest/TestProc.cc extensions/tests/SMemoryTest/TestProc.h extensions/tests/SMemoryTest/smemory-test.cc extensions/tests/calibration.cc extensions/tests/digitalfilter.cc include/CallBackTimer.h include/ComPort.h include/ComPort485F.h include/Configuration.h include/DBServer.h include/Debug.h include/DebugStream.h include/DelayTimer.h include/Exceptions.h include/HourGlass.h include/IOController.h include/IONotifyController.h include/IORFile.h include/LT_Object.h include/MessageType.h include/Mutex.h include/NCRestorer.h include/ORepHelpers.h include/ObjectIndex.h include/ObjectIndex_Array.h include/ObjectRepository.h include/ObjectRepositoryFactory.h include/OmniThreadCreator.h include/PassiveObject.h include/PassiveTimer.h include/Pulse.h include/Restorer.h include/RunLock.h include/SMonitor.h include/SViewer.h include/ThreadCreator.h include/Trigger.h include/TriggerAND.h include/TriggerOR.h include/TriggerOutput.h include/UInterface.h include/UniSetActivator.h include/UniSetManager_LT.h include/UniSetTypes.h include/UniXML.h include/WDTInterface.h include/modbus/ModbusClient.h include/modbus/ModbusHelpers.h include/modbus/ModbusRTUMaster.h include/modbus/ModbusRTUSlave.h include/modbus/ModbusRTUSlaveSlot.h include/modbus/ModbusServer.h include/modbus/ModbusTCPMaster.h include/modbus/ModbusTCPServer.h include/modbus/ModbusTCPServerSlot.h include/modbus/ModbusTCPSession.h include/modbus/ModbusTypes.h include/modbus/TCPCheck.h python/lib/pyUniSet/Makefile.am python/lib/pyUniSet/PyUInterface.h python/lib/pyUniSet/UConnector.cc python/lib/pyUniSet/UConnector.h python/lib/pyUniSet/UConnector_wrap.cxx python/lib/pyUniSet/UExceptions.h python/lib/pyUniSet/UExceptions_wrap.cxx python/lib/pyUniSet/UInterface_wrap.cxx python/lib/pyUniSet/UModbus.cc python/lib/pyUniSet/UModbus.h python/lib/pyUniSet/UModbus_wrap.cxx python/lib/pyUniSet/UTypes.h python/lib/pyUniSet/pyUModbus.py src/Communications/ComPort.cc src/Communications/ComPort485F.cc src/Communications/Modbus/ModbusClient.cc src/Communications/Modbus/ModbusHelpers.cc src/Communications/Modbus/ModbusRTUMaster.cc src/Communications/Modbus/ModbusRTUSlave.cc src/Communications/Modbus/ModbusRTUSlaveSlot.cc src/Communications/Modbus/ModbusServer.cc src/Communications/Modbus/ModbusTCPCore.cc src/Communications/Modbus/ModbusTCPServer.cc src/Communications/Modbus/ModbusTCPServerSlot.cc src/Communications/Modbus/ModbusTCPSession.cc src/Communications/Modbus/ModbusTCPTypes.cc src/Communications/Modbus/ModbusTypes.cc src/Interfaces/UInterface.cc src/ObjectRepository/IORFile.cc src/ObjectRepository/ORepHelpers.cc src/ObjectRepository/ObjectIndex.cc src/ObjectRepository/ObjectIndex_Array.cc src/ObjectRepository/ObjectIndex_XML.cc src/ObjectRepository/ObjectIndex_idXML.cc src/ObjectRepository/ObjectRepository.cc src/ObjectRepository/ObjectRepositoryFactory.cc src/ObjectRepository/PassiveObject.cc src/ObjectRepository/ProxyManager.cc src/ObjectRepository/UniSetActivator.cc src/ObjectRepository/UniSetManager.cc src/ObjectRepository/UniSetManager_LT.cc src/ObjectRepository/UniSetObject.cc src/ObjectRepository/UniSetObject_LT.cc src/ObjectRepository/UniSetTypes.cc src/Processes/IOController.cc src/Processes/IONotifyController.cc src/Processes/IONotifyController_LT.cc src/Processes/NCRestorer_XML.cc src/Timers/PassiveSysTimer.cc src/Timers/WaitingPassiveTimer.cc src/Various/Configuration.cc src/Various/Debug.cc src/Various/DebugStream.cc src/Various/LT_Object.cc src/Various/Makefile.am src/Various/MessageType.cc src/Various/Mutex.cc src/Various/Restorer_XML.cc src/Various/RunLock.cc src/Various/SMonitor.cc src/Various/SViewer.cc src/Various/UniXML.cc src/Various/WDTInterface.cc tests/UniXmlTest/XmlTest.cc tests/calibration.cc tests/conftest.cc tests/delaytimer.cc tests/dlog.cc tests/hourglass.cc tests/iterator_test.cc tests/passivetimer.cc tests/threadtst.cc tests/ui.cc tests/umutex.cc tests/unixml.cc
parents c6a97f32 23478b23
......@@ -29,9 +29,9 @@ int main( int argc, const char** argv )
string logfilename(conf->getArgParam("--smdbserver-logfile"));
if( logfilename.empty() )
logfilename = "smdbserver.log";
conf->initDebug(dlog,"dlog");
std::ostringstream logname;
string dir(conf->getLogDir());
logname << dir << logfilename;
......@@ -61,7 +61,7 @@ int main( int argc, const char** argv )
UniSetActivator act;
act.addObject(static_cast<class UniSetObject*>(db));
SystemMessage sm(SystemMessage::StartUp);
SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() );
ulog << "\n\n\n";
......
......@@ -28,3 +28,4 @@ bin_PROGRAMS = @PACKAGE@-smemory-plus
$(SIGC_CFLAGS) $(COMCPP_CFLAGS)
@PACKAGE@_smemory_plus_SOURCES = smemory-plus.cc
......@@ -23,18 +23,18 @@
- \ref pgUNetUDP_Reserv
\section pgUNetUDP_Common Общее описание
Обмен построен на основе протокола UDP.
Обмен построен на основе протокола UDP.
Основная идея заключается в том, что каждый узел на порту равном своему ID
посылает в сеть UDP-пакеты содержащие данные считанные из локальной SM. Формат данных - это набор
пар [id,value]. Другие узлы принимают их. Помимо этого данный процесс запускает
пар [id,value]. Другие узлы принимают их. Помимо этого данный процесс запускает
по потоку приёма для каждого другого узла и ловит пакеты от них, сохраняя данные в SM.
\par
При своём старте процесс считывает из секции \<nodes> список узлов которые необходимо "слушать",
\par
При своём старте процесс считывает из секции \<nodes> список узлов которые необходимо "слушать",
а также параметры своего узла. Открывает по потоку приёма на каждый узел и поток
передачи для своих данных. Помимо этого такие же потоки для резервных каналов, если они включены
(см. \ref pgUNetUDP_Reserv ).
\section pgUNetUDP_Conf Пример конфигурирования
По умолчанию при считывании используется \b unet_broadcast_ip (указанный в секции \<nodes>)
и \b id узла - в качестве порта.
......@@ -55,22 +55,22 @@
\section pgUNetUDP_Reserv Настройка резервного канала связи
В текущей реализации поддерживается возможность обмена по двум подсетям (эзернет-каналам).
Она основана на том, что, для каждого узла помимо основного "читателя",
создаётся дополнительный "читатель"(поток) слушающий другой ip-адрес и порт.
А так же, для локального узла создаётся дополнительный "писатель"(поток),
который посылает данные в (указанную) вторую подсеть. Для того, чтобы задействовать
создаётся дополнительный "читатель"(поток) слушающий другой ip-адрес и порт.
А так же, для локального узла создаётся дополнительный "писатель"(поток),
который посылает данные в (указанную) вторую подсеть. Для того, чтобы задействовать
второй канал, достаточно объявить в настройках переменные
\b unet_broadcast_ip2. А также в случае необходимости для конкретного узла
\b unet_broadcast_ip2. А также в случае необходимости для конкретного узла
можно указать \b unet_broadcast_ip2 и \b unet_port2.
Переключение между "каналами" происходит по следующей логике:
При старте включается только первый канал. Второй канал работает в режиме "пассивного" чтения.
Т.е. все пакеты принимаются, но данные в SharedMemory не сохраняются.
Если во время работы пропадает связь по первому каналу, идёт переключение на второй канал.
При старте включается только первый канал. Второй канал работает в режиме "пассивного" чтения.
Т.е. все пакеты принимаются, но данные в SharedMemory не сохраняются.
Если во время работы пропадает связь по первому каналу, идёт переключение на второй канал.
Первый канал переводиться в "пассивный" режим, а второй канал, переводится в "нормальный"(активный)
режим. Далее работа ведётся по второму каналу, независимо от того, что связь на первом
канале может восстановиться. Это сделано для защиты от постоянных перескакиваний
с канала на канал. Работа на втором канале будет вестись, пока не пропадёт связь
режим. Далее работа ведётся по второму каналу, независимо от того, что связь на первом
канале может восстановиться. Это сделано для защиты от постоянных перескакиваний
с канала на канал. Работа на втором канале будет вестись, пока не пропадёт связь
на нём. Тогда будет попытка переключиться обратно на первый канал и так "по кругу".
В свою очередь "писатели"(если они не отключены) всегда посылают данные в оба канала.
......@@ -158,8 +158,8 @@ class UNetExchange:
void step( SMInterface* shm, const std::string& myname );
inline void setRespondID( UniSetTypes::ObjectId id, bool invert=false )
{
sidRespond = id;
{
sidRespond = id;
respondInvert = invert;
}
inline void setLostPacketsID( UniSetTypes::ObjectId id ){ sidLostPackets = id; }
......
......@@ -28,7 +28,7 @@ namespace UniSetExtensions
dcrit << err.str() << endl;
throw SystemError(err.str());
}
// cout << "(uniset): shm=" << name << " id=" << shmID << endl;
return shmID;
}
......@@ -39,7 +39,7 @@ namespace UniSetExtensions
return;
string::size_type pos = s.find("\\n");
while( pos != string::npos )
{
s.replace(pos,2,"\n");
......@@ -53,10 +53,10 @@ namespace UniSetExtensions
{
if( xmlCalibrationsNode )
return xmlCalibrationsNode;
xmlCalibrationsNode = conf->getNode("Calibrations");
return xmlCalibrationsNode;
}
// -------------------------------------------------------------------------
......@@ -64,7 +64,7 @@ namespace UniSetExtensions
{
if( !node )
return 0;
UniXML_iterator it(node);
if( !it.goChildren() )
return 0;
......
../../../conf/test.xml
\ No newline at end of file
......@@ -33,20 +33,20 @@
unlock() - удаляет файл.
\warning Код не переносимый, т.к. рассчитан на наличие каталога /proc,
по которому проверяется статус процесса (по pid).
по которому проверяется статус процесса (по pid).
*/
class RunLock
{
public:
RunLock();
~RunLock();
static bool isLocked(const std::string& lockFile); //, char* **argv );
static bool lock(const std::string& lockFile);
static bool unlock(const std::string& lockFile);
protected:
};
// ----------------------------------------------------------------------------
#endif
......@@ -31,7 +31,7 @@
//---------------------------------------------------------------------------
/*!
Реализация базового класса с использованием локальных таймеров
*/
*/
class UniSetManager_LT:
public UniSetManager
{
......
......@@ -10,8 +10,8 @@ class ModbusRTUMaster;
// -------------------------------------------------------------------------
namespace ModbusHelpers
{
ModbusRTU::ModbusAddr autodetectSlave( ModbusRTUMaster* m,
ModbusRTU::ModbusAddr beg=0,
ModbusRTU::ModbusAddr autodetectSlave( ModbusRTUMaster* m,
ModbusRTU::ModbusAddr beg=0,
ModbusRTU::ModbusAddr end=255,
ModbusRTU::ModbusData reg=0,
ModbusRTU::SlaveFunctionCode fn=ModbusRTU::fnReadInputRegisters
......@@ -19,7 +19,7 @@ namespace ModbusHelpers
ModbusRTU::ModbusAddr autodetectSlave( std::string dev,
ComPort::Speed s, int tout=1000,
ModbusRTU::ModbusAddr beg=0,
ModbusRTU::ModbusAddr beg=0,
ModbusRTU::ModbusAddr end=255,
ModbusRTU::ModbusData reg=0,
ModbusRTU::SlaveFunctionCode fn=ModbusRTU::fnReadInputRegisters
......@@ -31,7 +31,7 @@ namespace ModbusHelpers
); // throw UniSetTypes::TimeOut();
ComPort::Speed autodetectSpeed( std::string dev,
ModbusRTU::ModbusAddr slave,
ModbusRTU::ModbusAddr slave,
int timeout_msec=1000,
ModbusRTU::ModbusData reg=0,
ModbusRTU::SlaveFunctionCode fn=ModbusRTU::fnReadInputRegisters
......
......@@ -11,7 +11,7 @@
#include "ModbusTypes.h"
#include "ModbusClient.h"
// -------------------------------------------------------------------------
/*! Modbus RTU master mode
/*! Modbus RTU master mode
\todo Добавить ведение статистики по ошибкам
*/
class ModbusRTUMaster:
......@@ -37,11 +37,11 @@ class ModbusRTUMaster:
protected:
/*! get next data block from channel ot recv buffer
/*! get next data block from channel ot recv buffer
\param begin - get from position
\param buf - buffer for data
\param len - size of buf
\return real data lenght ( must be <= len )
\return real data lenght ( must be <= len )
*/
virtual int getNextData( unsigned char* buf, int len ) override;
......@@ -51,7 +51,7 @@ class ModbusRTUMaster:
virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len ) override;
/*! функция запрос-ответ */
virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg,
virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg,
ModbusRTU::ModbusMessage& reply, timeout_t timeout ) override;
......
......@@ -11,11 +11,11 @@
#include "ModbusTypes.h"
#include "ModbusServer.h"
// -------------------------------------------------------------------------
/*! Modbus RTU slave mode
/*! Modbus RTU slave mode
Класс не самостоятельный и содержит "чисто" виртуальные функции
для реализации ответов на запросы.
\todo Разобратся с тем как отвечать на неправильные запросы!
\todo Разобратся с тем как отвечать на неправильные запросы!
Формат ответных сообщений!!! Коды ошибок!!!
\todo Доработать terminate, чтобы можно было прервать ожидание
*/
......
......@@ -7,10 +7,10 @@
#include "ModbusRTUSlave.h"
#include "ModbusServerSlot.h"
// -------------------------------------------------------------------------
/*!
/*!
Реализация позволяющая добавлять обработчики не наследуясь от ModbusRTUSlave.
Основана на использовании слотов.
\warning Пока реализована возможность подключения ТОЛЬКО ОДНОГО обработчика
\warning Пока реализована возможность подключения ТОЛЬКО ОДНОГО обработчика
*/
class ModbusRTUSlaveSlot:
public ModbusRTUSlave,
......@@ -24,51 +24,51 @@ class ModbusRTUSlaveSlot:
virtual void sigterm( int signo );
inline ComPort* getComPort(){ return port; }
protected:
virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query,
virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query,
ModbusRTU::ReadCoilRetMessage& reply );
virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query,
virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query,
ModbusRTU::ReadInputStatusRetMessage& reply );
virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query,
virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query,
ModbusRTU::ReadOutputRetMessage& reply );
virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query,
virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query,
ModbusRTU::ReadInputRetMessage& reply );
virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query,
virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query,
ModbusRTU::ForceSingleCoilRetMessage& reply );
virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query,
virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query,
ModbusRTU::WriteSingleOutputRetMessage& reply );
virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query,
virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query,
ModbusRTU::ForceCoilsRetMessage& reply );
virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query,
virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query,
ModbusRTU::WriteOutputRetMessage& reply );
virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query,
virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query,
ModbusRTU::DiagnosticRetMessage& reply );
virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query,
virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query,
ModbusRTU::MEIMessageRetRDI& reply );
virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query,
virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query,
ModbusRTU::JournalCommandRetMessage& reply );
virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query,
virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply );
virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query,
virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query,
ModbusRTU::RemoteServiceRetMessage& reply );
virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query,
virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply );
private:
};
// -------------------------------------------------------------------------
......
......@@ -21,7 +21,7 @@ class ModbusServer
void setLog( DebugStream& dlog );
/*! обработать очередное сообщение
/*! обработать очередное сообщение
\param addr - адрес для которого принимать сообщения
\param msecTimeout - время ожидания прихода очередного сообщения в мсек.
\return Возвращает код ошибки из ModbusRTU::mbErrCode
......@@ -29,7 +29,7 @@ class ModbusServer
virtual ModbusRTU::mbErrCode receive( ModbusRTU::ModbusAddr addr, timeout_t msecTimeout )=0;
/*! Установка паузы после посылки
/*! Установка паузы после посылки
\return старое значение
*/
timeout_t setAfterSendPause( timeout_t msec );
......@@ -57,18 +57,18 @@ class ModbusServer
/*! Вспомогательная функция реализующая обработку запроса на установку времени.
Основана на использовании gettimeofday и settimeofday.
*/
static ModbusRTU::mbErrCode replySetDateTime( ModbusRTU::SetDateTimeMessage& query,
static ModbusRTU::mbErrCode replySetDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply,
DebugStream* dlog=0 );
/*! Вспомогательная функция реализующая обработку передачи файла
/*! Вспомогательная функция реализующая обработку передачи файла
\param fname - запрашиваемый файл.
\param query - запрос
\param reply - ответ
*/
static ModbusRTU::mbErrCode replyFileTransfer( const std::string& fname,
ModbusRTU::FileTransferMessage& query,
static ModbusRTU::mbErrCode replyFileTransfer( const std::string& fname,
ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply,
DebugStream* dlog=0 );
......@@ -82,14 +82,14 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query,
virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query,
ModbusRTU::ReadCoilRetMessage& reply )=0;
/*! Обработка запроса на чтение данных (0x02).
\param query - запрос
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query,
virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query,
ModbusRTU::ReadInputStatusRetMessage& reply )=0;
/*! Обработка запроса на чтение данных (0x03).
......@@ -97,7 +97,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query,
virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query,
ModbusRTU::ReadOutputRetMessage& reply )=0;
/*! Обработка запроса на чтение данных (0x04).
......@@ -105,7 +105,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query,
virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query,
ModbusRTU::ReadInputRetMessage& reply )=0;
/*! Обработка запроса на запись данных (0x05).
......@@ -113,7 +113,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query,
virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query,
ModbusRTU::ForceSingleCoilRetMessage& reply )=0;
......@@ -122,7 +122,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query,
virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query,
ModbusRTU::WriteSingleOutputRetMessage& reply )=0;
/*! Обработка запроса на запись данных (0x0F).
......@@ -130,7 +130,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query,
virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query,
ModbusRTU::ForceCoilsRetMessage& reply )=0;
/*! Обработка запроса на запись данных (0x10).
......@@ -138,16 +138,16 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query,
virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query,
ModbusRTU::WriteOutputRetMessage& reply )=0;
/*! Обработка запроса на запись данных (0x08).
\param query - запрос
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query,
virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query,
ModbusRTU::DiagnosticRetMessage& reply )=0;
/*! Обработка запроса 43(0x2B).
......@@ -155,7 +155,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query,
virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query,
ModbusRTU::MEIMessageRetRDI& reply )=0;
......@@ -164,7 +164,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query,
virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query,
ModbusRTU::JournalCommandRetMessage& reply )=0;
......@@ -173,7 +173,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query,
virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply )=0;
......@@ -182,7 +182,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query,
virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query,
ModbusRTU::RemoteServiceRetMessage& reply )=0;
......@@ -191,19 +191,19 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query,
virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply )=0;
/*! get next data block from channel ot recv buffer
/*! get next data block from channel ot recv buffer
\param begin - get from position
\param buf - buffer for data
\param len - size of buf
\return real data lenght ( must be <= len )
\return real data lenght ( must be <= len )
*/
virtual int getNextData( unsigned char* buf, int len )=0;
virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len )=0;
/*! set timeout for receive data */
virtual void setChannelTimeout( timeout_t msec )=0;
......
......@@ -39,7 +39,7 @@ class ModbusTCPMaster:
virtual int getNextData( unsigned char* buf, int len ) override;
virtual void setChannelTimeout( timeout_t msec ) override;
virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len ) override;
virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg,
virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg,
ModbusRTU::ModbusMessage& reply, timeout_t timeout ) override;
private:
......
......@@ -26,7 +26,7 @@ class ModbusTCPServer:
/*! Однопоточная обработка (каждый запрос последовательно), с разрывом соединения в конце */
virtual ModbusRTU::mbErrCode receive( ModbusRTU::ModbusAddr mbaddr, timeout_t msecTimeout ) override;
/*! Многопоточная обработка (создаётся по потоку для каждого "клиента")
/*! Многопоточная обработка (создаётся по потоку для каждого "клиента")
\ return TRUE - если запр*ос пришёл
\return FALSE - если timeout
*/
......
......@@ -20,46 +20,46 @@ class ModbusTCPServerSlot:
protected:
virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query,
virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query,
ModbusRTU::ReadCoilRetMessage& reply );
virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query,
virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query,
ModbusRTU::ReadInputStatusRetMessage& reply );
virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query,
virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query,
ModbusRTU::ReadOutputRetMessage& reply );
virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query,
virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query,
ModbusRTU::ReadInputRetMessage& reply );
virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query,
virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query,
ModbusRTU::ForceSingleCoilRetMessage& reply );
virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query,
virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query,
ModbusRTU::WriteSingleOutputRetMessage& reply );
virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query,
virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query,
ModbusRTU::ForceCoilsRetMessage& reply );
virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query,
virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query,
ModbusRTU::WriteOutputRetMessage& reply );
virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query,
virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query,
ModbusRTU::DiagnosticRetMessage& reply );
virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query,
virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query,
ModbusRTU::MEIMessageRetRDI& reply );
virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query,
virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query,
ModbusRTU::JournalCommandRetMessage& reply );
virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query,
virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply );
virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query,
virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query,
ModbusRTU::RemoteServiceRetMessage& reply );
virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query,
virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply );
private:
......
......@@ -46,46 +46,46 @@ class ModbusTCPSession:
virtual ModbusRTU::mbErrCode post_send_request( ModbusRTU::ModbusMessage& request );
virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query,
virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query,
ModbusRTU::ReadCoilRetMessage& reply );
virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query,
virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query,
ModbusRTU::ReadInputStatusRetMessage& reply );
virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query,
virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query,
ModbusRTU::ReadOutputRetMessage& reply );
virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query,
virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query,
ModbusRTU::ReadInputRetMessage& reply );
virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query,
virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query,
ModbusRTU::ForceSingleCoilRetMessage& reply );
virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query,
virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query,
ModbusRTU::WriteSingleOutputRetMessage& reply );
virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query,
virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query,
ModbusRTU::ForceCoilsRetMessage& reply );
virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query,
virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query,
ModbusRTU::WriteOutputRetMessage& reply );
virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query,
virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query,
ModbusRTU::DiagnosticRetMessage& reply );
virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query,
virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query,
ModbusRTU::MEIMessageRetRDI& reply );
virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query,
virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query,
ModbusRTU::JournalCommandRetMessage& reply );
virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query,
virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply );
virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query,
virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query,
ModbusRTU::RemoteServiceRetMessage& reply );
virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query,
virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply );
private:
......
......@@ -8,7 +8,7 @@
#include <list>
#include "ModbusRTUErrors.h"
// -------------------------------------------------------------------------
/* Основные предположения:
/* Основные предположения:
* - младший и старший байт переворачиваются только в CRC
* - В случае неправильного формата пакета(запроса), логической ошибки и т.п
* ОТВЕТ просто не посылается, а пакет отбрасывается...
......@@ -20,7 +20,7 @@
// -------------------------------------------------------------------------
namespace ModbusRTU
{
// Базовые типы
// Базовые типы
typedef unsigned char ModbusByte; /*!< modbus-байт */
const int BitsPerByte = 8;
typedef unsigned char ModbusAddr; /*!< адрес узла в modbus-сети */
......@@ -79,7 +79,7 @@ namespace ModbusRTU
int szRequestDiagnosticData( DiagnosticsSubFunction f );
/*! Read Device Identification ObjectID (0x2B/0xE) */
enum RDIObjectID
enum RDIObjectID
{
rdiVendorName = 0x0,
rdiProductCode = 0x1,
......@@ -93,7 +93,7 @@ namespace ModbusRTU
};
/*! Read Device Identification ObjectID (0x2B/0xE) */
enum RDIRequestDeviceID
enum RDIRequestDeviceID
{
rdevMinNum = 0,
rdevBasicDevice = 0x1, // request to get the basic device identification (stream access)
......@@ -153,7 +153,7 @@ namespace ModbusRTU
std::ostream& operator<<(std::ostream& os, ModbusHeader* m );
// -----------------------------------------------------------------------
/*! Базовое (сырое) сообщение
/*! Базовое (сырое) сообщение
\todo Может переименовать ModbusMessage в TransportMessage?
*/
struct ModbusMessage:
......@@ -169,7 +169,7 @@ namespace ModbusRTU
std::ostream& operator<<(std::ostream& os, ModbusMessage& m );
std::ostream& operator<<(std::ostream& os, ModbusMessage* m );
// -----------------------------------------------------------------------
/*! Ответ сообщающий об ошибке */
/*! Ответ сообщающий об ошибке */
struct ErrorRetMessage:
public ModbusHeader
{
......@@ -187,14 +187,14 @@ namespace ModbusRTU
/*! преобразование для посылки в сеть */
ModbusMessage transport_msg();
/*! размер данных(после заголовка) у данного типа сообщения
/*! размер данных(после заголовка) у данного типа сообщения
Для данного типа он постоянный..
*/
inline static int szData(){ return sizeof(ModbusByte)+szCRC; }
};
std::ostream& operator<<(std::ostream& os, ErrorRetMessage& m );
std::ostream& operator<<(std::ostream& os, ErrorRetMessage* m );
std::ostream& operator<<(std::ostream& os, ErrorRetMessage& m );
std::ostream& operator<<(std::ostream& os, ErrorRetMessage* m );
// -----------------------------------------------------------------------
struct DataBits
{
......@@ -213,7 +213,7 @@ namespace ModbusRTU
};
std::ostream& operator<<(std::ostream& os, DataBits& m );
std::ostream& operator<<(std::ostream& os, DataBits* m );
std::ostream& operator<<(std::ostream& os, DataBits* m );
// -----------------------------------------------------------------------
struct DataBits16
{
......@@ -233,7 +233,7 @@ namespace ModbusRTU
};
std::ostream& operator<<(std::ostream& os, DataBits16& m );
std::ostream& operator<<(std::ostream& os, DataBits16* m );
std::ostream& operator<<(std::ostream& os, DataBits16* m );
// -----------------------------------------------------------------------
/*! Запрос 0x01 */
struct ReadCoilMessage:
......@@ -258,12 +258,12 @@ namespace ModbusRTU
}__attribute__((packed));
std::ostream& operator<<(std::ostream& os, ReadCoilMessage& m );
std::ostream& operator<<(std::ostream& os, ReadCoilMessage* m );
std::ostream& operator<<(std::ostream& os, ReadCoilMessage& m );
std::ostream& operator<<(std::ostream& os, ReadCoilMessage* m );
// -----------------------------------------------------------------------
/*! Ответ на 0x01 */
/*! Ответ на 0x01 */
struct ReadCoilRetMessage:
public ModbusHeader
{
......@@ -274,8 +274,8 @@ namespace ModbusRTU
ReadCoilRetMessage( ModbusMessage& m );
ReadCoilRetMessage& operator=( ModbusMessage& m );
void init( ModbusMessage& m );
/*! размер предварительного заголовка
* (после основного до фактических данных)
/*! размер предварительного заголовка
* (после основного до фактических данных)
*/
static inline int szHead()
{
......@@ -315,7 +315,7 @@ namespace ModbusRTU
/*! очистка данных */
void clear();
/*! проверка на переполнение */
/*! проверка на переполнение */
inline bool isFull()
{
return ( (int)bcnt >= MAXLENPACKET );
......@@ -331,7 +331,7 @@ namespace ModbusRTU
std::ostream& operator<<(std::ostream& os, ReadCoilRetMessage& m );
std::ostream& operator<<(std::ostream& os, ReadCoilRetMessage* m );
// -----------------------------------------------------------------------
/*! Запрос 0x02 */
/*! Запрос 0x02 */
struct ReadInputStatusMessage:
public ModbusHeader
{
......@@ -354,10 +354,10 @@ namespace ModbusRTU
}__attribute__((packed));
std::ostream& operator<<(std::ostream& os, ReadInputStatusMessage& m );
std::ostream& operator<<(std::ostream& os, ReadInputStatusMessage* m );
std::ostream& operator<<(std::ostream& os, ReadInputStatusMessage& m );
std::ostream& operator<<(std::ostream& os, ReadInputStatusMessage* m );
// -----------------------------------------------------------------------
/*! Ответ на 0x02 */
/*! Ответ на 0x02 */
struct ReadInputStatusRetMessage:
public ModbusHeader
{
......@@ -368,8 +368,8 @@ namespace ModbusRTU
ReadInputStatusRetMessage( ModbusMessage& m );
ReadInputStatusRetMessage& operator=( ModbusMessage& m );
void init( ModbusMessage& m );
/*! размер предварительного заголовка
* (после основного до фактических данных)
/*! размер предварительного заголовка
* (после основного до фактических данных)
*/
static inline int szHead()
{
......@@ -418,7 +418,7 @@ namespace ModbusRTU
/*! размер данных(после заголовка) у данного типа сообщения */
size_t szData();
/*! преобразование для посылки в сеть */
/*! преобразование для посылки в сеть */
ModbusMessage transport_msg();
};
......@@ -449,10 +449,10 @@ namespace ModbusRTU
}__attribute__((packed));
std::ostream& operator<<(std::ostream& os, ReadOutputMessage& m );
std::ostream& operator<<(std::ostream& os, ReadOutputMessage* m );
std::ostream& operator<<(std::ostream& os, ReadOutputMessage& m );
std::ostream& operator<<(std::ostream& os, ReadOutputMessage* m );
// -----------------------------------------------------------------------
/*! Ответ для 0x03 */
/*! Ответ для 0x03 */
struct ReadOutputRetMessage:
public ModbusHeader
{
......@@ -463,8 +463,8 @@ namespace ModbusRTU
ReadOutputRetMessage( ModbusMessage& m );
ReadOutputRetMessage& operator=( ModbusMessage& m );
void init( ModbusMessage& m );
/*! размер предварительного заголовка
* (после основного до фактических данных)
/*! размер предварительного заголовка
* (после основного до фактических данных)
*/
static inline int szHead()
{
......@@ -501,9 +501,9 @@ namespace ModbusRTU
ModbusMessage transport_msg();
// Это поле не входит в стандарт modbus
// оно вспомогательное и игнорируется при
// оно вспомогательное и игнорируется при
// преобразовании в ModbusMessage.
// Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно.
// Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно.
// Используйте специальную функцию transport_msg()
int count; /*!< фактическое количество данных в сообщении */
};
......@@ -511,7 +511,7 @@ namespace ModbusRTU
std::ostream& operator<<(std::ostream& os, ReadOutputRetMessage& m );
std::ostream& operator<<(std::ostream& os, ReadOutputRetMessage* m );
// -----------------------------------------------------------------------
/*! Запрос 0x04 */
/*! Запрос 0x04 */
struct ReadInputMessage:
public ModbusHeader
{
......@@ -534,8 +534,8 @@ namespace ModbusRTU
}__attribute__((packed));
std::ostream& operator<<(std::ostream& os, ReadInputMessage& m );
std::ostream& operator<<(std::ostream& os, ReadInputMessage* m );
std::ostream& operator<<(std::ostream& os, ReadInputMessage& m );
std::ostream& operator<<(std::ostream& os, ReadInputMessage* m );
// -----------------------------------------------------------------------
/*! Ответ для 0x04 */
......@@ -549,8 +549,8 @@ namespace ModbusRTU
ReadInputRetMessage( ModbusMessage& m );
ReadInputRetMessage& operator=( ModbusMessage& m );
void init( ModbusMessage& m );
/*! размер предварительного заголовка
* (после основного до фактических данных)
/*! размер предварительного заголовка
* (после основного до фактических данных)
*/
static inline int szHead()
{
......@@ -574,7 +574,7 @@ namespace ModbusRTU
/*! очистка данных */
void clear();
/*! проверка на переполнение */
/*! проверка на переполнение */
inline bool isFull()
{
return ( count*sizeof(ModbusData) >= MAXLENPACKET );
......@@ -589,9 +589,9 @@ namespace ModbusRTU
ModbusMessage transport_msg();
// Это поле не входит в стандарт modbus
// оно вспомогательное и игнорируется при
// оно вспомогательное и игнорируется при
// преобразовании в ModbusMessage.
// Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно.
// Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно.
// Используйте специальную функцию transport_msg()
int count; /*!< фактическое количество данных в сообщении */
};
......@@ -604,7 +604,7 @@ namespace ModbusRTU
public ModbusHeader
{
ModbusData start; /*!< стартовый адрес записи */
ModbusData quant; /*!< количество записываемых битов */
ModbusData quant; /*!< количество записываемых битов */
ModbusByte bcnt; /*!< количество байт данных */
/*! данные */
ModbusByte data[MAXLENPACKET-sizeof(ModbusData)*2-sizeof(ModbusByte)];
......@@ -620,13 +620,13 @@ namespace ModbusRTU
* \return FALSE - если НЕ удалось
*/
bool addData( DataBits d );
// return number of bit
// -1 - error
int addBit( bool state );
bool setBit( int nbit, bool state );
inline int last(){ return quant; }
/*! получение данных.
......@@ -636,7 +636,7 @@ namespace ModbusRTU
* \return FALSE - если НЕ найдено
*/
bool getData( unsigned char dnum, DataBits& d );
bool getBit( unsigned char bnum );
void clear();
......@@ -645,7 +645,7 @@ namespace ModbusRTU
return ( (int)bcnt >= MAXLENPACKET );
}
// ------- from master -------
// ------- from master -------
ForceCoilsMessage( ModbusMessage& m );
ForceCoilsMessage& operator=( ModbusMessage& m );
void init( ModbusMessage& m );
......@@ -653,29 +653,29 @@ namespace ModbusRTU
/*! размер данных(после заголовка) у данного типа сообщения */
size_t szData();
/*! размер предварительного заголовка
* (после основного до фактических данных)
/*! размер предварительного заголовка
* (после основного до фактических данных)
*/
static inline int szHead()
{
// start + quant + count
return sizeof(ModbusData)*2+sizeof(ModbusByte);
}
/*! узнать длину данных следующий за предварительным заголовком ( в байтах ) */
static int getDataLen( ModbusMessage& m );
/*! проверка корректности данных
/*! проверка корректности данных
что quant и bcnt - совпадают...
*/
bool checkFormat();
}__attribute__((packed));
std::ostream& operator<<(std::ostream& os, ForceCoilsMessage& m );
std::ostream& operator<<(std::ostream& os, ForceCoilsMessage* m );
// -----------------------------------------------------------------------
/*! Ответ для запроса на запись 0x0F */
/*! Ответ для запроса на запись 0x0F */
struct ForceCoilsRetMessage:
public ModbusHeader
{
......@@ -687,9 +687,9 @@ namespace ModbusRTU
ForceCoilsRetMessage( ModbusMessage& m );
ForceCoilsRetMessage& operator=( ModbusMessage& m );
void init( ModbusMessage& m );
// ------- to master -------
/*!
/*!
* \param _from - адрес отправителя
* \param start - записанный регистр
* \param quant - количество записанных слов
......@@ -699,25 +699,25 @@ namespace ModbusRTU
/*! записать данные */
void set( ModbusData start, ModbusData quant );
/*! преобразование для посылки в сеть */
/*! преобразование для посылки в сеть */
ModbusMessage transport_msg();
/*! размер данных(после заголовка) у данного типа сообщения
/*! размер данных(после заголовка) у данного типа сообщения
Для данного типа он постоянный..
*/
inline static int szData(){ return sizeof(ModbusData)*2+sizeof(ModbusCRC); }
};
std::ostream& operator<<(std::ostream& os, ForceCoilsRetMessage& m );
std::ostream& operator<<(std::ostream& os, ForceCoilsRetMessage* m );
// -----------------------------------------------------------------------
/*! Запрос на запись 0x10 */
/*! Запрос на запись 0x10 */
struct WriteOutputMessage:
public ModbusHeader
{
ModbusData start; /*!< стартовый адрес записи */
ModbusData quant; /*!< количество слов данных */
ModbusData quant; /*!< количество слов данных */
ModbusByte bcnt; /*!< количество байт данных */
/*! данные */
ModbusData data[MAXLENPACKET/sizeof(ModbusData)-sizeof(ModbusData)*2-sizeof(ModbusByte)];
......@@ -730,12 +730,12 @@ namespace ModbusRTU
bool addData( ModbusData d );
void clear();
inline bool isFull()
inline bool isFull()
{
return ( quant*sizeof(ModbusData) >= MAXLENPACKET );
}
// ------- from master -------
// ------- from master -------
WriteOutputMessage( ModbusMessage& m );
WriteOutputMessage& operator=( ModbusMessage& m );
void init( ModbusMessage& m );
......@@ -743,30 +743,30 @@ namespace ModbusRTU
/*! размер данных(после заголовка) у данного типа сообщения */
size_t szData();
/*! размер предварительного заголовка
* (после основного до фактических данных)
/*! размер предварительного заголовка
* (после основного до фактических данных)
*/
static inline int szHead()
{
// start + quant + count
return sizeof(ModbusData)*2+sizeof(ModbusByte);
}
/*! узнать длину данных следующий за предварительным заголовком ( в байтах ) */
static int getDataLen( ModbusMessage& m );
/*! проверка корректности данных
/*! проверка корректности данных
что quant и bcnt - совпадают...
*/
bool checkFormat();
}__attribute__((packed));
std::ostream& operator<<(std::ostream& os, WriteOutputMessage& m );
std::ostream& operator<<(std::ostream& os, WriteOutputMessage* m );
/*! Ответ для запроса на запись 0x10 */
/*! Ответ для запроса на запись 0x10 */
struct WriteOutputRetMessage:
public ModbusHeader
{
......@@ -780,7 +780,7 @@ namespace ModbusRTU
ModbusCRC crc;
// ------- to master -------
/*!
/*!
* \param _from - адрес отправителя
* \param start - записанный регистр
* \param quant - количество записанных слов
......@@ -790,19 +790,19 @@ namespace ModbusRTU
/*! записать данные */
void set( ModbusData start, ModbusData quant );
/*! преобразование для посылки в сеть */
/*! преобразование для посылки в сеть */
ModbusMessage transport_msg();
/*! размер данных(после заголовка) у данного типа сообщения
/*! размер данных(после заголовка) у данного типа сообщения
Для данного типа он постоянный..
*/
inline static int szData(){ return sizeof(ModbusData)*2+sizeof(ModbusCRC); }
};
std::ostream& operator<<(std::ostream& os, WriteOutputRetMessage& m );
std::ostream& operator<<(std::ostream& os, WriteOutputRetMessage* m );
// -----------------------------------------------------------------------
/*! Запрос 0x05 */
/*! Запрос 0x05 */
struct ForceSingleCoilMessage:
public ModbusHeader
{
......@@ -821,7 +821,7 @@ namespace ModbusRTU
ForceSingleCoilMessage( ModbusAddr addr, ModbusData reg, bool state );
/*! преобразование для посылки в сеть */
ModbusMessage transport_msg();
// ------- from master -------
ForceSingleCoilMessage( ModbusMessage& m );
ForceSingleCoilMessage& operator=( ModbusMessage& m );
......@@ -830,20 +830,20 @@ namespace ModbusRTU
/*! размер данных(после заголовка) у данного типа сообщения */
size_t szData();
/*! размер предварительного заголовка
* (после основного до фактических данных)
/*! размер предварительного заголовка
* (после основного до фактических данных)
*/
static inline int szHead()
{
return sizeof(ModbusData);
}
/*! узнать длину данных следующий за
предварительным заголовком ( в байтах )
/*! узнать длину данных следующий за
предварительным заголовком ( в байтах )
*/
static int getDataLen( ModbusMessage& m );
/*! проверка корректности данных
/*! проверка корректности данных
что quant и bcnt - совпадают...
*/
bool checkFormat();
......@@ -854,7 +854,7 @@ namespace ModbusRTU
std::ostream& operator<<(std::ostream& os, ForceSingleCoilMessage* m );
// -----------------------------------------------------------------------
/*! Ответ для запроса 0x05 */
/*! Ответ для запроса 0x05 */
struct ForceSingleCoilRetMessage:
public ModbusHeader
{
......@@ -869,7 +869,7 @@ namespace ModbusRTU
void init( ModbusMessage& m );
// ------- to master -------
/*!
/*!
* \param _from - адрес отправителя
* \param start - записанный регистр
*/
......@@ -878,20 +878,20 @@ namespace ModbusRTU
/*! записать данные */
void set( ModbusData start, bool cmd );
/*! преобразование для посылки в сеть */
/*! преобразование для посылки в сеть */
ModbusMessage transport_msg();
/*! размер данных(после заголовка) у данного типа сообщения
/*! размер данных(после заголовка) у данного типа сообщения
Для данного типа он постоянный..
*/
inline static int szData(){ return 2*sizeof(ModbusData)+sizeof(ModbusCRC); }
};
std::ostream& operator<<(std::ostream& os, ForceSingleCoilRetMessage& m );
std::ostream& operator<<(std::ostream& os, ForceSingleCoilRetMessage* m );
// -----------------------------------------------------------------------
/*! Запрос на запись одного регистра 0x06 */
/*! Запрос на запись одного регистра 0x06 */
struct WriteSingleOutputMessage:
public ModbusHeader
{
......@@ -904,7 +904,7 @@ namespace ModbusRTU
WriteSingleOutputMessage( ModbusAddr addr, ModbusData reg=0, ModbusData data=0 );
/*! преобразование для посылки в сеть */
ModbusMessage transport_msg();
// ------- from master -------
WriteSingleOutputMessage( ModbusMessage& m );
WriteSingleOutputMessage& operator=( ModbusMessage& m );
......@@ -913,20 +913,20 @@ namespace ModbusRTU
/*! размер данных(после заголовка) у данного типа сообщения */
size_t szData();
/*! размер предварительного заголовка
* (после основного до фактических данных)
/*! размер предварительного заголовка
* (после основного до фактических данных)
*/
static inline int szHead()
{
return sizeof(ModbusData);
}
/*! узнать длину данных следующий за
предварительным заголовком ( в байтах )
/*! узнать длину данных следующий за
предварительным заголовком ( в байтах )
*/
static int getDataLen( ModbusMessage& m );
/*! проверка корректности данных
/*! проверка корректности данных
что quant и bcnt - совпадают...
*/
bool checkFormat();
......@@ -937,7 +937,7 @@ namespace ModbusRTU
std::ostream& operator<<(std::ostream& os, WriteSingleOutputMessage* m );
// -----------------------------------------------------------------------
/*! Ответ для запроса на запись */
/*! Ответ для запроса на запись */
struct WriteSingleOutputRetMessage:
public ModbusHeader
{
......@@ -952,7 +952,7 @@ namespace ModbusRTU
void init( ModbusMessage& m );
// ------- to master -------
/*!
/*!
* \param _from - адрес отправителя
* \param start - записанный регистр
*/
......@@ -961,19 +961,19 @@ namespace ModbusRTU
/*! записать данные */
void set( ModbusData start, ModbusData data );
/*! преобразование для посылки в сеть */
/*! преобразование для посылки в сеть */
ModbusMessage transport_msg();
/*! размер данных(после заголовка) у данного типа сообщения
/*! размер данных(после заголовка) у данного типа сообщения
Для данного типа он постоянный..
*/
inline static int szData(){ return 2*sizeof(ModbusData)+sizeof(ModbusCRC); }
};
std::ostream& operator<<(std::ostream& os, WriteSingleOutputRetMessage& m );
std::ostream& operator<<(std::ostream& os, WriteSingleOutputRetMessage* m );
// -----------------------------------------------------------------------
/*! Запрос 0x08 */
/*! Запрос 0x08 */
struct DiagnosticMessage:
public ModbusHeader
{
......@@ -984,8 +984,8 @@ namespace ModbusRTU
DiagnosticMessage( ModbusMessage& m );
DiagnosticMessage& operator=( ModbusMessage& m );
void init( ModbusMessage& m );
/*! размер предварительного заголовка
* (после основного до фактических данных)
/*! размер предварительного заголовка
* (после основного до фактических данных)
*/
static inline int szHead()
{
......@@ -995,7 +995,7 @@ namespace ModbusRTU
/*! узнать длину данных следующий за предварительным заголовком ( в байтах ) */
static int getDataLen( ModbusMessage& m );
ModbusCRC crc;
// ------- to master -------
DiagnosticMessage( ModbusAddr _from, DiagnosticsSubFunction subf, ModbusData d=0 );
......@@ -1007,30 +1007,30 @@ namespace ModbusRTU
/*! очистка данных */
void clear();
/*! проверка на переполнение */
inline bool isFull()
/*! проверка на переполнение */
inline bool isFull()
{
return ( sizeof(subf)+count*sizeof(ModbusData) >= MAXLENPACKET );
}
/*! размер данных(после заголовка) у данного типа сообщения */
size_t szData();
/*! преобразование для посылки в сеть */
/*! преобразование для посылки в сеть */
ModbusMessage transport_msg();
// Это поле не входит в стандарт modbus
// оно вспомогательное и игнорируется при
// оно вспомогательное и игнорируется при
// преобразовании в ModbusMessage.
// Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно.
// Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно.
// Используйте специальную функцию transport_msg()
int count; /*!< фактическое количество данных в сообщении */
};
std::ostream& operator<<(std::ostream& os, DiagnosticMessage& m );
std::ostream& operator<<(std::ostream& os, DiagnosticMessage* m );
// -----------------------------------------------------------------------
/*! Ответ для 0x08 */
/*! Ответ для 0x08 */
struct DiagnosticRetMessage:
public DiagnosticMessage
{
......@@ -1057,13 +1057,13 @@ namespace ModbusRTU
/*! преобразование для посылки в сеть */
ModbusMessage transport_msg();
// ------- from master -------
// ------- from master -------
MEIMessageRDI( ModbusMessage& m );
MEIMessageRDI& operator=( ModbusMessage& m );
void init( ModbusMessage& m );
/*! размер предварительного заголовка
* (после основного до фактических данных)
/*! размер предварительного заголовка
* (после основного до фактических данных)
*/
static inline int szHead(){ return sizeof(ModbusByte)*3; }
......@@ -1122,7 +1122,7 @@ namespace ModbusRTU
// /*! узнать длину данных следующих за предварительным заголовком ( в байтах ) */
// static int getDataLen( ModbusMessage& m );
// ------- to master -------
MEIMessageRetRDI( ModbusAddr _from, ModbusByte devID, ModbusByte conformity, ModbusByte mf, ModbusByte objID );
......@@ -1135,16 +1135,16 @@ namespace ModbusRTU
/*! очистка данных */
void clear();
/*! проверка на переполнение */
/*! проверка на переполнение */
inline bool isFull()
{
return ( bcnt >= MAXLENPACKET );
}
/*! размер данных(после заголовка) у данного типа сообщения */
size_t szData();
/*! преобразование для посылки в сеть */
ModbusMessage transport_msg();
......@@ -1158,14 +1158,14 @@ namespace ModbusRTU
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
/*! Чтение информации об ошибке */
/*! Чтение информации об ошибке */
struct JournalCommandMessage:
public ModbusHeader
{
ModbusData cmd; /*!< код операции */
ModbusData num; /*!< номер записи */
ModbusCRC crc;
// -------------
JournalCommandMessage( ModbusMessage& m );
JournalCommandMessage& operator=( ModbusMessage& m );
......@@ -1175,10 +1175,10 @@ namespace ModbusRTU
}__attribute__((packed));
std::ostream& operator<<(std::ostream& os, JournalCommandMessage& m );
std::ostream& operator<<(std::ostream& os, JournalCommandMessage* m );
std::ostream& operator<<(std::ostream& os, JournalCommandMessage& m );
std::ostream& operator<<(std::ostream& os, JournalCommandMessage* m );
// -----------------------------------------------------------------------
/*! Ответ для запроса на чтение ошибки */
/*! Ответ для запроса на чтение ошибки */
struct JournalCommandRetMessage:
public ModbusHeader
{
......@@ -1203,23 +1203,23 @@ namespace ModbusRTU
/*! очистка данных */
void clear();
/*! проверка на переполнение */
inline bool isFull()
/*! проверка на переполнение */
inline bool isFull()
{
return ( count*sizeof(ModbusData) >= MAXLENPACKET );
}
/*! размер данных(после заголовка) у данного типа сообщения */
size_t szData();
/*! преобразование для посылки в сеть */
/*! преобразование для посылки в сеть */
ModbusMessage transport_msg();
// Это поле не входит в стандарт modbus
// оно вспомогательное и игнорируется при
// оно вспомогательное и игнорируется при
// преобразовании в ModbusMessage.
// Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно.
// Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно.
// Используйте специальную функцию transport_msg()
int count; /*!< фактическое количество данных в сообщении */
};
......@@ -1227,7 +1227,7 @@ namespace ModbusRTU
std::ostream& operator<<(std::ostream& os, JournalCommandRetMessage& m );
std::ostream& operator<<(std::ostream& os, JournalCommandRetMessage* m );
// -----------------------------------------------------------------------
/*! ответ в случае необходимости подтверждения команды
/*! ответ в случае необходимости подтверждения команды
(просто пакует в JournalCommandRetMessage код команды и ошибки )
*/
struct JournalCommandRetOK:
......@@ -1239,11 +1239,11 @@ namespace ModbusRTU
static void set( JournalCommandRetMessage& m, ModbusData cmd, ModbusData ecode );
};
std::ostream& operator<<(std::ostream& os, JournalCommandRetOK& m );
std::ostream& operator<<(std::ostream& os, JournalCommandRetOK* m );
std::ostream& operator<<(std::ostream& os, JournalCommandRetOK& m );
std::ostream& operator<<(std::ostream& os, JournalCommandRetOK* m );
// -----------------------------------------------------------------------
/*! Установка времени */
/*! Установка времени */
struct SetDateTimeMessage:
public ModbusHeader
{
......@@ -1256,12 +1256,12 @@ namespace ModbusRTU
ModbusByte century; /*!< столетие [19-20] */
ModbusCRC crc;
// ------- to slave -------
SetDateTimeMessage( ModbusAddr addr );
/*! преобразование для посылки в сеть */
ModbusMessage transport_msg();
// ------- from master -------
SetDateTimeMessage( ModbusMessage& m );
SetDateTimeMessage& operator=( ModbusMessage& m );
......@@ -1274,8 +1274,8 @@ namespace ModbusRTU
}__attribute__((packed));
std::ostream& operator<<(std::ostream& os, SetDateTimeMessage& m );
std::ostream& operator<<(std::ostream& os, SetDateTimeMessage* m );
std::ostream& operator<<(std::ostream& os, SetDateTimeMessage& m );
std::ostream& operator<<(std::ostream& os, SetDateTimeMessage* m );
// -----------------------------------------------------------------------
/*! Ответ (просто повторяет запрос) */
......@@ -1293,12 +1293,12 @@ namespace ModbusRTU
SetDateTimeRetMessage( const SetDateTimeMessage& query );
static void cpy( SetDateTimeRetMessage& reply, SetDateTimeMessage& query );
/*! преобразование для посылки в сеть */
/*! преобразование для посылки в сеть */
ModbusMessage transport_msg();
};
// -----------------------------------------------------------------------
/*! Вызов удалённого сервиса */
/*! Вызов удалённого сервиса */
struct RemoteServiceMessage:
public ModbusHeader
{
......@@ -1307,7 +1307,7 @@ namespace ModbusRTU
/*! данные */
ModbusByte data[MAXLENPACKET-sizeof(ModbusByte)];
ModbusCRC crc; /*!< контрольная сумма */
// -----------
RemoteServiceMessage( ModbusMessage& m );
RemoteServiceMessage& operator=( ModbusMessage& m );
......@@ -1316,19 +1316,19 @@ namespace ModbusRTU
/*! размер данных(после заголовка) у данного типа сообщения */
size_t szData();
/*! размер предварительного заголовка
* (после основного до фактических данных)
/*! размер предварительного заголовка
* (после основного до фактических данных)
*/
static inline int szHead()
{ return sizeof(ModbusByte); } // bcnt
/*! узнать длину данных следующий за предварительным заголовком ( в байтах ) */
static int getDataLen( ModbusMessage& m );
}__attribute__((packed));
std::ostream& operator<<(std::ostream& os, RemoteServiceMessage& m );
std::ostream& operator<<(std::ostream& os, RemoteServiceMessage* m );
std::ostream& operator<<(std::ostream& os, RemoteServiceMessage& m );
std::ostream& operator<<(std::ostream& os, RemoteServiceMessage* m );
// -----------------------------------------------------------------------
struct RemoteServiceRetMessage:
public ModbusHeader
......@@ -1349,19 +1349,19 @@ namespace ModbusRTU
/*! очистка данных */
void clear();
/*! проверка на переполнение */
inline bool isFull()
/*! проверка на переполнение */
inline bool isFull()
{ return ( count >= sizeof(data) ); }
/*! размер данных(после заголовка) у данного типа сообщения */
size_t szData();
/*! преобразование для посылки в сеть */
/*! преобразование для посылки в сеть */
ModbusMessage transport_msg();
// Это поле не входит в стандарт modbus
// оно вспомогательное и игнорируется при
// оно вспомогательное и игнорируется при
// преобразовании в ModbusMessage.
unsigned int count; /*!< фактическое количество данных в сообщении */
};
......@@ -1376,14 +1376,14 @@ namespace ModbusRTU
ModbusData numfile; /*!< file number 0x0000 to 0xFFFF */
ModbusData numrec; /*!< record number 0x0000 to 0x270F */
ModbusData reglen; /*!< registers length */
}__attribute__((packed));
}__attribute__((packed));
ModbusByte bcnt; /*!< количество байт 0x07 to 0xF5 */
/*! данные */
SubRequest data[MAXLENPACKET/sizeof(SubRequest)-sizeof(ModbusByte)];
ModbusCRC crc; /*!< контрольная сумма */
// -----------
ReadFileRecordMessage( ModbusMessage& m );
ReadFileRecordMessage& operator=( ModbusMessage& m );
......@@ -1392,24 +1392,24 @@ namespace ModbusRTU
/*! размер данных(после заголовка) у данного типа сообщения */
size_t szData();
/*! размер предварительного заголовка
* (после основного до фактических данных)
/*! размер предварительного заголовка
* (после основного до фактических данных)
*/
static inline int szHead()
{ return sizeof(ModbusByte); } // bcnt
/*! узнать длину данных следующий за предварительным заголовком ( в байтах ) */
static int getDataLen( ModbusMessage& m );
/*! проверка корректности данных */
bool checkFormat();
// это поле служебное и не используется в релальном обмене
int count; /*!< фактическое количество данных */
};
std::ostream& operator<<(std::ostream& os, ReadFileRecordMessage& m );
std::ostream& operator<<(std::ostream& os, ReadFileRecordMessage* m );
std::ostream& operator<<(std::ostream& os, ReadFileRecordMessage& m );
std::ostream& operator<<(std::ostream& os, ReadFileRecordMessage* m );
// -----------------------------------------------------------------------
struct FileTransferMessage:
......@@ -1418,11 +1418,11 @@ namespace ModbusRTU
ModbusData numfile; /*!< file number 0x0000 to 0xFFFF */
ModbusData numpacket; /*!< number of packet */
ModbusCRC crc; /*!< контрольная сумма */
// ------- to slave -------
FileTransferMessage( ModbusAddr addr, ModbusData numfile, ModbusData numpacket );
ModbusMessage transport_msg(); /*!< преобразование для посылки в сеть */
// ------- from master -------
FileTransferMessage( ModbusMessage& m );
FileTransferMessage& operator=( ModbusMessage& m );
......@@ -1434,14 +1434,14 @@ namespace ModbusRTU
}__attribute__((packed));
std::ostream& operator<<(std::ostream& os, FileTransferMessage& m );
std::ostream& operator<<(std::ostream& os, FileTransferMessage* m );
std::ostream& operator<<(std::ostream& os, FileTransferMessage& m );
std::ostream& operator<<(std::ostream& os, FileTransferMessage* m );
// -----------------------------------------------------------------------
struct FileTransferRetMessage:
public ModbusHeader
{
// 255 - max of bcnt...(1 byte)
// 255 - max of bcnt...(1 byte)
// static const int MaxDataLen = 255 - szCRC - szModbusHeader - sizeof(ModbusData)*3 - sizeof(ModbusByte)*2;
static const int MaxDataLen = MAXLENPACKET - sizeof(ModbusData)*3 - sizeof(ModbusByte)*2;
......@@ -1452,7 +1452,7 @@ namespace ModbusRTU
ModbusByte dlen; /*!< количество байт данных в ответе */
ModbusByte data[MaxDataLen];
// ------- from slave -------
FileTransferRetMessage( ModbusMessage& m );
FileTransferRetMessage& operator=( ModbusMessage& m );
......@@ -1460,7 +1460,7 @@ namespace ModbusRTU
ModbusCRC crc;
static int szHead(){ return sizeof(ModbusByte); }
static int getDataLen( ModbusMessage& m );
// ------- to master -------
FileTransferRetMessage( ModbusAddr _from );
......@@ -1471,15 +1471,15 @@ namespace ModbusRTU
/*! очистка данных */
void clear();
/*! размер данных(после заголовка) у данного типа сообщения */
size_t szData();
/*! преобразование для посылки в сеть */
/*! преобразование для посылки в сеть */
ModbusMessage transport_msg();
};
std::ostream& operator<<(std::ostream& os, FileTransferRetMessage& m );
std::ostream& operator<<(std::ostream& os, FileTransferRetMessage& m );
std::ostream& operator<<(std::ostream& os, FileTransferRetMessage* m );
// -----------------------------------------------------------------------
} // end of ModbusRTU namespace
......@@ -1494,12 +1494,12 @@ namespace ModbusTCP
/* ModbusRTU::ModbusByte uID; */ /*!< unit ID */ /* <------- see ModbusHeader */
MBAPHeader():tID(0),pID(0) /*,uID(0) */{}
void swapdata();
}__attribute__((packed));
std::ostream& operator<<(std::ostream& os, MBAPHeader& m );
std::ostream& operator<<(std::ostream& os, MBAPHeader& m );
// -----------------------------------------------------------------------
} // end of namespace ModbusTCP
......
......@@ -16,9 +16,9 @@ class TCPCheck
public:
TCPCheck();
~TCPCheck();
bool check( const std::string& _ip, int _port, timeout_t tout, timeout_t sleep_msec );
/*! \param iaddr - 'ip:port' */
bool check( const std::string& iaddr, timeout_t tout, timeout_t sleep_msec );
......
......@@ -21,7 +21,7 @@ UConnector_wrap.cxx: UConnector.i UConnector.h
swig -python -c++ -classic UConnector.i
_pyUModbus_la_SOURCES = UModbus.cc UModbus_wrap.cxx
_pyUModbus_la_CXXFLAGS = $(UNISET_CFLAGS) $(UNISET_EXT_CFLAGS) $(COMCPP_CFLAGS) $(PYTHON_CFLAGS)
_pyUModbus_la_CXXFLAGS = $(UNISET_CFLAGS) $(UNISET_EXT_CFLAGS) $(COMCPP_CFLAGS) $(PYTHON_CFLAGS)
_pyUModbus_la_LDFLAGS = -module -avoid-version
_pyUModbus_la_LIBADD = $(UNISET_LIBS) $(UNISET_EXT_LIBS) $(COMCPP_LIBS) $(PYTHON_LIBS)
......
#ifndef pyUInterface_H_
#define pyUInterface_H_
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
#include <string>
#include "UTypes.h"
#include "UExceptions.h"
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
namespace pyUInterface
{
void uniset_init_params( UTypes::Params* p, const char* xmlfile )throw(UException);
......@@ -15,13 +15,13 @@ namespace pyUInterface
void setValue( long id, long val )throw(UException);
long getSensorID( const char* );
const char* getShortName( long id );
const char* getName( long id );
const char* getTextName( long id );
const char* getConfFileName();
}
//---------------------------------------------------------------------------
#endif
......
......@@ -54,7 +54,7 @@ const char* UConnector::getConfFileName()
// return xmlfile;
if( conf )
return conf->getConfFileName().c_str();
return "";
}
......@@ -63,10 +63,10 @@ long UConnector::getValue( long id, long node )throw(UException)
{
if( !conf || !ui )
throw USysError();
if( node == UTypes::DefaultID )
node = conf->getLocalNode();
try
{
return ui->getValue(id,node);
......@@ -79,7 +79,7 @@ long UConnector::getValue( long id, long node )throw(UException)
{
throw UException("(getValue): catch...");
}
throw UException("(getValue): unknown error");
}
//---------------------------------------------------------------------------
......@@ -87,11 +87,11 @@ void UConnector::setValue( long id, long val, long node )throw(UException)
{
if( !conf || !ui )
throw USysError();
if( node == UTypes::DefaultID )
node = conf->getLocalNode();
try
{
ui->setValue(id,val,node);
......@@ -110,7 +110,7 @@ long UConnector::getSensorID( const char* name )
{
if( conf )
return conf->getSensorID(name);
return UTypes::DefaultID;
}
//---------------------------------------------------------------------------
......@@ -118,7 +118,7 @@ long UConnector::getNodeID( const char* name )
{
if( conf )
return conf->getNodeID(name);
return UTypes::DefaultID;
}
//---------------------------------------------------------------------------
......@@ -126,7 +126,7 @@ const char* UConnector::getName( long id )
{
if( conf )
return conf->oind->getMapName(id).c_str();
return "";
}
//---------------------------------------------------------------------------
......@@ -134,7 +134,7 @@ const char* UConnector::getShortName( long id )
{
if( conf )
return ORepHelpers::getShortName(conf->oind->getMapName(id)).c_str();
return "";
}
//---------------------------------------------------------------------------
......@@ -142,7 +142,7 @@ const char* UConnector::getTextName( long id )
{
if( conf )
return conf->oind->getTextName(id).c_str();
return "";
}
//---------------------------------------------------------------------------
......@@ -22,12 +22,12 @@ class UConnector
long getSensorID( const char* );
long getNodeID( const char* );
const char* getShortName( long id );
const char* getName( long id );
const char* getTextName( long id );
private:
UniSetTypes::Configuration* conf;
UInterface* ui;
......
......@@ -2980,7 +2980,7 @@ static swig_module_info swig_module = {swig_types, 5, 0, 0, 0, 0};
#endif
#define SWIG_name "_pyUConnector"
#define SWIGVERSION 0x020010
#define SWIGVERSION 0x020010
#define SWIG_VERSION SWIGVERSION
......
......@@ -7,9 +7,9 @@ struct UException
UException( const std::string& e ):err(e){}
UException( const char* e ):err( std::string(e)){}
~UException(){}
const char* getError(){ return err.c_str(); }
std::string err;
};
//---------------------------------------------------------------------------
......
......@@ -2980,7 +2980,7 @@ static swig_module_info swig_module = {swig_types, 5, 0, 0, 0, 0};
#endif
#define SWIG_name "_pyUExceptions"
#define SWIGVERSION 0x020010
#define SWIGVERSION 0x020010
#define SWIG_VERSION SWIGVERSION
......
......@@ -2982,7 +2982,7 @@ static swig_module_info swig_module = {swig_types, 7, 0, 0, 0, 0};
#endif
#define SWIG_name "_pyUniSet"
#define SWIGVERSION 0x020010
#define SWIGVERSION 0x020010
#define SWIG_VERSION SWIGVERSION
......@@ -3834,10 +3834,10 @@ SWIGINTERN PyObject *_wrap_new_UException__SWIG_1(PyObject *SWIGUNUSEDPARM(self)
if (!PyArg_ParseTuple(args,(char *)"O:new_UException",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_std__string, 0 | 0);
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_UException" "', argument " "1"" of type '" "std::string const &""'");
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_UException" "', argument " "1"" of type '" "std::string const &""'");
}
if (!argp1) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_UException" "', argument " "1"" of type '" "std::string const &""'");
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_UException" "', argument " "1"" of type '" "std::string const &""'");
}
arg1 = reinterpret_cast< std::string * >(argp1);
result = (UException *)new UException((std::string const &)*arg1);
......@@ -4047,10 +4047,10 @@ SWIGINTERN PyObject *_wrap_new_UTimeOut__SWIG_1(PyObject *SWIGUNUSEDPARM(self),
if (!PyArg_ParseTuple(args,(char *)"O:new_UTimeOut",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_std__string, 0 | 0);
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_UTimeOut" "', argument " "1"" of type '" "std::string const &""'");
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_UTimeOut" "', argument " "1"" of type '" "std::string const &""'");
}
if (!argp1) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_UTimeOut" "', argument " "1"" of type '" "std::string const &""'");
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_UTimeOut" "', argument " "1"" of type '" "std::string const &""'");
}
arg1 = reinterpret_cast< std::string * >(argp1);
result = (UTimeOut *)new UTimeOut((std::string const &)*arg1);
......@@ -4144,10 +4144,10 @@ SWIGINTERN PyObject *_wrap_new_USysError__SWIG_1(PyObject *SWIGUNUSEDPARM(self),
if (!PyArg_ParseTuple(args,(char *)"O:new_USysError",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_std__string, 0 | 0);
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_USysError" "', argument " "1"" of type '" "std::string const &""'");
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_USysError" "', argument " "1"" of type '" "std::string const &""'");
}
if (!argp1) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_USysError" "', argument " "1"" of type '" "std::string const &""'");
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_USysError" "', argument " "1"" of type '" "std::string const &""'");
}
arg1 = reinterpret_cast< std::string * >(argp1);
result = (USysError *)new USysError((std::string const &)*arg1);
......
......@@ -105,7 +105,7 @@ void UModbus::connect( const char* _ip, int _port )throw(UException)
std::ostringstream err;
err << "Connection failed: ip=" << ip << " port=" << port;
throw UException(err.str());
}
}
}
// --------------------------------------------------------------------------
long UModbus::getWord( int addr, int mbreg, int mbfunc )throw(UException)
......@@ -130,10 +130,10 @@ long UModbus::mbread( int mbaddr, int mbreg, int mbfunc, const char* s_vtype, in
// const char* n_ip = strcmp(new_ip,"") ? new_ip : ip;
const char* n_ip = (new_ip != 0) ? new_ip : ip.c_str();
int n_port = ( new_port > 0 ) ? new_port : port;
int n_port = ( new_port > 0 ) ? new_port : port;
connect(n_ip,n_port);
VType vt = str2type(s_vtype);
if( vt == vtUnknown )
{
......@@ -217,7 +217,7 @@ long UModbus::mbread( int mbaddr, int mbreg, int mbfunc, const char* s_vtype, in
//---------------------------------------------------------------------------
long UModbus::data2value( VTypes::VType vtype, ModbusRTU::ModbusData* data )
{
#if 0
#if 0
if( vt == VTypes::vtUnknown )
{
ModbusRTU::DataBits16 b(data[0]);
......
......@@ -24,7 +24,7 @@ class UModbus
// выставление паметров связи, без установления соединения (!)
void prepare( const char* ip, int port )throw(UException);
void connect( const char* ip, int port )throw(UException);
inline int conn_port(){ return port; }
inline std::string conn_ip(){ return ip; }
......@@ -32,7 +32,7 @@ class UModbus
inline void setTimeout( int msec ){ tout_msec = msec; }
/*! Универсальная функция для чтения регистров.
/*! Универсальная функция для чтения регистров.
* Если не указывать ip и порт, будут использованы, те
* чтобы были заданы в UModbus::connect(). Если заданы другие ip и port,
* будет сделано переподключение..
......@@ -54,7 +54,7 @@ class UModbus
protected:
long data2value( VTypes::VType vt, ModbusRTU::ModbusData* data );
private:
// DebugStream dlog;
ModbusTCPMaster* mb;
......
......@@ -2983,7 +2983,7 @@ static swig_module_info swig_module = {swig_types, 8, 0, 0, 0, 0};
#endif
#define SWIG_name "_pyUModbus"
#define SWIGVERSION 0x020010
#define SWIGVERSION 0x020010
#define SWIG_VERSION SWIGVERSION
......@@ -5214,7 +5214,7 @@ SWIGINTERN PyObject *Params_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObjec
SWIGINTERN PyObject *_wrap_new_UException__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
UException *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_UException")) SWIG_fail;
result = (UException *)new UException();
resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_UException, SWIG_POINTER_NEW | 0 );
......@@ -5231,14 +5231,14 @@ SWIGINTERN PyObject *_wrap_new_UException__SWIG_1(PyObject *SWIGUNUSEDPARM(self)
int res1 = 0 ;
PyObject * obj0 = 0 ;
UException *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:new_UException",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_std__string, 0 | 0);
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_UException" "', argument " "1"" of type '" "std::string const &""'");
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_UException" "', argument " "1"" of type '" "std::string const &""'");
}
if (!argp1) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_UException" "', argument " "1"" of type '" "std::string const &""'");
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_UException" "', argument " "1"" of type '" "std::string const &""'");
}
arg1 = reinterpret_cast< std::string * >(argp1);
result = (UException *)new UException((std::string const &)*arg1);
......@@ -5257,7 +5257,7 @@ SWIGINTERN PyObject *_wrap_new_UException__SWIG_2(PyObject *SWIGUNUSEDPARM(self)
int alloc1 = 0 ;
PyObject * obj0 = 0 ;
UException *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:new_UException",&obj0)) SWIG_fail;
res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
......@@ -5278,7 +5278,7 @@ SWIGINTERN PyObject *_wrap_new_UException(PyObject *self, PyObject *args) {
int argc;
PyObject *argv[2];
int ii;
if (!PyTuple_Check(args)) SWIG_fail;
argc = args ? (int)PyObject_Length(args) : 0;
for (ii = 0; (ii < 1) && (ii < argc); ii++) {
......@@ -5303,7 +5303,7 @@ SWIGINTERN PyObject *_wrap_new_UException(PyObject *self, PyObject *args) {
return _wrap_new_UException__SWIG_2(self, args);
}
}
fail:
SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_UException'.\n"
" Possible C/C++ prototypes are:\n"
......@@ -5320,11 +5320,11 @@ SWIGINTERN PyObject *_wrap_delete_UException(PyObject *SWIGUNUSEDPARM(self), PyO
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_UException",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_UException, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_UException" "', argument " "1"" of type '" "UException *""'");
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_UException" "', argument " "1"" of type '" "UException *""'");
}
arg1 = reinterpret_cast< UException * >(argp1);
delete arg1;
......@@ -5342,11 +5342,11 @@ SWIGINTERN PyObject *_wrap_UException_getError(PyObject *SWIGUNUSEDPARM(self), P
int res1 = 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:UException_getError",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_UException, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "UException_getError" "', argument " "1"" of type '" "UException *""'");
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "UException_getError" "', argument " "1"" of type '" "UException *""'");
}
arg1 = reinterpret_cast< UException * >(argp1);
result = (char *)(arg1)->getError();
......@@ -5367,18 +5367,18 @@ SWIGINTERN PyObject *_wrap_UException_err_set(PyObject *SWIGUNUSEDPARM(self), Py
int res2 = 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:UException_err_set",&obj0,&obj1)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_UException, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "UException_err_set" "', argument " "1"" of type '" "UException *""'");
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "UException_err_set" "', argument " "1"" of type '" "UException *""'");
}
arg1 = reinterpret_cast< UException * >(argp1);
{
res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__string, 0 | 0);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "UException_err_set" "', argument " "2"" of type '" "std::string""'");
}
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "UException_err_set" "', argument " "2"" of type '" "std::string""'");
}
if (!argp2) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "UException_err_set" "', argument " "2"" of type '" "std::string""'");
} else {
......@@ -5402,11 +5402,11 @@ SWIGINTERN PyObject *_wrap_UException_err_get(PyObject *SWIGUNUSEDPARM(self), Py
int res1 = 0 ;
PyObject * obj0 = 0 ;
std::string result;
if (!PyArg_ParseTuple(args,(char *)"O:UException_err_get",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_UException, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "UException_err_get" "', argument " "1"" of type '" "UException *""'");
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "UException_err_get" "', argument " "1"" of type '" "UException *""'");
}
arg1 = reinterpret_cast< UException * >(argp1);
result = ((arg1)->err);
......@@ -5427,7 +5427,7 @@ SWIGINTERN PyObject *UException_swigregister(PyObject *SWIGUNUSEDPARM(self), PyO
SWIGINTERN PyObject *_wrap_new_UTimeOut__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
UTimeOut *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_UTimeOut")) SWIG_fail;
result = (UTimeOut *)new UTimeOut();
resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_UTimeOut, SWIG_POINTER_NEW | 0 );
......@@ -5444,14 +5444,14 @@ SWIGINTERN PyObject *_wrap_new_UTimeOut__SWIG_1(PyObject *SWIGUNUSEDPARM(self),
int res1 = 0 ;
PyObject * obj0 = 0 ;
UTimeOut *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:new_UTimeOut",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_std__string, 0 | 0);
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_UTimeOut" "', argument " "1"" of type '" "std::string const &""'");
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_UTimeOut" "', argument " "1"" of type '" "std::string const &""'");
}
if (!argp1) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_UTimeOut" "', argument " "1"" of type '" "std::string const &""'");
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_UTimeOut" "', argument " "1"" of type '" "std::string const &""'");
}
arg1 = reinterpret_cast< std::string * >(argp1);
result = (UTimeOut *)new UTimeOut((std::string const &)*arg1);
......@@ -5466,7 +5466,7 @@ SWIGINTERN PyObject *_wrap_new_UTimeOut(PyObject *self, PyObject *args) {
int argc;
PyObject *argv[2];
int ii;
if (!PyTuple_Check(args)) SWIG_fail;
argc = args ? (int)PyObject_Length(args) : 0;
for (ii = 0; (ii < 1) && (ii < argc); ii++) {
......@@ -5483,7 +5483,7 @@ SWIGINTERN PyObject *_wrap_new_UTimeOut(PyObject *self, PyObject *args) {
return _wrap_new_UTimeOut__SWIG_1(self, args);
}
}
fail:
SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_UTimeOut'.\n"
" Possible C/C++ prototypes are:\n"
......@@ -5499,11 +5499,11 @@ SWIGINTERN PyObject *_wrap_delete_UTimeOut(PyObject *SWIGUNUSEDPARM(self), PyObj
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_UTimeOut",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_UTimeOut, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_UTimeOut" "', argument " "1"" of type '" "UTimeOut *""'");
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_UTimeOut" "', argument " "1"" of type '" "UTimeOut *""'");
}
arg1 = reinterpret_cast< UTimeOut * >(argp1);
delete arg1;
......@@ -5524,7 +5524,7 @@ SWIGINTERN PyObject *UTimeOut_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObj
SWIGINTERN PyObject *_wrap_new_USysError__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
USysError *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_USysError")) SWIG_fail;
result = (USysError *)new USysError();
resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_USysError, SWIG_POINTER_NEW | 0 );
......@@ -5541,14 +5541,14 @@ SWIGINTERN PyObject *_wrap_new_USysError__SWIG_1(PyObject *SWIGUNUSEDPARM(self),
int res1 = 0 ;
PyObject * obj0 = 0 ;
USysError *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:new_USysError",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_std__string, 0 | 0);
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_USysError" "', argument " "1"" of type '" "std::string const &""'");
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_USysError" "', argument " "1"" of type '" "std::string const &""'");
}
if (!argp1) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_USysError" "', argument " "1"" of type '" "std::string const &""'");
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_USysError" "', argument " "1"" of type '" "std::string const &""'");
}
arg1 = reinterpret_cast< std::string * >(argp1);
result = (USysError *)new USysError((std::string const &)*arg1);
......@@ -5563,7 +5563,7 @@ SWIGINTERN PyObject *_wrap_new_USysError(PyObject *self, PyObject *args) {
int argc;
PyObject *argv[2];
int ii;
if (!PyTuple_Check(args)) SWIG_fail;
argc = args ? (int)PyObject_Length(args) : 0;
for (ii = 0; (ii < 1) && (ii < argc); ii++) {
......@@ -5580,7 +5580,7 @@ SWIGINTERN PyObject *_wrap_new_USysError(PyObject *self, PyObject *args) {
return _wrap_new_USysError__SWIG_1(self, args);
}
}
fail:
SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_USysError'.\n"
" Possible C/C++ prototypes are:\n"
......@@ -5596,11 +5596,11 @@ SWIGINTERN PyObject *_wrap_delete_USysError(PyObject *SWIGUNUSEDPARM(self), PyOb
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_USysError",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_USysError, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_USysError" "', argument " "1"" of type '" "USysError *""'");
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_USysError" "', argument " "1"" of type '" "USysError *""'");
}
arg1 = reinterpret_cast< USysError * >(argp1);
delete arg1;
......
......@@ -6,7 +6,7 @@
namespace UTypes
{
const long DefaultID = UniSetTypes::DefaultObjectId;
struct Params
{
static const int max = 20;
......@@ -25,7 +25,7 @@ namespace UTypes
int argc;
char* argv[max];
static Params inst(){ return Params(); }
};
}
......
......@@ -117,7 +117,7 @@ class UException(Exception):
__swig_getmethods__ = {}
__getattr__ = lambda self, name: _swig_getattr(self, UException, name)
__repr__ = _swig_repr
def __init__(self, *args):
def __init__(self, *args):
this = _pyUModbus.new_UException(*args)
try: self.this.append(this)
except: self.this = this
......@@ -137,7 +137,7 @@ class UTimeOut(UException):
for _s in [UException]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
__getattr__ = lambda self, name: _swig_getattr(self, UTimeOut, name)
__repr__ = _swig_repr
def __init__(self, *args):
def __init__(self, *args):
this = _pyUModbus.new_UTimeOut(*args)
try: self.this.append(this)
except: self.this = this
......@@ -154,7 +154,7 @@ class USysError(UException):
for _s in [UException]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
__getattr__ = lambda self, name: _swig_getattr(self, USysError, name)
__repr__ = _swig_repr
def __init__(self, *args):
def __init__(self, *args):
this = _pyUModbus.new_USysError(*args)
try: self.this.append(this)
except: self.this = this
......
......@@ -53,12 +53,12 @@ void ComPort::openPort()
string strErr="Unable to open "+dev+" [Error: "+strerror(errno)+"]";
throw UniSetTypes::SystemError(strErr.c_str());
}
/* Get the current options for the port */
tcgetattr(fd, &options);
oldTermios=options;
cfsetispeed(&options, B19200); /* Set the baud rates to 19200 */
cfsetospeed(&options, B19200);
......@@ -93,7 +93,7 @@ void ComPort::reopen()
openPort();
if( fd > 0 )
tcsetattr(fd, TCSAFLUSH, &options);
}
}
}
// --------------------------------------------------------------------------------
void ComPort::setSpeed( Speed s )
......@@ -114,7 +114,7 @@ void ComPort::setParity(Parity parity)
struct termios options;
tcgetattr(fd, &options);
switch(parity)
{
case Odd:
......@@ -205,14 +205,14 @@ unsigned char ComPort::m_receiveByte( bool wait )
{
fd_set set;
timeval timeout;
FD_ZERO (&set);
FD_SET (fd, &set);
/* Initialize the timeout data structure. */
timeout.tv_sec = 0;
timeout.tv_usec = uTimeout;
/* select' returns 0 if timeout, 1 if input available, -1 if error. */
if(select(FD_SETSIZE, &set, NULL, NULL, &timeout)==1)
......@@ -287,10 +287,10 @@ int ComPort::sendBlock(unsigned char* msg, int len)
int ComPort::receiveBlock(unsigned char* msg, int len)
{
int k;
if(!len)
return 0;
for(k=0;k<len;k++)
{
try
......@@ -302,12 +302,12 @@ int ComPort::receiveBlock(unsigned char* msg, int len)
break;
}
}
if(!k)
{
throw UniSetTypes::TimeOut();
}
return k;
}
......@@ -424,13 +424,13 @@ std::string ComPort::getSpeed( Speed s )
// --------------------------------------------------------------------------------
#define CHECK_SPEED(var,speed) \
if( var == __STRING(speed) ) \
return ComPort::ComSpeed##speed;
return ComPort::ComSpeed##speed;
ComPort::Speed ComPort::getSpeed( const string& s )
{
// см. ComPort.h
// см. ComPort.h
// сперва самые вероятные
// сперва самые вероятные
CHECK_SPEED(s,9600)
CHECK_SPEED(s,19200)
CHECK_SPEED(s,38400)
......@@ -450,7 +450,7 @@ ComPort::Speed ComPort::getSpeed( const string& s )
CHECK_SPEED(s,1800)
CHECK_SPEED(s,2400)
CHECK_SPEED(s,4800)
CHECK_SPEED(s,230400)
CHECK_SPEED(s,460800)
CHECK_SPEED(s,500000)
......
......@@ -87,7 +87,7 @@ unsigned char ComPort485F::m_receiveByte( bool wait )
gpio_low_set_value(gpio_num, 0);
}
if( rq.empty() )
{
{
int rc = 0;
if( wait )
{
......@@ -100,17 +100,17 @@ unsigned char ComPort485F::m_receiveByte( bool wait )
{
ioctl(fd, FIONREAD, &rc);
if( rc > 0 )
{
{
rc = ::read(fd,tbuf,sizeof(tbuf));
if( rc > 0 )
{
if( remove_echo(tbuf,rc) )
if( remove_echo(tbuf,rc) )
break;
}
}
usleep(3000);
}
if ( ptRecv.checkTime() )
rc = -1;
}
......@@ -132,7 +132,7 @@ unsigned char ComPort485F::m_receiveByte( bool wait )
throw UniSetTypes::TimeOut();
}
unsigned char x = rq.front();
rq.pop();
return x;
......@@ -250,7 +250,7 @@ bool ComPort485F::remove_echo( unsigned char tb[], int len )
rq.push(tb[i]);
}
// возвращаем число оставшихся символов
// возвращаем число оставшихся символов
return wq.empty();
}
// --------------------------------------------------------------------------------
......@@ -262,7 +262,7 @@ void ComPort485F::m_read( int tmsec )
{
ioctl(fd, FIONREAD, &rc);
if( rc > 0 )
{
{
rc = ::read(fd,tbuf,sizeof(tbuf));
if( rc > 0 )
{
......
......@@ -199,7 +199,7 @@ SetDateTimeRetMessage ModbusClient::setDateTime( ModbusAddr addr, ModbusByte hou
return SetDateTimeRetMessage(reply);
throw mbException(res);
}
}
// --------------------------------------------------------------------------------
void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
const char* save2filename, timeout_t part_timeout_msec )
......@@ -213,12 +213,12 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
if( fdsave == NULL )
{
if( dlog.is_warn() )
dlog.warn() << "(fileTransfer): fopen '"
<< save2filename << "' with error: "
dlog.warn() << "(fileTransfer): fopen '"
<< save2filename << "' with error: "
<< strerror(errno) << endl;
throw mbException(erHardwareError);
}
unsigned short maxpackets = 65535;
unsigned short curpack = 0;
......@@ -227,12 +227,12 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
while( curpack < maxpackets && !ptTimeout.checkTime() )
{
try
{
{
FileTransferRetMessage ret = partOfFileTransfer( addr, numfile, curpack, part_timeout_msec );
if( ret.numfile != numfile )
{
if( dlog.is_warn() )
dlog.warn() << "(fileTransfer): recv nfile=" << ret.numfile
dlog.warn() << "(fileTransfer): recv nfile=" << ret.numfile
<< " !=numfile(" << numfile << ")" << endl;
continue;
}
......@@ -240,25 +240,25 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
if( ret.packet != curpack )
{
if( dlog.is_warn() )
dlog.warn() << "(fileTransfer): recv npack=" << ret.packet
dlog.warn() << "(fileTransfer): recv npack=" << ret.packet
<< " !=curpack(" << curpack << ")" << endl;
continue;
}
maxpackets = ret.numpacks;
if( dlog.is_info() )
dlog.info() << "(fileTransfer): maxpackets="
dlog.info() << "(fileTransfer): maxpackets="
<< ret.numpacks << " curpack=" << curpack+1 << endl;
// save data...
if( fwrite(&ret.data,ret.dlen,1,fdsave) <= 0 )
{
if( dlog.is_warn() )
dlog.warn() << "(fileTransfer): fwrite '"
<< save2filename << "' with error: "
dlog.warn() << "(fileTransfer): fwrite '"
<< save2filename << "' with error: "
<< strerror(errno) << endl;
res = erHardwareError;
break;
}
......@@ -272,12 +272,12 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
continue;
res = ex.err;
break;
break;
}
}
fclose(fdsave);
if( curpack == maxpackets )
return;
......@@ -285,7 +285,7 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
res = erTimeOut;
throw mbException(res);
}
}
// --------------------------------------------------------------------------------
FileTransferRetMessage ModbusClient::partOfFileTransfer( ModbusAddr addr,
ModbusData idFile, ModbusData numpack,
......@@ -300,7 +300,7 @@ FileTransferRetMessage ModbusClient::partOfFileTransfer( ModbusAddr addr,
return FileTransferRetMessage(reply);
throw mbException(res);
}
}
// --------------------------------------------------------------------------------
mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc,
ModbusMessage& rbuf, timeout_t timeout )
......@@ -314,7 +314,7 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc,
// предварительно чистим буфер
memset(&rbuf,0,sizeof(rbuf));
int bcnt=0; // receive bytes count
try
{
bool begin = false;
......@@ -326,14 +326,14 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc,
begin = true;
break;
}
usleep(sleepPause_usec);
}
if( !begin )
return erTimeOut;
/*! \todo Подумать Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?!
/*! \todo Подумать Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?!
// Lav: конечно стоит, нам же надо буфер чистить
*/
// Проверка кому адресован пакет...
......@@ -363,7 +363,7 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc,
}
return erTimeOut;
}
// --------------------------------------------------------------------------------
......@@ -389,7 +389,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
bcnt += k;
rbuf.len = 0;
if( dlog.is_info() )
dlog.info() << "(recv): header: " << rbuf << endl;
......@@ -399,23 +399,23 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
rbuf.len = ErrorRetMessage::szData();
if( crcNoCheckit )
rbuf.len -= szCRC;
int rlen = getNextData((unsigned char*)(&(rbuf.data)),rbuf.len);
if( rlen < rbuf.len )
{
if( dlog.is_warn() )
{
dlog.warn() << "(recv:Error): buf: " << rbuf << endl;
dlog.warn() << "(recv:Error)(" << rbuf.func
<< "): Получили данных меньше чем ждали...(recv="
dlog.warn() << "(recv:Error)(" << rbuf.func
<< "): Получили данных меньше чем ждали...(recv="
<< rlen << " < wait=" << rbuf.len << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt+=rlen;
ErrorRetMessage em(rbuf);
if( !crcNoCheckit )
{
......@@ -439,7 +439,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
cleanupChannel();
return erUnExpectedPacketType;
}
// Определяем тип сообщения
switch( rbuf.func )
{
......@@ -464,7 +464,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( crcNoCheckit )
rbuf.len -= szCRC;
break;
case fnWriteOutputRegisters:
rbuf.len = WriteOutputRetMessage::szData();
if( crcNoCheckit )
......@@ -509,7 +509,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
case fnRemoteService:
rbuf.len = RemoteServiceMessage::szHead();
break;
*/
*/
default:
cleanupChannel();
return erUnExpectedPacketType;
......@@ -527,15 +527,15 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() )
{
dlog.warn() << "(recv): buf: " << rbuf << endl;
dlog.warn() << "(recv)(" << rbuf.func
<< "): Получили данных меньше чем ждали...(recv="
dlog.warn() << "(recv)(" << rbuf.func
<< "): Получили данных меньше чем ждали...(recv="
<< rlen << " < wait=" << rbuf.len << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt+=rlen;
// получаем остальное...
......@@ -545,9 +545,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( crcNoCheckit )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -556,16 +556,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() )
{
dlog.warn() << "(0x01): buf: " << rbuf << endl;
dlog.warn() << "(0x01)("
dlog.warn() << "(0x01)("
<< (int)rbuf.func << "):(fnReadCoilStatus) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -578,7 +578,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -600,9 +600,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( crcNoCheckit )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -611,16 +611,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() )
{
dlog.warn() << "(0x02): buf: " << rbuf << endl;
dlog.warn() << "(0x02)("
dlog.warn() << "(0x02)("
<< (int)rbuf.func << "):(fnReadInputStatus) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -628,12 +628,12 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_info() )
dlog.info() << "(0x02)(fnReadInputStatus): recv buf: " << rbuf << endl;
if( crcNoCheckit )
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -647,7 +647,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erBadCheckSum;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnReadInputRegisters )
{
......@@ -655,9 +655,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( crcNoCheckit )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -666,16 +666,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() )
{
dlog.warn() << "(0x04): buf: " << rbuf << endl;
dlog.warn() << "(0x04)("
dlog.warn() << "(0x04)("
<< (int)rbuf.func << "):(fnReadInputRegisters) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -688,7 +688,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -709,9 +709,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
int szDataLen = ReadOutputRetMessage::getDataLen(rbuf)+szCRC;
if( crcNoCheckit )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -720,16 +720,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() )
{
dlog.warn() << "(0x03): buf: " << rbuf << endl;
dlog.warn() << "(0x03)("
dlog.warn() << "(0x03)("
<< (int)rbuf.func << "):(fnReadInputRegisters) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -742,7 +742,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -770,7 +770,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -796,7 +796,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -822,7 +822,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -848,7 +848,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -868,9 +868,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( crcNoCheckit )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -879,16 +879,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() )
{
dlog.warn() << "(0x08): buf: " << rbuf << endl;
dlog.warn() << "(0x08)("
dlog.warn() << "(0x08)("
<< (int)rbuf.func << "):(fnDiagnostics) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -901,7 +901,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -936,16 +936,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() )
{
dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl;
dlog.warn() << "(0x2B/0x0E)("
dlog.warn() << "(0x2B/0x0E)("
<< (int)rbuf.func << "):(fnMEI) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
rlen += szDataLen;
bcnt += szDataLen;
......@@ -958,12 +958,12 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() )
{
dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl;
dlog.warn() << "(0x2B/0x0E)("
dlog.warn() << "(0x2B/0x0E)("
<< (int)rbuf.func << "):(fnMEI) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
......@@ -991,12 +991,12 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() )
{
dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl;
dlog.warn() << "(0x2B/0x0E)("
dlog.warn() << "(0x2B/0x0E)("
<< (int)rbuf.func << "):(fnMEI) "
<< "(CRC): Получили данных меньше чем ждали...("
<< "(CRC): Получили данных меньше чем ждали...("
<< rlen1 << " < " << szCRC << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
......@@ -1010,7 +1010,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
MEIMessageRetRDI mRDI(rbuf);
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -1043,15 +1043,15 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
err << "(0x50): bad crc. calc.crc=" << dat2str(tcrc)
<< " msg.crc=" << dat2str(mSet.crc);
if( dlog.is_warn() )
dlog.warn() << err.str() << endl;
dlog.warn() << err.str() << endl;
return erBadCheckSum;
}
}
if( !mSet.checkFormat() )
{
if( dlog.is_warn() )
dlog.warn() << "(0x50): некорректные значения..." << endl;
dlog.warn() << "(0x50): некорректные значения..." << endl;
return erBadDataValue; // return erInvalidFormat;
}
......@@ -1064,7 +1064,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -1073,15 +1073,15 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() )
{
dlog.warn() << "(0x66): buf: " << rbuf << endl;
dlog.warn() << "(0x66)("
<< rbuf.func << "):(fnFileTransfer) "
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
dlog.warn() << "(0x66)("
<< rbuf.func << "):(fnFileTransfer) "
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -1093,7 +1093,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -1103,7 +1103,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
err << "(0x66): bad crc. calc.crc=" << dat2str(tcrc)
<< " msg.crc=" << dat2str(mFT.crc);
if( dlog.is_warn() )
dlog.warn() << err.str() << endl;
dlog.warn() << err.str() << endl;
return erBadCheckSum;
}
......@@ -1142,22 +1142,22 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
{
rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x53): buf: " << rbuf << endl;
dlog.warn() << "(0x53)("
dlog.warn() << "(0x53)("
<< rbuf.func << "):(fnWriteOutputRegisters) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -1170,7 +1170,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -1237,13 +1237,13 @@ mbErrCode ModbusClient::send( ModbusMessage& msg )
catch( mbException& ex )
{
if( dlog.is_crit() )
dlog.crit() << "(send): " << ex << endl;
dlog.crit() << "(send): " << ex << endl;
return ex.err;
}
catch( Exception& ex ) // SystemError
{
if( dlog.is_crit() )
dlog.crit() << "(send): " << ex << endl;
dlog.crit() << "(send): " << ex << endl;
return erHardwareError;
}
......@@ -1275,7 +1275,7 @@ void ModbusClient::printProcessingTime()
{
if( dlog.is_info() )
{
dlog.info() << "(processingTime): "
dlog.info() << "(processingTime): "
<< tmProcessing.getCurrent() << " [мсек]" << endl;
}
}
......
......@@ -50,7 +50,7 @@ ModbusAddr ModbusHelpers::autodetectSlave( ModbusRTUMaster* m,
{
ReadOutputRetMessage ret = m->read03(a,reg,1);
}
else
else
throw mbException(erOperationFailed);
return a;
......@@ -65,7 +65,7 @@ ModbusAddr ModbusHelpers::autodetectSlave( ModbusRTUMaster* m,
if( (beg == 0xff) || (end == 0xff) )
break;
}
throw TimeOut();
}
// -------------------------------------------------------------------------
......@@ -109,7 +109,7 @@ ComPort::Speed ModbusHelpers::autodetectSpeed( ModbusRTUMaster* m, ModbusAddr sl
{
ReadOutputRetMessage ret = m->read03(slave,reg,1);
}
else
else
throw mbException(erOperationFailed);
......@@ -126,12 +126,12 @@ ComPort::Speed ModbusHelpers::autodetectSpeed( ModbusRTUMaster* m, ModbusAddr sl
}
catch(...){}
}
m->setSpeed(cur);
if( s!=ComPort::ComSpeed0 )
return s;
throw TimeOut();
}
// -------------------------------------------------------------------------
......
......@@ -36,7 +36,7 @@ ModbusRTUMaster::ModbusRTUMaster( const string& dev, bool use485, bool tr_ctl ):
port->setStopBits(ComPort::OneBit);
port->setWaiting(true);
port->setTimeout(replyTimeOut_ms);
// port->setBlocking(false);
// port->setBlocking(false);
}
// -------------------------------------------------------------------------
ModbusRTUMaster::ModbusRTUMaster( ComPort* com ):
......@@ -52,12 +52,12 @@ ModbusRTUMaster::ModbusRTUMaster( ComPort* com ):
port->setStopBits(ComPort::OneBit);
port->setWaiting(true);
port->setTimeout(replyTimeOut_ms);
// port->setBlocking(false);
// port->setBlocking(false);
}
// -------------------------------------------------------------------------
ModbusRTUMaster::~ModbusRTUMaster()
{
if( myport )
if( myport )
delete port;
}
// -------------------------------------------------------------------------
......
......@@ -38,7 +38,7 @@ ModbusRTUSlave::ModbusRTUSlave( const string& dev, bool use485, bool tr_ctl ):
port->setStopBits(ComPort::OneBit);
port->setWaiting(true);
port->setTimeout(recvTimeOut_ms);
// port->setBlocking(false);
// port->setBlocking(false);
}
// -------------------------------------------------------------------------
......@@ -52,7 +52,7 @@ ModbusRTUSlave::ModbusRTUSlave( ComPort* com ):
port->setStopBits(ComPort::OneBit);
port->setWaiting(true);
port->setTimeout(recvTimeOut_ms);
// port->setBlocking(false);
// port->setBlocking(false);
}
// -------------------------------------------------------------------------
......@@ -83,7 +83,7 @@ mbErrCode ModbusRTUSlave::receive( ModbusRTU::ModbusAddr addr, timeout_t timeout
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( buf.addr, buf.func, res );
ErrorRetMessage em( buf.addr, buf.func, res );
buf = em.transport_msg();
send(buf);
printProcessingTime();
......@@ -95,7 +95,7 @@ mbErrCode ModbusRTUSlave::receive( ModbusRTU::ModbusAddr addr, timeout_t timeout
return res;
}
// если полученный пакет адресован
// если полученный пакет адресован
// не данному узлу (и не широковещательный)
// то ждать следующий...
}
......@@ -112,7 +112,7 @@ ComPort::Speed ModbusRTUSlave::getSpeed()
{
if( port == NULL )
return ComPort::ComSpeed0;
return port->getSpeed();
}
// -------------------------------------------------------------------------
......
......@@ -144,7 +144,7 @@ ModbusRTU::mbErrCode ModbusRTUSlaveSlot::remoteService( ModbusRTU::RemoteService
return erOperationFailed;
return slRemoteService(query,reply);
}
}
// -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusRTUSlaveSlot::fileTransfer( ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply )
......@@ -153,7 +153,7 @@ ModbusRTU::mbErrCode ModbusRTUSlaveSlot::fileTransfer( ModbusRTU::FileTransferMe
return erOperationFailed;
return slFileTransfer(query,reply);
}
}
// -------------------------------------------------------------------------
void ModbusRTUSlaveSlot::sigterm( int signo )
{
......
......@@ -81,7 +81,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( mRead.addr, mRead.func, res );
ErrorRetMessage em( mRead.addr, mRead.func, res );
buf = em.transport_msg();
return send(buf);
}
......@@ -113,7 +113,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( mRead.addr, mRead.func, res );
ErrorRetMessage em( mRead.addr, mRead.func, res );
buf = em.transport_msg();
return send(buf);
}
......@@ -145,7 +145,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( mRead.addr, mRead.func, res );
ErrorRetMessage em( mRead.addr, mRead.func, res );
buf = em.transport_msg();
return send(buf);
}
......@@ -177,7 +177,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( mRead.addr, mRead.func, res );
ErrorRetMessage em( mRead.addr, mRead.func, res );
buf = em.transport_msg();
return send(buf);
}
......@@ -210,11 +210,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( mWrite.addr, mWrite.func, res );
ErrorRetMessage em( mWrite.addr, mWrite.func, res );
buf = em.transport_msg();
return send(buf);
}
return res;
}
......@@ -243,11 +243,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( mWrite.addr, mWrite.func, res );
ErrorRetMessage em( mWrite.addr, mWrite.func, res );
buf = em.transport_msg();
return send(buf);
}
return res;
}
......@@ -278,7 +278,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
buf = em.transport_msg();
return send(buf);
}
return res;
}
......@@ -309,7 +309,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
buf = em.transport_msg();
return send(buf);
}
return res;
}
......@@ -337,11 +337,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( mWrite.addr, mWrite.func, res );
ErrorRetMessage em( mWrite.addr, mWrite.func, res );
buf = em.transport_msg();
return send(buf);
}
return res;
}
......@@ -370,11 +370,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( mWrite.addr, mWrite.func, res );
ErrorRetMessage em( mWrite.addr, mWrite.func, res );
buf = em.transport_msg();
return send(buf);
}
return res;
}
......@@ -402,7 +402,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( mJournal.addr, mJournal.func, res );
ErrorRetMessage em( mJournal.addr, mJournal.func, res );
buf = em.transport_msg();
return send(buf);
}
......@@ -433,7 +433,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( mSet.addr, mSet.func, res );
ErrorRetMessage em( mSet.addr, mSet.func, res );
buf = em.transport_msg();
return send(buf);
}
......@@ -464,7 +464,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( query.addr, query.func, res );
ErrorRetMessage em( query.addr, query.func, res );
buf = em.transport_msg();
return send(buf);
}
......@@ -495,7 +495,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем
if( res < erInternalErrorCode )
{
ErrorRetMessage em( query.addr, query.func, res );
ErrorRetMessage em( query.addr, query.func, res );
buf = em.transport_msg();
return send(buf);
}
......@@ -532,7 +532,7 @@ mbErrCode ModbusServer::recv( ModbusRTU::ModbusAddr addr, ModbusMessage& rbuf, t
// предварительно чистим буфер
memset(&rbuf,0,sizeof(rbuf));
int bcnt=0; // receive bytes count
try
{
// wait byte = myaddr || byte = broadcast
......@@ -545,13 +545,13 @@ mbErrCode ModbusServer::recv( ModbusRTU::ModbusAddr addr, ModbusMessage& rbuf, t
begin = true;
break;
}
usleep(sleepPause_usec);
}
if( !begin )
return erTimeOut;
/*! \todo Подумать Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?!
/*! \todo Подумать Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?!
// Lav: конечно стоит, нам же надо буфер чистить
*/
// Проверка кому адресован пакет...
......@@ -570,7 +570,7 @@ mbErrCode ModbusServer::recv( ModbusRTU::ModbusAddr addr, ModbusMessage& rbuf, t
}
return recv_pdu(rbuf,timeout);
}
}
catch( UniSetTypes::TimeOut )
{
// cout << "(recv): catch TimeOut " << endl;
......@@ -605,7 +605,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
bcnt += k;
rbuf.len = 0;
if( dlog.is_info() )
dlog.info() << "(recv): header: " << rbuf << endl;
......@@ -645,13 +645,13 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
break;
case fnForceSingleCoil:
rbuf.len = ForceSingleCoilMessage::szHead();
rbuf.len = ForceSingleCoilMessage::szHead();
break;
case fnWriteOutputSingleRegister:
rbuf.len = WriteSingleOutputMessage::szHead();
rbuf.len = WriteSingleOutputMessage::szHead();
break;
case fnDiagnostics:
rbuf.len = DiagnosticMessage::szHead();
break;
......@@ -681,7 +681,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( crcNoCheckit )
rbuf.len -= szCRC;
break;
default:
cleanupChannel();
return erUnExpectedPacketType;
......@@ -698,14 +698,14 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{
// rbuf.len = bcnt + rlen - szModbusHeader;
dlog.warn() << "(recv): buf: " << rbuf << endl;
dlog.warn() << "(recv)(" << rbuf.func
<< "): Получили данных меньше чем ждали...(recv="
dlog.warn() << "(recv)(" << rbuf.func
<< "): Получили данных меньше чем ждали...(recv="
<< rlen << " < wait=" << (int)rbuf.len << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt+=rlen;
// получаем остальное...
......@@ -815,16 +815,16 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnForceMultipleCoils )
{
int szDataLen = ForceCoilsMessage::getDataLen(rbuf)+szCRC;
if( crcNoCheckit )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -833,15 +833,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{
rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x0F): buf: " << rbuf << endl;
dlog.warn() << "(0x0F)("
dlog.warn() << "(0x0F)("
<< rbuf.func << "):(fnForceMultipleCoils) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -853,7 +853,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !crcNoCheckit )
{
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -872,15 +872,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{
if( dlog.is_warn() )
{
dlog.warn() << "(0x0F): (" << rbuf.func
dlog.warn() << "(0x0F): (" << rbuf.func
<< ")(fnForceMultipleCoils): "
<< ": некорректный формат сообщения..." << endl;
<< ": некорректный формат сообщения..." << endl;
}
cleanupChannel();
return erInvalidFormat;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnWriteOutputRegisters )
{
......@@ -888,9 +888,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( crcNoCheckit )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -899,15 +899,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{
rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x10): buf: " << rbuf << endl;
dlog.warn() << "(0x10)("
dlog.warn() << "(0x10)("
<< rbuf.func << "):(fnWriteOutputRegisters) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -919,7 +919,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !crcNoCheckit )
{
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -936,17 +936,17 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum;
}
}
if( !mWrite.checkFormat() )
{
dlog.warn() << "(0x10): (" << rbuf.func
dlog.warn() << "(0x10): (" << rbuf.func
<< ")(fnWriteOutputRegisters): "
<< ": некорректный формат сообщения..." << endl;
<< ": некорректный формат сообщения..." << endl;
cleanupChannel();
return erInvalidFormat;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnForceSingleCoil )
{
......@@ -954,9 +954,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( crcNoCheckit )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -965,15 +965,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{
rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x05): buf: " << rbuf << endl;
dlog.warn() << "(0x05)("
dlog.warn() << "(0x05)("
<< rbuf.func << "):(fnForceSingleCoil) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -985,7 +985,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !crcNoCheckit )
{
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -1002,17 +1002,17 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum;
}
}
if( !mWrite.checkFormat() )
{
dlog.warn() << "(0x05): (" << rbuf.func
dlog.warn() << "(0x05): (" << rbuf.func
<< ")(fnForceSingleCoil): "
<< ": некорректный формат сообщения..." << endl;
<< ": некорректный формат сообщения..." << endl;
cleanupChannel();
return erInvalidFormat;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnWriteOutputSingleRegister )
{
......@@ -1020,9 +1020,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( crcNoCheckit )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -1031,15 +1031,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{
rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x06): buf: " << rbuf << endl;
dlog.warn() << "(0x06)("
dlog.warn() << "(0x06)("
<< rbuf.func << "):(fnWriteOutputSingleRegisters) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -1051,7 +1051,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !crcNoCheckit )
{
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -1071,14 +1071,14 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !mWrite.checkFormat() )
{
dlog.warn() << "(0x06): (" << rbuf.func
dlog.warn() << "(0x06): (" << rbuf.func
<< ")(fnWriteOutputSingleRegisters): "
<< ": некорректный формат сообщения..." << endl;
<< ": некорректный формат сообщения..." << endl;
cleanupChannel();
return erInvalidFormat;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnDiagnostics )
{
......@@ -1086,9 +1086,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( crcNoCheckit )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -1097,15 +1097,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{
rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x08): buf: " << rbuf << endl;
dlog.warn() << "(0x08)("
dlog.warn() << "(0x08)("
<< rbuf.func << "):(fnDiagnostics) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -1117,7 +1117,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !crcNoCheckit )
{
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -1134,12 +1134,12 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum;
}
}
/*
/*
if( !mDiag.checkFormat() )
{
dlog.warn() << "(0x08): (" << rbuf.func
dlog.warn() << "(0x08): (" << rbuf.func
<< ")(fnDiagnostics): "
<< ": некорректный формат сообщения..." << endl;
<< ": некорректный формат сообщения..." << endl;
cleanupChannel();
return erInvalidFormat;
}
......@@ -1157,15 +1157,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{
rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl;
dlog.warn() << "(0x2B/0x0E)("
dlog.warn() << "(0x2B/0x0E)("
<< rbuf.func << "):(fnMEI) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szCRC << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
}
......@@ -1179,7 +1179,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -1197,7 +1197,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
}
return erNoError;
}
}
else if( rbuf.func == fnJournalCommand )
{
JournalCommandMessage mRead(rbuf);
......@@ -1224,7 +1224,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnSetDateTime )
{
......@@ -1251,7 +1251,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum;
}
}
if( !mSet.checkFormat() )
{
dlog.warn() << "(0x50): некорректные значения..." << endl;
......@@ -1259,7 +1259,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadDataValue; // return erInvalidFormat;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnRemoteService )
{
......@@ -1269,7 +1269,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
szDataLen -= szCRC;
// Мы получили только предварительный загловок
// Теперь необходимо дополучить данные
// Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen )
......@@ -1278,15 +1278,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{
rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x53): buf: " << rbuf << endl;
dlog.warn() << "(0x53)("
dlog.warn() << "(0x53)("
<< rbuf.func << "):(fnWriteOutputRegisters) "
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
}
cleanupChannel();
return erInvalidFormat;
}
bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader;
......@@ -1299,7 +1299,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -1316,7 +1316,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnFileTransfer )
{
......@@ -1328,7 +1328,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erNoError;
// Проверяем контрольную сумму
// от начала(включая заголовок)
// от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
......@@ -1351,7 +1351,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{
// А как мы сюда добрались?!!!!!!
return erUnExpectedPacketType;
}
}
}
catch( ModbusRTU::mbException& ex ) // SystemError
{
......@@ -1383,7 +1383,7 @@ void ModbusServer::setLog( DebugStream& l )
void ModbusServer::initLog( UniSetTypes::Configuration* conf,
const std::string& lname, const string& logfile )
{
{
conf->initDebug(dlog,lname);
if( !logfile.empty() )
......@@ -1396,14 +1396,14 @@ void ModbusServer::printProcessingTime()
dlog.info() << "(processingTime): " << tmProcessing.getCurrent() << " [msec] (lim: " << tmProcessing.getInterval() << ")" << endl;
}
// -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string &fname,
ModbusRTU::FileTransferMessage& query,
ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string &fname,
ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply,
DebugStream* dlog )
{
if( dlog && dlog->is_info() )
(*dlog)[Debug::INFO] << "(replyFileTransfer): " << query << endl;
int fd = open(fname.c_str(), O_RDONLY | O_NONBLOCK );
if( fd <= 0 )
{
......@@ -1434,12 +1434,12 @@ ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string &fname,
close(fd);
return ModbusRTU::erOperationFailed;
}
close(fd);
close(fd);
int numpacks = fs.st_size / ModbusRTU::FileTransferRetMessage::MaxDataLen;
if( fs.st_size % ModbusRTU::FileTransferRetMessage::MaxDataLen )
numpacks++;
if( !reply.set(query.numfile,numpacks,query.numpacket,buf,ret) )
{
if( dlog && dlog->is_warn() )
......@@ -1447,10 +1447,10 @@ ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string &fname,
return ModbusRTU::erOperationFailed;
}
return ModbusRTU::erNoError;
return ModbusRTU::erNoError;
}
// -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusServer::replySetDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::mbErrCode ModbusServer::replySetDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply,
DebugStream* dlog )
{
......@@ -1486,9 +1486,9 @@ ModbusRTU::mbErrCode ModbusServer::replySetDateTime( ModbusRTU::SetDateTimeMessa
}
else if( dlog && dlog->is_warn() )
(*dlog).warn() << "(replySetDateTime): gettimeofday err: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
}
}
// -------------------------------------------------------------------------
mbErrCode ModbusServer::send( ModbusMessage& msg )
{
......
......@@ -16,15 +16,15 @@ int ModbusTCPCore::readNextData( ost::TCPStream* tcp,
tcp->read(&c,sizeof(c));
if( tcp->gcount() <= 0 )
break;
qrecv.push( (unsigned char)(c) );
}
return i;
}
// -------------------------------------------------------------------------
int ModbusTCPCore::getNextData( unsigned char* buf, int len,
std::queue<unsigned char>& qrecv,
std::queue<unsigned char>& qrecv,
ost::TCPStream* tcp )
{
if( !tcp || !tcp->isConnected() )
......@@ -60,17 +60,17 @@ mbErrCode ModbusTCPCore::sendData( unsigned char* buf, int len, ost::TCPStream*
{
for( unsigned int i=0; i<len; i++ )
(*tcp) << buf[i];
return erNoError;
}
catch( ost::SockException& e )
catch( ost::SockException& e )
{
// cerr << "(send): " << e.getString() << ": " << e.getSystemErrorString() << endl;
}
catch(...)
{
// cerr << "(send): cath..." << endl;
}
}
return erHardwareError;
}
......
......@@ -75,7 +75,7 @@ bool ModbusTCPServer::waitQuery( ModbusRTU::ModbusAddr mbaddr, timeout_t msec )
if( cancelled )
return false;
try
try
{
if( isPendingConnection(msec) )
{
......@@ -94,8 +94,8 @@ bool ModbusTCPServer::waitQuery( ModbusRTU::ModbusAddr mbaddr, timeout_t msec )
s->connectWriteSingleOutput( sigc::mem_fun(this, &ModbusTCPServer::writeOutputSingleRegister) );
s->connectMEIRDI( sigc::mem_fun(this, &ModbusTCPServer::read4314) );
s->connectSetDateTime( sigc::mem_fun(this, &ModbusTCPServer::setDateTime) );
s->connectDiagnostics( sigc::mem_fun(this, &ModbusTCPServer::diagnostics) );
s->connectFileTransfer( sigc::mem_fun(this, &ModbusTCPServer::fileTransfer) );
s->connectDiagnostics( sigc::mem_fun(this, &ModbusTCPServer::diagnostics) );
s->connectFileTransfer( sigc::mem_fun(this, &ModbusTCPServer::fileTransfer) );
s->connectJournalCommand( sigc::mem_fun(this, &ModbusTCPServer::journalCommand) );
s->connectRemoteService( sigc::mem_fun(this, &ModbusTCPServer::remoteService) );
s->connectFileTransfer( sigc::mem_fun(this, &ModbusTCPServer::fileTransfer) );
......@@ -139,7 +139,7 @@ mbErrCode ModbusTCPServer::receive( ModbusRTU::ModbusAddr addr, timeout_t timeou
assert(timeout);
ptTimeout.reset();
try
try
{
if( isPendingConnection(timeout) )
{
......@@ -185,7 +185,7 @@ mbErrCode ModbusTCPServer::receive( ModbusRTU::ModbusAddr addr, timeout_t timeou
// для режима игнорирования RTU-адреса
// просто подменяем его на то который пришёл
// чтобы проверка всегда была успешной...
if( ignoreAddr )
if( ignoreAddr )
addr = _addr;
else if( _addr != addr )
{
......@@ -194,7 +194,7 @@ mbErrCode ModbusTCPServer::receive( ModbusRTU::ModbusAddr addr, timeout_t timeou
/*
res = erBadReplyNodeAddress;
tmProcessing.setTiming(replyTimeout_ms);
ErrorRetMessage em( _addr, buf.func, res );
ErrorRetMessage em( _addr, buf.func, res );
buf = em.transport_msg();
send(buf);
printProcessingTime();
......@@ -212,7 +212,7 @@ mbErrCode ModbusTCPServer::receive( ModbusRTU::ModbusAddr addr, timeout_t timeou
{
if( res < erInternalErrorCode )
{
ErrorRetMessage em( addr, buf.func, res );
ErrorRetMessage em( addr, buf.func, res );
buf = em.transport_msg();
send(buf);
printProcessingTime();
......@@ -305,7 +305,7 @@ mbErrCode ModbusTCPServer::tcp_processing( ost::TCPStream& tcp, ModbusTCP::MBAPH
if( len<mhead.len )
{
if( dlog.is_info() )
dlog.info() << "(ModbusTCPServer::tcp_processing): len(" << (int)len
dlog.info() << "(ModbusTCPServer::tcp_processing): len(" << (int)len
<< ") < mhead.len(" << (int)mhead.len << ")" << endl;
return erInvalidFormat;
......
......@@ -140,7 +140,7 @@ ModbusRTU::mbErrCode ModbusTCPServerSlot::remoteService( ModbusRTU::RemoteServic
return slRemoteService(query,reply);
}
// -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusTCPServerSlot::fileTransfer( ModbusRTU::FileTransferMessage& query,
ModbusRTU::mbErrCode ModbusTCPServerSlot::fileTransfer( ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply )
{
if( !slFileTransfer )
......
......@@ -114,7 +114,7 @@ ModbusRTU::mbErrCode ModbusTCPSession::receive( ModbusRTU::ModbusAddr addr, time
// для режима игнорирования RTU-адреса
// просто подменяем его на то который пришёл
// чтобы проверка всегда была успешной...
if( ignoreAddr )
if( ignoreAddr )
addr = _addr;
else if( _addr != addr )
{
......@@ -136,7 +136,7 @@ ModbusRTU::mbErrCode ModbusTCPSession::receive( ModbusRTU::ModbusAddr addr, time
{
if( res < erInternalErrorCode )
{
ErrorRetMessage em( addr, buf.func, res );
ErrorRetMessage em( addr, buf.func, res );
buf = em.transport_msg();
send(buf);
printProcessingTime();
......@@ -219,7 +219,7 @@ mbErrCode ModbusTCPSession::tcp_processing( ost::TCPStream& tcp, ModbusTCP::MBAP
if( len<mhead.len )
{
if( dlog.debugging(Debug::INFO) )
dlog[Debug::INFO] << peername << "(tcp_processing): len(" << (int)len
dlog[Debug::INFO] << peername << "(tcp_processing): len(" << (int)len
<< ") < mhead.len(" << (int)mhead.len << ")" << endl;
return erInvalidFormat;
......@@ -286,7 +286,7 @@ void ModbusTCPSession::terminate()
// ost::Thread::join();
}
// -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::readCoilStatus( ReadCoilMessage& query,
mbErrCode ModbusTCPSession::readCoilStatus( ReadCoilMessage& query,
ReadCoilRetMessage& reply )
{
if( !slReadCoil )
......@@ -296,7 +296,7 @@ mbErrCode ModbusTCPSession::readCoilStatus( ReadCoilMessage& query,
}
// -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::readInputStatus( ReadInputStatusMessage& query,
mbErrCode ModbusTCPSession::readInputStatus( ReadInputStatusMessage& query,
ReadInputStatusRetMessage& reply )
{
if( !slReadInputStatus )
......@@ -307,7 +307,7 @@ mbErrCode ModbusTCPSession::readInputStatus( ReadInputStatusMessage& query,
// -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::readOutputRegisters( ReadOutputMessage& query,
mbErrCode ModbusTCPSession::readOutputRegisters( ReadOutputMessage& query,
ReadOutputRetMessage& reply )
{
if( !slReadOutputs )
......@@ -317,7 +317,7 @@ mbErrCode ModbusTCPSession::readOutputRegisters( ReadOutputMessage& query,
}
// -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::readInputRegisters( ReadInputMessage& query,
mbErrCode ModbusTCPSession::readInputRegisters( ReadInputMessage& query,
ReadInputRetMessage& reply )
{
if( !slReadInputs )
......@@ -327,7 +327,7 @@ mbErrCode ModbusTCPSession::readInputRegisters( ReadInputMessage& query,
}
// -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::forceMultipleCoils( ForceCoilsMessage& query,
mbErrCode ModbusTCPSession::forceMultipleCoils( ForceCoilsMessage& query,
ForceCoilsRetMessage& reply )
{
if( !slForceCoils )
......@@ -338,7 +338,7 @@ mbErrCode ModbusTCPSession::forceMultipleCoils( ForceCoilsMessage& query,
// -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::writeOutputRegisters( WriteOutputMessage& query,
mbErrCode ModbusTCPSession::writeOutputRegisters( WriteOutputMessage& query,
WriteOutputRetMessage& reply )
{
if( !slWriteOutputs )
......@@ -348,7 +348,7 @@ mbErrCode ModbusTCPSession::writeOutputRegisters( WriteOutputMessage& query,
}
// -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::diagnostics( DiagnosticMessage& query,
mbErrCode ModbusTCPSession::diagnostics( DiagnosticMessage& query,
DiagnosticRetMessage& reply )
{
if( !slDiagnostics )
......@@ -357,7 +357,7 @@ mbErrCode ModbusTCPSession::diagnostics( DiagnosticMessage& query,
return slDiagnostics(query,reply);
}
// -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusTCPSession::read4314( ModbusRTU::MEIMessageRDI& query,
ModbusRTU::mbErrCode ModbusTCPSession::read4314( ModbusRTU::MEIMessageRDI& query,
ModbusRTU::MEIMessageRetRDI& reply )
{
if( !slMEIRDI )
......@@ -366,7 +366,7 @@ ModbusRTU::mbErrCode ModbusTCPSession::read4314( ModbusRTU::MEIMessageRDI& query
return slMEIRDI(query,reply);
}
// -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::forceSingleCoil( ForceSingleCoilMessage& query,
mbErrCode ModbusTCPSession::forceSingleCoil( ForceSingleCoilMessage& query,
ForceSingleCoilRetMessage& reply )
{
if( !slForceSingleCoil )
......@@ -376,7 +376,7 @@ mbErrCode ModbusTCPSession::forceSingleCoil( ForceSingleCoilMessage& query,
}
// -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::writeOutputSingleRegister( WriteSingleOutputMessage& query,
mbErrCode ModbusTCPSession::writeOutputSingleRegister( WriteSingleOutputMessage& query,
WriteSingleOutputRetMessage& reply )
{
if( !slWriteSingleOutputs )
......@@ -386,7 +386,7 @@ mbErrCode ModbusTCPSession::writeOutputSingleRegister( WriteSingleOutputMessage&
}
// -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::journalCommand( JournalCommandMessage& query,
mbErrCode ModbusTCPSession::journalCommand( JournalCommandMessage& query,
JournalCommandRetMessage& reply )
{
if( !slJournalCommand )
......@@ -395,7 +395,7 @@ mbErrCode ModbusTCPSession::journalCommand( JournalCommandMessage& query,
return slJournalCommand(query,reply);
}
// -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusTCPSession::setDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::mbErrCode ModbusTCPSession::setDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply )
{
if( !slSetDateTime )
......@@ -404,7 +404,7 @@ ModbusRTU::mbErrCode ModbusTCPSession::setDateTime( ModbusRTU::SetDateTimeMessag
return slSetDateTime(query,reply);
}
// -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusTCPSession::remoteService( ModbusRTU::RemoteServiceMessage& query,
ModbusRTU::mbErrCode ModbusTCPSession::remoteService( ModbusRTU::RemoteServiceMessage& query,
ModbusRTU::RemoteServiceRetMessage& reply )
{
if( !slRemoteService )
......@@ -413,7 +413,7 @@ ModbusRTU::mbErrCode ModbusTCPSession::remoteService( ModbusRTU::RemoteServiceMe
return slRemoteService(query,reply);
}
// -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusTCPSession::fileTransfer( ModbusRTU::FileTransferMessage& query,
ModbusRTU::mbErrCode ModbusTCPSession::fileTransfer( ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply )
{
if( !slFileTransfer )
......
......@@ -100,7 +100,7 @@ static int get_crc_ccitt( unsigned short crc, unsigned char* buf, int size )
#else
register int i;
crc ^= (unsigned short)(*(buf++)) << 8;
for (i = 0; i < 8; i++)
for (i = 0; i < 8; i++)
{
if (crc & 0x8000)
crc = (crc << 1) ^ 0x1021;
......@@ -120,12 +120,12 @@ static int get_crc_16( unsigned short crc, unsigned char* buf, int size )
while( size-- )
{
#ifdef USE_CRC_TAB
#ifdef USE_CRC_TAB
crc = (crc >> 8) ^ crc_16_tab[ (crc ^ *(buf++)) & 0xff ];
#else
register int i, ch;
ch = *(buf++);
for (i = 0; i < 8; i++)
for (i = 0; i < 8; i++)
{
if ((crc ^ ch) & 1)
crc = (crc >> 1) ^ 0xa001;
......@@ -136,7 +136,7 @@ static int get_crc_16( unsigned short crc, unsigned char* buf, int size )
}
#endif
// crc = crc & 0xffff;
}
}
return crc;
}
// -------------------------------------------------------------------------
......@@ -164,7 +164,7 @@ std::ostream& ModbusRTU::mbPrintMessage( std::ostream& os, ModbusByte* m, int le
for( unsigned int i=0; i<len; i++ )
s << setw(2) << (short)(m[i]) << " ";
// s << "<" << setw(2) << (int)(m[i]) << ">";
return os << s.str();
}
// -------------------------------------------------------------------------
......@@ -250,8 +250,8 @@ ModbusMessage ErrorRetMessage::transport_msg()
std::ostream& ModbusRTU::operator<<(std::ostream& os, ErrorRetMessage& m )
{
// return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m));
return os << "addr=" << addr2str(m.addr)
<< " func=" << (int)m.func
return os << "addr=" << addr2str(m.addr)
<< " func=" << (int)m.func
<< " errcode=" << dat2str(m.ecode);
}
std::ostream& ModbusRTU::operator<<(std::ostream& os, ErrorRetMessage* m )
......@@ -313,7 +313,7 @@ void ReadCoilMessage::init( ModbusMessage& m )
assert( m.func == fnReadCoilStatus );
memset(this,0,sizeof(*this));
memcpy(this,&m,sizeof(*this)); // m.len
// переворачиваем слова
start = SWAPSHORT(start);
count = SWAPSHORT(count);
......@@ -323,8 +323,8 @@ void ReadCoilMessage::init( ModbusMessage& m )
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadCoilMessage& m )
{
// return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m));
return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start)
return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start)
<< " count=" << dat2str(m.count);
}
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadCoilMessage* m )
......@@ -335,7 +335,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadCoilMessage* m )
DataBits::DataBits( std::string s ):
b(s)
{
}
// -------------------------------------------------------------------------
DataBits::DataBits( ModbusByte ubyte )
......@@ -369,7 +369,7 @@ const DataBits& DataBits::operator=( const ModbusByte& r )
{
for( unsigned int i=0; i<b.size(); i++ )
b[i] = r&(1<<i);
return (*this);
}
// -------------------------------------------------------------------------
......@@ -391,7 +391,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, DataBits* d )
DataBits16::DataBits16( std::string s ):
b(s)
{
}
// -------------------------------------------------------------------------
DataBits16::DataBits16( ModbusData d )
......@@ -425,7 +425,7 @@ const DataBits16& DataBits16::operator=( const ModbusData& r )
{
for( unsigned int i=0; i<b.size(); i++ )
b[i] = r&(1<<i);
return (*this);
}
// -------------------------------------------------------------------------
......@@ -462,14 +462,14 @@ void ReadCoilRetMessage::init( ModbusMessage& m )
memset(this,0,sizeof(*this));
addr = m.addr;
func = m.func;
bcnt = m.data[0];
if( bcnt > MAXLENPACKET )
throw mbException(erPacketTooLong);
memcpy(&data,&(m.data[1]),bcnt);
memcpy(&crc,&(m.data[bcnt+1]),szCRC);
}
memcpy(&crc,&(m.data[bcnt+1]),szCRC);
}
// -------------------------------------------------------------------------
int ReadCoilRetMessage::getDataLen( ModbusMessage& m )
{
......@@ -496,7 +496,7 @@ bool ReadCoilRetMessage::setBit( unsigned char dnum, unsigned char bnum, bool st
data[dnum] = d;
return true;
}
return false;
}
// -------------------------------------------------------------------------
......@@ -504,7 +504,7 @@ bool ReadCoilRetMessage::addData( DataBits d )
{
if( isFull() )
return false;
data[bcnt++] = d.mbyte();
return true;
}
......@@ -516,7 +516,7 @@ bool ReadCoilRetMessage::getData( unsigned char dnum, DataBits& d )
d = data[dnum];
return true;
}
return false;
}
// -------------------------------------------------------------------------
......@@ -535,7 +535,7 @@ ModbusMessage ReadCoilRetMessage::transport_msg()
// копируем заголовок и данные
memcpy(&mm,this,szModbusHeader);
memcpy(&mm.data,&bcnt,sizeof(bcnt));
memcpy(&mm.data,&bcnt,sizeof(bcnt));
int ind = sizeof(bcnt);
// копируем данные
......@@ -550,7 +550,7 @@ ModbusMessage ReadCoilRetMessage::transport_msg()
ind+=szCRC;
// длина сообщения...
mm.len = ind;
mm.len = ind;
return mm;
}
// -------------------------------------------------------------------------
......@@ -623,7 +623,7 @@ void ReadInputStatusMessage::init( ModbusMessage& m )
assert( m.func == fnReadInputStatus );
memset(this,0,sizeof(*this));
memcpy(this,&m,sizeof(*this)); // m.len
// переворачиваем слова
start = SWAPSHORT(start);
count = SWAPSHORT(count);
......@@ -633,8 +633,8 @@ void ReadInputStatusMessage::init( ModbusMessage& m )
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadInputStatusMessage& m )
{
// return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m));
return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start)
return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start)
<< " count=" << dat2str(m.count);
}
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadInputStatusMessage* m )
......@@ -660,14 +660,14 @@ void ReadInputStatusRetMessage::init( ModbusMessage& m )
memset(this,0,sizeof(*this));
addr = m.addr;
func = m.func;
bcnt = m.data[0];
if( bcnt > MAXLENPACKET )
throw mbException(erPacketTooLong);
memcpy(&data,&(m.data[1]),bcnt);
memcpy(&crc,&(m.data[bcnt+1]),szCRC);
}
memcpy(&crc,&(m.data[bcnt+1]),szCRC);
}
// -------------------------------------------------------------------------
int ReadInputStatusRetMessage::getDataLen( ModbusMessage& m )
{
......@@ -694,7 +694,7 @@ bool ReadInputStatusRetMessage::setBit( unsigned char dnum, unsigned char bnum,
data[dnum] = d;
return true;
}
return false;
}
// -------------------------------------------------------------------------
......@@ -702,7 +702,7 @@ bool ReadInputStatusRetMessage::addData( DataBits d )
{
if( isFull() )
return false;
data[bcnt++] = d.mbyte();
return true;
}
......@@ -714,7 +714,7 @@ bool ReadInputStatusRetMessage::getData( unsigned char dnum, DataBits& d )
d = data[dnum];
return true;
}
return false;
}
// -------------------------------------------------------------------------
......@@ -733,7 +733,7 @@ ModbusMessage ReadInputStatusRetMessage::transport_msg()
// копируем заголовок и данные
memcpy(&mm,this,szModbusHeader);
memcpy(&mm.data,&bcnt,sizeof(bcnt));
memcpy(&mm.data,&bcnt,sizeof(bcnt));
int ind = sizeof(bcnt);
// копируем данные
......@@ -748,7 +748,7 @@ ModbusMessage ReadInputStatusRetMessage::transport_msg()
ind+=szCRC;
// длина сообщения...
mm.len = ind;
mm.len = ind;
return mm;
}
// -------------------------------------------------------------------------
......@@ -824,7 +824,7 @@ void ReadOutputMessage::init( ModbusMessage& m )
assert( m.func == fnReadOutputRegisters );
memset(this,0,sizeof(*this));
memcpy(this,&m,sizeof(*this)); // m.len
// переворачиваем слова
start = SWAPSHORT(start);
count = SWAPSHORT(count);
......@@ -834,8 +834,8 @@ void ReadOutputMessage::init( ModbusMessage& m )
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadOutputMessage& m )
{
// return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m));
return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start)
return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start)
<< " count=" << dat2str(m.count);
}
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadOutputMessage* m )
......@@ -861,12 +861,12 @@ void ReadOutputRetMessage::init( ModbusMessage& m )
memset(this,0,sizeof(*this));
addr = m.addr;
func = m.func;
// bcnt = m.data[0];
int cnt = m.data[0] / sizeof(ModbusData);
if( cnt > MAXLENPACKET/sizeof(ModbusData) )
{
// cerr << "(ReadOutputRetMessage): BAD bcnt="
// cerr << "(ReadOutputRetMessage): BAD bcnt="
// << (int)bcnt << " count=" << cnt << endl;
throw mbException(erPacketTooLong);
}
......@@ -874,13 +874,13 @@ void ReadOutputRetMessage::init( ModbusMessage& m )
count = cnt;
bcnt = m.data[0];
memcpy(&data,&(m.data[1]),bcnt);
// переворачиваем данные
for( unsigned int i=0; i<cnt; i++ )
data[i] = SWAPSHORT(data[i]);
memcpy(&crc,&(m.data[bcnt+1]),szCRC);
}
memcpy(&crc,&(m.data[bcnt+1]),szCRC);
}
// -------------------------------------------------------------------------
int ReadOutputRetMessage::getDataLen( ModbusMessage& m )
{
......@@ -891,7 +891,7 @@ int ReadOutputRetMessage::getDataLen( ModbusMessage& m )
/*
ReadOutputMessage rm(m);
return (int)(rm.bcnt);
*/
*/
}
// -------------------------------------------------------------------------
ReadOutputRetMessage::ReadOutputRetMessage( ModbusAddr _addr ):
......@@ -907,7 +907,7 @@ bool ReadOutputRetMessage::addData( ModbusData d )
{
if( isFull() )
return false;
data[count++] = d;
bcnt = count*sizeof(ModbusData);
return true;
......@@ -928,10 +928,10 @@ ModbusMessage ReadOutputRetMessage::transport_msg()
// копируем заголовок и данные
memcpy(&mm,this,szModbusHeader);
int ind=0;
bcnt = count*sizeof(ModbusData);
// copy bcnt
memcpy(&mm.data,&bcnt,sizeof(bcnt));
ind+=sizeof(bcnt);
......@@ -957,13 +957,13 @@ ModbusMessage ReadOutputRetMessage::transport_msg()
ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader+sizeof(bcnt)+bcnt );
// crc = SWAPSHORT(crc);
// копируем CRC (последний элемент). Без переворачивания...
memcpy(&(mm.data[ind]),&crc,szCRC);
ind+=szCRC;
// длина сообщения...
mm.len = ind;
mm.len = ind;
return mm;
}
......@@ -1040,7 +1040,7 @@ void ReadInputMessage::init( ModbusMessage& m )
assert( m.func == fnReadInputRegisters );
memset(this,0,sizeof(*this));
memcpy(this,&m,sizeof(*this)); // m.len
// переворачиваем слова
start = SWAPSHORT(start);
count = SWAPSHORT(count);
......@@ -1050,8 +1050,8 @@ void ReadInputMessage::init( ModbusMessage& m )
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadInputMessage& m )
{
// return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m));
return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start)
return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start)
<< " count=" << dat2str(m.count);
}
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadInputMessage* m )
......@@ -1077,7 +1077,7 @@ void ReadInputRetMessage::init( ModbusMessage& m )
memset(this,0,sizeof(*this));
addr = m.addr;
func = m.func;
// bcnt = m.data[0];
int cnt = m.data[0] / sizeof(ModbusData);
if( cnt > MAXLENPACKET/sizeof(ModbusData) )
......@@ -1086,13 +1086,13 @@ void ReadInputRetMessage::init( ModbusMessage& m )
count = cnt;
bcnt = m.data[0];
memcpy(&data,&(m.data[1]),bcnt);
// переворачиваем данные
for( unsigned int i=0; i<cnt; i++ )
data[i] = SWAPSHORT(data[i]);
memcpy(&crc,&(m.data[bcnt+1]),szCRC);
}
memcpy(&crc,&(m.data[bcnt+1]),szCRC);
}
// -------------------------------------------------------------------------
int ReadInputRetMessage::getDataLen( ModbusMessage& m )
{
......@@ -1115,7 +1115,7 @@ bool ReadInputRetMessage::addData( ModbusData d )
{
if( isFull() )
return false;
data[count++] = d;
bcnt = count*sizeof(ModbusData);
return true;
......@@ -1135,10 +1135,10 @@ ModbusMessage ReadInputRetMessage::transport_msg()
// копируем заголовок и данные
memcpy(&mm,this,szModbusHeader);
int ind=0;
bcnt = count*sizeof(ModbusData);
// copy bcnt
memcpy(&mm.data,&bcnt,sizeof(bcnt));
ind+=sizeof(bcnt);
......@@ -1163,7 +1163,7 @@ ModbusMessage ReadInputRetMessage::transport_msg()
ind+=szCRC;
// длина сообщения...
mm.len = ind;
mm.len = ind;
return mm;
}
// -------------------------------------------------------------------------
......@@ -1197,7 +1197,7 @@ bool ForceCoilsMessage::addData( DataBits16 d )
{
if( isFull() )
return false;
data[quant++] = d.mdata();
bcnt = quant*sizeof(ModbusData);
return true;
......@@ -1212,7 +1212,7 @@ bool ForceCoilsMessage::setBit( unsigned char dnum, unsigned char bnum, bool sta
data[dnum] = d;
return true;
}
return false;
}
// -------------------------------------------------------------------------
......@@ -1223,7 +1223,7 @@ bool ForceCoilsMessage::getData( unsigned char dnum, DataBits16& d )
d = data[dnum];
return true;
}
return false;
}
// -------------------------------------------------------------------------
......@@ -1242,7 +1242,7 @@ ModbusMessage ForceCoilsMessage::transport_msg()
// копируем заголовок
memcpy(&mm,this,szModbusHeader);
int ind = 0;
// данные (переворачиваем байты)
......@@ -1252,7 +1252,7 @@ ModbusMessage ForceCoilsMessage::transport_msg()
// копируем
memcpy(mm.data,&d,ind);
// copy bcnt
// copy bcnt
bcnt = quant*sizeof(ModbusData);
memcpy(&(mm.data[ind]),&bcnt,sizeof(bcnt));
ind+=sizeof(bcnt);
......@@ -1276,7 +1276,7 @@ ModbusMessage ForceCoilsMessage::transport_msg()
ind+=szCRC;
// длина сообщения...
mm.len = ind;
mm.len = ind;
return mm;
}
// -------------------------------------------------------------------------
......@@ -1297,10 +1297,10 @@ void ForceCoilsMessage::init( ModbusMessage& m )
assert( m.func == fnForceMultipleCoils );
memset(this,0,sizeof(*this));
// copy not include CRC
memcpy(this,&m,szModbusHeader+m.len);
memcpy(this,&m,szModbusHeader+m.len);
// Сперва переворачиваем обратно слова
start = SWAPSHORT(start);
quant = SWAPSHORT(quant);
......@@ -1310,7 +1310,7 @@ void ForceCoilsMessage::init( ModbusMessage& m )
{
#ifdef DEBUG
cerr << "(ForceCoilsMessage): BAD format!" << endl;
cerr << "bcnt=" << (int)bcnt
cerr << "bcnt=" << (int)bcnt
<< " quant=" << (int)quant
<< endl;
#endif
......@@ -1350,20 +1350,20 @@ int ForceCoilsMessage::getDataLen( ModbusMessage& m )
// -------------------------------------------------------------------------
std::ostream& ModbusRTU::operator<<(std::ostream& os, ForceCoilsMessage& m )
{
os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start)
<< " quant=" << dat2str(m.quant)
os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start)
<< " quant=" << dat2str(m.quant)
<< " bcnt=" << b2str(m.bcnt)
<< " data[" << (int)m.quant <<"]={ ";
for( unsigned int i=0; i<m.quant; i++ )
{
DataBits16 d(m.data[i]);
os << "" << d << " ";
}
os << "}";
return os;
return os;
}
std::ostream& ModbusRTU::operator<<(std::ostream& os, ForceCoilsMessage* m )
{
......@@ -1386,18 +1386,18 @@ void ForceCoilsRetMessage::init( ModbusMessage& m )
assert( m.func == fnForceMultipleCoils );
memset(this,0,sizeof(*this));
// copy not include CRC
memcpy(this,&m,szModbusHeader+m.len);
memcpy(this,&m,szModbusHeader+m.len);
/*! \todo (WriteOutputRetMessage): необходимо встроить проверку на корректность данных */
// Сперва переворачиваем обратно слова
start = SWAPSHORT(start);
quant = SWAPSHORT(quant);
int ind = sizeof(quant)+sizeof(start);
// копируем CRC (последний элемент). Без переворачивания...
memcpy(&crc,&(m.data[ind]),szCRC);
}
......@@ -1466,7 +1466,7 @@ bool WriteOutputMessage::addData( ModbusData d )
{
if( isFull() )
return false;
data[quant++] = d;
bcnt = quant*sizeof(ModbusData);
return true;
......@@ -1487,7 +1487,7 @@ ModbusMessage WriteOutputMessage::transport_msg()
// копируем заголовок
memcpy(&mm,this,szModbusHeader);
int ind = 0;
// данные (переворачиваем байты)
......@@ -1497,7 +1497,7 @@ ModbusMessage WriteOutputMessage::transport_msg()
// копируем
memcpy(mm.data,&d,ind);
// copy bcnt
// copy bcnt
bcnt = quant*sizeof(ModbusData);
memcpy(&(mm.data[ind]),&bcnt,sizeof(bcnt));
ind+=sizeof(bcnt);
......@@ -1521,7 +1521,7 @@ ModbusMessage WriteOutputMessage::transport_msg()
ind+=szCRC;
// длина сообщения...
mm.len = ind;
mm.len = ind;
return mm;
}
// -------------------------------------------------------------------------
......@@ -1542,10 +1542,10 @@ void WriteOutputMessage::init( ModbusMessage& m )
assert( m.func == fnWriteOutputRegisters );
memset(this,0,sizeof(*this));
// copy not include CRC
memcpy(this,&m,szModbusHeader+m.len);
memcpy(this,&m,szModbusHeader+m.len);
// Сперва переворачиваем обратно слова
start = SWAPSHORT(start);
quant = SWAPSHORT(quant);
......@@ -1555,7 +1555,7 @@ void WriteOutputMessage::init( ModbusMessage& m )
{
#ifdef DEBUG
cerr << "(WriteOutputMessage): BAD format!" << endl;
cerr << "bcnt=" << (int)bcnt
cerr << "bcnt=" << (int)bcnt
<< " quant=" << (int)quant
<< endl;
#endif
......@@ -1610,17 +1610,17 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteOutputMessage& m )
// return mbPrintMessage(os,(ModbusByte*)(&m.crc), szCRC );
// интелектуальный вывод :)
os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start)
<< " quant=" << dat2str(m.quant)
os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start)
<< " quant=" << dat2str(m.quant)
<< " bcnt=" << dat2str(m.bcnt)
<< " data[" << (int)m.quant <<"]={ ";
for( unsigned int i=0; i<m.quant; i++ )
os << "" << dat2str(m.data[i]) << " ";
os << "}";
return os;
return os;
}
std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteOutputMessage* m )
{
......@@ -1643,18 +1643,18 @@ void WriteOutputRetMessage::init( ModbusMessage& m )
assert( m.func == fnWriteOutputRegisters );
memset(this,0,sizeof(*this));
// copy not include CRC
memcpy(this,&m,szModbusHeader+m.len);
memcpy(this,&m,szModbusHeader+m.len);
/*! \todo (WriteOutputRetMessage): необходимо встроить проверку на корректность данных */
// Сперва переворачиваем обратно слова
start = SWAPSHORT(start);
quant = SWAPSHORT(quant);
int ind = sizeof(quant)+sizeof(start);
// копируем CRC (последний элемент). Без переворачивания...
memcpy(&crc,&(m.data[ind]),szCRC);
}
......@@ -1751,9 +1751,9 @@ void ForceSingleCoilMessage::init( ModbusMessage& m )
assert( m.func == fnForceSingleCoil );
memset(this,0,sizeof(*this));
// копируем данные вместе с CRC
memcpy(this,&m,szModbusHeader+m.len+szCRC);
// копируем данные вместе с CRC
memcpy(this,&m,szModbusHeader+m.len+szCRC);
// Сперва переворачиваем обратно слова
start = SWAPSHORT(start);
data = SWAPSHORT(data);
......@@ -1761,7 +1761,7 @@ void ForceSingleCoilMessage::init( ModbusMessage& m )
// потом проверяем
if( !checkFormat() )
{
#ifdef DEBUG
#ifdef DEBUG
cerr << "(ForceSingleCoil): BAD format!" << endl;
#endif
// Если собщение некорректно
......@@ -1791,8 +1791,8 @@ int ForceSingleCoilMessage::getDataLen( ModbusMessage& m )
// -------------------------------------------------------------------------
std::ostream& ModbusRTU::operator<<(std::ostream& os, ForceSingleCoilMessage& m )
{
return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start)
return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start)
<< " data=" << dat2str(m.data) << " ";
}
std::ostream& ModbusRTU::operator<<(std::ostream& os, ForceSingleCoilMessage* m )
......@@ -1815,12 +1815,12 @@ ForceSingleCoilRetMessage& ForceSingleCoilRetMessage::operator=( ModbusMessage&
void ForceSingleCoilRetMessage::init( ModbusMessage& m )
{
memset(this,0,sizeof(*this));
// copy not include CRC
memcpy(this,&m,szModbusHeader+m.len);
memcpy(this,&m,szModbusHeader+m.len);
/*! \todo (ForceSingleCoilRetMessage): необходимо встроить проверку на корректность данных */
// переворачиваем обратно слова
start = SWAPSHORT(start);
data = SWAPSHORT(data);
......@@ -1921,9 +1921,9 @@ void WriteSingleOutputMessage::init( ModbusMessage& m )
assert( m.func == fnWriteOutputSingleRegister );
memset(this,0,sizeof(*this));
// копируем данные вместе с CRC
memcpy(this,&m,szModbusHeader+m.len+szCRC);
// копируем данные вместе с CRC
memcpy(this,&m,szModbusHeader+m.len+szCRC);
// Сперва переворачиваем обратно слова
start = SWAPSHORT(start);
data = SWAPSHORT(data);
......@@ -1931,7 +1931,7 @@ void WriteSingleOutputMessage::init( ModbusMessage& m )
// потом проверяем
if( !checkFormat() )
{
#ifdef DEBUG
#ifdef DEBUG
cerr << "(WriteSingleOutputMessage): BAD format!" << endl;
#endif
// Если собщение некорректно
......@@ -1967,8 +1967,8 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteSingleOutputMessage&
// return mbPrintMessage(os,(ModbusByte*)(&m.crc), szCRC );
// интелектуальный вывод :)
return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start)
return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start)
<< " data=" << dat2str(m.data) << " ";
}
std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteSingleOutputMessage* m )
......@@ -1991,12 +1991,12 @@ WriteSingleOutputRetMessage& WriteSingleOutputRetMessage::operator=( ModbusMessa
void WriteSingleOutputRetMessage::init( ModbusMessage& m )
{
memset(this,0,sizeof(*this));
// copy not include CRC
memcpy(this,&m,szModbusHeader+m.len);
memcpy(this,&m,szModbusHeader+m.len);
/*! \todo (WriteSingleOutputRetMessage): необходимо встроить проверку на корректность данных */
// переворачиваем обратно слова
start = SWAPSHORT(start);
data = SWAPSHORT(data);
......@@ -2103,7 +2103,7 @@ bool JournalCommandRetMessage::setData( ModbusByte* buf, int len )
{
if( isFull() )
return false;
if( sizeof(ModbusByte)*len > sizeof(data) )
return false;
......@@ -2137,10 +2137,10 @@ ModbusMessage JournalCommandRetMessage::transport_msg()
// копируем заголовок и данные
memcpy(&mm,this,szModbusHeader);
int ind = 0;
bcnt = count*sizeof(ModbusData);
// copy bcnt
memcpy(&mm.data,&bcnt,sizeof(bcnt));
ind += sizeof(bcnt);
......@@ -2168,7 +2168,7 @@ ModbusMessage JournalCommandRetMessage::transport_msg()
ind += szCRC;
// длина сообщения...
mm.len = ind;
mm.len = ind;
return mm;
}
// -------------------------------------------------------------------------
......@@ -2218,7 +2218,7 @@ float ModbusRTU::dat2f( const ModbusData dat1, const ModbusData dat2 )
{
ModbusData d[2]={dat1,dat2};
float f=0;
assert(sizeof(f)>=sizeof(d));
memcpy(&f,d,sizeof(d));
return f;
......@@ -2275,25 +2275,25 @@ std::string ModbusRTU::mbErr2Str( ModbusRTU::mbErrCode e )
case erInvalidFormat:
return "неправильный формат";
case erBadCheckSum:
return "У пакета не сошлась контрольная сумма";
case erBadReplyNodeAddress:
return "Ответ на запрос адресован не мне или от станции,которую не спрашивали";
case erTimeOut:
return "Тайм-аут при приеме";
case erUnExpectedPacketType:
return "Неожидаемый тип пакета";
case erPacketTooLong:
return "пакет длинее буфера приема";
case erHardwareError:
return "ошибка оборудования";
case erBadDataAddress:
return "регистр не существует или запрещён к опросу";
......@@ -2305,10 +2305,10 @@ std::string ModbusRTU::mbErr2Str( ModbusRTU::mbErrCode e )
case erSlaveBusy:
return "контроллер занят длительной операцией (повторить запрос позже)";
case erOperationFailed:
return "сбой при выполнении операции (например: доступ запрещён)";
case erMemoryParityError:
return "ошибка паритета при чтении памяти";
......@@ -2341,15 +2341,15 @@ SetDateTimeMessage::SetDateTimeMessage()
std::ostream& ModbusRTU::operator<<(std::ostream& os, SetDateTimeMessage& m )
{
ostringstream s;
s << setfill('0')
<< setw(2) << (int)m.day << "-"
<< setw(2) << (int)m.mon << "-"
<< setw(2) << (int)m.century
s << setfill('0')
<< setw(2) << (int)m.day << "-"
<< setw(2) << (int)m.mon << "-"
<< setw(2) << (int)m.century
<< setw(2) << (int)m.year << " "
<< setw(2) << (int)m.hour << ":"
<< setw(2) << (int)m.min << ":"
<< setw(2) << (int)m.hour << ":"
<< setw(2) << (int)m.min << ":"
<< setw(2) << (int)m.sec;
return os << s.str();
}
......@@ -2361,7 +2361,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, SetDateTimeMessage* m )
bool SetDateTimeMessage::checkFormat()
{
/*
// Lav: проверка >=0 бессмысленна, потому что в типе данных Modbusbyte не могут храниться отрицательные числа
// Lav: проверка >=0 бессмысленна, потому что в типе данных Modbusbyte не могут храниться отрицательные числа
return ( hour>=0 && hour<=23 ) &&
( min>=0 && min<=59 ) &&
( sec>=0 && sec<=59 ) &&
......@@ -2369,7 +2369,7 @@ bool SetDateTimeMessage::checkFormat()
( mon>=1 && mon<=12 ) &&
( year>=0 && year<=99 ) &&
( century>=19 && century<=20 );
*/
*/
return ( hour<=23 ) &&
( min<=59 ) &&
( sec<=59 ) &&
......@@ -2392,7 +2392,7 @@ ModbusMessage SetDateTimeMessage::transport_msg()
// копируем заголовок и данные
memcpy(&mm,this,szModbusHeader);
/*
/*
mm.data[0] = hour;
mm.data[1] = min;
mm.data[2] = sec;
......@@ -2466,7 +2466,7 @@ ModbusMessage SetDateTimeRetMessage::transport_msg()
// копируем заголовок и данные
memcpy(&mm,this,szModbusHeader);
/*
/*
mm.data[0] = hour;
mm.data[1] = min;
mm.data[2] = sec;
......@@ -2508,7 +2508,7 @@ void RemoteServiceMessage::init( ModbusMessage& m )
// copy not include CRC
memcpy(this,&m,szModbusHeader+m.len);
// последний элемент это CRC
memcpy(&crc,&(m.data[m.len-szCRC]),szCRC);
}
......@@ -2552,7 +2552,7 @@ bool RemoteServiceRetMessage::setData( ModbusByte* buf, int len )
{
if( isFull() )
return false;
if( len*sizeof(ModbusByte) > sizeof(data) )
return false;
......@@ -2586,7 +2586,7 @@ ModbusMessage RemoteServiceRetMessage::transport_msg()
// копируем заголовок и данные
memcpy(&mm,this,szModbusHeader);
int ind = 0;
bcnt = count*sizeof(ModbusByte);
......@@ -2608,7 +2608,7 @@ ModbusMessage RemoteServiceRetMessage::transport_msg()
ind += szCRC;
// длина сообщения...
mm.len = ind;
mm.len = ind;
return mm;
}
// -------------------------------------------------------------------------
......@@ -2633,10 +2633,10 @@ void ReadFileRecordMessage::init( ModbusMessage& m )
assert( m.func == fnReadFileRecord );
memset(this,0,sizeof(*this));
// copy not include CRC
memcpy(this,&m,szModbusHeader+m.len);
memcpy(this,&m,szModbusHeader+m.len);
// потом проверяем
if( !checkFormat() )
{
......@@ -2672,7 +2672,7 @@ int ReadFileRecordMessage::getDataLen( ModbusMessage& m )
return 0;
return (int)(m.data[0]);
// ReadFileRecordMessage rfm(m); // может просто смотреть m.data[0] ?!
// return (int)(rfm.bcnt);
}
......@@ -2734,10 +2734,10 @@ void FileTransferMessage::init( ModbusMessage& m )
assert( m.func == fnFileTransfer );
memset(this,0,sizeof(*this));
// copy not include CRC
memcpy(this,&m,szModbusHeader+m.len);
memcpy(this,&m,szModbusHeader+m.len);
// последний элемент это CRC
memcpy(&crc,&(m.data[m.len-szCRC]),szCRC);
......@@ -2772,10 +2772,10 @@ void FileTransferRetMessage::init( ModbusMessage& m )
{
assert( m.func == fnFileTransfer );
memset(this,0,sizeof(*this));
// copy header
memcpy(this,&m,szModbusHeader);
bcnt = m.data[0];
memcpy(&numfile,&(m.data[1]),sizeof(ModbusData));
memcpy(&numpacks,&(m.data[1+sizeof(ModbusData)]),sizeof(ModbusData));
......@@ -2843,7 +2843,7 @@ ModbusMessage FileTransferRetMessage::transport_msg()
// копируем заголовок и данные
memcpy(&mm,this,szModbusHeader);
int ind = 0;
bcnt = szData() - szCRC - 1; // -1 - это сам байт содержащий количество байт (bcnt)...
......
......@@ -14,7 +14,7 @@ using namespace std;
unsigned short ModbusRTU::SWAPSHORT( unsigned short x )
{
return ((((x)>>8)&0xff)|(((x)<<8)&0xff00));
return ((((x)>>8)&0xff)|(((x)<<8)&0xff00));
}
// -------------------------------------------------------------------------
......@@ -105,7 +105,7 @@ static int get_crc_ccitt( unsigned short crc, unsigned char* buf, int size )
#else
register int i;
crc ^= (unsigned short)(*(buf++)) << 8;
for (i = 0; i < 8; i++)
for (i = 0; i < 8; i++)
{
if (crc & 0x8000)
crc = (crc << 1) ^ 0x1021;
......@@ -125,12 +125,12 @@ static int get_crc_16( unsigned short crc, unsigned char* buf, int size )
while( size-- )
{
#ifdef USE_CRC_TAB
#ifdef USE_CRC_TAB
crc = (crc >> 8) ^ crc_16_tab[ (crc ^ *(buf++)) & 0xff ];
#else
register int i, ch;
ch = *(buf++);
for (i = 0; i < 8; i++)
for (i = 0; i < 8; i++)
{
if ((crc ^ ch) & 1)
crc = (crc >> 1) ^ 0xa001;
......@@ -141,7 +141,7 @@ static int get_crc_16( unsigned short crc, unsigned char* buf, int size )
}
#endif
// crc = crc & 0xffff;
}
}
return crc;
}
// -------------------------------------------------------------------------
......@@ -160,12 +160,12 @@ ModbusCRC ModbusRTU::checkCRC( ModbusByte* buf, int len )
// -------------------------------------------------------------------------
bool ModbusRTU::isWriteFunction( SlaveFunctionCode c )
{
if( c == fnWriteOutputRegisters ||
if( c == fnWriteOutputRegisters ||
c == fnWriteOutputSingleRegister ||
c == fnForceSingleCoil ||
c == fnForceMultipleCoils )
return true;
return false;
}
// -------------------------------------------------------------------------
......@@ -180,7 +180,7 @@ std::ostream& ModbusRTU::mbPrintMessage( std::ostream& os, ModbusByte* m, int le
for( unsigned int i=0; i<len; i++ )
s << setw(2) << (short)(m[i]) << " ";
// s << "<" << setw(2) << (int)(m[i]) << ">";
return os << s.str();
}
// -------------------------------------------------------------------------
......@@ -266,8 +266,8 @@ ModbusMessage ErrorRetMessage::transport_msg()
std::ostream& ModbusRTU::operator<<(std::ostream& os, ErrorRetMessage& m )
{
// return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m));
return os << "addr=" << addr2str(m.addr)
<< " func=" << (int)m.func
return os << "addr=" << addr2str(m.addr)
<< " func=" << (int)m.func
<< " errcode=" << dat2str(m.ecode);
}
std::ostream& ModbusRTU::operator<<(std::ostream& os, ErrorRetMessage* m )
......@@ -329,7 +329,7 @@ void ReadCoilMessage::init( ModbusMessage& m )
assert( m.func == fnReadCoilStatus );
memset(this,0,sizeof(*this));
memcpy(this,&m,sizeof(*this)); // m.len
// переворачиваем слова
start = SWAPSHORT(start);
count = SWAPSHORT(count);
......@@ -339,7 +339,7 @@ void ReadCoilMessage::init( ModbusMessage& m )
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadCoilMessage& m )
{
// return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m));
return os << "addr=" << addr2str(m.addr)
return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")"
<< " count=" << dat2str(m.count) << "(" << (int)(m.count) << ")";
}
......@@ -351,7 +351,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadCoilMessage* m )
DataBits::DataBits( std::string s ):
b(s)
{
}
// -------------------------------------------------------------------------
DataBits::DataBits( ModbusByte ubyte )
......@@ -567,7 +567,7 @@ ModbusMessage ReadCoilRetMessage::transport_msg()
ind+=szCRC;
// длина сообщения...
mm.len = ind;
mm.len = ind;
return std::move(mm);
}
// -------------------------------------------------------------------------
......@@ -652,7 +652,7 @@ void ReadInputStatusMessage::init( ModbusMessage& m )
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadInputStatusMessage& m )
{
// return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m));
return os << "addr=" << addr2str(m.addr)
return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << "(" << (int)m.start << ")"
<< " count=" << dat2str(m.count) << "(" << (int)m.count << ")";
}
......@@ -713,7 +713,7 @@ bool ReadInputStatusRetMessage::setBit( unsigned char dnum, unsigned char bnum,
data[dnum] = d;
return true;
}
return false;
}
// -------------------------------------------------------------------------
......@@ -721,7 +721,7 @@ bool ReadInputStatusRetMessage::addData( DataBits d )
{
if( isFull() )
return false;
data[bcnt++] = d.mbyte();
return true;
}
......@@ -733,7 +733,7 @@ bool ReadInputStatusRetMessage::getData( unsigned char dnum, DataBits& d )
d = data[dnum];
return true;
}
return false;
}
// -------------------------------------------------------------------------
......@@ -752,7 +752,7 @@ ModbusMessage ReadInputStatusRetMessage::transport_msg()
// копируем заголовок и данные
memcpy(&mm,this,szModbusHeader);
memcpy(&mm.data,&bcnt,sizeof(bcnt));
memcpy(&mm.data,&bcnt,sizeof(bcnt));
int ind = sizeof(bcnt);
// копируем данные
......@@ -767,7 +767,7 @@ ModbusMessage ReadInputStatusRetMessage::transport_msg()
ind+=szCRC;
// длина сообщения...
mm.len = ind;
mm.len = ind;
return std::move(mm);
}
// -------------------------------------------------------------------------
......@@ -843,7 +843,7 @@ void ReadOutputMessage::init( ModbusMessage& m )
assert( m.func == fnReadOutputRegisters );
memset(this,0,sizeof(*this));
memcpy(this,&m,sizeof(*this)); // m.len
// переворачиваем слова
start = SWAPSHORT(start);
count = SWAPSHORT(count);
......@@ -855,7 +855,7 @@ void ReadOutputMessage::init( ModbusMessage& m )
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadOutputMessage& m )
{
// return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m));
return os << "addr=" << addr2str(m.addr)
return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")"
<< " count=" << dat2str(m.count) << "(" << (int)m.count << ")";
......@@ -883,12 +883,12 @@ void ReadOutputRetMessage::init( ModbusMessage& m )
memset(this,0,sizeof(*this));
addr = m.addr;
func = m.func;
// bcnt = m.data[0];
unsigned int cnt = m.data[0] / sizeof(ModbusData);
if( cnt > MAXLENPACKET/sizeof(ModbusData) )
{
// cerr << "(ReadOutputRetMessage): BAD bcnt="
// cerr << "(ReadOutputRetMessage): BAD bcnt="
// << (int)bcnt << " count=" << cnt << endl;
throw mbException(erPacketTooLong);
}
......@@ -896,13 +896,13 @@ void ReadOutputRetMessage::init( ModbusMessage& m )
count = cnt;
bcnt = m.data[0];
memcpy(&data,&(m.data[1]),bcnt);
// переворачиваем данные
for( unsigned int i=0; i<cnt; i++ )
data[i] = SWAPSHORT(data[i]);
memcpy(&crc,&(m.data[bcnt+1]),szCRC);
}
}
// -------------------------------------------------------------------------
int ReadOutputRetMessage::getDataLen( ModbusMessage& m )
{
......@@ -913,7 +913,7 @@ int ReadOutputRetMessage::getDataLen( ModbusMessage& m )
/*
ReadOutputMessage rm(m);
return (int)(rm.bcnt);
*/
*/
}
// -------------------------------------------------------------------------
ReadOutputRetMessage::ReadOutputRetMessage( ModbusAddr _addr ):
......@@ -929,7 +929,7 @@ bool ReadOutputRetMessage::addData( ModbusData d )
{
if( isFull() )
return false;
data[count++] = d;
bcnt = count*sizeof(ModbusData);
return true;
......@@ -985,7 +985,7 @@ ModbusMessage ReadOutputRetMessage::transport_msg()
ind+=szCRC;
// длина сообщения...
mm.len = ind;
mm.len = ind;
return std::move(mm);
}
......@@ -1072,7 +1072,7 @@ void ReadInputMessage::init( ModbusMessage& m )
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadInputMessage& m )
{
// return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m));
return os << "addr=" << addr2str(m.addr)
return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")"
<< " count=" << dat2str(m.count)
<< "(" << (int)m.count << ")";
......@@ -1100,7 +1100,7 @@ void ReadInputRetMessage::init( ModbusMessage& m )
memset(this,0,sizeof(*this));
addr = m.addr;
func = m.func;
// bcnt = m.data[0];
unsigned int cnt = m.data[0] / sizeof(ModbusData);
if( cnt > MAXLENPACKET/sizeof(ModbusData) )
......@@ -1109,12 +1109,12 @@ void ReadInputRetMessage::init( ModbusMessage& m )
count = cnt;
bcnt = m.data[0];
memcpy(&data,&(m.data[1]),bcnt);
// переворачиваем данные
swapData();
memcpy(&crc,&(m.data[bcnt+1]),szCRC);
}
}
// -------------------------------------------------------------------------
void ReadInputRetMessage::swapData()
{
......@@ -1144,7 +1144,7 @@ bool ReadInputRetMessage::addData( ModbusData d )
{
if( isFull() )
return false;
data[count++] = d;
bcnt = count*sizeof(ModbusData);
return true;
......@@ -1192,7 +1192,7 @@ ModbusMessage ReadInputRetMessage::transport_msg()
ind+=szCRC;
// длина сообщения...
mm.len = ind;
mm.len = ind;
return std::move(mm);
}
// -------------------------------------------------------------------------
......@@ -1227,7 +1227,7 @@ bool ForceCoilsMessage::addData( DataBits d )
{
if( isFull() )
return false;
data[bcnt++] = d.mbyte();
quant += BitsPerByte;
return true;
......@@ -1251,7 +1251,7 @@ bool ForceCoilsMessage::setBit( int nbit, bool state )
{
if( nbit<0 || nbit >= quant )
return false;
int bnum = nbit / BitsPerByte;
int qnum = nbit % BitsPerByte;
......@@ -1268,7 +1268,7 @@ bool ForceCoilsMessage::getData( unsigned char dnum, DataBits& d )
d = data[dnum];
return true;
}
return false;
}
// -------------------------------------------------------------------------
......@@ -1314,7 +1314,7 @@ ModbusMessage ForceCoilsMessage::transport_msg()
ind+=szCRC;
// длина сообщения...
mm.len = ind;
mm.len = ind;
return std::move(mm);
}
// -------------------------------------------------------------------------
......@@ -1335,10 +1335,10 @@ void ForceCoilsMessage::init( ModbusMessage& m )
assert( m.func == fnForceMultipleCoils );
memset(this,0,sizeof(*this));
// copy not include CRC
memcpy(this,&m,szModbusHeader+m.len);
memcpy(this,&m,szModbusHeader+m.len);
// Сперва переворачиваем обратно слова
start = SWAPSHORT(start);
quant = SWAPSHORT(quant);
......@@ -1348,7 +1348,7 @@ void ForceCoilsMessage::init( ModbusMessage& m )
{
#ifdef DEBUG
cerr << "(ForceCoilsMessage): BAD format!" << endl;
cerr << "bcnt=" << (int)bcnt
cerr << "bcnt=" << (int)bcnt
<< " quant=" << (int)quant
<< endl;
#endif
......@@ -1385,18 +1385,18 @@ int ForceCoilsMessage::getDataLen( ModbusMessage& m )
// -------------------------------------------------------------------------
std::ostream& ModbusRTU::operator<<(std::ostream& os, ForceCoilsMessage& m )
{
os << "addr=" << addr2str(m.addr)
os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")"
<< " quant=" << dat2str(m.quant) << "(" << (int)(m.quant) << ")"
<< " bcnt=" << b2str(m.bcnt)
<< " data[" << (int)m.quant <<"]={ ";
for( unsigned int i=0; i<m.bcnt; i++ )
{
DataBits d(m.data[i]);
os << "" << d << " ";
}
os << "}";
return os;
}
......@@ -1421,18 +1421,18 @@ void ForceCoilsRetMessage::init( ModbusMessage& m )
assert( m.func == fnForceMultipleCoils );
memset(this,0,sizeof(*this));
// copy not include CRC
memcpy(this,&m,szModbusHeader+m.len);
memcpy(this,&m,szModbusHeader+m.len);
/*! \todo (WriteOutputRetMessage): необходимо встроить проверку на корректность данных */
// Сперва переворачиваем обратно слова
start = SWAPSHORT(start);
quant = SWAPSHORT(quant);
int ind = sizeof(quant)+sizeof(start);
// копируем CRC (последний элемент). Без переворачивания...
memcpy(&crc,&(m.data[ind]),szCRC);
}
......@@ -1501,7 +1501,7 @@ bool WriteOutputMessage::addData( ModbusData d )
{
if( isFull() )
return false;
data[quant++] = d;
bcnt = quant*sizeof(ModbusData);
return true;
......@@ -1532,7 +1532,7 @@ ModbusMessage WriteOutputMessage::transport_msg()
// копируем
memcpy(mm.data,&d,ind);
// copy bcnt
// copy bcnt
bcnt = quant*sizeof(ModbusData);
memcpy(&(mm.data[ind]),&bcnt,sizeof(bcnt));
ind+=sizeof(bcnt);
......@@ -1556,7 +1556,7 @@ ModbusMessage WriteOutputMessage::transport_msg()
ind+=szCRC;
// длина сообщения...
mm.len = ind;
mm.len = ind;
return std::move(mm);
}
// -------------------------------------------------------------------------
......@@ -1577,10 +1577,10 @@ void WriteOutputMessage::init( ModbusMessage& m )
assert( m.func == fnWriteOutputRegisters );
memset(this,0,sizeof(*this));
// copy not include CRC
memcpy(this,&m,szModbusHeader+m.len);
memcpy(this,&m,szModbusHeader+m.len);
// Сперва переворачиваем обратно слова
start = SWAPSHORT(start);
quant = SWAPSHORT(quant);
......@@ -1590,7 +1590,7 @@ void WriteOutputMessage::init( ModbusMessage& m )
{
#ifdef DEBUG
cerr << "(WriteOutputMessage): BAD format!" << endl;
cerr << "bcnt=" << (int)bcnt
cerr << "bcnt=" << (int)bcnt
<< " quant=" << (int)quant
<< endl;
#endif
......@@ -1645,17 +1645,17 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteOutputMessage& m )
// return mbPrintMessage(os,(ModbusByte*)(&m.crc), szCRC );
// интелектуальный вывод :)
os << "addr=" << addr2str(m.addr)
os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")"
<< " quant=" << dat2str(m.quant) << "(" << (int)(m.quant) << ")"
<< " bcnt=" << dat2str(m.bcnt)
<< " data[" << (int)m.quant <<"]={ ";
for( unsigned int i=0; i<m.quant; i++ )
os << "" << dat2str(m.data[i]) << " ";
os << "}";
return os;
return os;
}
std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteOutputMessage* m )
{
......@@ -1678,18 +1678,18 @@ void WriteOutputRetMessage::init( ModbusMessage& m )
assert( m.func == fnWriteOutputRegisters );
memset(this,0,sizeof(*this));
// copy not include CRC
memcpy(this,&m,szModbusHeader+m.len);
memcpy(this,&m,szModbusHeader+m.len);
/*! \todo (WriteOutputRetMessage): необходимо встроить проверку на корректность данных */
// Сперва переворачиваем обратно слова
start = SWAPSHORT(start);
quant = SWAPSHORT(quant);
int ind = sizeof(quant)+sizeof(start);
// копируем CRC (последний элемент). Без переворачивания...
memcpy(&crc,&(m.data[ind]),szCRC);
}
......@@ -1786,9 +1786,9 @@ void ForceSingleCoilMessage::init( ModbusMessage& m )
assert( m.func == fnForceSingleCoil );
memset(this,0,sizeof(*this));
// копируем данные вместе с CRC
memcpy(this,&m,szModbusHeader+m.len+szCRC);
// копируем данные вместе с CRC
memcpy(this,&m,szModbusHeader+m.len+szCRC);
// Сперва переворачиваем обратно слова
start = SWAPSHORT(start);
data = SWAPSHORT(data);
......@@ -1796,7 +1796,7 @@ void ForceSingleCoilMessage::init( ModbusMessage& m )
// потом проверяем
if( !checkFormat() )
{
#ifdef DEBUG
#ifdef DEBUG
cerr << "(ForceSingleCoil): BAD format!" << endl;
#endif
// Если собщение некорректно
......@@ -1826,7 +1826,7 @@ int ForceSingleCoilMessage::getDataLen( ModbusMessage& m )
// -------------------------------------------------------------------------
std::ostream& ModbusRTU::operator<<(std::ostream& os, ForceSingleCoilMessage& m )
{
return os << "addr=" << addr2str(m.addr)
return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")"
<< " data=" << dat2str(m.data) << "(" << (int)(m.data) << ")"
<< " ";
......@@ -1851,12 +1851,12 @@ ForceSingleCoilRetMessage& ForceSingleCoilRetMessage::operator=( ModbusMessage&
void ForceSingleCoilRetMessage::init( ModbusMessage& m )
{
memset(this,0,sizeof(*this));
// copy not include CRC
memcpy(this,&m,szModbusHeader+m.len);
memcpy(this,&m,szModbusHeader+m.len);
/*! \todo (ForceSingleCoilRetMessage): необходимо встроить проверку на корректность данных */
// переворачиваем обратно слова
start = SWAPSHORT(start);
data = SWAPSHORT(data);
......@@ -1957,9 +1957,9 @@ void WriteSingleOutputMessage::init( ModbusMessage& m )
assert( m.func == fnWriteOutputSingleRegister );
memset(this,0,sizeof(*this));
// копируем данные вместе с CRC
memcpy(this,&m,szModbusHeader+m.len+szCRC);
// копируем данные вместе с CRC
memcpy(this,&m,szModbusHeader+m.len+szCRC);
// Сперва переворачиваем обратно слова
start = SWAPSHORT(start);
data = SWAPSHORT(data);
......@@ -1967,7 +1967,7 @@ void WriteSingleOutputMessage::init( ModbusMessage& m )
// потом проверяем
if( !checkFormat() )
{
#ifdef DEBUG
#ifdef DEBUG
cerr << "(WriteSingleOutputMessage): BAD format!" << endl;
#endif
// Если собщение некорректно
......@@ -2003,7 +2003,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteSingleOutputMessage&
// return mbPrintMessage(os,(ModbusByte*)(&m.crc), szCRC );
// интелектуальный вывод :)
return os << "addr=" << addr2str(m.addr)
return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")"
<< " data=" << dat2str(m.data) << "(" << (int)(m.data) << ")"
<< " ";
......@@ -2028,12 +2028,12 @@ WriteSingleOutputRetMessage& WriteSingleOutputRetMessage::operator=( ModbusMessa
void WriteSingleOutputRetMessage::init( ModbusMessage& m )
{
memset(this,0,sizeof(*this));
// copy not include CRC
memcpy(this,&m,szModbusHeader+m.len);
memcpy(this,&m,szModbusHeader+m.len);
/*! \todo (WriteSingleOutputRetMessage): необходимо встроить проверку на корректность данных */
// переворачиваем обратно слова
start = SWAPSHORT(start);
data = SWAPSHORT(data);
......@@ -2098,46 +2098,46 @@ int ModbusRTU::szRequestDiagnosticData( DiagnosticsSubFunction f )
if( f == subEcho )
return 1; // тут странно, вроде в стандарте количество динамическое
// но везде вроде в примерах.. "одно слово"..
if( f == dgRestartComm )
return 1;
if( f == dgDiagReg )
return 1;
if( f == dgChangeASCII )
return 1;
if( f == dgForceListen )
return 1;
return 1;
if( f == dgClearCounters)
if( f == dgClearCounters)
return 1;
if( f == dgBusMsgCount )
return 1;
if( f == dgBusErrCount )
return 1;
if( f == dgBusExceptCount )
return 1;
if( f == dgMsgSlaveCount )
return 1;
if( f == dgNoNoResponseCount )
return 1;
if( f == dgSlaveNAKCount )
return 1;
if( f == dgSlaveBusyCount )
return 1;
if( f == dgBusCharOverrunCount )
return 1;
if( f == dgClearOverrunCounter )
return 1;
......@@ -2165,7 +2165,7 @@ void DiagnosticMessage::init( ModbusMessage& m )
memcpy( &subf,&(m.data[0]),sizeof(subf) );
int last = sizeof(subf);
subf = SWAPSHORT(subf);
count = szRequestDiagnosticData((DiagnosticsSubFunction)subf );
if( count > MAXDATALEN )
......@@ -2176,13 +2176,13 @@ void DiagnosticMessage::init( ModbusMessage& m )
memcpy(&data,&(m.data[last]),sizeof(ModbusData)*count);
last +=sizeof(ModbusData)*count;
// переворачиваем данные
for( unsigned int i=0; i<count; i++ )
data[i] = SWAPSHORT(data[i]);
memcpy(&crc,&(m.data[last]),szCRC);
}
}
// -------------------------------------------------------------------------
int DiagnosticMessage::getDataLen( ModbusMessage& m )
{
......@@ -2215,7 +2215,7 @@ bool DiagnosticMessage::addData( ModbusData d )
{
if( isFull() )
return false;
data[count++] = d;
return true;
}
......@@ -2261,7 +2261,7 @@ ModbusMessage DiagnosticMessage::transport_msg()
ind+=szCRC;
// длина сообщения...
mm.len = szData();
mm.len = szData();
return std::move(mm);
}
// -------------------------------------------------------------------------
......@@ -2296,9 +2296,9 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, DiagnosticMessage& m )
for( unsigned int i=0; i<m.count; i++ )
os << dat2str(m.data[i]) << " ";
os << "}";
return os;
}
......@@ -2316,9 +2316,9 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, DiagnosticRetMessage& m )
for( unsigned int i=0; i<m.count; i++ )
os << dat2str(m.data[i]) << " ";
os << "}";
return os;
}
......@@ -2378,10 +2378,10 @@ void MEIMessageRDI::init( ModbusMessage& m )
assert( m.func == fnMEI );
memset(this,0,sizeof(*this));
// copy not include CRC
memcpy(this,&m,szModbusHeader+m.len);
// потом проверяем
if( !checkFormat() )
{
......@@ -2403,13 +2403,13 @@ bool MEIMessageRDI::checkFormat()
// -------------------------------------------------------------------------
std::ostream& ModbusRTU::operator<<(std::ostream& os, MEIMessageRDI& m )
{
os << "addr=" << addr2str(m.addr)
<< " func=0x" << b2str(m.func)
<< " type=0x" << b2str(m.type)
<< " devID=0x" << b2str(m.devID)
os << "addr=" << addr2str(m.addr)
<< " func=0x" << b2str(m.func)
<< " type=0x" << b2str(m.type)
<< " devID=0x" << b2str(m.devID)
<< " objID=0x" << b2str(m.objID);
return os;
return os;
}
std::ostream& ModbusRTU::operator<<(std::ostream& os, MEIMessageRDI* m )
{
......@@ -2493,7 +2493,7 @@ void MEIMessageRetRDI::init( ModbusMessage& m )
{
if( m.len < 7 )
throw mbException(erInvalidFormat);
while( i < m.len && dlist.size() < objNum )
{
ModbusByte id = m.data[i];
......@@ -2510,7 +2510,7 @@ void MEIMessageRetRDI::init( ModbusMessage& m )
}
memcpy(&crc,&(m.data[i]),szCRC);
}
}
// -------------------------------------------------------------------------
MEIMessageRetRDI::MEIMessageRetRDI():
type(0x00),
......@@ -2542,7 +2542,7 @@ bool MEIMessageRetRDI::addData( ModbusByte id, const std::string& val )
{
if( isFull() )
return false;
RDIObjectInfo r(id,val);
dlist.push_back(r);
objNum = dlist.size();
......@@ -2603,11 +2603,11 @@ size_t MEIMessageRetRDI::szData()
std::ostream& ModbusRTU::operator<<(std::ostream& os, MEIMessageRetRDI& m )
{
// return mbPrintMessage(os,(ModbusByte*)(&m), szModbusHeader + m.szData() );
os << "addr=" << addr2str(m.addr)
<< " func=0x" << b2str(m.func)
<< " type=0x" << b2str(m.type)
<< " devID=0x" << b2str(m.devID)
<< " conformity=0x" << b2str(m.conformity)
os << "addr=" << addr2str(m.addr)
<< " func=0x" << b2str(m.func)
<< " type=0x" << b2str(m.type)
<< " devID=0x" << b2str(m.devID)
<< " conformity=0x" << b2str(m.conformity)
<< " mf=0x" << b2str(m.mf)
<< " objID=0x" << b2str(m.objID)
<< " objNum=" << (int)(m.objNum);
......@@ -2691,7 +2691,7 @@ bool JournalCommandRetMessage::setData( ModbusByte* buf, int len )
{
if( isFull() )
return false;
if( sizeof(ModbusByte)*len > sizeof(data) )
return false;
......@@ -2756,7 +2756,7 @@ ModbusMessage JournalCommandRetMessage::transport_msg()
ind += szCRC;
// длина сообщения...
mm.len = ind;
mm.len = ind;
return std::move(mm);
}
// -------------------------------------------------------------------------
......@@ -2806,7 +2806,7 @@ float ModbusRTU::dat2f( const ModbusData dat1, const ModbusData dat2 )
{
ModbusData d[2]={dat1,dat2};
float f=0;
assert(sizeof(f)>=sizeof(d));
memcpy(&f,d,sizeof(d));
return f;
......@@ -2863,25 +2863,25 @@ std::string ModbusRTU::mbErr2Str( ModbusRTU::mbErrCode e )
case erInvalidFormat:
return "неправильный формат";
case erBadCheckSum:
return "У пакета не сошлась контрольная сумма";
case erBadReplyNodeAddress:
return "Ответ на запрос адресован не мне или от станции,которую не спрашивали";
case erTimeOut:
return "Тайм-аут при приеме";
case erUnExpectedPacketType:
return "Неожидаемый тип пакета";
case erPacketTooLong:
return "пакет длинее буфера приема";
case erHardwareError:
return "ошибка оборудования";
case erBadDataAddress:
return "регистр не существует или запрещён к опросу";
......@@ -2893,10 +2893,10 @@ std::string ModbusRTU::mbErr2Str( ModbusRTU::mbErrCode e )
case erSlaveBusy:
return "контроллер занят длительной операцией (повторить запрос позже)";
case erOperationFailed:
return "сбой при выполнении операции (например: доступ запрещён)";
case erMemoryParityError:
return "ошибка паритета при чтении памяти";
......@@ -2929,15 +2929,15 @@ SetDateTimeMessage::SetDateTimeMessage()
std::ostream& ModbusRTU::operator<<(std::ostream& os, SetDateTimeMessage& m )
{
ostringstream s;
s << setfill('0')
<< setw(2) << (int)m.day << "-"
<< setw(2) << (int)m.mon << "-"
<< setw(2) << (int)m.century
s << setfill('0')
<< setw(2) << (int)m.day << "-"
<< setw(2) << (int)m.mon << "-"
<< setw(2) << (int)m.century
<< setw(2) << (int)m.year << " "
<< setw(2) << (int)m.hour << ":"
<< setw(2) << (int)m.min << ":"
<< setw(2) << (int)m.hour << ":"
<< setw(2) << (int)m.min << ":"
<< setw(2) << (int)m.sec;
return os << s.str();
}
......@@ -2949,7 +2949,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, SetDateTimeMessage* m )
bool SetDateTimeMessage::checkFormat()
{
/*
// Lav: проверка >=0 бессмысленна, потому что в типе данных Modbusbyte не могут храниться отрицательные числа
// Lav: проверка >=0 бессмысленна, потому что в типе данных Modbusbyte не могут храниться отрицательные числа
return ( hour>=0 && hour<=23 ) &&
( min>=0 && min<=59 ) &&
( sec>=0 && sec<=59 ) &&
......@@ -2957,7 +2957,7 @@ bool SetDateTimeMessage::checkFormat()
( mon>=1 && mon<=12 ) &&
( year>=0 && year<=99 ) &&
( century>=19 && century<=20 );
*/
*/
return ( hour<=23 ) &&
( min<=59 ) &&
( sec<=59 ) &&
......@@ -3140,7 +3140,7 @@ bool RemoteServiceRetMessage::setData( ModbusByte* buf, int len )
{
if( isFull() )
return false;
if( len*sizeof(ModbusByte) > sizeof(data) )
return false;
......@@ -3196,7 +3196,7 @@ ModbusMessage RemoteServiceRetMessage::transport_msg()
ind += szCRC;
// длина сообщения...
mm.len = ind;
mm.len = ind;
return std::move(mm);
}
// -------------------------------------------------------------------------
......@@ -3219,11 +3219,11 @@ bool ReadFileRecordMessage::checkFormat()
void ReadFileRecordMessage::init( ModbusMessage& m )
{
assert( m.func == fnReadFileRecord );
memset(this,0,sizeof(*this));
// copy not include CRC
memcpy(this,&m,szModbusHeader+m.len);
memcpy(this,&m,szModbusHeader+m.len);
// потом проверяем
if( !checkFormat() )
......@@ -3260,7 +3260,7 @@ int ReadFileRecordMessage::getDataLen( ModbusMessage& m )
return 0;
return (int)(m.data[0]);
// ReadFileRecordMessage rfm(m); // может просто смотреть m.data[0] ?!
// return (int)(rfm.bcnt);
}
......@@ -3322,10 +3322,10 @@ void FileTransferMessage::init( ModbusMessage& m )
assert( m.func == fnFileTransfer );
memset(this,0,sizeof(*this));
// copy not include CRC
memcpy(this,&m,szModbusHeader+m.len);
memcpy(this,&m,szModbusHeader+m.len);
// последний элемент это CRC
memcpy(&crc,&(m.data[m.len-szCRC]),szCRC);
......@@ -3360,10 +3360,10 @@ void FileTransferRetMessage::init( ModbusMessage& m )
{
assert( m.func == fnFileTransfer );
memset(this,0,sizeof(*this));
// copy header
memcpy(this,&m,szModbusHeader);
bcnt = m.data[0];
memcpy(&numfile,&(m.data[1]),sizeof(ModbusData));
memcpy(&numpacks,&(m.data[1+sizeof(ModbusData)]),sizeof(ModbusData));
......
......@@ -115,7 +115,7 @@ void UInterface::initBackId( const UniSetTypes::ObjectId backid )
* \exception IOBadParam - генерируется если указано неправильное имя датчика или секции
* \exception IOTimeOut - генерируется если в течение времени timeout небыл получен ответ
*/
long UInterface::getValue( const ObjectId id, const ObjectId node ) const
long UInterface::getValue( const ObjectId id, const ObjectId node ) const
throw(IO_THROW_EXCEPTIONS)
{
if ( id == DefaultObjectId )
......@@ -252,7 +252,7 @@ void UInterface::setUndefinedState( const IOController_i::SensorInfo& si, bool u
catch(CORBA::NO_IMPLEMENT)
{
rcache.erase(si.id, si.node);
uwarn << set_err("UI(setUndefinedState): method no implement",si.id,si.node) << endl;
uwarn << set_err("UI(setUndefinedState): method no implement",si.id,si.node) << endl;
}
catch(CORBA::OBJECT_NOT_EXIST)
{
......@@ -344,7 +344,7 @@ void UInterface::setValue( const ObjectId id, long value, const ObjectId node )
throw UniSetTypes::TimeOut(set_err("UI(setValue): Timeout",id,node));
}
void UInterface::setValue( const ObjectId name, long value ) const
void UInterface::setValue( const ObjectId name, long value ) const
{
setValue(name, value, uconf->getLocalNode());
}
......@@ -884,7 +884,7 @@ ObjectPtr UInterface::resolve( const ObjectId rid , const ObjectId node, int tim
}
// -------------------------------------------------------------------------------------------
void UInterface::send( const ObjectId name, const TransportMessage& msg, const ObjectId node )
void UInterface::send( const ObjectId name, const TransportMessage& msg, const ObjectId node )
throw(IO_THROW_EXCEPTIONS)
{
if ( name == DefaultObjectId )
......@@ -1157,7 +1157,7 @@ string UInterface::set_err( const std::string& pre, const ObjectId id, const Obj
nm = "UnknownName";
ostringstream s;
s << pre << " (" << id << ":" << node <<")" << nm;
s << pre << " (" << id << ":" << node <<")" << nm;
return s.str();
}
// --------------------------------------------------------------------------------------------
......
......@@ -19,7 +19,7 @@
*/
// -----------------------------------------------------------------------------------------
/*!
\todo Добавить проверку на предельный номер id
\todo Добавить проверку на предельный номер id
*/
// -----------------------------------------------------------------------------------------
#include <sstream>
......
......@@ -35,12 +35,12 @@ using namespace std;
namespace ORepHelpers
{
// --------------------------------------------------------------------------
/*!
* \param cname - полное имя контекста ссылку на который, возвратит функция.
* \param argc, argv - параметры инициализации ORB
* \param cname - полное имя контекста ссылку на который, возвратит функция.
* \param argc, argv - параметры инициализации ORB
*/
CosNaming::NamingContext_ptr getContext(const string& cname, int argc, const char* const* argv, const string& nsName ) throw(ORepFailed)
{
......@@ -192,7 +192,7 @@ namespace ORepHelpers
// ---------------------------------------------------------------------------------------------------------------
/*!
* \param fname - полное имя включающее в себя путь ("Root/Section1/name|Node:Alias")
* \param brk - используемый символ разделитель
* \param brk - используемый символ разделитель
*/
const string getShortName( const string& fname, const std::string& brk )
{
......@@ -206,7 +206,7 @@ namespace ORepHelpers
// ---------------------------------------------------------------------------------------------------------------
/*!
* \param fullName - полное имя включающее в себя путь
* \param brk - используемый символ разделитель
* \param brk - используемый символ разделитель
* \note Функция возвращает путь без последнего символа разделителя ("Root/Section1/name" -> "Root/Section1")
*/
const string getSectionName( const string& fullName, const std::string& brk )
......
......@@ -20,7 +20,7 @@
*/
// -----------------------------------------------------------------------------------------
/*!
\todo Добавить проверку на предельный номер id
\todo Добавить проверку на предельный номер id
*/
// -----------------------------------------------------------------------------------------
#include "ObjectIndex.h"
......
......@@ -20,7 +20,7 @@
*/
// -----------------------------------------------------------------------------------------
/*!
\todo Добавить проверку на предельный номер id
\todo Добавить проверку на предельный номер id
*/
// -----------------------------------------------------------------------------------------
#include <iomanip>
......@@ -56,7 +56,7 @@ ObjectId ObjectIndex_Array::getIdByName( const string& name )
auto it = mok.find(name);
if( it != mok.end() )
return it->second;
return DefaultObjectId;
}
......@@ -67,9 +67,9 @@ string ObjectIndex_Array::getMapName( const ObjectId id )
return objectInfo[id].repName;
return "";
// throw OutOfRange("ObjectIndex_Array::getMapName OutOfRange");
// throw OutOfRange("ObjectIndex_Array::getMapName OutOfRange");
}
// -----------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------
string ObjectIndex_Array::getTextName( const ObjectId id )
{
if( id!=UniSetTypes::DefaultObjectId && id>=0 && id<maxId )
......@@ -94,7 +94,7 @@ std::ostream& ObjectIndex_Array::printMap( std::ostream& os )
assert (i==objectInfo[i].id);
os << setw(5) << objectInfo[i].id << " "
os << setw(5) << objectInfo[i].id << " "
<< setw(45) << conf->oind->getBaseName(objectInfo[i].repName)
<< " " << objectInfo[i].textName << endl;
}
......
......@@ -88,9 +88,9 @@ std::ostream& ObjectIndex_XML::printMap( std::ostream& os )
if( it->repName == NULL )
continue;
os << setw(5) << it->id << " "
// << setw(45) << ORepHelpers::getShortName(it->repName,'/')
<< setw(45) << it->repName
os << setw(5) << it->id << " "
// << setw(45) << ORepHelpers::getShortName(it->repName,'/')
<< setw(45) << it->repName
<< " " << it->textName << endl;
}
......@@ -107,8 +107,8 @@ void ObjectIndex_XML::build(UniXML& xml)
ind = read_section(xml,"controllers",ind);
ind = read_section(xml,"services",ind);
ind = read_nodes(xml,"nodes",ind);
//
//
omap.resize(ind);
// omap[ind].repName=NULL;
// omap[ind].textName=NULL;
......@@ -255,7 +255,7 @@ unsigned int ObjectIndex_XML::read_nodes( UniXML& xml, const std::string& sec, u
strcpy( omap[ind].textName, textname.c_str() );
omap[ind].data = (void*)(xmlNode*)(it);
//
//
mok[omap[ind].repName] = ind;
// cout << "read: " << "(" << ind << ") " << omap[ind].repName << "\t" << omap[ind].textName << endl;
......
......@@ -45,7 +45,7 @@ string ObjectIndex_idXML::getMapName( const ObjectId id )
return "";
}
// -----------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------
string ObjectIndex_idXML::getTextName( const ObjectId id )
{
auto it = omap.find(id);
......@@ -68,9 +68,9 @@ std::ostream& ObjectIndex_idXML::printMap( std::ostream& os )
if( it->second.repName == NULL )
continue;
os << setw(5) << it->second.id << " "
// << setw(45) << ORepHelpers::getShortName(it->repName,'/')
<< setw(45) << it->second.repName
os << setw(5) << it->second.id << " "
// << setw(45) << ORepHelpers::getShortName(it->repName,'/')
<< setw(45) << it->second.repName
<< " " << it->second.textName << endl;
}
......@@ -136,7 +136,7 @@ void ObjectIndex_idXML::read_section( UniXML& xml, const std::string& sec )
if( inf.id <= 0 )
{
ostringstream msg;
msg << "(ObjectIndex_idXML::build): НЕ УКАЗАН id для " << it.getProp("name")
msg << "(ObjectIndex_idXML::build): НЕ УКАЗАН id для " << it.getProp("name")
<< " секция " << sec;
throw NameNotFound(msg.str());
}
......
......@@ -162,7 +162,7 @@ void ObjectRepository::registration(const string& name, const ObjectPtr oRef, co
* \note При этом надо иметь ввиду, что задается полное имя объекта.
* Пример: registration("Root/SensorSection/sens1", oRef);
* \param fullName - полное имя регистрируемого объекта (т.е. включающее в себя имя секции)
* \param oRef - ссылка на объект
* \param oRef - ссылка на объект
* \exception ORepFailed - генерируется если произошла ошибка при регистрации
* \sa registration(const string name, const ObjectPtr oRef, const string section)
*/
......@@ -325,7 +325,7 @@ bool ObjectRepository::list(const string& section, ListObjectName *ls, unsigned
try
{
CORBA::ORB_var orb = uconf->getORB();
ctx = ORepHelpers::getContext(orb, section, nsName);
ctx = ORepHelpers::getContext(orb, section, nsName);
}
catch(ORepFailed)
{
......@@ -358,7 +358,7 @@ bool ObjectRepository::list(const string& section, ListObjectName *ls, unsigned
for( unsigned int i=0; i<how_many;i++)
{
switch( type )
{
{
case ObjectRef:
{
if(bl[i].binding_type == CosNaming::nobject)
......
......@@ -121,7 +121,7 @@ bool ObjectRepositoryFactory::createRootSection(const string& name)
// -----------------------------------------------------------------------------------------------------------
bool ObjectRepositoryFactory::createContext(const char *cname, CosNaming::NamingContext_ptr ctx)
{
CosNaming::Name_var nc = omniURI::stringToName(cname);
try
{
......@@ -133,12 +133,12 @@ bool ObjectRepositoryFactory::createContext(const char *cname, CosNaming::Naming
catch(const CosNaming::NamingContext::AlreadyBound &ab)
{
// ctx->resolve(nc);
ulogrep << "ORepFactory(createContext): context "<< cname << " уже есть"<< endl;
ulogrep << "ORepFactory(createContext): context "<< cname << " уже есть"<< endl;
return true;
}
catch(CosNaming::NamingContext::NotFound)
{
ulogrep << "ORepFactory(createContext): NotFound "<< cname << endl;
ulogrep << "ORepFactory(createContext): NotFound "<< cname << endl;
throw NameNotFound();
}
catch(const CosNaming::NamingContext::InvalidName &nf)
......@@ -147,7 +147,7 @@ bool ObjectRepositoryFactory::createContext(const char *cname, CosNaming::Naming
}
catch(const CosNaming::NamingContext::CannotProceed &cp)
{
uwarn << "ORepFactory(createContext): catch CannotProced "
uwarn << "ORepFactory(createContext): catch CannotProced "
<< cname << " bad part="
<< omniURI::nameToString(cp.rest_of_name);
throw NameNotFound();
......@@ -212,7 +212,7 @@ bool ObjectRepositoryFactory::removeSection(const string& fullName, bool recursi
unsigned int how_many = 1000;
CosNaming::NamingContext_var ctx;
try
{
{
int argc(uconf->getArgc());
const char * const* argv(uconf->getArgv());
ctx = ORepHelpers::getContext(fullName, argc, argv, nsName);
......@@ -231,11 +231,11 @@ bool ObjectRepositoryFactory::removeSection(const string& fullName, bool recursi
if( how_many>bl->length() )
how_many = bl->length();
bool rem = true; // удалять или нет
bool rem = true; // удалять или нет
for(unsigned int i=0; i<how_many;i++)
{
if( bl[i].binding_type == CosNaming::nobject)
{
// cout <<"удаляем "<< omniURI::nameToString(bl[i].binding_name) << endl;
......@@ -317,8 +317,8 @@ bool ObjectRepositoryFactory::renameSection( const string& newFName, const strin
{
int argc(uconf->getArgc());
const char * const* argv(uconf->getArgv());
CosNaming::NamingContext_var in_ctx = ORepHelpers::getContext(in_sec, argc, argv, nsName);
CosNaming::NamingContext_var ctx = ORepHelpers::getContext(oldFName, argc, argv, nsName);
CosNaming::NamingContext_var in_ctx = ORepHelpers::getContext(in_sec, argc, argv, nsName);
CosNaming::NamingContext_var ctx = ORepHelpers::getContext(oldFName, argc, argv, nsName);
// заменит контекст newFName если он существовал
in_ctx->rebind_context(ctxNewName, ctx);
......
......@@ -42,7 +42,7 @@ PassiveObject::PassiveObject( UniSetTypes::ObjectId id ):
id(id)
{
string myfullname = conf->oind->getNameById(id);
myname = ORepHelpers::getShortName(myfullname.c_str());
myname = ORepHelpers::getShortName(myfullname.c_str());
}
PassiveObject::PassiveObject( ObjectId id, ProxyManager* mngr ):
......@@ -116,7 +116,7 @@ void PassiveObject::processingMessage( UniSetTypes::VoidMessage *msg )
{
uwarn << myname << "(processingMessage): CORBA::Exception: " << ex._name() << endl;
}
catch( omniORB::fatalException& fe )
catch( omniORB::fatalException& fe )
{
if( ulog.is_crit() )
{
......
......@@ -81,7 +81,7 @@ bool ProxyManager::activateObject()
{
try
{
uinfo << myname << "(registered): попытка "
uinfo << myname << "(registered): попытка "
<< i+1 << " регистриую (id=" << it.first << ") "
<< " (pname=" << it.second->getName() << ") "
<< conf->oind->getNameById(it.first) << endl;
......@@ -144,7 +144,7 @@ void ProxyManager::processingMessage( UniSetTypes::VoidMessage *msg )
auto it = omap.find(msg->consumer);
if( it!=omap.end() )
it->second->processingMessage(msg);
else
else
ucrit << myname << "(processingMessage): не найден объект "
<< " consumer= " << msg->consumer << endl;
}
......
......@@ -233,7 +233,7 @@ void UniSetActivator::run(bool thread)
int ret = orbthr->start();
if( ret !=0 )
{
ucrit << myname << "(run): НЕ СМОГЛИ СОЗДАТЬ ORB-поток"<<endl;
ucrit << myname << "(run): НЕ СМОГЛИ СОЗДАТЬ ORB-поток"<<endl;
throw SystemError("(UniSetActivator::run): CREATE ORB THREAD FAILED");
}
}
......
......@@ -201,7 +201,7 @@ bool UniSetManager::removeObject( UniSetObject* obj )
}
// ------------------------------------------------------------------------------------------
/*!
/*!
* Функция работы со списком менеджеров
*/
void UniSetManager::managers( OManagerCommand cmd )
......@@ -264,7 +264,7 @@ void UniSetManager::managers( OManagerCommand cmd )
*/
void UniSetManager::objects(OManagerCommand cmd)
{
uinfo << myname <<"(objects): olist.size="
uinfo << myname <<"(objects): olist.size="
<< olist.size() << " cmd=" << cmd << endl;
{ //lock
uniset_rwmutex_rlock lock(olistMutex);
......@@ -306,11 +306,11 @@ void UniSetManager::objects(OManagerCommand cmd)
}
catch( CORBA::Exception& ex )
{
ucrit << myname << "(objects): Caught CORBA::Exception. "
ucrit << myname << "(objects): Caught CORBA::Exception. "
<< ex._name()
<< " (" << li->getName() << ")" << endl;
}
catch( omniORB::fatalException& fe )
catch( omniORB::fatalException& fe )
{
ucrit << myname << "(objects): Caught omniORB::fatalException:" << endl;
ucrit << myname << "(objects): file: " << fe.file()
......@@ -387,9 +387,9 @@ bool UniSetManager::addManager( UniSetManager *child )
mlist.push_back( child );
uinfo << myname << ": добавляем менеджер "<< child->getName()<< endl;
}
else
else
uwarn << myname << ": попытка повторного добавления объекта "<< child->getName() << endl;
} // unlock
} // unlock
return true;
}
......
......@@ -20,7 +20,7 @@
/*! \file
* \author Pavel Vainerman
*/
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
#include "Exceptions.h"
#include "UniSetManager_LT.h"
#include "Debug.h"
......@@ -37,20 +37,20 @@ sleepTime(UniSetTimer::WaitUpTime)
}
// ------------------------------------------------------------------------------------------
UniSetManager_LT::UniSetManager_LT():
sleepTime(UniSetTimer::WaitUpTime)
sleepTime(UniSetTimer::WaitUpTime)
{
}
// ------------------------------------------------------------------------------------------
UniSetManager_LT::~UniSetManager_LT()
UniSetManager_LT::~UniSetManager_LT()
{
}
// ------------------------------------------------------------------------------------------
void UniSetManager_LT::callback()
{
// При реализации с использованием waitMessage() каждый раз при вызове askTimer() необходимо
// проверять возвращаемое значение на UniSetTimers::WaitUpTime и вызывать termWaiting(),
// чтобы избежать ситуации, когда процесс до заказа таймера 'спал'(в функции waitMessage()) и после
// При реализации с использованием waitMessage() каждый раз при вызове askTimer() необходимо
// проверять возвращаемое значение на UniSetTimers::WaitUpTime и вызывать termWaiting(),
// чтобы избежать ситуации, когда процесс до заказа таймера 'спал'(в функции waitMessage()) и после
// заказа продолжит спать(т.е. обработчик вызван не будет)...
try
{
......
......@@ -40,7 +40,7 @@
using namespace std;
using namespace UniSetTypes;
#define CREATE_TIMER new ThrPassiveTimer();
#define CREATE_TIMER new ThrPassiveTimer();
// new PassiveSysTimer();
// ------------------------------------------------------------------------------------------
......@@ -188,7 +188,7 @@ void UniSetObject::setID( UniSetTypes::ObjectId id )
throw ObjectNameAlready("ObjectId already set(setID)");
string myfullname = ui.getNameById(id);
myname = ORepHelpers::getShortName(myfullname.c_str());
myname = ORepHelpers::getShortName(myfullname.c_str());
section = ORepHelpers::getSectionName(myfullname.c_str());
myid = id;
ui.initBackId(myid);
......@@ -253,13 +253,13 @@ struct MsgInfo
inline bool operator < ( const MsgInfo& mi ) const
{
if( type != mi.type )
return type < mi.type;
return type < mi.type;
if( id != mi.id )
return id < mi.id;
if( node != mi.node )
return node < mi.node;
return node < mi.node;
if( tm.tv_sec != mi.tm.tv_sec )
return tm.tv_sec < mi.tm.tv_sec;
......@@ -282,7 +282,7 @@ struct CInfo
confirm(0)
{
}
CInfo( ConfirmMessage& cm ):
sensor_id(cm.sensor_id),
value(cm.value),
......@@ -359,15 +359,15 @@ void UniSetObject::registered()
catch( ObjectNameAlready& al )
{
/*!
\warning По умолчанию объекты должны быть уникальны! Поэтому если идёт попытка повторной регистрации.
Мы чистим существующую ссылку и заменяем её на новую.
\warning По умолчанию объекты должны быть уникальны! Поэтому если идёт попытка повторной регистрации.
Мы чистим существующую ссылку и заменяем её на новую.
Это сделано для более надежной работы, иначе может получится, что если объект перед завершением
не очистил за собой ссылку(не разрегистрировался), то больше он никогда не сможет вновь зарегистрироваться.
Т.к. \b надёжной функции проверки "жив" ли объект пока нет...
(так бы можно было проверить и если "не жив", то смело заменять ссылку на новую). Но существует обратная сторона:
если заменяемый объект "жив" и завершит свою работу, то он может почистить за собой ссылку и это тогда наш(новый)
если заменяемый объект "жив" и завершит свою работу, то он может почистить за собой ссылку и это тогда наш(новый)
объект станет недоступен другим, а знать об этом не будет!!!
*/
ucrit << myname << "(registered): replace object (ObjectNameAlready)" << endl;
reg = true;
......@@ -578,8 +578,8 @@ void UniSetObject::cleanMsgQueue( MessagesQueue& q )
q.push(v);
}
ucrit << myname
<< "(cleanMsgQueue): ******* result size of queue: "
ucrit << myname
<< "(cleanMsgQueue): ******* result size of queue: "
<< q.size()
<< " < " << getMaxSizeOfMessageQueue() << endl;
......@@ -590,8 +590,8 @@ void UniSetObject::cleanMsgQueue( MessagesQueue& q )
for( unsigned int i=0; i<getMaxCountRemoveOfMessage(); i++ )
{
q.top();
q.pop();
q.top();
q.pop();
if( q.empty() )
break;
}
......@@ -627,7 +627,7 @@ bool UniSetObject::deactivate()
{ // lock
uniset_rwmutex_wrlock mlk(qmutex);
while( !queueMsg.empty() )
queueMsg.pop();
queueMsg.pop();
}
try
......@@ -700,8 +700,8 @@ bool UniSetObject::activate()
}
else
{
// А если myid==UniSetTypes::DefaultObjectId
// то myname = noname. ВСЕГДА!
// А если myid==UniSetTypes::DefaultObjectId
// то myname = noname. ВСЕГДА!
if( myid == UniSetTypes::DefaultObjectId )
{
ucrit << myname << "(activate): Не задан ID!!! activate failure..." << endl;
......@@ -736,10 +736,10 @@ bool UniSetObject::activate()
thr = new ThreadCreator<UniSetObject>(this, &UniSetObject::work);
thr->start();
}
else
else
{
uinfo << myname << ": ?? не задан ObjectId...("
<< "myid=" << myid << " threadcreate=" << threadcreate
uinfo << myname << ": ?? не задан ObjectId...("
<< "myid=" << myid << " threadcreate=" << threadcreate
<< ")" << endl;
thread(false);
}
......@@ -806,7 +806,7 @@ void UniSetObject::processingMessage( UniSetTypes::VoidMessage *msg )
{
uwarn << myname << "(processingMessage): CORBA::Exception: " << ex._name() << endl;
}
catch( omniORB::fatalException& fe )
catch( omniORB::fatalException& fe )
{
if( ulog.is_crit() )
{
......@@ -831,26 +831,26 @@ UniSetTypes::SimpleInfo* UniSetObject::getInfo()
info << "tid=" << setw(10);
if( threadcreate )
{
if(thr)
if(thr)
{
msgpid = thr->getId(); // заодно(на всякий) обновим и внутреннюю информацию
info << msgpid;
info << msgpid;
}
else
info << "не запущен";
}
else
info << "откл.";
info << "откл.";
info << "\tcount=" << countMessages();
info << "\tmaxMsg=" << stMaxQueueMessages;
info << "\tqFull("<< SizeOfMessageQueue << ")=" << stCountOfQueueFull;
// info << "\n";
SimpleInfo* res = new SimpleInfo();
res->info = info.str().c_str(); // CORBA::string_dup(info.str().c_str());
res->id = myid;
return res; // ._retn();
}
// ------------------------------------------------------------------------------------------
......
......@@ -48,12 +48,12 @@ UniSetObject_LT::~UniSetObject_LT()
// ------------------------------------------------------------------------------------------
void UniSetObject_LT::callback()
{
// При реализации с использованием waitMessage() каждый раз при вызове askTimer() необходимо
// проверять возвращаемое значение на UniSetTimers::WaitUpTime и вызывать termWaiting(),
// чтобы избежать ситуации, когда процесс до заказа таймера 'спал'(в функции waitMessage()) и после
// При реализации с использованием waitMessage() каждый раз при вызове askTimer() необходимо
// проверять возвращаемое значение на UniSetTimers::WaitUpTime и вызывать termWaiting(),
// чтобы избежать ситуации, когда процесс до заказа таймера 'спал'(в функции waitMessage()) и после
// заказа продолжит спать(т.е. обработчик вызван не будет)...
try
{
{
if( waitMessage(msg, sleepTime) )
processingMessage(&msg);
......
......@@ -292,7 +292,7 @@ std::list<UniSetTypes::ParamSInfo> UniSetTypes::getSInfoList( const string& str,
res.push_back(item);
}
return res;
}
// --------------------------------------------------------------------------------------
......
......@@ -144,7 +144,7 @@ long IOController::localGetValue( IOController::IOStateList::iterator& li, const
// -------------
ostringstream err;
err << myname << "(localGetValue): Not found sensor (" << sid << ") "
err << myname << "(localGetValue): Not found sensor (" << sid << ") "
<< conf->oind->getNameById(sid);
uinfo << err.str() << endl;
......@@ -157,7 +157,7 @@ void IOController::setUndefinedState( UniSetTypes::ObjectId sid, CORBA::Boolean
localSetUndefinedState( li,undefined, sid );
}
// -----------------------------------------------------------------------------
void IOController::localSetUndefinedState( IOStateList::iterator& li,
void IOController::localSetUndefinedState( IOStateList::iterator& li,
bool undefined, const UniSetTypes::ObjectId sid )
{
// сохранение текущего состояния
......@@ -241,7 +241,7 @@ void IOController::setValue( UniSetTypes::ObjectId sid, CORBA::Long value, UniSe
}
// ------------------------------------------------------------------------------------------
void IOController::localSetValue( IOController::IOStateList::iterator& li,
UniSetTypes::ObjectId sid,
UniSetTypes::ObjectId sid,
CORBA::Long value, UniSetTypes::ObjectId sup_id )
{
if( sup_id == UniSetTypes::DefaultObjectId )
......@@ -252,7 +252,7 @@ void IOController::localSetValue( IOController::IOStateList::iterator& li,
li = ioList.find(sid);
if( li==ioList.end() )
{
{
ostringstream err;
err << myname << "(localSaveValue): Unknown sensor (" << sid << ")"
<< "name: " << conf->oind->getNameById(sid);
......@@ -351,7 +351,7 @@ void IOController::ioRegistration( USensorInfo&& ainf, bool force )
if( li!=ioList.end() )
{
ostringstream err;
err << "Попытка повторной регистрации датчика("<< ainf.si.id << "). имя: "
err << "Попытка повторной регистрации датчика("<< ainf.si.id << "). имя: "
<< conf->oind->getNameById(ainf.si.id);
throw ObjectNameAlready(err.str().c_str());
}
......@@ -378,8 +378,8 @@ void IOController::ioRegistration( USensorInfo&& ainf, bool force )
{
try
{
uinfo << myname
<< "(ioRegistration): регистрирую "
uinfo << myname
<< "(ioRegistration): регистрирую "
<< conf->oind->getNameById(ainf.si.id) << endl;
ui.registered( ainf.si.id, getRef(), true );
......@@ -442,7 +442,7 @@ void IOController::dumpToDB()
{ // lock
// uniset_mutex_lock lock(ioMutex, 100);
for( auto li = ioList.begin(); li!=ioList.end(); ++li )
for( auto li = ioList.begin(); li!=ioList.end(); ++li )
{
uniset_rwmutex_rlock lock(li->second.val_lock);
SensorMessage sm;
......@@ -458,19 +458,19 @@ void IOController::dumpToDB()
if ( !li->second.dbignore )
logging(sm);
}
} // unlock
} // unlock
}
// --------------------------------------------------------------------------------------------------------------
IOController_i::SensorInfoSeq* IOController::getSensorsMap()
{
// ЗА ОСВОБОЖДЕНИЕ ПАМЯТИ ОТВЕЧАЕТ КЛИЕНТ!!!!!!
// поэтому ему лучше пользоваться при получении _var-классом
IOController_i::SensorInfoSeq* res = new IOController_i::SensorInfoSeq();
IOController_i::SensorInfoSeq* res = new IOController_i::SensorInfoSeq();
res->length( ioList.size());
unsigned int i=0;
for( auto &it: ioList )
{
{
uniset_rwmutex_rlock lock(it.second.val_lock);
(*res)[i] = it.second;
i++;
......@@ -499,7 +499,7 @@ IOController_i::SensorIOInfo IOController::getSensorIOInfo( const UniSetTypes::O
// -------------
ostringstream err;
err << myname << "(getSensorIOInfo): Unknown sensor (" << sid << ")"
err << myname << "(getSensorIOInfo): Unknown sensor (" << sid << ")"
<< conf->oind->getNameById(sid);
uinfo << err.str() << endl;
......@@ -513,7 +513,7 @@ CORBA::Long IOController::getRawValue( UniSetTypes::ObjectId sid )
if( it==ioList.end() )
{
ostringstream err;
err << myname << "(getRawValue): Unknown analog sensor (" << sid << ")"
err << myname << "(getRawValue): Unknown analog sensor (" << sid << ")"
<< conf->oind->getNameById(sid);
throw IOController_i::NameNotFound(err.str().c_str());
}
......@@ -526,14 +526,14 @@ CORBA::Long IOController::getRawValue( UniSetTypes::ObjectId sid )
if( it->second.type == UniversalIO::AI )
return UniSetTypes::lcalibrate(it->second.value,ci.minRaw,ci.maxRaw,ci.minCal,ci.maxCal,true);
if( it->second.type == UniversalIO::AO )
if( it->second.type == UniversalIO::AO )
return UniSetTypes::lcalibrate(it->second.value,ci.minCal,ci.maxCal,ci.minRaw,ci.maxRaw,true);
}
return it->second.value;
}
// --------------------------------------------------------------------------------------------------------------
void IOController::calibrate( UniSetTypes::ObjectId sid,
void IOController::calibrate( UniSetTypes::ObjectId sid,
const IOController_i::CalibrateInfo& ci,
UniSetTypes::ObjectId adminId )
{
......@@ -541,7 +541,7 @@ void IOController::calibrate( UniSetTypes::ObjectId sid,
if( it==ioList.end() )
{
ostringstream err;
err << myname << "(calibrate): Unknown analog sensor (" << sid << ")"
err << myname << "(calibrate): Unknown analog sensor (" << sid << ")"
<< conf->oind->getNameById(sid);
throw IOController_i::NameNotFound(err.str().c_str());
}
......@@ -557,7 +557,7 @@ IOController_i::CalibrateInfo IOController::getCalibrateInfo( UniSetTypes::Objec
if( it==ioList.end() )
{
ostringstream err;
err << myname << "(calibrate): Unknown analog sensor (" << sid << ")"
err << myname << "(calibrate): Unknown analog sensor (" << sid << ")"
<< conf->oind->getNameById(sid);
throw IOController_i::NameNotFound(err.str().c_str());
}
......@@ -579,7 +579,7 @@ IOController::USensorInfo::USensorInfo(IOController_i::SensorIOInfo* ai):
any(0)
{}
IOController::USensorInfo&
IOController::USensorInfo&
IOController::USensorInfo::operator=(IOController_i::SensorIOInfo& r)
{
(*this) = r;
......@@ -587,16 +587,16 @@ IOController::USensorInfo&
return *this;
}
IOController::USensorInfo&
IOController::USensorInfo&
IOController::USensorInfo::operator=(IOController_i::SensorIOInfo* r)
{
(*this) = (*r);
// any=0;
return *this;
}
const IOController::USensorInfo&
const IOController::USensorInfo&
IOController::USensorInfo::operator=(const IOController_i::SensorIOInfo& r)
{
(*this) = r;
......@@ -605,7 +605,7 @@ const IOController::USensorInfo&
}
// ----------------------------------------------------------------------------------------
bool IOController::checkIOFilters( const USensorInfo& ai, CORBA::Long& newvalue,
bool IOController::checkIOFilters( const USensorInfo& ai, CORBA::Long& newvalue,
UniSetTypes::ObjectId sup_id )
{
for( auto &it: iofilters )
......@@ -716,7 +716,7 @@ IOController_i::ShortIOInfo IOController::getChangedTime( UniSetTypes::ObjectId
// -------------
ostringstream err;
err << myname << "(getChangedTime): вход(выход) с именем "
err << myname << "(getChangedTime): вход(выход) с именем "
<< conf->oind->getNameById(sid) << " не найден";
uinfo << err.str() << endl;
......@@ -752,7 +752,7 @@ IOController::ChangeSignal IOController::signal_change_value( UniSetTypes::Objec
if( it==ioList.end() )
{
ostringstream err;
err << myname << "(signal_change_value): вход(выход) с именем "
err << myname << "(signal_change_value): вход(выход) с именем "
<< conf->oind->getNameById(sid) << " не найден";
uinfo << err.str() << endl;
......@@ -774,7 +774,7 @@ IOController::ChangeUndefinedStateSignal IOController::signal_change_undefined_s
if( it==ioList.end() )
{
ostringstream err;
err << myname << "(signal_change_undefine): вход(выход) с именем "
err << myname << "(signal_change_undefine): вход(выход) с именем "
<< conf->oind->getNameById(sid) << " не найден";
uinfo << err.str() << endl;
......
......@@ -47,7 +47,7 @@ maxAttemtps(conf->getPIntField("ConsumerMaxAttempts", 5))
}
IONotifyController::IONotifyController(const string& name, const string& section, NCRestorer* d ):
IONotifyController::IONotifyController(const string& name, const string& section, NCRestorer* d ):
IOController(name, section),
restorer(d),
askIOMutex(name+"askIOMutex"),
......@@ -147,11 +147,11 @@ void IONotifyController::askSensor(const UniSetTypes::ObjectId sid,
{ // lock
uniset_rwmutex_wrlock lock(askIOMutex);
// а раз есть заносим(исключаем) заказчика
// а раз есть заносим(исключаем) заказчика
ask(askIOList, sid, ci, cmd);
} // unlock
// посылка первый раз состояния
// посылка первый раз состояния
if( cmd==UniversalIO::UIONotify || (cmd==UIONotifyFirstNotNull && li->second.value) )
{
SensorMessage smsg;
......@@ -159,7 +159,7 @@ void IONotifyController::askSensor(const UniSetTypes::ObjectId sid,
smsg.node = conf->getLocalNode();
smsg.consumer = ci.id;
smsg.supplier = getId();
smsg.sensor_type = li->second.type;
smsg.sensor_type = li->second.type;
smsg.priority = (Message::Priority)li->second.priority;
smsg.sm_tv_sec = li->second.tv_sec;
smsg.sm_tv_usec = li->second.tv_usec;
......@@ -182,7 +182,7 @@ void IONotifyController::askSensor(const UniSetTypes::ObjectId sid,
}
catch( CORBA::SystemException& ex )
{
uwarn << myname << "(askSensor): " << conf->oind->getNameById(ci.id) << "@" << ci.node
uwarn << myname << "(askSensor): " << conf->oind->getNameById(ci.id) << "@" << ci.node
<< " недоступен!!(CORBA::SystemException): "
<< ex.NP_minorString() << endl;
}
......@@ -195,10 +195,10 @@ void IONotifyController::askSensor(const UniSetTypes::ObjectId sid,
}
// ------------------------------------------------------------------------------------------
void IONotifyController::ask( AskMap& askLst, const UniSetTypes::ObjectId sid,
void IONotifyController::ask( AskMap& askLst, const UniSetTypes::ObjectId sid,
const UniSetTypes::ConsumerInfo& cons, UniversalIO::UIOCommand cmd)
{
// поиск датчика в списке
// поиск датчика в списке
auto askIterator = askLst.find(sid);
switch (cmd)
......@@ -256,7 +256,7 @@ void IONotifyController::ask( AskMap& askLst, const UniSetTypes::ObjectId sid,
uniset_rwmutex_wrlock l(askIterator->second.mut);
if( askIterator->second.clst.empty() )
{
// не удаляем, т.к. могут поломаться итераторы
// не удаляем, т.к. могут поломаться итераторы
// используемые в это время в других потоках..
// askLst.erase(askIterator);
}
......@@ -285,7 +285,7 @@ void IONotifyController::ask( AskMap& askLst, const UniSetTypes::ObjectId sid,
}
}
// ------------------------------------------------------------------------------------------
bool IONotifyController::myIOFilter( const USensorInfo& ai,
bool IONotifyController::myIOFilter( const USensorInfo& ai,
CORBA::Long newvalue, UniSetTypes::ObjectId sup_id )
{
if( ai.value == newvalue )
......@@ -307,7 +307,7 @@ void IONotifyController::localSetValue( IOController::IOStateList::iterator& li,
}
catch( IOController_i::Undefined )
{
// чтобы сработало prevValue!=value
// чтобы сработало prevValue!=value
// искусственно меняем значение
prevValue = value+1;
}
......@@ -316,7 +316,7 @@ void IONotifyController::localSetValue( IOController::IOStateList::iterator& li,
if( li == myioEnd() ) // ???
{
ostringstream err;
err << myname << "(localSetValue): вход(выход) с именем "
err << myname << "(localSetValue): вход(выход) с именем "
<< conf->oind->getNameById(sid) << " не найден";
uinfo << err.str() << endl;
......@@ -412,7 +412,7 @@ void IONotifyController::send( ConsumerListInfo& lst, UniSetTypes::SensorMessage
}
catch( CORBA::SystemException& ex )
{
uwarn << myname << "(IONotifyController::send): "
uwarn << myname << "(IONotifyController::send): "
<< conf->oind->getNameById(li->id) << "@" << li->node << " (CORBA::SystemException): "
<< ex.NP_minorString() << endl;
}
......@@ -456,7 +456,7 @@ void IONotifyController::readDump()
restorer->read(this);
}
catch(Exception& ex)
{
{
uwarn << myname << "(IONotifyController::readDump): " << ex << endl;
}
}
......@@ -502,15 +502,15 @@ void IONotifyController::dumpThresholdList( const UniSetTypes::ObjectId sid, con
restorer->dumpThreshold(this,inf,lst);
}
catch(Exception& ex)
{
{
uwarn << myname << "(IONotifyController::dumpThresholdList): " << ex << endl;
}
}
// --------------------------------------------------------------------------------------------------------------
void IONotifyController::askThreshold(UniSetTypes::ObjectId sid, const UniSetTypes::ConsumerInfo& ci,
void IONotifyController::askThreshold(UniSetTypes::ObjectId sid, const UniSetTypes::ConsumerInfo& ci,
UniSetTypes::ThresholdId tid,
CORBA::Long lowLimit, CORBA::Long hiLimit, CORBA::Boolean invert,
CORBA::Long lowLimit, CORBA::Long hiLimit, CORBA::Boolean invert,
UniversalIO::UIOCommand cmd )
{
if( lowLimit > hiLimit )
......@@ -529,7 +529,7 @@ void IONotifyController::askThreshold(UniSetTypes::ObjectId sid, const UniSetTyp
{ // lock
uniset_rwmutex_wrlock lock(trshMutex);
// поиск датчика в списке
// поиск датчика в списке
auto it = askTMap.find(sid);
ThresholdInfoExt ti(tid,lowLimit,hiLimit,invert);
......@@ -590,7 +590,7 @@ void IONotifyController::askThreshold(UniSetTypes::ObjectId sid, const UniSetTyp
if( cmd == UniversalIO::UIONotifyChange )
break;
// посылка первый раз состояния
// посылка первый раз состояния
try
{
SensorMessage sm;
......@@ -666,11 +666,11 @@ void IONotifyController::askThreshold(UniSetTypes::ObjectId sid, const UniSetTyp
break;
}
} // unlock
}
}
// --------------------------------------------------------------------------------------------------------------
bool IONotifyController::addThreshold( ThresholdExtList& lst, ThresholdInfoExt&& ti, const UniSetTypes::ConsumerInfo& ci )
{
for( auto it=lst.begin(); it!=lst.end(); ++it)
for( auto it=lst.begin(); it!=lst.end(); ++it)
{
if( ti==(*it) )
{
......@@ -686,7 +686,7 @@ bool IONotifyController::addThreshold( ThresholdExtList& lst, ThresholdInfoExt&&
// запоминаем начальное время
struct timeval tm;
struct timezone tz;
tm.tv_sec = 0;
tm.tv_sec = 0;
tm.tv_usec = 0;
gettimeofday(&tm,&tz);
ti.tv_sec = tm.tv_sec;
......@@ -698,7 +698,7 @@ bool IONotifyController::addThreshold( ThresholdExtList& lst, ThresholdInfoExt&&
// --------------------------------------------------------------------------------------------------------------
bool IONotifyController::removeThreshold( ThresholdExtList& lst, ThresholdInfoExt& ti, const UniSetTypes::ConsumerInfo& ci )
{
for( auto it=lst.begin(); it!=lst.end(); ++it)
for( auto it=lst.begin(); it!=lst.end(); ++it)
{
if( ti == (*it) )
{
......@@ -763,7 +763,7 @@ void IONotifyController::checkThreshold( IOStateList::iterator& li,
{
uniset_rwmutex_rlock l(lst->second.mut);
for( auto it=lst->second.list.begin(); it!=lst->second.list.end(); ++it )
for( auto it=lst->second.list.begin(); it!=lst->second.list.end(); ++it )
{
// Используем здесь значение скопированное в sm.value
// чтобы не делать ещё раз lock на li->second.value
......@@ -833,7 +833,7 @@ IONotifyController::ThresholdExtList::iterator IONotifyController::findThreshold
if( lst!=askTMap.end() )
{
for( auto it=lst->second.list.begin(); it!=lst->second.list.end(); ++it)
for( auto it=lst->second.list.begin(); it!=lst->second.list.end(); ++it)
{
if( it->id == tid )
return it;
......@@ -852,7 +852,7 @@ IONotifyController_i::ThresholdInfo IONotifyController::getThresholdInfo( UniSet
if( it == askTMap.end() )
{
ostringstream err;
err << myname << "(getThresholds): Not found sensor (" << sid << ") "
err << myname << "(getThresholds): Not found sensor (" << sid << ") "
<< conf->oind->getNameById(sid);
uinfo << err.str() << endl;
......@@ -866,7 +866,7 @@ IONotifyController_i::ThresholdInfo IONotifyController::getThresholdInfo( UniSet
}
ostringstream err;
err << myname << "(getThresholds): Not found for sensor (" << sid << ") "
err << myname << "(getThresholds): Not found for sensor (" << sid << ") "
<< conf->oind->getNameById(sid) << " ThresholdID='" << tid << "'";
uinfo << err.str() << endl;
......@@ -881,7 +881,7 @@ IONotifyController_i::ThresholdList* IONotifyController::getThresholds( UniSetTy
if( it == askTMap.end() )
{
ostringstream err;
err << myname << "(getThresholds): Not found sensor (" << sid << ") "
err << myname << "(getThresholds): Not found sensor (" << sid << ") "
<< conf->oind->getNameById(sid);
uinfo << err.str() << endl;
......@@ -898,7 +898,7 @@ IONotifyController_i::ThresholdList* IONotifyController::getThresholds( UniSetTy
}
catch( Exception& ex )
{
uwarn << myname << "(getThresholdsList): для датчика "
uwarn << myname << "(getThresholdsList): для датчика "
<< conf->oind->getNameById(it->second.si.id)
<< " " << ex << endl;
}
......@@ -940,7 +940,7 @@ IONotifyController_i::ThresholdsListSeq* IONotifyController::getThresholdsList()
}
catch(Exception& ex)
{
uwarn << myname << "(getThresholdsList): для датчика "
uwarn << myname << "(getThresholdsList): для датчика "
<< conf->oind->getNameById(it->second.si.id)
<< " " << ex << endl;
continue;
......@@ -972,7 +972,7 @@ void IONotifyController::onChangeUndefinedState( IOStateList::iterator& lit, IOC
SensorMessage sm;
// эти поля можно копировать без lock, т.к. они не меняются
sm.id = it.si.id;
sm.id = it.si.id;
sm.node = it.si.node;
sm.undefined = it.undefined;
sm.priority = (Message::Priority)it.priority;
......
......@@ -49,12 +49,12 @@ IONotifyController_LT::~IONotifyController_LT()
// ------------------------------------------------------------------------------------------
void IONotifyController_LT::callback()
{
// При реализации с использованием waitMessage() каждый раз при вызове askTimer() необходимо
// проверять возвращаемое значение на UniSetTimers::WaitUpTime и вызывать termWaiting(),
// чтобы избежать ситуации, когда процесс до заказа таймера 'спал'(в функции waitMessage()) и после
// При реализации с использованием waitMessage() каждый раз при вызове askTimer() необходимо
// проверять возвращаемое значение на UniSetTimers::WaitUpTime и вызывать termWaiting(),
// чтобы избежать ситуации, когда процесс до заказа таймера 'спал'(в функции waitMessage()) и после
// заказа продолжит спать(т.е. обработчик вызван не будет)...
try
{
{
if( waitMessage(msg, sleepTime) )
processingMessage(&msg);
......
......@@ -96,13 +96,13 @@ void NCRestorer_XML::init( const std::string& fname )
}
}
// ------------------------------------------------------------------------------------------
void NCRestorer_XML::dump(const IONotifyController* ic, SInfo& inf,
void NCRestorer_XML::dump(const IONotifyController* ic, SInfo& inf,
const IONotifyController::ConsumerListInfo& lst)
{
uwarn << "NCRestorer_XML::dump NOT SUPPORT!!!!" << endl;
}
// ------------------------------------------------------------------------------------------
void NCRestorer_XML::dumpThreshold(const IONotifyController* ic, SInfo& inf,
void NCRestorer_XML::dumpThreshold(const IONotifyController* ic, SInfo& inf,
const IONotifyController::ThresholdExtList& lst)
{
uwarn << "NCRestorer_XML::dumpThreshold NOT SUPPORT!!!!" << endl;
......@@ -312,7 +312,7 @@ bool NCRestorer_XML::getSensorInfo( const UniXML& xml, xmlNode* it, SInfo& inf )
inf.d_si.id = conf->getSensorID(d_txt);
if( inf.d_si.id == UniSetTypes::DefaultObjectId )
{
ucrit << "(NCRestorer_XML:getSensorInfo): sensor='"
ucrit << "(NCRestorer_XML:getSensorInfo): sensor='"
<< xml.getProp(it,"name") << "' err: "
<< " Unknown SensorID for depend='" << d_txt
<< endl;
......@@ -343,7 +343,7 @@ void NCRestorer_XML::read_thresholds(const UniXML& xml, xmlNode* node, IONotifyC
NCRestorer_XML::SInfo inf;
if( !getSensorInfo(xml,it.getCurrent(),inf) )
{
uwarn << ic->getName()
uwarn << ic->getName()
<< "(read_thresholds): не смог получить информацию по датчику" << endl;
continue;
}
......@@ -360,17 +360,17 @@ void NCRestorer_XML::read_thresholds(const UniXML& xml, xmlNode* node, IONotifyC
IONotifyController::ThresholdInfoExt ti(0,0,0,0);
if( !getThresholdInfo(xml,tit,ti) )
{
uwarn << ic->getName()
uwarn << ic->getName()
<< "(read_thresholds): не смог получить информацию о пороге"
<< " для датчика "
<< conf->oind->getNameById(inf.si.id) << endl;
continue;
}
uinfo << "(read_thresholds): \tthreshold low="
uinfo << "(read_thresholds): \tthreshold low="
<< ti.lowlimit << " \thi=" << ti.hilimit
<< " \t sid=" << ti.sid
<< " \t invert=" << ti.invert
<< " \t sid=" << ti.sid
<< " \t invert=" << ti.invert
<< endl << flush;
xmlNode* cnode = find_node(xml,tit,"consumers","");
......@@ -381,9 +381,9 @@ void NCRestorer_XML::read_thresholds(const UniXML& xml, xmlNode* node, IONotifyC
{
if( !getConsumerList(xml,ask_it,ti.clst) )
{
uwarn << ic->getName()
uwarn << ic->getName()
<< "(read_thresholds): не смог получить список заказчиков"
<< " для порога " << ti.id
<< " для порога " << ti.id
<< " датчика " << conf->oind->getNameById(inf.si.id) << endl;
}
}
......@@ -399,7 +399,7 @@ void NCRestorer_XML::read_thresholds(const UniXML& xml, xmlNode* node, IONotifyC
}
// ------------------------------------------------------------------------------------------
void NCRestorer_XML::read_consumers( const UniXML& xml, xmlNode* it,
void NCRestorer_XML::read_consumers( const UniXML& xml, xmlNode* it,
NCRestorer_XML::SInfo&& inf, IONotifyController* ic )
{
// в новых ask-файлах список выделен <consumers>...</consumers>,
......@@ -417,7 +417,7 @@ void NCRestorer_XML::read_consumers( const UniXML& xml, xmlNode* it,
}
// ------------------------------------------------------------------------------------------
bool NCRestorer_XML::getConsumerList( const UniXML& xml, xmlNode* node,
bool NCRestorer_XML::getConsumerList( const UniXML& xml, xmlNode* node,
IONotifyController::ConsumerListInfo& lst )
{
UniXML_iterator it(node);
......@@ -439,7 +439,7 @@ bool NCRestorer_XML::getConsumerList( const UniXML& xml, xmlNode* node,
}
// ------------------------------------------------------------------------------------------
bool NCRestorer_XML::getThresholdInfo( const UniXML& xml,xmlNode* node,
bool NCRestorer_XML::getThresholdInfo( const UniXML& xml,xmlNode* node,
IONotifyController::ThresholdInfoExt& ti )
{
UniXML_iterator uit(node);
......@@ -450,7 +450,7 @@ bool NCRestorer_XML::getThresholdInfo( const UniXML& xml,xmlNode* node,
ti.sid = conf->getSensorID(sid_name);
if( ti.sid == UniSetTypes::DefaultObjectId )
{
ucrit << "(NCRestorer_XML:getThresholdInfo): "
ucrit << "(NCRestorer_XML:getThresholdInfo): "
<< " Not found ID for " << sid_name << endl;
}
else
......
......@@ -71,7 +71,7 @@ void PassiveSysTimer::init()
{
cerr << "PassiveSysTimer: error sigaction" << endl;
throw NotSetSignal("PassiveTimer: errir sigaction");
}
}
*/
}
// ------------------------------------------------------------------------------------------
......@@ -101,7 +101,7 @@ bool PassiveSysTimer::wait(timeout_t timeMS)
{
cerr << "PassiveSysTimer: error sigaction" << endl;
return false;
}
}
// if ( !terminated )
......@@ -110,7 +110,7 @@ bool PassiveSysTimer::wait(timeout_t timeMS)
timeout_t sec;
timeout_t msec;
if (timeMS == WaitUpTime)
{
sec=15*60; // 15min
......@@ -129,7 +129,7 @@ bool PassiveSysTimer::wait(timeout_t timeMS)
setitimer( ITIMER_REAL, &mtimer, (struct itimerval *)0 );
PassiveTimer::setTiming(timeMS); // вызываем для совместимости с обычным PassiveTimer-ом
sigset_t mask, oldmask;
sigemptyset(&mask);
......@@ -146,7 +146,7 @@ bool PassiveSysTimer::wait(timeout_t timeMS)
terminated = 1;
sigprocmask( SIG_UNBLOCK, &mask, NULL );
// cout << "PassiveSysTimer: time ok"<< endl;
return true;
}
......@@ -158,21 +158,21 @@ bool PassiveSysTimer::wait(timeout_t timeMS)
struct itimerspec val;
struct tm do_time;
timer_t t_id;
sigemptyset(&sigv.sa_mask);
sigv.sa_flags = SA_SIGINFO;
sigv.sa_sigaction = call;
if (sigaction (SIGUSR1, &sigv, 0) == -1)
{
cerr << "Timer: sigaction" << endl;
return -1;
}
sigx.sigev_notify = SIGEV_SIGNAL;
sigx.sigev_signo = SIGUSR1;
sigx.sigev_value.sival_int = timeMS;
if ( timer_create(CLOCK_REALTIME, &sigx, &t_id) == -1 )
{
cerr << "Timer: timer create" << endl;
......@@ -181,7 +181,7 @@ bool PassiveSysTimer::wait(timeout_t timeMS)
int sec=timeMS/1000;
int micsec=(timeMS%1000)*1000;
val.it_value.tv_sec = sec;
val.it_value.tv_nsec= micsec;
val.it_interval.tv_sec = sec;
......@@ -197,6 +197,6 @@ bool PassiveSysTimer::wait(timeout_t timeMS)
{
cerr << "Timer: timer delete" << endl;
}
return 0;
*/
......@@ -37,10 +37,10 @@ void WaitingPassiveTimer::checkCount()
{
char err[200];
sprintf(err,"LimitThrPassiveTimers: превышено максимальное количество таймеров %d", MAX_COUNT_THRPASSIVE_TIMERS);
throw LimitWaitingPTimers(err);
throw LimitWaitingPTimers(err);
}
countTimers++;
countTimers++;
}
WaitingPassiveTimer::WaitingPassiveTimer()throw(LimitWaitingPTimers):
......@@ -86,26 +86,26 @@ void WaitingPassiveTimer::work()
terminated = false;
while( !terminated )
{
usleep(sleepMKS);
usleep(sleepMKS);
if ( checkTime() )
break;
}
terminated = true;
if(pValue != NULL)
*pValue ^= true;
/*
/*
if(pCall!=NULL)
{
pCall();
}
*/
*/
/*
check = false;
pause();
check = true;
*/
*/
stop();
// cout << "Timer: завершил поток..."<< endl;
}
......
......@@ -66,7 +66,7 @@ ostream& UniSetTypes::Configuration::help(ostream& os)
print_help(os,25,"--uniport num","использовать заданный порт (переопеределяет 'defaultport' заданный в конф. файле в разделе <nodes>)\n");
print_help(os,25,"--localIOR {1,0}","использовать локальные файлы для получения IOR (т.е. не использовать omniNames). Переопределяет параметр в конфигурационном файле.\n");
print_help(os,25,"--transientIOR {1,0}","использовать генерируемые IOR(не постоянные). Переопределяет параметр в конфигурационном файле. Default=1\n");
return os << "\nПример использования:\t myUniSetProgram "
<< "--ulog-add-levels level1,info,system,warn --ulog-log-in-file myprogrpam.log\n\n";
}
......@@ -80,7 +80,7 @@ namespace UniSetTypes
Configuration::Configuration():
oind(NULL),
NSName("NameService"),
repeatCount(2),repeatTimeout(100),
repeatCount(2),repeatTimeout(100),
localDBServer(UniSetTypes::DefaultObjectId),
localNode(UniSetTypes::DefaultObjectId),
localNodeName(""),
......@@ -124,7 +124,7 @@ Configuration::Configuration( int argc, const char* const* argv, ObjectIndex* _o
_argc(argc),
_argv(argv),
NSName("NameService"),
repeatCount(2),repeatTimeout(100),
repeatCount(2),repeatTimeout(100),
localDBServer(UniSetTypes::DefaultObjectId),
localNode(UniSetTypes::DefaultObjectId),
localNodeName(""),
......@@ -143,7 +143,7 @@ Configuration::Configuration( int argc, const char* const* argv, const string& f
_argc(argc),
_argv(argv),
NSName("NameService"),
repeatCount(2),repeatTimeout(100),
repeatCount(2),repeatTimeout(100),
localDBServer(UniSetTypes::DefaultObjectId),
localNode(UniSetTypes::DefaultObjectId),
localNodeName(""),
......@@ -203,7 +203,7 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
// cerr << "*************** initConfiguration: xmlOpen: " << pt.getCurrent() << " msec " << endl;
// pt.reset();
// Init ObjectIndex interface
{
if( oind == NULL )
......@@ -229,7 +229,7 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
}
}
}
// Настраиваем отладочные логи
initDebug(ulog,"UniSetDebug");
......@@ -294,7 +294,7 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
ostringstream uri;
uri << "corbaname::" << it.host << ":" << it.port;
if( !omni::omniInitialReferences::setFromArgs(name.c_str(), uri.str().c_str()) )
cerr << "**********************!!!! FAILED ADD name=" << name << " uri=" << uri.str() << endl;
cerr << "**********************!!!! FAILED ADD name=" << name << " uri=" << uri.str() << endl;
assert( i < _argc );
}
......@@ -329,12 +329,12 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
ostringstream uri;
uri << "corbaname::" << getProp(nsnode,"host") << ":" << defPort;
if( !omni::omniInitialReferences::setFromArgs(ns_name.str().c_str(), uri.str().c_str()) )
cerr << "**********************!!!! FAILED ADD name=" <<ns_name << " uri=" << uri.str() << endl;
cerr << "**********************!!!! FAILED ADD name=" <<ns_name << " uri=" << uri.str() << endl;
}
}
_argv = new_argv;
// ------------- CORBA INIT -------------
// ------------- CORBA INIT -------------
// orb init
orb = CORBA::ORB_init(_argc,(char**)_argv);
// create policy
......@@ -357,10 +357,10 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
pl[1] = root_poa->create_servant_retention_policy(PortableServer::RETAIN);
pl[2] = root_poa->create_request_processing_policy(PortableServer::USE_ACTIVE_OBJECT_MAP_ONLY);
// pl[3] = root_poa->create_thread_policy(PortableServer::SINGLE_THREAD_MODEL);
}
}
policyList = pl;
// ---------------------------------------
// ---------------------------------------
}
catch( Exception& ex )
......@@ -663,7 +663,7 @@ void Configuration::createNodesList()
initNode(ninf, it);
uinfo << "Configuration(createNodesList): add to list of nodes: node=" << nodename << " id=" << ninf.id << endl;
lnodes.push_back(ninf);
}
}
uinfo << "Configuration(createNodesList): size of node list " << lnodes.size() << endl;
}
......@@ -957,7 +957,7 @@ UniversalIO::IOType Configuration::getIOType( UniSetTypes::ObjectId id )
UniversalIO::IOType Configuration::getIOType( const std::string& name )
{
// Если указано "короткое" имя
// то просто сперва ищём ID, а потом по нему
// то просто сперва ищём ID, а потом по нему
// iotype
ObjectId id = getSensorID(name);
if( id != DefaultObjectId )
......
......@@ -38,21 +38,21 @@ static error_item errorTags[] = {
{ Debug::LEVEL2, "level2", ("UniSet debug level2")},
{ Debug::LEVEL3, "level3", ("UniSet debug level3")},
{ Debug::LEVEL4, "level4", ("UniSet debug level4")},
{ Debug::LEVEL5, "level5", ("UniSet debug level5")},
{ Debug::LEVEL5, "level5", ("UniSet debug level5")},
{ Debug::LEVEL6, "level6", ("UniSet debug level6")},
{ Debug::LEVEL7, "level7", ("UniSet debug level7")},
{ Debug::LEVEL8, "level8", ("UniSet debug level8")},
{ Debug::LEVEL9, "level9", ("UniSet debug level9")},
{ Debug::LEVEL9, "level9", ("UniSet debug level9")},
{ Debug::REPOSITORY,"repository",("UniSet repository messages")},
{ Debug::ANY, "any", ("All debugging messages")},
{ Debug::EXCEPTION, "exception", ("Exception debug messages")},
};
static const int numErrorTags = sizeof(errorTags)/sizeof(error_item);
Debug::type const Debug::ANY = Debug::type(
Debug::INFO | Debug::INIT | Debug::WARN | Debug::CRIT |
Debug::LEVEL1 | Debug::LEVEL2 | Debug::LEVEL3 | Debug::LEVEL4 |
......@@ -71,13 +71,13 @@ Debug::type Debug::value(string const & val)
string tmp(v.substr(0, st));
if (tmp.empty())
break;
// Is it a number?
//if (isStrInt(tmp))
//if (isStrInt(tmp))
// l |= static_cast<type>(strToInt(tmp));
//else
// Search for an explicit name
for (int i = 0 ; i < numErrorTags ; ++i)
for (int i = 0 ; i < numErrorTags ; ++i)
if (tmp == errorTags[i].name) {
l |= errorTags[i].level;
break;
......@@ -112,7 +112,7 @@ void Debug::showTags(ostream & os)
std::ostream& operator<<(std::ostream& os, Debug::type level )
{
for (int i = 0 ; i < numErrorTags ; ++i)
{
if( errorTags[i].level & level) // errorTags[i].level != Debug::ANY && errorTags[i].level != Debug::NONE
......
......@@ -216,7 +216,7 @@ const DebugStream& DebugStream::operator=( const DebugStream& r )
fname = r.fname;
if( !r.fname.empty() )
logFile(fname);
return *this;
}
//--------------------------------------------------------------------------
......@@ -243,7 +243,7 @@ std::ostream & DebugStream::debug(Debug::type t)
*this << "(" << std::setfill(' ') << std::setw(6) << t << "): "; // "):\t";
return *this;
}
return nullstream;
}
//--------------------------------------------------------------------------
......@@ -251,7 +251,7 @@ std::ostream& DebugStream::operator()(Debug::type t)
{
if(dt & t)
return *this;
return nullstream;
}
//--------------------------------------------------------------------------
......@@ -265,7 +265,7 @@ std::ostream& DebugStream::printDate(Debug::type t, char brk)
<< std::setw(2) << std::setfill('0') << tms->tm_mon+1 << brk
<< std::setw(4) << std::setfill('0') << tms->tm_year+1900;
}
return nullstream;
}
//--------------------------------------------------------------------------
......@@ -279,7 +279,7 @@ std::ostream& DebugStream::printTime(Debug::type t, char brk)
<< std::setw(2) << std::setfill('0') << tms->tm_min << brk
<< std::setw(2) << std::setfill('0') << tms->tm_sec;
}
return nullstream;
}
//--------------------------------------------------------------------------
......@@ -296,7 +296,7 @@ std::ostream& DebugStream::printDateTime(Debug::type t)
<< std::setw(2) << std::setfill('0') << tms->tm_min << ":"
<< std::setw(2) << std::setfill('0') << tms->tm_sec;
}
return nullstream;
}
//--------------------------------------------------------------------------
......
......@@ -159,7 +159,7 @@ timeout_t LT_Object::askTimer( UniSetTypes::TimerId timerid, timeout_t timeMS, c
}
else // отказ (при timeMS == 0)
{
uinfo << "(LT_askTimer): поступил отказ по таймеру id="<< timerid << endl;
uinfo << "(LT_askTimer): поступил отказ по таймеру id="<< timerid << endl;
{ // lock
uniset_rwmutex_wrlock lock(lstMutex);
tlst.erase( std::remove_if(tlst.begin(),tlst.end(),Timer_eq(timerid)), tlst.end() );
......
......@@ -6,7 +6,7 @@ noinst_LTLIBRARIES = libVarious.la
libVarious_la_CPPFLAGS = $(SIGC_CFLAGS) $(COMCPP_CFLAGS)
libVarious_la_LIBADD = $(SIGC_LIBS) $(COMCPP_LIBS)
libVarious_la_SOURCES = DebugStream.cc Debug.cc UniXML.cc MessageType.cc Configuration.cc \
Restorer_XML.cc RunLock.cc Mutex.cc SViewer.cc SMonitor.cc LT_Object.cc WDTInterface.cc
Restorer_XML.cc RunLock.cc Mutex.cc SViewer.cc SMonitor.cc LT_Object.cc WDTInterface.cc
local-clean:
rm -rf *iSK.cc
......@@ -90,7 +90,7 @@ tid(UniSetTypes::DefaultThresholdId)
}
SensorMessage::SensorMessage(ObjectId id, long value, const IOController_i::CalibrateInfo& ci,
Priority priority,
Priority priority,
UniversalIO::IOType st, ObjectId consumer):
id(id),
value(value),
......@@ -102,7 +102,7 @@ tid(UniSetTypes::DefaultThresholdId)
{
type = Message::SensorInfo;
this->priority = priority;
this->consumer = consumer;
this->consumer = consumer;
sm_tv_sec = tm.tv_sec;
sm_tv_usec = tm.tv_usec;
}
......@@ -154,7 +154,7 @@ TimerMessage::TimerMessage(const VoidMessage *msg):
memcpy(this,msg,sizeof(*this));
assert(this->type == Message::Timer);
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
ConfirmMessage::ConfirmMessage( const VoidMessage *msg ):
Message(1) // вызываем dummy-конструктор, который не инициализирует данные (оптимизация)
{
......@@ -180,7 +180,7 @@ ConfirmMessage::ConfirmMessage(long in_sensor_id,
priority = in_priority;
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
} // end of namespace UniSetTypes
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
......@@ -87,7 +87,7 @@ uniset_mutex_lock::uniset_mutex_lock( uniset_mutex& m, const time_t timeMS ):
{
if( !mutex->name().empty() )
{
ulog9 << "(mutex_lock): вышло заданное время ожидания "
ulog9 << "(mutex_lock): вышло заданное время ожидания "
<< timeMS << " msec для " << mutex->name() << endl;
}
return;
......
......@@ -79,7 +79,7 @@ bool Restorer_XML::getConsumerInfo( UniXML_iterator& it,
cname = conf->getServicesSection()+"/"+cname;
else
{
uwarn << "(Restorer_XML:getConsumerInfo): неизвестный тип объекта "
uwarn << "(Restorer_XML:getConsumerInfo): неизвестный тип объекта "
<< otype << endl;
return false;
}
......@@ -87,7 +87,7 @@ bool Restorer_XML::getConsumerInfo( UniXML_iterator& it,
cid = conf->oind->getIdByName(cname);
if( cid == UniSetTypes::DefaultObjectId )
{
ucrit << "(Restorer_XML:getConsumerInfo): НЕ НАЙДЕН ИДЕНТИФИКАТОР заказчика -->"
ucrit << "(Restorer_XML:getConsumerInfo): НЕ НАЙДЕН ИДЕНТИФИКАТОР заказчика -->"
<< cname << endl;
return false;
}
......@@ -100,7 +100,7 @@ bool Restorer_XML::getConsumerInfo( UniXML_iterator& it,
if( cnode == UniSetTypes::DefaultObjectId )
{
ucrit << "(Restorer_XML:getConsumerInfo): НЕ НАЙДЕН ИДЕНТИФИКАТОР узла -->"
ucrit << "(Restorer_XML:getConsumerInfo): НЕ НАЙДЕН ИДЕНТИФИКАТОР узла -->"
<< cnodename << endl;
return false;
}
......@@ -119,7 +119,7 @@ bool Restorer_XML::check_consumer_item( UniXML_iterator& it )
return UniSetTypes::check_filter(it,c_filterField,c_filterValue);
}
// -----------------------------------------------------------------------------
xmlNode* Restorer_XML::find_node( const UniXML& xml, xmlNode* root,
xmlNode* Restorer_XML::find_node( const UniXML& xml, xmlNode* root,
const string& nodename, const string& nm )
{
UniXML_iterator it(root);
......@@ -131,7 +131,7 @@ xmlNode* Restorer_XML::find_node( const UniXML& xml, xmlNode* root,
{
if( nm.empty() )
return it;
if( xml.getProp(it, "name") == nm )
return it;
}
......
......@@ -42,18 +42,18 @@ RunLock::~RunLock()
bool RunLock::isLocked(const string& name)
{
FILE *out = fopen( string(name + ".lock" ).c_str(), "r" );
if( out )
if( out )
{
char ptr[10];
fscanf( out, "%9s", ptr );
DIR *d = opendir( "/proc" );
dirent *dir;
while((dir = readdir(d)))
{
if( !strcmp( ptr, dir->d_name ) )
{
// по хорошему здесь надо бы проверять
// по хорошему здесь надо бы проверять
// статус на зомби
/*
string path(dir->d_name);
......@@ -70,19 +70,19 @@ bool RunLock::isLocked(const string& name)
break;
}
}
*/
*/
uinfo << "(RunLock): programm " << name << " already run" << endl;
fclose(out);
closedir(d);
return true;
}
}
}
fclose(out);
closedir(d);
}
return false;
}
// --------------------------------------------------------------------------
......@@ -90,7 +90,7 @@ bool RunLock::lock( const string& name )
{
if( !isLocked(name) )
{
FILE *out = fopen( string(name + ".lock" ).c_str(), "w+" );
FILE *out = fopen( string(name + ".lock" ).c_str(), "w+" );
if(out)
{
fprintf( out, "%d\n", getpid() );
......@@ -98,14 +98,14 @@ bool RunLock::lock( const string& name )
return true;
}
}
return false;
}
// --------------------------------------------------------------------------
bool RunLock::unlock(const string& name)
{
string fname(name + ".lock");
FILE *out = fopen( fname.c_str(), "r" );
FILE *out = fopen( fname.c_str(), "r" );
if( out )
{
fclose(out);
......
......@@ -21,8 +21,8 @@ SMonitor::SMonitor(ObjectId id):
script("")
{
string sid(conf->getArgParam("--sid"));
lst = UniSetTypes::getSInfoList(sid,UniSetTypes::conf);
lst = UniSetTypes::getSInfoList(sid,UniSetTypes::conf);
if( lst.empty() )
throw SystemError("Не задан список датчиков (--sid)");
......@@ -84,7 +84,7 @@ void SMonitor::sysCommand( const SystemMessage *sm )
// ------------------------------------------------------------------------------------------
void SMonitor::sensorInfo( const SensorMessage* si )
{
cout << "(" << setw(6) << si->id << "): " << setw(8) << timeToString(si->sm_tv_sec,":")
cout << "(" << setw(6) << si->id << "): " << setw(8) << timeToString(si->sm_tv_sec,":")
<< "(" << setw(6) << si->sm_tv_usec << "): ";
cout << setw(45) << conf->oind->getMapName(si->id);
cout << "\tvalue=" << si->value << "\tfvalue=" << ( (float)si->value / pow(10.0,si->ci.precision) ) << endl;
......@@ -97,7 +97,7 @@ void SMonitor::sensorInfo( const SensorMessage* si )
if( script[0] == '.' || script[0] == '/' )
cmd << script;
else
cmd << conf->getBinDir() << script;
cmd << conf->getBinDir() << script;
cmd << " " << si->id << " " << si->value << " " << si->sm_tv_sec << " " << si->sm_tv_usec;
......
......@@ -50,7 +50,7 @@ SViewer::~SViewer()
void SViewer::on_SViewer_destroy()
{
// activator->oakill(SIGINT);
// activator->oakill(SIGINT);
// msleep(500);
// activator->oakill(SIGKILL);
}
......@@ -82,14 +82,14 @@ void SViewer::view()
void SViewer::readSection( const string& section, const string& secRoot )
{
ListObjectName lst;
string curSection;
string curSection;
try
{
if ( secRoot.empty() )
curSection = section;
else
curSection=secRoot+"/"+section;
// cout << " read sectionlist ..."<< endl;
if( !rep.listSections(curSection, &lst, 1000) )
{
......@@ -102,7 +102,7 @@ void SViewer::readSection( const string& section, const string& secRoot )
cout << "(readSection): get sectionlist ... catch..." << endl;
}
if( !lst.empty() )
if( !lst.empty() )
{
for ( ListObjectName::const_iterator li=lst.begin();li!=lst.end();++li)
{
......@@ -184,7 +184,7 @@ void SViewer::getInfo( ObjectId id )
IOController_i::SensorInfoSeq_var amap = ioc->getSensorsMap();
IONotifyController_i::ThresholdsListSeq_var tlst = ioc->getThresholdsList();
try
{ updateSensors(amap, id);
}catch(...){}
......@@ -226,7 +226,7 @@ void SViewer::updateSensors( IOController_i::SensorInfoSeq_var& amap, UniSetType
printInfo( amap[i].si.id, name, amap[i].value, owner, txtname, "AI");
}
}
cout << "------------------------------------------------------\n";
cout << "------------------------------------------------------\n";
cout << "\n======================================================\n" << owner;
cout << "\t Выходы";
......@@ -242,7 +242,7 @@ void SViewer::updateSensors( IOController_i::SensorInfoSeq_var& amap, UniSetType
printInfo( amap[i].si.id, name, amap[i].value, owner, txtname, "AO");
}
}
cout << "------------------------------------------------------\n";
cout << "------------------------------------------------------\n";
}
// ---------------------------------------------------------------------------
......@@ -276,7 +276,7 @@ void SViewer::updateThresholds( IONotifyController_i::ThresholdsListSeq_var& tls
if( isShort )
sname = ORepHelpers::getShortName(sname);
cout << " | " << setw(60) << sname << " | " << setw(5) << tlst[i].value << endl;
cout << " | " << setw(60) << sname << " | " << setw(5) << tlst[i].value << endl;
int m = tlst[i].tlist.length();
for( unsigned int k=0; k<m; k++ )
......
......@@ -106,7 +106,7 @@ void UniXML::close()
xmlFreeDoc(doc);
doc=0;
}
filename = "";
}
......@@ -121,7 +121,7 @@ string UniXML::getProp(const xmlNode* node, const string& name)
const char * text = (const char*)::xmlGetProp((xmlNode*)node, (const xmlChar*)name.c_str());
if( text == NULL )
return "";
string t(text);
xmlFree( (void*)text );
return t;
......@@ -137,7 +137,7 @@ int UniXML::getPIntProp(const xmlNode* node, const string& name, int def )
string param = getProp(node,name);
if( param.empty() )
return def;
return UniSetTypes::uni_atoi(param);
}
......@@ -173,7 +173,7 @@ xmlNode* UniXML::copyNode(xmlNode* node, int recursive)
/*! \bug Почему-то портятся русские имена (точнее становятся UTF8)
независимо от текущей локали файла
спасает только такое вот дополнительное копирование списка свойств
\bug Непонятный параметр 'target'
\bug Непонятный параметр 'target'
- при указании NULL нормально работает
- при указании copynode - проблеммы с русским при сохранении
- при указании node - SEGFAULT при попытке удалить исходный(node) узел
......@@ -323,7 +323,7 @@ bool UniXML_iterator::goThrowNext()
return goThrowNext();
return true;
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
bool UniXML_iterator::goPrev()
{
if( !curNode ) // || !curNode->prev )
......@@ -335,33 +335,33 @@ bool UniXML_iterator::goPrev()
return goPrev();
return true;
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
bool UniXML_iterator::canPrev()
{
if( !curNode || !curNode->prev )
return false;
return true;
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
bool UniXML_iterator::canNext()
{
if (!curNode || !curNode->next )
return false;
return true;
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
bool UniXML_iterator::goParent()
{
if( !curNode )
return false;
if( !curNode->parent )
return false;
curNode = curNode->parent;
return true;
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
bool UniXML_iterator::goChildren()
{
if (!curNode || !curNode->children )
......@@ -422,9 +422,9 @@ void UniXML_iterator::setProp( const string& name, const string& text )
UniXML::setProp(curNode, name, text);
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
bool UniXML_iterator::findName( const std::string& node, const std::string& searchname )
{
{
while( this->find(node) )
{
if ( searchname == getProp("name") )
......@@ -435,47 +435,47 @@ bool UniXML_iterator::findName( const std::string& node, const std::string& sear
return false;
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
bool UniXML_iterator::find( const std::string& searchnode )
{
{
// Функция ищет "в ширину и в глубь"
xmlNode* rnode = curNode;
while (curNode != NULL)
{
{
while( curNode->children )
{
curNode = curNode->children;
if ( searchnode == (const char*)curNode->name )
return true;
}
while( !curNode->next && curNode->parent )
{
{
// выше исходного узла "подыматься" нельзя
if( curNode == rnode )
break;
break;
curNode = curNode->parent;
}
curNode = curNode->next;
if ( curNode && searchnode == (const char*)curNode->name )
{
{
return true;
}
}
return false;
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
UniXML_iterator UniXML_iterator::operator++()
{
if (!curNode->next)
{
{
curNode=curNode->next;
return *this;
}
......@@ -486,7 +486,7 @@ UniXML_iterator UniXML_iterator::operator++()
if (getName() == "text" || getName() == "comment")
continue;
else
break;
break;
}
return *this;
......@@ -497,18 +497,18 @@ UniXML_iterator UniXML_iterator::operator++(int)
UniXML_iterator it = *this;
if (!curNode->next)
{
{
curNode=curNode->next;
return it;
}
for(;;)
{
curNode=curNode->next;
if (getName() == "text" || getName() == "comment")
continue;
else
break;
break;
}
return it;
......@@ -518,7 +518,7 @@ UniXML_iterator UniXML_iterator::operator++(int)
UniXML_iterator UniXML_iterator::operator--()
{
if (!curNode->prev)
{
{
curNode=curNode->prev;
return *this;
}
......@@ -529,7 +529,7 @@ UniXML_iterator UniXML_iterator::operator--()
if (getName() == "text" || getName() == "comment")
continue;
else
break;
break;
}
return *this;
......@@ -540,18 +540,18 @@ UniXML_iterator UniXML_iterator::operator--(int)
UniXML_iterator it = *this;
if (!curNode->prev)
{
{
curNode=curNode->prev;
return it;
}
for(;;)
{
curNode=curNode->prev;
if (getName() == "text" || getName() == "comment")
continue;
else
break;
break;
}
return it;
......
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
#include <iostream>
#include <cstring>
......@@ -43,7 +43,7 @@ bool WDTInterface::stop()
cerr << ": Unable to open device " << dev << " with err: " << strerror(errno) << endl;
return false;
}
write(fd, (void*)CMD_STOP, sizeof(CMD_STOP));
close(fd);
return true;
......
......@@ -28,7 +28,7 @@
int main()
{
UniXML* f = new UniXML();
f->newDoc("journal");
xmlNode *cur,*beg;
......
......@@ -21,12 +21,12 @@ int main(int argc, const char **argv)
// conf = new Configuration(argc, argv, confile);
for( int i=-5; i<4095; i+=100 )
{
cout << "raw=" << (817+i)
<< " cal=" << lcalibrate(817+i,817,4095,0,400)
<< " cal=" << lcalibrate(817+i,817,4095,0,400)
<< endl;
}
return 0;
}
catch(SystemError& err)
......@@ -41,6 +41,6 @@ int main(int argc, const char **argv)
{
cerr << "(calibration): catch(...)" << endl;
}
return 1;
}
......@@ -14,7 +14,7 @@ int main(int argc, const char **argv)
cout << "--confile - Configuration file. Default: test.xml" << endl;
return 0;
}
cout << "**** uni_atoi('')=" << uni_atoi("") << endl;
try
......@@ -23,7 +23,7 @@ int main(int argc, const char **argv)
conf = new Configuration(argc, argv, confile);
cout << "getLocalNode()=" << conf->getLocalNode() << endl;
string t(conf->oind->getTextName(1));
cout << "**** check getTextName: " << ( t.empty() ? "FAILED" : "OK" ) << endl;
......@@ -35,8 +35,8 @@ int main(int argc, const char **argv)
cout << "**** check getMapName: " << ( mn.empty() ? "FAILED" : "OK" ) << endl;
cout << "getSensorID(Input1_S): " << conf->getSensorID("Input1_S") << endl;
cout << "getSensorID(Input1_S): " << conf->getSensorID("Input1_S") << endl;
std::string iname = conf->oind->getNameById(1);
cout << "getNameById(1): " << iname << endl;
......@@ -45,11 +45,11 @@ int main(int argc, const char **argv)
UniversalIO::IOType t1=conf->getIOType(1);
cout << "**** getIOType for " << mn << endl;
cout << "**** check getIOType(id): (" << t1 << ") " << ( t1 == UniversalIO::UnknownIOType ? "FAILED" : "OK" ) << endl;
cout << "**** check getIOType(id): (" << t1 << ") " << ( t1 == UniversalIO::UnknownIOType ? "FAILED" : "OK" ) << endl;
UniversalIO::IOType t2=conf->getIOType(mn);
cout << "**** check getIOType(name): (" << t2 << ") " << ( t2 == UniversalIO::UnknownIOType ? "FAILED" : "OK" ) << endl;
cout << "**** check getIOType(name): (" << t2 << ") " << ( t2 == UniversalIO::UnknownIOType ? "FAILED" : "OK" ) << endl;
UniversalIO::IOType t3=conf->getIOType("Input1_S");
cout << "**** check getIOType(name): for short name 'Input1_S': (" << t3 << ") " << ( t3 == UniversalIO::UnknownIOType ? "FAILED" : "OK" ) << endl;
cout << "**** check getIOType(name): for short name 'Input1_S': (" << t3 << ") " << ( t3 == UniversalIO::UnknownIOType ? "FAILED" : "OK" ) << endl;
int i1 = uni_atoi("-100");
......@@ -57,7 +57,7 @@ int main(int argc, const char **argv)
int i2 = uni_atoi("20");
cout << "**** check uni_atoi: '20' " << ( ( i2 != 20 ) ? "FAILED" : "OK" ) << endl;
xmlNode* cnode = conf->getNode("testnode");
if( cnode == NULL )
{
......@@ -83,10 +83,10 @@ int main(int argc, const char **argv)
int prop5 = conf->getArgPInt("--prop-dummy",it.getProp("dummy"),0);
cerr << "**** check conf->getArgPInt(...,...,defval): " << ( (prop5 != 0) ? "[FAILED]" : "OK" ) << endl;
return 0;
}
catch(SystemError& err)
......@@ -101,6 +101,6 @@ int main(int argc, const char **argv)
{
cerr << "(conftest): catch(...)" << endl;
}
return 1;
}
......@@ -8,7 +8,7 @@ using namespace std;
int main()
{
// ----------------------
// ----------------------
// test DelayTimer
DelayTimer dtm(1000,500);
......@@ -85,14 +85,14 @@ int main()
if( !dtm2.check(true) )
{
cerr << "DelayTimer: TEST9 FAILED! " << endl;
return 1;
return 1;
}
cerr << "DelayTimer: TEST9 OK! " << endl;
if( dtm2.check(false) )
{
cerr << "DelayTimer: TEST10 FAILED! " << endl;
return 1;
return 1;
}
cerr << "DelayTimer: TEST10 OK! " << endl;
......@@ -106,7 +106,7 @@ int main()
if( dtm3.check(true) )
{
cerr << "DelayTimer: TEST11 FAILED! " << endl;
return 1;
return 1;
}
cerr << "DelayTimer: TEST11 OK! " << endl;
......@@ -114,7 +114,7 @@ int main()
if( !dtm3.check(true) )
{
cerr << "DelayTimer: TEST12 FAILED! " << endl;
return 1;
return 1;
}
cerr << "DelayTimer: TEST12 OK! " << endl;
......
......@@ -8,9 +8,9 @@ using namespace UniSetTypes;
int main( int argc, const char **argv )
{
DebugStream tlog;
tlog.addLevel(Debug::ANY);
tlog[Debug::INFO] << ": [info] ..." << endl;
tlog(Debug::INFO) << ": (info) ..." << endl;
cout << endl;
......
......@@ -9,7 +9,7 @@ using namespace std;
int main()
{
HourGlass hg;
hg.run(1000);
hg.rotate(true);
msleep(200);
......@@ -18,14 +18,14 @@ int main()
cerr << "HourGlass: TEST1 FAILED! " << endl;
return 1;
}
msleep(1000);
if( !hg.check() )
{
cerr << "HourGlass: TEST1 FAILED! " << endl;
return 1;
}
cout << "HourGlass: TEST1 OK!" << endl;
hg.rotate(false);
......
......@@ -24,12 +24,12 @@ void myf(xmlNode it)
{
cout<<it.name<<endl;
}
int main()
{
UniXML xml("iterator_test.xml");
UniXML::iterator it=xml.begin();
it.find("messages");
check( "Check find():", "messages", it.getName() );
......@@ -58,7 +58,7 @@ int main()
--it;
check( "Check iterator -- :", "a2", it.getName() );
it=xml.begin();
it.goChildren();
cout<<"Check algorythm 'for_each()':\n";
......@@ -73,6 +73,6 @@ int main()
if( it.find("messages") )
cout << "ERROR! begin=<UniSet> but find <messages>!" << endl;
return 0;
}
......@@ -18,7 +18,7 @@ int main()
PassiveTimer pt1(5000);
cout << " pt1.getInterval()=" << pt1.getInterval() << " TEST: " << ((pt1.getInterval()==5000) ? "OK" : "FAILED") << endl;
PassiveTimer pt2;
cout << " pt2.getInterval()=" << pt2.getInterval() << endl;
if( pt2.getInterval() != 0 )
......
......@@ -22,22 +22,22 @@ class MyClass
{
thr = new ThreadCreator<MyClass>(this, &MyClass::thread);
}
~MyClass()
{
delete thr;
}
inline cctid_t start(){ return thr->start(); }
inline void stop(){ thr->stop(); }
inline pid_t getTID(){ return thr->getTID(); }
inline pid_t getTID(){ return thr->getTID(); }
// BAD code...only for tests
inline ThreadCreator<MyClass>* mythr(){ return thr; }
inline ThreadCreator<MyClass>* mythr(){ return thr; }
protected:
std::string nm;
void thread()
{
......@@ -49,7 +49,7 @@ class MyClass
cout << nm << ": finish thread (" << getTID() << ")" << endl;
}
private:
ThreadCreator<MyClass>* thr;
};
......@@ -61,17 +61,17 @@ class MyClass2
{
thr = new ThreadCreator<MyClass2>(this, &MyClass2::thread);
}
~MyClass2(){ delete thr; }
inline cctid_t start(){ return thr->start(); }
inline void stop(){ thr->stop(); }
inline pid_t getTID(){ return thr->getTID(); }
inline pid_t getTID(){ return thr->getTID(); }
protected:
std::string nm;
TCPCheck tcp;
void thread()
{
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);
......@@ -91,7 +91,7 @@ class MyClass2
cout << nm << ": finish thread (" << getTID() << ")" << endl;
}
private:
ThreadCreator<MyClass2>* thr;
};
......@@ -115,7 +115,7 @@ int main( int argc, const char **argv )
cout << "start2..." << endl;
t1.start();
int prior = t1.mythr()->getPriority();
cout << "priority: " << prior << endl;
......@@ -136,7 +136,7 @@ int main( int argc, const char **argv )
// cout << "start3..." << endl;
// t1.start();
// pause();
cout << "finished3..." << endl;
......@@ -149,8 +149,8 @@ int main( int argc, const char **argv )
msleep(50);
cout << "check finished..." << endl;
// поток в потоке..
MyClass2 t2("Thread2");
cout << "thread2 start..." << endl;
......
......@@ -44,7 +44,7 @@ int main( int argc, const char **argv )
char t_str[ 150 ];
strftime( t_str, sizeof(t_str), "%d %b %Y %H:%M:%S", tms );
cout << "id=" << id
<< " value=" << inf.value
<< " last changed: " << string(t_str) << endl;
......@@ -62,7 +62,7 @@ int main( int argc, const char **argv )
{
cout << "(uitest): catch ..."<< endl;
}
return 0;
}
......@@ -18,26 +18,26 @@ class MyClass
{
thr = new ThreadCreator<MyClass>(this, &MyClass::thread);
}
~MyClass()
{
delete thr;
}
void execute()
{
thr->start();
}
void terminate() { term=true; }
inline std::string name(){ return nm; }
inline int lock_count(){ return count; }
// BAD CODE... only for test..
inline ThreadCreator<MyClass>* get(){ return thr; }
protected:
std::string nm;
std::atomic_bool term;
......@@ -52,7 +52,7 @@ class MyClass
}
}
}
private:
ThreadCreator<MyClass>* thr;
int count;
......@@ -65,12 +65,12 @@ class MyClassSpin
{
thr = new ThreadCreator<MyClassSpin>(this, &MyClassSpin::thread);
}
~MyClassSpin()
{
delete thr;
}
void execute()
{
thr->start();
......@@ -81,10 +81,10 @@ class MyClassSpin
inline std::string name(){ return nm; }
inline int lock_count(){ return count; }
// BAD CODE... only for test..
inline ThreadCreator<MyClassSpin>* get(){ return thr; }
protected:
std::string nm;
bool readLock;
......@@ -104,17 +104,17 @@ class MyClassSpin
uniset_rwmutex_rlock l(m_rw);
count++;
}
//msleep(20);
}
}
private:
ThreadCreator<MyClassSpin>* thr;
int count;
};
bool check_wr_lock( ost::ThreadLock& m )
{
if( m.tryWriteLock() )
......@@ -122,7 +122,7 @@ bool check_wr_lock( ost::ThreadLock& m )
m.unlock();
return true;
}
return false;
}
......@@ -133,7 +133,7 @@ bool check_r_lock( ost::ThreadLock& m )
m.unlock();
return true;
}
return false;
}
......@@ -142,60 +142,60 @@ int main( int argc, const char **argv )
try
{
#if 0
{
cout << "check timed_mutex..." << endl;
std::timed_mutex m;
cout << " 'unlock' without 'lock'..";
m.unlock();
cout << " ok." << endl;
{
cout << "check timed_mutex..." << endl;
std::timed_mutex m;
cout << " 'unlock' without 'lock'..";
m.unlock();
cout << " ok." << endl;
cout << "try lock (lock): " << ( m.try_lock() ? "OK" : "FAIL" ) << endl;
m.unlock();
m.lock();
m.lock();
cout << "try lock (fail): " << ( m.try_lock() ? "FAIL" : "OK" ) << endl;
m.unlock();
}
{
uniset_mutex m("testmutex");
{
uniset_mutex_lock l(m);
msleep(20);
}
{
uniset_mutex_lock l(m,100);
msleep(50);
}
}
m.unlock();
}
{
uniset_mutex m("testmutex");
{
uniset_mutex_lock l(m);
msleep(20);
}
{
uniset_mutex_lock l(m,100);
msleep(50);
}
}
#endif
#if 0
{
uniset_rwmutex m1("mutex1");
uniset_rwmutex m2("mutex2");
uniset_rwmutex m3_lcopy("mutex3");
cout << "m1: " << m1.name() << endl;
cout << "m2: " << m2.name() << endl;
cout << "m3: " << m3_lcopy.name() << endl;
cout << "m1: " << m1.name() << endl;
cout << "m2: " << m2.name() << endl;
cout << "m3: " << m3_lcopy.name() << endl;
m2 = m1;
cout << "copy m1... m2: " << m2.name() << endl;
cout << "copy m1... m2: " << m2.name() << endl;
m1.wrlock();
m3_lcopy = m1;
cout << "copy m1... m3: " << m2.name() << endl;
cout << "copy m1... m3: " << m2.name() << endl;
cout << "m3.lock: ..." << endl;
m3_lcopy.wrlock();
cout << "m3.lock: wrlock OK" << endl;
}
// return 0;
#endif
......@@ -258,7 +258,7 @@ int main( int argc, const char **argv )
cerr << "test lock: " << ( !um.isRelease() ? "OK" : "FAIL") << endl;
}
cerr << "test unlock: " << (um.isRelease() ? "OK" : "FAIL") << endl;
{
uniset_mutex_lock l(um);
cerr << "test second lock: " << (!um.isRelease() ? "OK" : "FAIL") << endl;
......@@ -266,20 +266,20 @@ int main( int argc, const char **argv )
uniset_mutex_lock l2(um,500);
cerr << "test wait lock: " << ( !l2.lock_ok() ? "OK" : "FAIL") << endl;
}
uniset_mutex_lock l3(um,500);
cerr << "test wait lock: " << ( l3.lock_ok() ? "OK" : "FAIL") << endl;
return 0;
#endif
int max = 10;
if( argc > 1 )
max = UniSetTypes::uni_atoi(argv[1]);
#if 1
#if 1
typedef std::vector<MyClass*> TVec;
TVec tvec(max);
......@@ -291,20 +291,20 @@ int main( int argc, const char **argv )
tvec[i] = t;
t->execute();
msleep(50);
}
}
cout << "TEST MUTEX LOCK wait 10 sec.. (" << tvec.size() << " threads)" << endl;
msleep(10000);
cout << "TEST MUTEX LOCK RESULT: " << endl;
for( TVec::iterator it=tvec.begin(); it!=tvec.end(); it++ )
{
int c = (*it)->lock_count();
(*it)->terminate();
if( (*it)->get()->isRunning() )
(*it)->get()->join();
//(*it)->get()->stop();
//(*it)->get()->stop();
cout << (*it)->name() << ": locked counter: " << (c/10) << " " << ( c!=0 ? "OK":"FAIL" ) << endl;
}
#endif
......@@ -318,14 +318,14 @@ int main( int argc, const char **argv )
ostringstream s;
bool r=false;
#if 1
if( i>=half )
{
r = true;
s << "(R)";
}
else
if( i>=half )
{
r = true;
s << "(R)";
}
else
#endif
s << "(W)";
s << "(W)";
s << "t" << i;
......@@ -364,7 +364,7 @@ int main( int argc, const char **argv )
tsvec[i] = t;
t->execute();
msleep(50);
}
}
std::atomic_int cnt(0);
std::atomic_int num(10);
......@@ -394,7 +394,7 @@ int main( int argc, const char **argv )
}
#endif
#endif
// pause();
}
......@@ -404,7 +404,7 @@ int main( int argc, const char **argv )
cerr << " file: " << fe.file() << endl;
cerr << " line: " << fe.line() << endl;
cerr << " mesg: " << fe.errmsg() << endl;
}
}
catch( std::exception& e )
{
cerr << "catch: " << e.what() << endl;
......@@ -413,6 +413,6 @@ int main( int argc, const char **argv )
{
cerr << "catch(...)" << endl;
}
return 0;
}
......@@ -18,7 +18,7 @@ int main()
{
cerr << "<testnode> not found" << endl;
return 1;
}
}
UniXML_iterator it(cnode);
cout << "string id=" << it.getProp("id")
......@@ -31,7 +31,7 @@ int main()
{
cerr << "<testnode> not found" << endl;
return 1;
}
}
cout << "string id=" << it.getProp("dbrepeat")
<< " int id=" << it.getIntProp("dbrepeat")
......@@ -44,13 +44,13 @@ int main()
{
cerr << "<testnode> not found" << endl;
return 1;
}
}
UniXML_iterator it = xml.findNode(xml.getFirstNode(),"item", "LocalhostNode");
if( it == NULL )
{
cerr << "<testnode> not found" << endl;
return 1;
}
}
cout << "textname=" << it.getProp("textname");
}
......
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