Skip to content
Snippets Groups Projects
Commit c0a84556 authored by al.schwinn's avatar al.schwinn
Browse files

noBugID - improved exception-handling

parent e3651e8b
No related branches found
No related tags found
No related merge requests found
......@@ -18,6 +18,7 @@
#include <silecs-diagnostic/utils.h>
#include <silecs-communication/interface/utility/XMLParser.h>
#include <silecs-communication/interface/utility/SilecsException.h>
#include <exception>
extern silecsModule *mysilecs;
......@@ -197,6 +198,11 @@ void diagnosticToolMainView::loadFiles()
}while(blockListSplitted3);
}
}
catch (const Silecs::SilecsException& ex)
{
std::cout << "Test"<< std::endl;
Utils::logError(ui->console, ex.what());
}
catch(std::string *str)
{
Utils::logError(ui->console,*str);
......
......@@ -114,121 +114,106 @@ void silecsModule::updatePLCRunState(Item *plcItem)
Item *silecsModule::generateTree(string className, string deployFile)
{
Item *root = NULL;
try{
Utils::logInfo(messageConsole_,"Loading deploy file: " + deployFile);
XMLParser parserDeploy(deployFile,true);
Utils::logInfo(messageConsole_,"Loading deploy file: " + deployFile);
XMLParser parserDeploy(deployFile,true);
root = new Item(silecsCluster);
if( className == HEADER_NAME )
{
silecsCluster = silecsService->getCluster(HEADER_NAME,HEADER_VERSION);
root->setText(0,QString::fromStdString(HEADER_NAME+" v"+HEADER_VERSION));
}
else
{
ElementXML silecsDesign = parserDeploy.getFirstElementFromXPath("/SILECS-Deploy/Controller/SilecsDesign[@silecs-design-name='" + className + "']");
string classVersion = silecsDesign.getAttribute("silecs-design-version");
silecsCluster = silecsService->getCluster(className,classVersion);
root->setText(0,QString::fromStdString(className+" v"+classVersion));
}
root->setWhatsThis(0,QString::fromStdString(CLUSTER_TYPE));
root->setLinkedObject(silecsCluster);
Item *root = new Item(silecsCluster);
if( className == HEADER_NAME )
{
silecsCluster = silecsService->getCluster(HEADER_NAME,HEADER_VERSION);
root->setText(0,QString::fromStdString(HEADER_NAME+" v"+HEADER_VERSION));
}
else
{
ElementXML silecsDesign = parserDeploy.getFirstElementFromXPath("/SILECS-Deploy/Controller/SilecsDesign[@silecs-design-name='" + className + "']");
string classVersion = silecsDesign.getAttribute("silecs-design-version");
silecsCluster = silecsService->getCluster(className,classVersion);
root->setText(0,QString::fromStdString(className+" v"+classVersion));
}
root->setWhatsThis(0,QString::fromStdString(CLUSTER_TYPE));
root->setLinkedObject(silecsCluster);
boost::ptr_vector<ElementXML> controllerNodes = parserDeploy.getElementsFromXPath_throwIfEmpty("/SILECS-Deploy/Controller");
boost::ptr_vector<ElementXML>::const_iterator controllerIter;
for(controllerIter = controllerNodes.begin(); controllerIter != controllerNodes.end(); controllerIter++)
boost::ptr_vector<ElementXML> controllerNodes = parserDeploy.getElementsFromXPath_throwIfEmpty("/SILECS-Deploy/Controller");
boost::ptr_vector<ElementXML>::const_iterator controllerIter;
for(controllerIter = controllerNodes.begin(); controllerIter != controllerNodes.end(); controllerIter++)
{
std::string plcName = controllerIter->getAttribute("host-name");
if(plcName.compare("")==true)
{
std::string plcName = controllerIter->getAttribute("host-name");
if(plcName.compare("")==true)
{
Utils::logError(messageConsole_,"PLC name empty - will be skipped");
break;
}
Silecs::PLC *plc;
string parameterFile = "";
try
{
ElementXML deployUnitNode = parserDeploy.getFirstElementFromXPath("/SILECS-Deploy/Deploy-Unit");
string deployName = deployUnitNode.getAttribute("name");
std::size_t deployFolderPos = deployFile.find(deployName);
string deployProject = deployFile.substr(0,deployFolderPos) + deployName;
parameterFile = deployProject + "/generated/client/" + plcName + ".silecsparam";
Utils::logInfo(messageConsole_,"Loading parameter file: " + parameterFile);
plc = silecsCluster->getPLC(plcName,parameterFile);
}
catch(const Silecs::SilecsException& ex2)
{
Utils::logError(messageConsole_,"Error while loading "+ plcName+". "+ ex2.what());
continue;
}
Utils::logError(messageConsole_,"PLC name empty - will be skipped");
break;
}
Silecs::PLC *plc;
string parameterFile = "";
try
{
ElementXML deployUnitNode = parserDeploy.getFirstElementFromXPath("/SILECS-Deploy/Deploy-Unit");
string deployName = deployUnitNode.getAttribute("name");
std::size_t deployFolderPos = deployFile.find(deployName);
string deployProject = deployFile.substr(0,deployFolderPos) + deployName;
parameterFile = deployProject + "/generated/client/" + plcName + ".silecsparam";
Utils::logInfo(messageConsole_,"Loading parameter file: " + parameterFile);
plc = silecsCluster->getPLC(plcName,parameterFile);
}
catch(const Silecs::SilecsException& ex2)
{
Utils::logError(messageConsole_,"Error while loading "+ plcName+". "+ ex2.what());
continue;
}
// add plc on the tree
Item *plcItem = Utils::addTreeItem(root,QString::fromStdString(plcName),"",QString::fromStdString(PLC_TYPE),plc,":/Images/PLC.png");
// add plc on the tree
Item *plcItem = Utils::addTreeItem(root,QString::fromStdString(plcName),"",QString::fromStdString(PLC_TYPE),plc,":/Images/PLC.png");
boost::ptr_vector<ElementXML> instances;
XMLParser parseParam(parameterFile,true);
try
{
instances = parseParam.getElementsFromXPath_throwIfEmpty("/SILECS-Param/SILECS-Mapping/SILECS-Class[@name='" + className + "']/Instance");
}
catch(const Silecs::SilecsException& ex2)
{
Utils::logError(messageConsole_,"Failed to fetch instances for class '" + className + "' from parameter-file '" + parameterFile + "':" + ex2.what());
break;
}
boost::ptr_vector<ElementXML> instances;
XMLParser parseParam(parameterFile,true);
try
{
instances = parseParam.getElementsFromXPath_throwIfEmpty("/SILECS-Param/SILECS-Mapping/SILECS-Class[@name='" + className + "']/Instance");
}
catch(const Silecs::SilecsException& ex2)
{
Utils::logError(messageConsole_,"Failed to fetch instances for class '" + className + "' from parameter-file '" + parameterFile + "':" + ex2.what());
break;
}
boost::ptr_vector<ElementXML>::iterator pInstanceIter;
for(pInstanceIter = instances.begin(); pInstanceIter != instances.end(); ++pInstanceIter)
{
std::string deviceName = pInstanceIter->getAttribute("label");
Utils::logInfo(messageConsole_,"found device: '" + deviceName + "' in parameter-file");
Silecs::Device *device = plc->getDevice(deviceName);
boost::ptr_vector<ElementXML>::iterator pInstanceIter;
for(pInstanceIter = instances.begin(); pInstanceIter != instances.end(); ++pInstanceIter)
{
std::string deviceName = pInstanceIter->getAttribute("label");
Utils::logInfo(messageConsole_,"found device: '" + deviceName + "' in parameter-file");
Silecs::Device *device = plc->getDevice(deviceName);
// add device on the tree
Item *deviceItem = Utils::addTreeItem(plcItem,QString::fromStdString(deviceName),"",QString::fromStdString(DEVICE_TYPE),device,":/Images/DEV.png");
// add device on the tree
Item *deviceItem = Utils::addTreeItem(plcItem,QString::fromStdString(deviceName),"",QString::fromStdString(DEVICE_TYPE),device,":/Images/DEV.png");
// get register List for the current device
std::string registerList = device->getRegisterList();
istringstream registerListSplitted(registerList);
// get register List for the current device
std::string registerList = device->getRegisterList();
istringstream registerListSplitted(registerList);
do
{
std::string registerName;
registerListSplitted >> registerName;
do
{
std::string registerName;
registerListSplitted >> registerName;
//avoid last empty register
if(registerName.compare("")==0) break;
//avoid last empty register
if(registerName.compare("")==0) break;
Utils::logInfo(messageConsole_,"found Register: '" + registerName + "' in parameter file");
Silecs::Register *reg = device->getRegister(registerName);
Utils::logInfo(messageConsole_,"found Register: '" + registerName + "' in parameter file");
Silecs::Register *reg = device->getRegister(registerName);
Item *registerItem = Utils::addTreeItem(deviceItem,QString::fromStdString(registerName),"",QString::fromStdString(REGISTER_TYPE),reg,":/Images/REG.png" );
Item *registerItem = Utils::addTreeItem(deviceItem,QString::fromStdString(registerName),"",QString::fromStdString(REGISTER_TYPE),reg,":/Images/REG.png" );
// Set the block name
registerItem->setText(1 , QString::fromStdString(reg->getBlockName()));
// Set the block name
registerItem->setText(1 , QString::fromStdString(reg->getBlockName()));
// Color background of input and output buffer
registerItem->setBackgroundColor(2,QColor(255,255,204));//light yellow
registerItem->setBackgroundColor(3,QColor(204,255,255));//light blue
// Color background of input and output buffer
registerItem->setBackgroundColor(2,QColor(255,255,204));//light yellow
registerItem->setBackgroundColor(3,QColor(204,255,255));//light blue
}while(registerListSplitted);
}
} // END OF PLC LOOP
}
catch (const Silecs::SilecsException& ex)
{
std::string message = "getTreeroot - '";
Utils::logError(messageConsole_, message + ex.what());
return NULL;
}
catch(...)
{
Utils::logError(messageConsole_,"getTreeroot - Unknown Error '");
return NULL;
}
}while(registerListSplitted);
}
} // END OF PLC LOOP
// Reset the number of connected PLC
this->counterConnectedPLC =0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment