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

Bug 1407 - Remove Plugin specific design validation Rules

parent 792b7513
No related branches found
No related tags found
No related merge requests found
...@@ -464,36 +464,25 @@ cCommonGet = """ ...@@ -464,36 +464,25 @@ cCommonGet = """
Silecs::Device* pPLCDevice = pPLC->getDevice(pDevice->plcDeviceLabel.get()); Silecs::Device* pPLCDevice = pPLC->getDevice(pDevice->plcDeviceLabel.get());
""" """
cRegVar = """ Silecs::Register* pRegister = NULL;
"""
cGetArrayVar = """ uint32_t dim1 = 1;
"""
cGetArray2DVar = """ uint32_t dim2 = 1;
"""
cSetArrayVar = """ uint32_t dim1 = 1;
uint32_t fesaDim1;
"""
cSetArray2DVar = """ uint32_t dim2 = 1;
uint32_t fesaDim2;
"""
cRecv = """ if (recvNow) pPLCDevice -> recv(blockName_); cRecv = """ if (recvNow) pPLCDevice -> recv(blockName_);
""" """
cGetStringReg = """ cGetStringReg = """
pRegister = pPLCDevice->getRegister("${regName}"); {
pDevice->${fieldName}.set(pRegister->getValString().c_str(), pContext); Silecs::Register* pRegister = pPLCDevice->getRegister("${regName}");
pDevice->${fieldName}.set(pRegister->getValString().c_str(), pContext);
}
""" """
cGetStringArrayReg = """ cGetStringArrayReg = """
{ {
pRegister = pPLCDevice->getRegister("${regName}"); Silecs::Register* pRegister = pPLCDevice->getRegister("${regName}");
dim1 = pRegister->getDimension1(); uint32_t dim1 = pRegister->getDimension1();
const std::string** stdStringArray = pRegister->getRefStringArray(dim1); const std::string** stdStringArray = pRegister->getRefStringArray(dim1);
for (unsigned int i=0; i<dim1; i++) for (unsigned int i=0; i<dim1; i++)
{ pDevice->${fieldName}.setString(stdStringArray[i]->c_str(), i, pContext); {
} pDevice->${fieldName}.setString(stdStringArray[i]->c_str(), i, pContext);
}
} }
""" """
...@@ -501,34 +490,42 @@ cGetScalarReg = """ ...@@ -501,34 +490,42 @@ cGetScalarReg = """
pDevice->${fieldName}.set( pPLCDevice->getRegister("${regName}")->getVal${regType}(), pContext);""" pDevice->${fieldName}.set( pPLCDevice->getRegister("${regName}")->getVal${regType}(), pContext);"""
cGetArrayReg = """ cGetArrayReg = """
pRegister = pPLCDevice->getRegister("${regName}"); {
dim1 = pRegister->getDimension1(); Silecs::Register* pRegister = pPLCDevice->getRegister("${regName}");
uint32_t dim1 = pRegister->getDimension1();
pDevice->${fieldName}.set(pRegister->getRef${regType}Array(dim1), dim1, pContext); pDevice->${fieldName}.set(pRegister->getRef${regType}Array(dim1), dim1, pContext);
}
""" """
cGetArray2DReg = """ cGetArray2DReg = """
pRegister = pPLCDevice->getRegister("${regName}"); {
dim1 = pRegister->getDimension1(); Silecs::Register* pRegister = pPLCDevice->getRegister("${regName}");
dim2 = pRegister->getDimension2(); uint32_t dim1 = pRegister->getDimension1();
pDevice->${fieldName}.set(pRegister->getRef${regType}Array2D(dim1, dim2), dim1, dim2, pContext); uint32_t dim2 = pRegister->getDimension2();
pDevice->${fieldName}.set(pRegister->getRef${regType}Array2D(dim1, dim2), dim1, dim2, pContext);
}
""" """
cGetUnsignedArrayReg = """ cGetUnsignedArrayReg = """
pRegister = pPLCDevice->getRegister("${regName}"); {
dim1 = pRegister->getDimension1(); Silecs::Register* pRegister = pPLCDevice->getRegister("${regName}");
uint32_t dim1 = pRegister->getDimension1();
${regType}* ${regName} = (${regType}*)calloc(dim1, sizeof(${regType})); ${regType}* ${regName} = (${regType}*)calloc(dim1, sizeof(${regType}));
pRegister->getVal${regType}Array(${regName}, dim1);\t//use automatic conversion for JAVA non-supported type pRegister->getVal${regType}Array(${regName}, dim1);\t//use automatic conversion for JAVA non-supported type
pDevice->${fieldName}.set(${regName}, dim1, pContext); pDevice->${fieldName}.set(${regName}, dim1, pContext);
free(${regName}); free(${regName});
}
""" """
cGetUnsignedArray2DReg = """ cGetUnsignedArray2DReg = """
pRegister = pPLCDevice->getRegister("${regName}"); {
dim1 = pRegister->getDimension1(); Silecs::Register* pRegister = pPLCDevice->getRegister("${regName}");
dim2 = pRegister->getDimension2(); uint32_t dim1 = pRegister->getDimension1();
${fesaType]* ${regName} = (${fesaType]*)calloc(dim1*dim2, sizeof(${fesaType])); uint32_t dim2 = pRegister->getDimension2();
pRegister->getVal${regType}Array2D(${regName}, dim1, dim2);\t//use automatic conversion for JAVA non-supported type ${fesaType}* ${regName} = (${fesaType}*)calloc(dim1*dim2, sizeof(${fesaType}));
pDevice->${fieldName}.set(${regName}, dim1, dim2, pContext); pRegister->getVal${regType}Array2D(${regName}, dim1, dim2);\t//use automatic conversion for JAVA non-supported type
free(${regName}); pDevice->${fieldName}.set(${regName}, dim1, dim2, pContext);
free(${regName});
}
""" """
cCommonSet = """ cCommonSet = """
...@@ -563,12 +560,13 @@ cSetStringReg = """ ...@@ -563,12 +560,13 @@ cSetStringReg = """
cSetStringArrayReg = """ cSetStringArrayReg = """
{ {
pRegister = pPLCDevice->getRegister("${regName}"); Silecs::Register* pRegister = pPLCDevice->getRegister("${regName}");
dim1 = pRegister->getDimension1(); uint32_t dim1 = pRegister->getDimension1();
std::string stdStringArray[dim1]; std::string stdStringArray[dim1];
const char** cStringArray = pDevice->${fieldName}.get(fesaDim1, pContext); uint32_t fesaDim1;
for (unsigned int i=0; i<dim1; i++) stdStringArray[i] = (const char*)cStringArray[i]; const char** cStringArray = pDevice->${fieldName}.get(fesaDim1, pContext);
pRegister->setValStringArray(stdStringArray, dim1); for (unsigned int i=0; i<dim1; i++) stdStringArray[i] = (const char*)cStringArray[i];
pRegister->setValStringArray(stdStringArray, dim1);
} }
""" """
...@@ -579,29 +577,41 @@ cSetScalarUReg = """ ...@@ -579,29 +577,41 @@ cSetScalarUReg = """
pPLCDevice->getRegister("${regName}")->setVal${regType}( (${lowerType})pDevice->${fieldName}.get(pContext));""" pPLCDevice->getRegister("${regName}")->setVal${regType}( (${lowerType})pDevice->${fieldName}.get(pContext));"""
cSetArrayReg = """ cSetArrayReg = """
pRegister = pPLCDevice->getRegister("${regName}"); {
dim1 = pRegister->getDimension1(); Silecs::Register* pRegister = pPLCDevice->getRegister("${regName}");
uint32_t dim1 = pRegister->getDimension1();
uint32_t fesaDim1;
pRegister->setVal${regType}Array(pDevice->${fieldName}.get(fesaDim1, pContext), dim1); pRegister->setVal${regType}Array(pDevice->${fieldName}.get(fesaDim1, pContext), dim1);
}
""" """
cSetArray2DReg = """ cSetArray2DReg = """
pRegister = pPLCDevice->getRegister("${regName}"); {
dim1 = pRegister->getDimension1(); Silecs::Register* pRegister = pPLCDevice->getRegister("${regName}");
dim2 = pRegister->getDimension2(); uint32_t dim1 = pRegister->getDimension1();
pRegister->setVal${regType}Array2D(pDevice->${fieldName}.get(fesaDim1, fesaDim2, pContext), dim1, dim2); dim2 = pRegister->getDimension2();
uint32_t fesaDim1,fesaDim2;
pRegister->setVal${regType}Array2D(pDevice->${fieldName}.get(fesaDim1, fesaDim2, pContext), dim1, dim2);
}
""" """
cSetUnsignedArrayReg = """ cSetUnsignedArrayReg = """
pRegister = pPLCDevice->getRegister("${regName}"); {
dim1 = pRegister->getDimension1(); Silecs::Register* pRegister = pPLCDevice->getRegister("${regName}");
pRegister->setVal${regType}Array(pDevice->${fieldName}.get(fesaDim1, pContext), dim1);\t//use automatic conversion for JAVA non-supported type uint32_t dim1 = pRegister->getDimension1();
uint32_t fesaDim1;
pRegister->setVal${regType}Array(pDevice->${fieldName}.get(fesaDim1, pContext), dim1);\t//use automatic conversion for JAVA non-supported type
}
""" """
cSetUnsignedArray2DReg = """ cSetUnsignedArray2DReg = """
pRegister = pPLCDevice->getRegister("${regName}"); {
dim1 = pRegister->getDimension1(); Silecs::Register* pRegister = pPLCDevice->getRegister("${regName}");
dim2 = pRegister->getDimension2(); uint32_t dim1 = pRegister->getDimension1();
pRegister->setVal${regType}Array2D( pDevice->${fieldName}.get(fesaDim1, fesaDim2, pContext), dim1, dim2);\t//use automatic conversion for JAVA non-supported type dim2 = pRegister->getDimension2();
uint32_t fesaDim1,fesaDim2;
pRegister->setVal${regType}Array2D( pDevice->${fieldName}.get(fesaDim1, fesaDim2, pContext), dim1, dim2);\t//use automatic conversion for JAVA non-supported type
}
""" """
cSetStringRegData = """ cSetStringRegData = """
...@@ -610,31 +620,41 @@ cSetStringRegData = """ ...@@ -610,31 +620,41 @@ cSetStringRegData = """
cSetStringArrayRegData = """ cSetStringArrayRegData = """
{ {
pRegister = pPLCDevice->getRegister("${regName}"); Silecs::Register* pRegister = pPLCDevice->getRegister("${regName}");
dim1 = pRegister->getDimension1(); uint32_t dim1 = pRegister->getDimension1();
std::string stdStringArray[dim1]; std::string stdStringArray[dim1];
const char** cStringArray = (data.is${fieldName_upper}Available() ? data.${fieldName}.get(fesaDim1) : pDevice->${fieldName}.get(fesaDim1, pContext)); uint32_t fesaDim1;
for (unsigned int i=0; i<dim1; i++) stdStringArray[i] = (const char*)cStringArray[i]; const char** cStringArray = (data.is${fieldName_upper}Available() ? data.${fieldName}.get(fesaDim1) : pDevice->${fieldName}.get(fesaDim1, pContext));
pRegister->setValStringArray(stdStringArray, dim1); for (unsigned int i=0; i<dim1; i++) stdStringArray[i] = (const char*)cStringArray[i];
pRegister->setValStringArray(stdStringArray, dim1);
} }
""" """
cSetScalarRegData = """ cSetScalarRegData = """
(data.is${fieldName_upper}Available()) ? pPLCDevice->getRegister("${regName}")->setVal${regType}( (${fesaType})data.${fieldName}.get()) : (data.is${fieldName_upper}Available()) ? pPLCDevice->getRegister("${regName}")->setVal${regType}( data.${fieldName}.get()) :
pPLCDevice->getRegister("${regName}")->setVal${regType}( (${fesaType})pDevice->${fieldName}.get(pContext));""" pPLCDevice->getRegister("${regName}")->setVal${regType}( pDevice->${fieldName}.get(pContext));"""
cSetScalarURegData = """
(data.is${fieldName_upper}Available()) ? pPLCDevice->getRegister("${regName}")->setVal${regType}( (${lowerType})data.${fieldName}.get()) :
pPLCDevice->getRegister("${regName}")->setVal${regType}( (${lowerType})pDevice->${fieldName}.get(pContext));"""
cSetArrayRegData = """ cSetArrayRegData = """
pRegister = pPLCDevice->getRegister("${regName}"); {
dim1 = pRegister->getDimension1(); Silecs::Register* pRegister = pPLCDevice->getRegister("${regName}");
uint32_t dim1 = pRegister->getDimension1();
uint32_t fesaDim1;
(data.is${fieldName_upper}Available()) ? pRegister->setVal${regType}Array( data.${fieldName}.get(fesaDim1), dim1) : (data.is${fieldName_upper}Available()) ? pRegister->setVal${regType}Array( data.${fieldName}.get(fesaDim1), dim1) :
pRegister->setVal${regType}Array( pDevice->${fieldName}.get(fesaDim1, pContext), dim1); pRegister->setVal${regType}Array( pDevice->${fieldName}.get(fesaDim1, pContext), dim1);
}
""" """
cSetArray2DRegData = """ cSetArray2DRegData = """
pRegister = pPLCDevice->getRegister("${regName}"); {
dim1 = pRegister->getDimension1(); Silecs::Register* pRegister = pPLCDevice->getRegister("${regName}");
dim2 = pRegister->getDimension2(); uint32_t dim1 = pRegister->getDimension1();
(data.is${fieldName_upper}Available()) ? pRegister->setVal${regType}Array2D(data.${fieldName}.get(fesaDim1, fesaDim2), dim1, dim2) : uint32_t dim2 = pRegister->getDimension2();
pRegister->setVal${regType}Array2D(pDevice->${fieldName}.get(fesaDim1, fesaDim2, pContext), dim1, dim2); uint32_t fesaDim1,fesaDim2;
(data.is${fieldName_upper}Available()) ? pRegister->setVal${regType}Array2D(data.${fieldName}.get(fesaDim1, fesaDim2), dim1, dim2) :
pRegister->setVal${regType}Array2D(pDevice->${fieldName}.get(fesaDim1, fesaDim2, pContext), dim1, dim2);
}
""" """
makeDesign = """# Include SILECS library path makeDesign = """# Include SILECS library path
...@@ -761,7 +781,7 @@ def genCGetArrayReg(register): ...@@ -761,7 +781,7 @@ def genCGetArrayReg(register):
def genCGetArray2DReg(register): def genCGetArray2DReg(register):
if iecommon.isUnsignedType(register.format): if iecommon.isUnsignedType(register.format):
return cGetUnsignedArray2DReg.replace('${regName}', register.name).replace('${regType}', iecommon.getSilecsDataTypeUpperCase(register.format)).replace('${fesaType]', iecommon.registerFormatType2FesaType(register.format)).replace('${fieldName}', register.getFesaName()) return cGetUnsignedArray2DReg.replace('${regName}', register.name).replace('${regType}', iecommon.getSilecsDataTypeUpperCase(register.format)).replace('${fesaType}', iecommon.registerFormatType2FesaType(register.format)).replace('${fieldName}', register.getFesaName())
else: else:
return cGetArray2DReg.replace('${regName}', register.name).replace('${regType}', iecommon.getSilecsDataTypeUpperCase(register.format)).replace('${fieldName}', register.getFesaName()) return cGetArray2DReg.replace('${regName}', register.name).replace('${regType}', iecommon.getSilecsDataTypeUpperCase(register.format)).replace('${fieldName}', register.getFesaName())
...@@ -779,7 +799,7 @@ def genCSetStringArrayReg(register): ...@@ -779,7 +799,7 @@ def genCSetStringArrayReg(register):
def genCSetScalarReg(register): def genCSetScalarReg(register):
if iecommon.isUnsignedType(register.format): if iecommon.isUnsignedType(register.format):
return cSetScalarUReg.replace('${regName}', register.name).replace('${regType}', iecommon.getSilecsDataTypeUpperCase(register.format)).replace('${lowerType}', lowerType).replace('${fieldName}', register.getFesaName()) return cSetScalarUReg.replace('${regName}', register.name).replace('${regType}', iecommon.getSilecsDataTypeUpperCase(register.format)).replace('${lowerType}', iecommon.registerFormatType2CType(register.format)).replace('${fieldName}', register.getFesaName())
else: else:
return cSetScalarReg.replace('${regName}', register.name).replace('${regType}', iecommon.getSilecsDataTypeUpperCase(register.format)).replace('${fieldName}', register.getFesaName()) return cSetScalarReg.replace('${regName}', register.name).replace('${regType}', iecommon.getSilecsDataTypeUpperCase(register.format)).replace('${fieldName}', register.getFesaName())
...@@ -803,7 +823,10 @@ def genCSetStringArrayRegData(register): ...@@ -803,7 +823,10 @@ def genCSetStringArrayRegData(register):
return cSetStringArrayRegData.replace('${regName}', register.name).replace('${fieldName_upper}', iecommon.capitalizeString(register.getFesaName())).replace('${fieldName}', register.getFesaName()) return cSetStringArrayRegData.replace('${regName}', register.name).replace('${fieldName_upper}', iecommon.capitalizeString(register.getFesaName())).replace('${fieldName}', register.getFesaName())
def genCSetScalarRegData(register): def genCSetScalarRegData(register):
return cSetScalarRegData.replace('${regName}', register.name).replace('${fieldName_upper}', iecommon.capitalizeString(register.getFesaName())).replace('${regType}', iecommon.getSilecsDataTypeUpperCase(register.format)).replace('${fesaType}', iecommon.registerFormatType2FesaType(register.format)).replace('${fieldName}', register.getFesaName()) if iecommon.isUnsignedType(register.format):
return cSetScalarURegData.replace('${regName}', register.name).replace('${fieldName_upper}', iecommon.capitalizeString(register.getFesaName())).replace('${regType}', iecommon.getSilecsDataTypeUpperCase(register.format)).replace('${fieldName}', register.getFesaName()).replace('${lowerType}', iecommon.registerFormatType2CType(register.format))
else:
return cSetScalarRegData.replace('${regName}', register.name).replace('${fieldName_upper}', iecommon.capitalizeString(register.getFesaName())).replace('${regType}', iecommon.getSilecsDataTypeUpperCase(register.format)).replace('${fieldName}', register.getFesaName())
def genCSetArrayRegData(register): def genCSetArrayRegData(register):
return cSetArrayRegData.replace('${regName}', register.name).replace('${fieldName_upper}', iecommon.capitalizeString(register.getFesaName())).replace('${regType}', iecommon.getSilecsDataTypeUpperCase(register.format)).replace('${fieldName}', register.getFesaName()) return cSetArrayRegData.replace('${regName}', register.name).replace('${fieldName_upper}', iecommon.capitalizeString(register.getFesaName())).replace('${regType}', iecommon.getSilecsDataTypeUpperCase(register.format)).replace('${fieldName}', register.getFesaName())
......
...@@ -122,9 +122,6 @@ def genCppSource(className, silecsRoot, fesaRoot, sourcePath,logTopics): ...@@ -122,9 +122,6 @@ def genCppSource(className, silecsRoot, fesaRoot, sourcePath,logTopics):
for block in blockList: for block in blockList:
if block.prop('mode') != 'WRITE-ONLY': if block.prop('mode') != 'WRITE-ONLY':
finalSource += fesaTemplates.genCCommonGet(block.prop('name'),className) finalSource += fesaTemplates.genCCommonGet(block.prop('name'),className)
finalSource += fesaTemplates.cRegVar
finalSource += fesaTemplates.cGetArrayVar
finalSource += fesaTemplates.cGetArray2DVar
finalSource += '\n' finalSource += '\n'
finalSource += fesaTemplates.cRecv finalSource += fesaTemplates.cRecv
for registerNode in block.xpathEval('Register'): for registerNode in block.xpathEval('Register'):
...@@ -145,9 +142,6 @@ def genCppSource(className, silecsRoot, fesaRoot, sourcePath,logTopics): ...@@ -145,9 +142,6 @@ def genCppSource(className, silecsRoot, fesaRoot, sourcePath,logTopics):
if block.prop('mode') != 'READ-ONLY': if block.prop('mode') != 'READ-ONLY':
finalSource += fesaTemplates.genCCommonSet(block.prop('name'),className) finalSource += fesaTemplates.genCCommonSet(block.prop('name'),className)
finalSource += fesaTemplates.cRegVar
finalSource += fesaTemplates.cSetArrayVar
finalSource += fesaTemplates.cSetArray2DVar
for registerNode in block.xpathEval('Register'): for registerNode in block.xpathEval('Register'):
register = DesignRegister(registerNode) register = DesignRegister(registerNode)
if register.valueType == 'string': if register.valueType == 'string':
...@@ -165,9 +159,6 @@ def genCppSource(className, silecsRoot, fesaRoot, sourcePath,logTopics): ...@@ -165,9 +159,6 @@ def genCppSource(className, silecsRoot, fesaRoot, sourcePath,logTopics):
finalSource += fesaTemplates.cSend finalSource += fesaTemplates.cSend
finalSource += ' }\n' finalSource += ' }\n'
finalSource += fesaTemplates.genCDatatypeSet(block.prop('name'),getFesaName(block), className) finalSource += fesaTemplates.genCDatatypeSet(block.prop('name'),getFesaName(block), className)
finalSource += fesaTemplates.cRegVar
finalSource += fesaTemplates.cSetArrayVar
finalSource += fesaTemplates.cSetArray2DVar
for registerNode in block.xpathEval('Register'): for registerNode in block.xpathEval('Register'):
register = DesignRegister(registerNode) register = DesignRegister(registerNode)
......
...@@ -206,6 +206,10 @@ def getCDataType(silecsDataType): ...@@ -206,6 +206,10 @@ def getCDataType(silecsDataType):
'dt' :'double', 'dt' :'double',
'string' :'std::string' 'string' :'std::string'
}[silecsDataType] }[silecsDataType]
def registerFormatType2CType(registerFormatType):
type = iecommon.getSilecsDataType(registerFormatType)
return getCDataType(type)
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# Given PLC data type, returns the corresponding # Given PLC data type, returns the corresponding
# SILECS data type # SILECS data type
......
This diff is collapsed.
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