Commit e0efd2da authored by Pavel Vainerman's avatar Pavel Vainerman

Убрал всевозможные warning: где-то удалил за неактуальностью, где-то исправил,

где-то переделал в "todo".
parent 0e79082a
...@@ -1592,7 +1592,7 @@ void IOControl::buildCardsList() ...@@ -1592,7 +1592,7 @@ void IOControl::buildCardsList()
return; return;
} }
int lastnum = 0; size_t lastnum = 0;
for( ; lastnum<cards.size(); lastnum++ ) for( ; lastnum<cards.size(); lastnum++ )
{ {
if( cards[lastnum] == 0 ) if( cards[lastnum] == 0 )
......
...@@ -150,7 +150,7 @@ ...@@ -150,7 +150,7 @@
"5" - Режим "только выходы" "5" - Режим "только выходы"
*/ */
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#warning Сделать обработку сигналов завершения.... /*! \todo (IOControl): Сделать обработку сигналов завершения */
class CardList: class CardList:
public std::vector<ComediInterface*> public std::vector<ComediInterface*>
...@@ -324,7 +324,7 @@ class IOControl: ...@@ -324,7 +324,7 @@ class IOControl:
std::string s_field; std::string s_field;
std::string s_fvalue; std::string s_fvalue;
SMInterface* shm; SMInterface* shm;
UniversalInterface ui; UniversalInterface ui;
UniSetTypes::ObjectId myid; UniSetTypes::ObjectId myid;
std::string prefix; std::string prefix;
......
...@@ -33,7 +33,7 @@ void openXML(); ...@@ -33,7 +33,7 @@ void openXML();
void dispDiagram(); void dispDiagram();
void sortData(bool rise, bool cal); void sortData(bool rise, bool cal);
static void insn_config( comedi_t* card, int subdev, int channel, lsampl_t iotype, int range, int aref ); //static void insn_config( comedi_t* card, int subdev, int channel, lsampl_t iotype, int range, int aref );
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
char buf[5]; char buf[5];
...@@ -275,6 +275,7 @@ int main(int argc, char* argv[]) ...@@ -275,6 +275,7 @@ int main(int argc, char* argv[])
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
/*
void insn_config( comedi_t* card, int subdev, int channel, lsampl_t iotype, int range, int aref ) void insn_config( comedi_t* card, int subdev, int channel, lsampl_t iotype, int range, int aref )
{ {
comedi_insn insn; comedi_insn insn;
...@@ -290,7 +291,7 @@ void insn_config( comedi_t* card, int subdev, int channel, lsampl_t iotype, int ...@@ -290,7 +291,7 @@ void insn_config( comedi_t* card, int subdev, int channel, lsampl_t iotype, int
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
} }
*/
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
void readCalibr(int fixed) void readCalibr(int fixed)
{ {
......
...@@ -66,8 +66,7 @@ void LProcessor::build( const string& lfile ) ...@@ -66,8 +66,7 @@ void LProcessor::build( const string& lfile )
ei.sid = sid; ei.sid = sid;
ei.state = false; ei.state = false;
ei.lnk = &(*it); ei.lnk = &(*it);
#warning Пока тип сделан принудительно ei.iotype = UniversalIO::UnknownIOType;
ei.iotype = UniversalIO::DigitalInput;
extInputs.push_front(ei); extInputs.push_front(ei);
} }
...@@ -83,8 +82,7 @@ void LProcessor::build( const string& lfile ) ...@@ -83,8 +82,7 @@ void LProcessor::build( const string& lfile )
EXTOutInfo ei; EXTOutInfo ei;
ei.sid = sid; ei.sid = sid;
ei.lnk = &(*it); ei.lnk = &(*it);
#warning Пока тип сделан принудительно ei.iotype = UniversalIO::UnknownIOType;
ei.iotype = UniversalIO::DigitalOutput;
extOuts.push_front(ei); extOuts.push_front(ei);
} }
......
...@@ -918,7 +918,11 @@ void MBTCPMaster::sigterm( int signo ) ...@@ -918,7 +918,11 @@ void MBTCPMaster::sigterm( int signo )
{ {
cerr << myname << ": ********* SIGTERM(" << signo <<") ********" << endl; cerr << myname << ": ********* SIGTERM(" << signo <<") ********" << endl;
activated = false; activated = false;
#warning Доделать...
/*! \todo Доделать выставление безопасного состояния на выходы.
И нужно ли это. Ведь может не хватить времени на "обмен"
*/
// выставление безопасного состояния на выходы.... // выставление безопасного состояния на выходы....
/* /*
RSMap::iterator it=rsmap.begin(); RSMap::iterator it=rsmap.begin();
...@@ -945,8 +949,6 @@ void MBTCPMaster::sigterm( int signo ) ...@@ -945,8 +949,6 @@ void MBTCPMaster::sigterm( int signo )
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void MBTCPMaster::readConfiguration() void MBTCPMaster::readConfiguration()
{ {
#warning Сделать сортировку по диапазонам адресов!!!
// чтобы запрашивать одним запросом, сразу несколько входов...
// readconf_ok = false; // readconf_ok = false;
xmlNode* root = conf->getXMLSensorsSection(); xmlNode* root = conf->getXMLSensorsSection();
if(!root) if(!root)
......
...@@ -633,6 +633,13 @@ void MBSlave::sigterm( int signo ) ...@@ -633,6 +633,13 @@ void MBSlave::sigterm( int signo )
{ {
cerr << myname << ": ********* SIGTERM(" << signo <<") ********" << endl; cerr << myname << ": ********* SIGTERM(" << signo <<") ********" << endl;
activated = false; activated = false;
try
{
if( mbslot )
mbslot->sigterm(signo);
}
catch(...){}
UniSetObject_LT::sigterm(signo); UniSetObject_LT::sigterm(signo);
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
......
...@@ -935,7 +935,8 @@ void RTUExchange::sigterm( int signo ) ...@@ -935,7 +935,8 @@ void RTUExchange::sigterm( int signo )
{ {
cerr << myname << ": ********* SIGTERM(" << signo <<") ********" << endl; cerr << myname << ": ********* SIGTERM(" << signo <<") ********" << endl;
activated = false; activated = false;
#warning Доделать...
/*! \todo Нужно ли выставлять безопасное состояние. МОжно ведь не успеть совершить "обемен" */
// выставление безопасного состояния на выходы.... // выставление безопасного состояния на выходы....
/* /*
RSMap::iterator it=rsmap.begin(); RSMap::iterator it=rsmap.begin();
...@@ -962,8 +963,6 @@ void RTUExchange::sigterm( int signo ) ...@@ -962,8 +963,6 @@ void RTUExchange::sigterm( int signo )
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void RTUExchange::readConfiguration() void RTUExchange::readConfiguration()
{ {
#warning Сделать сортировку по диапазонам адресов!!!
// чтобы запрашивать одним запросом, сразу несколько входов...
// readconf_ok = false; // readconf_ok = false;
xmlNode* root = conf->getXMLSensorsSection(); xmlNode* root = conf->getXMLSensorsSection();
if(!root) if(!root)
......
...@@ -53,12 +53,6 @@ SharedMemory::SharedMemory( ObjectId id, string datafile ): ...@@ -53,12 +53,6 @@ SharedMemory::SharedMemory( ObjectId id, string datafile ):
heartbeatCheckTime = conf->getArgInt("--heartbeat-check-time","1000"); heartbeatCheckTime = conf->getArgInt("--heartbeat-check-time","1000");
// rxml->setSensorFilter(s_filterField, s_filterValue);
//#warning Намеренно отключаем обработку списка заказчиков (в данном проекте)...
// для отключения просто укажем несуществующие поля для фильтра
// rxml->setConsumerFilter("dummy","yes");
rxml->setItemFilter(s_field, s_fvalue); rxml->setItemFilter(s_field, s_fvalue);
rxml->setConsumerFilter(c_field, c_fvalue); rxml->setConsumerFilter(c_field, c_fvalue);
rxml->setDependsFilter(d_field, d_fvalue); rxml->setDependsFilter(d_field, d_fvalue);
...@@ -456,10 +450,6 @@ bool SharedMemory::readItem( UniXML& xml, UniXML_iterator& it, xmlNode* sec ) ...@@ -456,10 +450,6 @@ bool SharedMemory::readItem( UniXML& xml, UniXML_iterator& it, xmlNode* sec )
ostringstream msg; ostringstream msg;
msg << "(SharedMemory::readItem): дискретный датчик (heartbeat_ds_name) связанный с " << it.getProp("name"); msg << "(SharedMemory::readItem): дискретный датчик (heartbeat_ds_name) связанный с " << it.getProp("name");
dlog[Debug::WARN] << msg.str() << endl; dlog[Debug::WARN] << msg.str() << endl;
#warning Делать обязательным?!
// dlog[Debug::CRIT] << msg.str() << endl;
// kill(getpid(),SIGTERM);
// throw NameNotFound(msg.str());
} }
} }
else else
...@@ -469,6 +459,9 @@ bool SharedMemory::readItem( UniXML& xml, UniXML_iterator& it, xmlNode* sec ) ...@@ -469,6 +459,9 @@ bool SharedMemory::readItem( UniXML& xml, UniXML_iterator& it, xmlNode* sec )
{ {
ostringstream msg; ostringstream msg;
msg << "(SharedMemory::readItem): Не найден ID для дискретного датчика (heartbeat_ds_name) связанного с " << it.getProp("name"); msg << "(SharedMemory::readItem): Не найден ID для дискретного датчика (heartbeat_ds_name) связанного с " << it.getProp("name");
// Если уж задали имя для датчика, то он должен существовать..
// поэтому завершаем процесс, если не нашли..
dlog[Debug::CRIT] << msg.str() << endl; dlog[Debug::CRIT] << msg.str() << endl;
kill(getpid(),SIGTERM); kill(getpid(),SIGTERM);
// throw NameNotFound(msg.str()); // throw NameNotFound(msg.str());
......
...@@ -238,7 +238,7 @@ void UDPExchange::send() ...@@ -238,7 +238,7 @@ void UDPExchange::send()
return; return;
} }
*/ */
#warning use mutex for list!!! /*! \todo Подумать нужен ли здесь mutex */
UniSetUDP::UDPMessage::UDPDataList::iterator it = mypack.dlist.begin(); UniSetUDP::UDPMessage::UDPDataList::iterator it = mypack.dlist.begin();
for( ; it!=mypack.dlist.end(); ++it ) for( ; it!=mypack.dlist.end(); ++it )
...@@ -446,8 +446,6 @@ void UDPExchange::sigterm( int signo ) ...@@ -446,8 +446,6 @@ void UDPExchange::sigterm( int signo )
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void UDPExchange::readConfiguration() void UDPExchange::readConfiguration()
{ {
#warning Сделать сортировку по диапазонам адресов!!!
// чтобы запрашивать одним запросом, сразу несколько входов...
// readconf_ok = false; // readconf_ok = false;
xmlNode* root = conf->getXMLSensorsSection(); xmlNode* root = conf->getXMLSensorsSection();
if(!root) if(!root)
......
...@@ -230,7 +230,7 @@ void UDPSender::send() ...@@ -230,7 +230,7 @@ void UDPSender::send()
return; return;
} }
#warning use mutex for list!!! /*! \todo Подумать нужен ли здесь mutex */
UniSetUDP::UDPMessage::UDPDataList::iterator it = mypack.dlist.begin(); UniSetUDP::UDPMessage::UDPDataList::iterator it = mypack.dlist.begin();
for( ; it!=mypack.dlist.end(); ++it ) for( ; it!=mypack.dlist.end(); ++it )
{ {
...@@ -431,8 +431,6 @@ void UDPSender::sigterm( int signo ) ...@@ -431,8 +431,6 @@ void UDPSender::sigterm( int signo )
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void UDPSender::readConfiguration() void UDPSender::readConfiguration()
{ {
#warning Сделать сортировку по диапазонам адресов!!!
// чтобы запрашивать одним запросом, сразу несколько входов...
// readconf_ok = false; // readconf_ok = false;
xmlNode* root = conf->getXMLSensorsSection(); xmlNode* root = conf->getXMLSensorsSection();
if(!root) if(!root)
......
...@@ -407,8 +407,6 @@ UniExchange* UniExchange::init_exchange( int argc, const char* const* argv, ...@@ -407,8 +407,6 @@ UniExchange* UniExchange::init_exchange( int argc, const char* const* argv,
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UniExchange::readConfiguration() void UniExchange::readConfiguration()
{ {
#warning Сделать сортировку по диапазонам адресов!!!
// чтобы запрашивать одним запросом, сразу несколько входов...
// readconf_ok = false; // readconf_ok = false;
xmlNode* root = conf->getXMLSensorsSection(); xmlNode* root = conf->getXMLSensorsSection();
if(!root) if(!root)
......
...@@ -91,7 +91,7 @@ class UniExchange: ...@@ -91,7 +91,7 @@ class UniExchange:
bool init_ok; bool init_ok;
SList mymap; SList mymap;
int maxIndex; size_t maxIndex;
int smReadyTimeout; int smReadyTimeout;
private: private:
......
...@@ -95,7 +95,7 @@ namespace MTR ...@@ -95,7 +95,7 @@ namespace MTR
// //
typedef std::list<ModbusRTU::ModbusData> DataList; typedef std::list<ModbusRTU::ModbusData> DataList;
typedef std::map<ModbusRTU::ModbusData,DataList> DataMap; typedef std::map<ModbusRTU::ModbusData,DataList> DataMap;
static int attempts = 3; // const int attempts = 3; //
static const ModbusRTU::ModbusData skip[] = {48, 49, 59}; // registers which should not write static const ModbusRTU::ModbusData skip[] = {48, 49, 59}; // registers which should not write
......
...@@ -285,7 +285,8 @@ long IOBase::processingAsAO( IOBase* it, SMInterface* shm, bool force ) ...@@ -285,7 +285,8 @@ long IOBase::processingAsAO( IOBase* it, SMInterface* shm, bool force )
} }
else else
val = it->value; val = it->value;
#warning Precision!!!
/*! \todo Разобратся, нужно ли здесь учитывать Precision! */
// if( it->cal.precision > 0 ) // if( it->cal.precision > 0 )
// val = it->value / lround(pow10(it->cal.precision)); // val = it->value / lround(pow10(it->cal.precision));
} }
...@@ -482,10 +483,7 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm, ...@@ -482,10 +483,7 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
if( f_iir > 0 ) if( f_iir > 0 )
b->f_filter_iir = true; b->f_filter_iir = true;
if( !it.getProp("filtersize").empty() ) if( !it.getProp("filtersize").empty() )
{
#warning "почему здесь 0, хотя f_size инициализируется def_filtersize?"
f_size = it.getPIntProp("filtersize",def_filtersize); f_size = it.getPIntProp("filtersize",def_filtersize);
}
} }
if( !it.getProp("filterT").empty() ) if( !it.getProp("filterT").empty() )
......
...@@ -269,7 +269,7 @@ DataMap read_confile( const std::string f ) ...@@ -269,7 +269,7 @@ DataMap read_confile( const std::string f )
DataList dlst; DataList dlst;
int k=0; int k=0;
std::vector<unsigned char> v(4); std::vector<unsigned char> v(4);
for( int i=0; i<s_data.size(); i++ ) for( size_t i=0; i<s_data.size(); i++ )
{ {
v[k++] = s_data[i]; v[k++] = s_data[i];
if( k>3 ) if( k>3 )
......
...@@ -35,6 +35,8 @@ class ModbusRTUSlave: ...@@ -35,6 +35,8 @@ class ModbusRTUSlave:
virtual ModbusRTU::mbErrCode receive( ModbusRTU::ModbusAddr addr, timeout_t msecTimeout ); virtual ModbusRTU::mbErrCode receive( ModbusRTU::ModbusAddr addr, timeout_t msecTimeout );
virtual void cleanupChannel(){ if(port) port->cleanupChannel(); } virtual void cleanupChannel(){ if(port) port->cleanupChannel(); }
virtual void terminate();
protected: protected:
......
...@@ -21,7 +21,9 @@ class ModbusRTUSlaveSlot: ...@@ -21,7 +21,9 @@ class ModbusRTUSlaveSlot:
ModbusRTUSlaveSlot( ComPort* com ); ModbusRTUSlaveSlot( ComPort* com );
ModbusRTUSlaveSlot( const std::string dev, bool use485=false, bool tr_ctl=false ); ModbusRTUSlaveSlot( const std::string dev, bool use485=false, bool tr_ctl=false );
virtual ~ModbusRTUSlaveSlot(); virtual ~ModbusRTUSlaveSlot();
virtual void sigterm( int signo );
protected: protected:
virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query, virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query,
......
...@@ -69,6 +69,7 @@ class ModbusServer ...@@ -69,6 +69,7 @@ class ModbusServer
DebugStream* dlog=0 ); DebugStream* dlog=0 );
virtual void cleanupChannel(){} virtual void cleanupChannel(){}
virtual void terminate(){}
protected: protected:
......
...@@ -98,6 +98,8 @@ class ModbusServerSlot ...@@ -98,6 +98,8 @@ class ModbusServerSlot
/*! подключение обработчика 'передача файла' 0x66 */ /*! подключение обработчика 'передача файла' 0x66 */
void connectFileTransfer( FileTransferSlot sl ); void connectFileTransfer( FileTransferSlot sl );
virtual void sigterm( int signo ){}
protected: protected:
ReadCoilSlot slReadCoil; ReadCoilSlot slReadCoil;
ReadInputStatusSlot slReadInputStatus; ReadInputStatusSlot slReadInputStatus;
......
...@@ -30,6 +30,9 @@ class ModbusTCPServer: ...@@ -30,6 +30,9 @@ class ModbusTCPServer:
void cleanInputStream(); void cleanInputStream();
virtual void cleanupChannel(){ cleanInputStream(); } virtual void cleanupChannel(){ cleanInputStream(); }
virtual void terminate();
protected: protected:
virtual ModbusRTU::mbErrCode pre_send_request( ModbusRTU::ModbusMessage& request ); virtual ModbusRTU::mbErrCode pre_send_request( ModbusRTU::ModbusMessage& request );
......
...@@ -16,7 +16,9 @@ class ModbusTCPServerSlot: ...@@ -16,7 +16,9 @@ class ModbusTCPServerSlot:
public: public:
ModbusTCPServerSlot( ost::InetAddress &ia, int port=502 ); ModbusTCPServerSlot( ost::InetAddress &ia, int port=502 );
virtual ~ModbusTCPServerSlot(); virtual ~ModbusTCPServerSlot();
virtual void sigterm( int signo );
protected: protected:
virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query, virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query,
......
...@@ -61,9 +61,10 @@ static void setRTS(int fd, int state) ...@@ -61,9 +61,10 @@ static void setRTS(int fd, int state)
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
ComPort485F::ComPort485F( string dev, int gpio_num, bool tmit_ctrl ): ComPort485F::ComPort485F( string dev, int gpio_num, bool tmit_ctrl ):
ComPort(dev,false), ComPort(dev,false),
gpio_num(gpio_num) gpio_num(gpio_num),
tmit_ctrl_on(tmit_ctrl)
{ {
if( tmit_ctrl_on = tmit_ctrl ) if( tmit_ctrl_on )
{ {
iopl(3); iopl(3);
gpio_low_out_en(gpio_num); gpio_low_out_en(gpio_num);
......
...@@ -298,8 +298,9 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc, ...@@ -298,8 +298,9 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc,
if( !begin ) if( !begin )
return erTimeOut; return erTimeOut;
#warning Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?! /*! \todo Подумать Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?!
// Lav: конечно стоит, нам же надо буфер чистить // Lav: конечно стоит, нам же надо буфер чистить
*/
// Проверка кому адресован пакет... // Проверка кому адресован пакет...
if( rbuf.addr!=addr && rbuf.addr!=BroadcastAddr ) if( rbuf.addr!=addr && rbuf.addr!=BroadcastAddr )
{ {
......
...@@ -148,3 +148,10 @@ mbErrCode ModbusRTUSlave::sendData( unsigned char* buf, int len ) ...@@ -148,3 +148,10 @@ mbErrCode ModbusRTUSlave::sendData( unsigned char* buf, int len )
return erNoError; return erNoError;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void ModbusRTUSlave::terminate()
{
try
{
}
catch(...){}
}
\ No newline at end of file
...@@ -137,3 +137,12 @@ ModbusRTU::mbErrCode ModbusRTUSlaveSlot::fileTransfer( ModbusRTU::FileTransferMe ...@@ -137,3 +137,12 @@ ModbusRTU::mbErrCode ModbusRTUSlaveSlot::fileTransfer( ModbusRTU::FileTransferMe
return slFileTransfer(query,reply); return slFileTransfer(query,reply);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void ModbusRTUSlaveSlot::sigterm( int signo )
{
try
{
terminate();
}
catch(...){}
}
// -------------------------------------------------------------------------
...@@ -476,9 +476,9 @@ mbErrCode ModbusServer::recv( ModbusRTU::ModbusAddr addr, ModbusMessage& rbuf, t ...@@ -476,9 +476,9 @@ mbErrCode ModbusServer::recv( ModbusRTU::ModbusAddr addr, ModbusMessage& rbuf, t
if( !begin ) if( !begin )
return erTimeOut; return erTimeOut;
/*! \todo Подумать Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?!
#warning Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?! // Lav: конечно стоит, нам же надо буфер чистить
// Lav: конечно стоит, нам же надо буфер чистить */
// Проверка кому адресован пакет... // Проверка кому адресован пакет...
if( rbuf.addr!=addr && rbuf.addr!=BroadcastAddr ) if( rbuf.addr!=addr && rbuf.addr!=BroadcastAddr )
{ {
...@@ -755,7 +755,6 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -755,7 +755,6 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
} }
} }
#warning Стоит ли здесь проверять
if( !mWrite.checkFormat() ) if( !mWrite.checkFormat() )
{ {
dlog[Debug::WARN] << "(0x0F): (" << rbuf.func dlog[Debug::WARN] << "(0x0F): (" << rbuf.func
...@@ -814,7 +813,6 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -814,7 +813,6 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
} }
} }
#warning Стоит ли здесь проверять
if( !mWrite.checkFormat() ) if( !mWrite.checkFormat() )
{ {
dlog[Debug::WARN] << "(0x10): (" << rbuf.func dlog[Debug::WARN] << "(0x10): (" << rbuf.func
...@@ -872,7 +870,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -872,7 +870,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum; return erBadCheckSum;
} }
} }
#warning Стоит ли здесь проверять
if( !mWrite.checkFormat() ) if( !mWrite.checkFormat() )
{ {
dlog[Debug::WARN] << "(0x05): (" << rbuf.func dlog[Debug::WARN] << "(0x05): (" << rbuf.func
...@@ -930,7 +928,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -930,7 +928,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum; return erBadCheckSum;
} }
} }
#warning Стоит ли здесь проверять
if( !mWrite.checkFormat() ) if( !mWrite.checkFormat() )
{ {
dlog[Debug::WARN] << "(0x06): (" << rbuf.func dlog[Debug::WARN] << "(0x06): (" << rbuf.func
......
...@@ -19,6 +19,7 @@ ModbusTCPServer::ModbusTCPServer( ost::InetAddress &ia, int port ): ...@@ -19,6 +19,7 @@ ModbusTCPServer::ModbusTCPServer( ost::InetAddress &ia, int port ):
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusTCPServer::~ModbusTCPServer() ModbusTCPServer::~ModbusTCPServer()
{ {
terminate();
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
mbErrCode ModbusTCPServer::receive( ModbusRTU::ModbusAddr addr, timeout_t timeout ) mbErrCode ModbusTCPServer::receive( ModbusRTU::ModbusAddr addr, timeout_t timeout )
...@@ -235,3 +236,12 @@ void ModbusTCPServer::cleanInputStream() ...@@ -235,3 +236,12 @@ void ModbusTCPServer::cleanInputStream()
while( ret > 0); while( ret > 0);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void ModbusTCPServer::terminate()
{
if( dlog.debugging(Debug::INFO) )
dlog[Debug::INFO] << "(ModbusTCPServer): terminate..." << endl;
if( tcp && tcp.isConnected() )
tcp.disconnect();
}
// -------------------------------------------------------------------------
...@@ -131,3 +131,12 @@ ModbusRTU::mbErrCode ModbusTCPServerSlot::fileTransfer( ModbusRTU::FileTransferM ...@@ -131,3 +131,12 @@ ModbusRTU::mbErrCode ModbusTCPServerSlot::fileTransfer( ModbusRTU::FileTransferM
return slFileTransfer(query,reply); return slFileTransfer(query,reply);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void ModbusTCPServerSlot::sigterm( int signo )
{
try
{
terminate();
}
catch(...){}
}
// -------------------------------------------------------------------------
...@@ -1390,7 +1390,7 @@ void ForceCoilsRetMessage::init( ModbusMessage& m ) ...@@ -1390,7 +1390,7 @@ void ForceCoilsRetMessage::init( ModbusMessage& m )
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
#warning (WriteOutputRetMessage): необходимо встроить проверку на корректность данных /*! \todo (WriteOutputRetMessage): необходимо встроить проверку на корректность данных */
// Сперва переворачиваем обратно слова // Сперва переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
...@@ -1647,7 +1647,7 @@ void WriteOutputRetMessage::init( ModbusMessage& m ) ...@@ -1647,7 +1647,7 @@ void WriteOutputRetMessage::init( ModbusMessage& m )
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
#warning (WriteOutputRetMessage): необходимо встроить проверку на корректность данных /*! \todo (WriteOutputRetMessage): необходимо встроить проверку на корректность данных */
// Сперва переворачиваем обратно слова // Сперва переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
...@@ -1819,7 +1819,7 @@ void ForceSingleCoilRetMessage::init( ModbusMessage& m ) ...@@ -1819,7 +1819,7 @@ void ForceSingleCoilRetMessage::init( ModbusMessage& m )
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
#warning (ForceSingleCoilRetMessage): необходимо встроить проверку на корректность данных /*! \todo (ForceSingleCoilRetMessage): необходимо встроить проверку на корректность данных */
// переворачиваем обратно слова // переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
...@@ -1995,7 +1995,7 @@ void WriteSingleOutputRetMessage::init( ModbusMessage& m ) ...@@ -1995,7 +1995,7 @@ void WriteSingleOutputRetMessage::init( ModbusMessage& m )
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
#warning (WriteSingleOutputRetMessage): необходимо встроить проверку на корректность данных /*! \todo (WriteSingleOutputRetMessage): необходимо встроить проверку на корректность данных */
// переворачиваем обратно слова // переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
......
...@@ -1122,7 +1122,7 @@ void ReadInputRetMessage::init( ModbusMessage& m ) ...@@ -1122,7 +1122,7 @@ void ReadInputRetMessage::init( ModbusMessage& m )
void ReadInputRetMessage::swapData() void ReadInputRetMessage::swapData()
{ {
// переворачиваем данные // переворачиваем данные
for( unsigned int i=0; i<count; i++ ) for( int i=0; i<count; i++ )
data[i] = SWAPSHORT(data[i]); data[i] = SWAPSHORT(data[i]);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -1428,7 +1428,7 @@ void ForceCoilsRetMessage::init( ModbusMessage& m ) ...@@ -1428,7 +1428,7 @@ void ForceCoilsRetMessage::init( ModbusMessage& m )
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
#warning (WriteOutputRetMessage): необходимо встроить проверку на корректность данных /*! \todo (WriteOutputRetMessage): необходимо встроить проверку на корректность данных */
// Сперва переворачиваем обратно слова // Сперва переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
...@@ -1685,7 +1685,7 @@ void WriteOutputRetMessage::init( ModbusMessage& m ) ...@@ -1685,7 +1685,7 @@ void WriteOutputRetMessage::init( ModbusMessage& m )
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
#warning (WriteOutputRetMessage): необходимо встроить проверку на корректность данных /*! \todo (WriteOutputRetMessage): необходимо встроить проверку на корректность данных */
// Сперва переворачиваем обратно слова // Сперва переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
...@@ -1857,7 +1857,7 @@ void ForceSingleCoilRetMessage::init( ModbusMessage& m ) ...@@ -1857,7 +1857,7 @@ void ForceSingleCoilRetMessage::init( ModbusMessage& m )
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
#warning (ForceSingleCoilRetMessage): необходимо встроить проверку на корректность данных /*! \todo (ForceSingleCoilRetMessage): необходимо встроить проверку на корректность данных */
// переворачиваем обратно слова // переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
...@@ -2033,7 +2033,7 @@ void WriteSingleOutputRetMessage::init( ModbusMessage& m ) ...@@ -2033,7 +2033,7 @@ void WriteSingleOutputRetMessage::init( ModbusMessage& m )
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
#warning (WriteSingleOutputRetMessage): необходимо встроить проверку на корректность данных /*! \todo (WriteSingleOutputRetMessage): необходимо встроить проверку на корректность данных */
// переворачиваем обратно слова // переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
......
...@@ -176,8 +176,9 @@ xmlNode* UniXML::copyNode(xmlNode* node, int recursive) ...@@ -176,8 +176,9 @@ xmlNode* UniXML::copyNode(xmlNode* node, int recursive)
- при указании NULL нормально работает - при указании NULL нормально работает
- при указании copynode - проблеммы с русским при сохранении - при указании copynode - проблеммы с русским при сохранении
- при указании node - SEGFAULT при попытке удалить исходный(node) узел - при указании node - SEGFAULT при попытке удалить исходный(node) узел
\todo "Нужно тест написать на copyNode"
*/ */
#warning "Нужно тест написать на copyNode"
copynode->properties = ::xmlCopyPropList(NULL,node->properties); copynode->properties = ::xmlCopyPropList(NULL,node->properties);
if( copynode != 0 && node->parent ) if( copynode != 0 && node->parent )
{ {
......
...@@ -11,8 +11,8 @@ passivetimer_LDADD = $(top_builddir)/lib/libUniSet.la ...@@ -11,8 +11,8 @@ passivetimer_LDADD = $(top_builddir)/lib/libUniSet.la
passivetimer_CPPFLAGS = -I$(top_builddir)/include passivetimer_CPPFLAGS = -I$(top_builddir)/include
unixml_SOURCES = unixml.cc unixml_SOURCES = unixml.cc
unixml_LDADD = $(top_builddir)/lib/libUniSet.la unixml_LDADD = $(top_builddir)/lib/libUniSet.la ${SIGC_LIBS}
unixml_CPPFLAGS = -I$(top_builddir)/include unixml_CPPFLAGS = -I$(top_builddir)/include ${SIGC_CFLAGS}
ui_SOURCES = ui.cc ui_SOURCES = ui.cc
ui_LDADD = $(top_builddir)/lib/libUniSet.la ui_LDADD = $(top_builddir)/lib/libUniSet.la
......
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