ChangeLog

Version
Changes introduced
Possible backward incompatibilites
JIRA Release notes
1.3.0
The build system is the primary actor of this release:
  • CMake3 is now required,
  • out-of-source builds are now default
If you use UASDK (or any other backend that comes built before quasar server gets build) rather than open62541-compat, you should add a virtual target in your build config file:

add_custom_target( quasar_opcua_backend_is_ready )

Bug
  • [OPCUA-1213] - ASInformationModel generation not dependent (in CMake sense) on the xslt

Task
  • [OPCUA-1016] - Yocto+quasar
  • [OPCUA-1165] - Yocto branch upmerge
  • [OPCUA-1183] - cmake3 in quasar projects
  • [OPCUA-1186] - Compatibility for open62541 0.3 for opcserver_open62541.cpp
  • [OPCUA-1193] - Fix documentation on quasar build for Ubuntu 18 (FetchContent issues)
  • [OPCUA-1211] - Convenience quasar function to prepare environment in build/bin

Improvement
1.2.7
This release is mostly oriented on the deployment of new version of LogIt and the change in which LogIt source code is maintained. A number of improvements have been implemented as well.
After checking out the tag 1.2.7 in the quasar repo, due to the fact of moving LogIt to a separate github repo, you should execute:


git submodule update --init --recursive


Read more about LogIt changes
Bug
  • [OPCUA-1123] - check_consistency should not complain about generated address space classes
  • [OPCUA-1150] - UaVariant related AddressSpace generation - generates non-compiling code

New Feature
  • [OPCUA-1131] - Range (min/max) restrictions in config restrictions
  • [OPCUA-1132] - Add documentation option to source variables
  • [OPCUA-1139] - Address space documentation creation in analogy to config doc

Task
  • [OPCUA-1128] - generate device --all doesn't work in SCA OPC-UA
  • [OPCUA-1144] - Remove stale boost/foreach includes in Meta
  • [OPCUA-1147] - Compilation error for sourcevariable but without device logic
  • [OPCUA-1151] - Add d:documentation to methods' arguments and returnvalues
  • [OPCUA-1153] - LogIt CMakeFiles.txt needs separate paths for standalone vs non-standalone

Improvement
  • [OPCUA-853] - Range-based for adoption
  • [OPCUA-1140] - Rationalise LogIt source code maintenance - quasar to obtain LogIt source code from the dedicated stand-alone LogIt repository.
  • [OPCUA-1141] - Replace call to system::abort in meta with something more user friendly - throw an exception containing an error message
1.2.6
Major features:
  • Out-of-source builds
  • XSD restrictions support

Minor features

  • Generating Config Schema documentation
(none known) New Feature

Task
  • [OPCUA-1006] - Try to include quasar project as a CMake subproject
  • [OPCUA-1007] - Out-of-source build capability
  • [OPCUA-1012] - Rework argument passing into internal quasar functions
  • [OPCUA-1113] - Abandon out-of-source build if there is CMakeCache present in-source
Improvement
  • [OPCUA-1126] - Improve the config doc generator for types of values (including restrictions)
1.2.5
This is mostly a service release bringing significant simplifications in internal quasar scripting for features to come in future.
The CMake target to generate Configuration.hxx has been renamed to Configuration.hxx_GENERATED .
If you used this target e.g. for add_dependencies() statement then you should follow the change accordingly.

Please also note that @makeSetGet attribute of cachevariables finally disappears at it has been deprecated since 2014.
Bug
  • [OPCUA-1036] - isKey doesn't work without device logic and with arrays
  • [OPCUA-1061] - Target Configuration.hxx confuses the ninja build system, rename it
  • [OPCUA-1103] - Return code of a quasar server is zero despite an exception caught in BaseQuasarServer

Task
  • [OPCUA-1097] - Expose device logic mutex via getLock()

Improvement
  • [OPCUA-1106] - Simplify Python scripting for running Quasar code generation
  • [OPCUA-1107] - remove @makeSetGet
  • [OPCUA-1111] - Embedded commands help into quasarCommands.html
1.2.4
Major features:
  • Asynchronous methods
  • Quasar's thread pool
Methods have a new compulsory attribute called "executionSynchronicity". Please pick "synchronous" for the old behaviour. Picking asynchronous will execute a method in a separate context, as per OPCUA-1034.

On some systems (e.g. Ubuntu) the following addition in your custom build config might be necessary:

SET( QUASAR_SERVER_LIBS "-lssl -lcrypto -lpthread" )

otherwise you might get a message about unmet link dependency to libpthread.
New Feature
  • [OPCUA-1033] - Methods having array arguments and return values in quasar servers
  • [OPCUA-1034] - Asynchronous methods

Task
  • [OPCUA-1009] - Source variables not scaling well in certain types of use cases
  • [OPCUA-1051] - Remove quasarGUI.py
  • [OPCUA-1056] - Improve memory management in Certificate.cpp

Improvement
  • [OPCUA-1031] - Improve designToConfigurationXSD.xslt post arrays merge
  • [OPCUA-1044] - Move variant-vector converters from designToClassBody.xslt to CommonFunctions
1.2.3
Major features:
  • Arrays in quasar servers

Minor features:

  • Bug fixes
(none known) Bug
  • [OPCUA-990] - cache-variable of "UaByteString" and "UaVariant" types don't compile
  • [OPCUA-1018] - name attribute of any quasar object in config file permitted to be empty string
  • [OPCUA-1030] - Array delegator for UaString implies known data type so xsl:choose should not be used
  • [OPCUA-1032] - quasar should remove a partially generated file in case generation fails

Task
  • [OPCUA-915] - Diagram generation support for arrays
  • [OPCUA-1023] - integration branch for quasar arrays integration

Improvement
  • [OPCUA-1024] - Optimize ArrayTools
  • [OPCUA-1025] - OneToMaxLimits -> ArraySizeLimits
  • [OPCUA-1027] - Improve designToClassBody.xslt post arrays merge
  • [OPCUA-1028] - Move array bounds validation from Design.xml from designToClassBody.xslt to Design.xsd or to 2nd stage validator
  • [OPCUA-1046] - Cannot document methods in Design.xml
1.2.2
Please have a look at release note for summary.
(none known)
Bug
  • [OPCUA-923] - ProjectSettings should be included after Build config
  • [OPCUA-1001] - Sourcevariable datatype declared as float is listed as Variant (type 24) in the address-space

Task
  • [OPCUA-994] - Relax case restrictions for variable names in quasar
Improvement
  • [OPCUA-854] - Optional module version check fails with 'release candidate' tags
1.2.1
Bug fixes:
  • the mode to create PKI certificates and exit didn't work with UA SDK 1.5.x  - fixed
  • honkyTonk didn't work
(none known)
Bug

Improvement
  • [OPCUA-858] - --create-certificate misleading, no warning when certificate already exists, plus possibly it doesnt work with tkit 155
  • [OPCUA-874] - Improve honkyTonk, generate only when devicelogic present, warn when not
1.2.0
Major features:
  • Methods support (UASDK + open62541)

Minor features:

  • astyle compatibility mode
  • sticky build config
  • commonalization of master CMakeLists.txt
  1. Note that since this release, the master CMakeLists is "one-size-fits-all", i.e. you should customize it. Instead, your per-project settings like the name of the executable and so on should go to ProjectSettings.cmake, which will be included after the upgrade.

  2. Please note that you no longer append your build config file name to "./quasar.py build".  Now you should do:
    ./quasar.py set_build_config <path_to_your_build_config>

Bug
  • [OPCUA-662] - prepare.py (from open62541-compat) does not work
  • [OPCUA-745] - Asynchronous source variable with UaString doesn't compile
  • [OPCUA-800] - Cosmetic fixes for methods

New Feature

Task
  • [OPCUA-106] - Quasar methods
  • [OPCUA-579] - Easily selectable OPC-UA backend configuration file (ServerConfig.xml)
  • [OPCUA-668] - Post-merge: missing copyright header in designToHonkyTonk
  • [OPCUA-786] - astyle equivalent with no/minimal deployment cost
  • [OPCUA-830] - Commonalize master CMakeLists.txt, find what specific extensions people have

Improvement
  • [OPCUA-689] - Optional modules should work from branches too
  • [OPCUA-799] - Sticky build config
  • [OPCUA-819] - Model visualization improvements
1.1.8
Major features:
  • Optional modules
Minor features:
  • Python-based scripting clean-up and enhancement (external_tool_check, etc)
In the Design.xsd schema, vendor attribute is now renamed to author. If you used that attribute, please update your Design.xml accordingly.
Bug
  • [OPCUA-640] - Compilation error with UA API 1.5.x
Task
  • [OPCUA-634] - Add option to enable_module which would persistify the selection in the VCS used
  • [OPCUA-635] - Optional modules
  • [OPCUA-646] - Improve quasar generated headers for device, rename vendor to author
Improvement
  • [OPCUA-583] - Python scripting system better error handling and messages, refactoring, and other improvements
1.1.7
Major features:
  • Compatibility with the API of OPC-UA Toolkit 1.3.x, 1.4.x and 1.5.x.
NONE KNOWN
Bug
  • [OPCUA-611] - Debug builds (sometimes) abort on startup during meta configuration
  • [OPCUA-616] - Bug found in shutdown.cpp, affecting certain versions of Windows
  • [OPCUA-618] - ConfigValidator missing inclusion of Utils.h
New Feature
  • [OPCUA-617] - check_consistency working with projects stored on git
Task Improvement
1.1.6
Major and minor features, look into the rightmost column for details.
NONE KNOWN
New Feature
  • [OPCUA-608] - Ability to use server LogIt instance for logging from within dynamically loaded libraries on linux and windows
Task
  • [OPCUA-560] - Configuration discovery/serialization
  • [OPCUA-575] - Application-specific command line options
  • [OPCUA-594] - RPM building in Quasar: Create an analogue of build_from_svn for git projects
  • [OPCUA-600] - Clarify situation of Saxon jar inclusion; if impossible find alternative deployment
1.1.5
Minor fixes:
  • Missing copyright headers, and a small fix that wouldn't compile in proper C++11 compiler
NONE KNOWN
Bug
  • [OPCUA-577] - gcc4.8.2 confused by const of NodeManager
Task
  • [OPCUA-574] - Missing copyright header in ASNodeQueries.h
1.1.4
Major features:
  • Supplied MSVC (Windows) configuration now defaults to MSVC2013
Minor features:
  • Fix for cache variables with isKey=true and UaString dataType
sys/time.h and uadatetime.h are no longer included Utils.h.
Bug
  • [OPCUA-565] - Using configentry with dataType "UaString" as key (attribute isKey="true") generates non-compiling Base_D* code
Improvement
  • [OPCUA-566] - QUASAR for windows: Migration from VC++ 2010 to VC++ 2013
1.1.3
Major features:
  • Single-item-classes (where the only variable takes place of the object in the Address Space)
None known
Improvement
  • [OPCUA-540] - Unified device parent in DeviceLogic no matter if the factual parent exists or not
New Feature
  • [OPCUA-489] - Make QUASAR framework version info available to OPC-UA clients from StandardMetaData
Task
  • [OPCUA-555] - Single-item-class support (a.k.a. 'primitive')
  • [OPCUA-557] - Move heavy (templated) code for node search from ASNodeManager.h into separate header
  • [OPCUA-561] - Better level of detail for visualtion (generate diagram) to see presence of device lgoic
1.1.2
Major features:
  • Re-design of main.cpp: it should since this revision be unchanged by the developer. Custom parts should go into QuasarServer.cpp
It is required to migrate to your main.cpp into new QuasarServer.cpp

Your initialization code should go to QuasarServer::initialize(),
your shutdown code should go to QuasarServer::shutdown(),
and the main loop into QuasarServer::mainLoop().


Improvement
  • [OPCUA-447] - Improve main.cpp to clearly structure it
  • [OPCUA-527] - New standard meta data
New Feature
  • [OPCUA-489] - Make QUASAR framework version info available to OPC-UA clients from StandardMetaData
Task
  • [OPCUA-519] - Fix copyright info - LogIt, Meta
  • [OPCUA-522] - Add License.txt with GPL license into Quasar sources
  • [OPCUA-532] - Add header for files.txt and original_files.txt
1.1.1
Minor features:
  • Python commands got renamed to what was chosen by Quasar developers as most optimial
framework.py -> quasar.py
Bug
  • [OPCUA-529] - upgrade_design parameters not forwarded (effectively not working)
Improvement
1.1.0
Major features:
  • Big clean-up which brings awaited feature of converting "deviceLogicTypeName" into something human (but breaks Design.xml compatibility at the same time)
  • Decoupling Base device classes from the address space completely
  • Proper headers now introduced in almost anything apart from Meta, LogIt and Python scripts
Minor features:
  • Clean-up of source variables logging -> now using LogIt
  • Added in-line (i.e. Eclipse compatible) documentation to source variables attributes
Design.xml compatibility likely to be broken in your case (if you use Device Logic), but this can be easily fixed, just run:

./quasar.py upgrade_design convert_to_hasDeviceLogic=yes

Also bear in mind that if upgrading from a version earlier than 1.0.2, namespaces have to get fixed (look at notes in 1.0.2)
Sub-task
  • [OPCUA-512] - Dissociate base from Address Space completely
Bug
  • [OPCUA-513] - Shipped config.xml and Design.xml still have old XML namespace
Improvement
  • [OPCUA-514] - deviceLogicTypeName -> hasDeviceLogic
Task
  • [OPCUA-515] - Fix copyright info - Piotr's code
  • [OPCUA-516] - In-line documentation to attributes of source variables
  • [OPCUA-517] - upgrade_design doesn't take arguments
  • [OPCUA-518] - Fix the namespace for CommonFunctions
  • [OPCUA-520] - Source variables should be logged using LogIt
1.0.2
Minor features:
  • A feature to store configentry data permanently in the Device object.
Is is required to replace in your Design.xml the occurencies of:

"http://www.example.org/Design"

to

"http://cern.ch/quasar/Design"

You can automate it using sed:
sed -e 's/www.example.org/cern.ch\/quasar/g' Design.xml -i

same for configuration files.
Bug
  • [OPCUA-504] - Problem with pythonized scripts
  • [OPCUA-505] - check_consistency fails
  • [OPCUA-506] - Synchronous source variable not properly generated in Device
Improvement
  • [OPCUA-495] - Design.XSD Protection for unique names of variables within a class
New Feature
  • [OPCUA-482] - (optional) storage of <configentry> values, in generated Device classes, provides 'raw' configuration values at runtime.
Task
1.0.1
Minor features:
  • Supported data types collection has grown to: Int16, UInt16, Int8(=SByte), UInt8(=Byte)

Improvement
  • [OPCUA-488] - Keep msbuild specific instructions in msbuild build configuration
  • [OPCUA-501] - frameworkGUI improved logging
New Feature
1.0.0
Major features:
  • sh build scripts converted to Python, so the development and build may be started on any operating system (previously Linux only)
  • MSVC10 compatibility is now guaranteed for delivered and generated code
Note that versioning schema has changed since this release into more common 3-section version id. Otherwise it would be more logical to continue with 0.100 after 0.99 ;-)
With new multiplatform scripts, the entry points of the framework have changed. I.e. there is no longer automated_build_linux.sh script.

Improvement
  • [OPCUA-487] - Improve #ifdefs in main.cpp to include at least one section or fail if impossible to do so
Task
  • [OPCUA-363] - transformDesign in python
  • [OPCUA-364] - Documentation how to install astyle, kdiff3, (possibly Java), python, on Windows (update in Documentation.html)
  • [OPCUA-483] - Windows-enabled Generic Server
0.99
Major features:
  • Cleaned up build system, which allows for customization of paramteres like boost version and path, OPC UA toolkit, custom compiler etc
Minor features:
  • In-line documentation in the Design and in the (generated)Configuration schema
  • Esthetical improvements with LogIt and Meta
  • Many small useful fixes
  • The structure of CMakeLists.txt have changed:
    • Server/CMakeLists.txt got standardised, it is no longer supposed to be maintained by the user
    • It is the master CMakeLists.txt which now have the statement to create the exec and link appropriate libraries
    • Therefore it may be necessary to put some effort into resolving CMakeLists.txt business
    • One may need to prepare custom build configuration file to capture their specific build instructions (i.e. custom boost)
Bug
  • [OPCUA-387] - Bug found in official framework release, file designToGeneratedCmakeDevice.xslt
  • [OPCUA-428] - Error messages from Meta assume the config file is called config.xml
  • [OPCUA-450] - No parent device is generated in Base class under certain conditions
Improvement
  • [OPCUA-220] - in-line documentation as to what is meant by [forbidden|delegated|regular] for addressSpaceWrite
  • [OPCUA-429] - Catch global exceptions
  • [OPCUA-434] - Print component name instead of numerical id when changing log level from the address space
  • [OPCUA-441] - Include empty Design.xml and config.xml in the framework installation package
  • [OPCUA-446] - DRoot camelCase for objects
  • [OPCUA-448] - Inline documentation for all attributes of cachevariable
  • [OPCUA-449] - Print class and variable for error "For valueAndStatus initializer initialStatus must be given."
  • [OPCUA-458] - Try carrying documentation over from Design file to Configuration schema
Task
  • [OPCUA-166] - Allow no device logic for children when parent has one
  • [OPCUA-357] - Check with evaluation version of OPC UA toolkit; mention in tutorial+docs; prepare build target
  • [OPCUA-375] - Master CMakeLists: toolkit location should be specified with one CMake variable (defined at the top)
  • [OPCUA-377] - LogIt, use 4 digit year in timestamp
  • [OPCUA-385] - Proposal of enhancement of the build system to nicely capture OS differences and possibly non-standard components (e.g. boost)
  • [OPCUA-396] - Better end-user error message if trying to start new server instance when server is already running
  • [OPCUA-430] - Prepare default config when build configuration wasnt specified
  • [OPCUA-439] - Investigate write/read through the same variable feature
  • [OPCUA-440] - Fix "Discovery Server not available" currently logged in all OPC UA srv logs
0.98
Major features:
  • LogIt
  • Meta
Minor features:
  • Thread pool size is not hardcoded (and can be configured from the config file)
  • Data Type identifier field is  now populated for variables which have initialValue. Therefore it matches the type declared in the design file. This was completely unrelevant for UA Toolkit-based clients but affected i.e. LabView OPC UA client.
  • ConfigValidator has more verbose output
  • When loading of configuration fails, xsd's native mechanism is now used instead of running the external validator (here: xmllint). This will both improve portability (xmllint might be unavailable in the target system), and help with configuration schemas that may have very nonstandard locations.
  • A bug is fixed which would affect delegated cachevariables of UaVariant type.
NONE KNOWN
Task
  • [OPCUA-156] - Extend config file with configuration options (e.g. thread pool size)
  • [OPCUA-157] - Improve InformationModel for Variables
  • [OPCUA-371] - LogIt: dont put full path to file which generates message in the log
  • [OPCUA-372] - Common way of initializing log levels at startup
  • [OPCUA-379] - Merge respective changes from latest Wiener server
  • [OPCUA-401] - Suboptimal error message when schema specified in config.xml cannot be found
  • [OPCUA-402] - DataType identifiers are necessary for certain OPC UA clients
  • [OPCUA-403] - UaVariant forbidden in delegated write
  • [OPCUA-425] - Improvement in loading component log levels from the config file
0.97
Major features:
  • Device classes are split into Base part (100% generated) and User part (with generated stubs). This helps to reduce merging efforts by an order of magnitude.
Minor features:
  • No more compilation warnings coming from ASNodeManager
  • SourceVariables only rebuilt for classes which actually have a source variable (and not all classes)
  • Configurator, Root fully autogenerated
  • Queriying object name is now easy in Device logic
  • A list of device logic files is now filled automatically
  • Possible to have "self-referring" hasObjects relation
  • When given device logic body/header doesnt exist, user is asked whether to generate
  • When given device logic body/header is older than design file, user will be warned
  • regenerating Device Logic may ask for removal of big parts of already existing Device Logic code. This is actually intentional as this code will now go to the Base part of Device Logic class
Bug
  • [OPCUA-259] - Fix build warnings
  • [OPCUA-361] - ConfigValidator attempts to validate per-design instantiated objects (should skip them)
  • [OPCUA-362] - check_consistency: add option to ask for fixing.
Task
  • [OPCUA-248] - Make SourceVariables.{h,c++} dependencies less tight
  • [OPCUA-250] - Should getName() be present for all Device Logic objects automatically?
  • [OPCUA-257] - Evaluate Ben's anti-merge improvement
  • [OPCUA-281] - Make Configurator.cpp and DRoot generation fully automatic
  • [OPCUA-349] - Cleanup generated_files_list and generated_headers_list
  • [OPCUA-350] - A warning when Device file is newer than Device Logic classes
  • [OPCUA-355] - Improve install tool
  • [OPCUA-360] - Exchange compile-time recursion for exec-time recursion of self "has" relation
  • [OPCUA-370] - check_consistencty: when file doesnt exist, md5sum bails out
0.96

  • nullPolicy attribute needs to be added per-cachevariable. This can be automated by upgrade_design script (look at its help)
Bug
  • [OPCUA-260] - addressSpaceWrite confused with addressSpaceRead
Improvement
  • [OPCUA-258] - Better deprecation warning msg
  • [OPCUA-263] - Flood of destructor messages.
  • [OPCUA-279] - Focus 2nd level validation in 1 XSLT transform
Task
  • [OPCUA-209] - null setters for non-uavariant variables
  • [OPCUA-266] - Failing XSLT processor should make the output to be deleted
  • [OPCUA-267] - Create simple XSLT for updates of the version of the framework in existing projects
0.95
Major features:
  • Doxygen integration
  • Cardinality modelling (possibility to specify min and max number of objects in ts relation)
Minor features:
  • Cachevariable's setter's source time argument (3rd argument) has now a default of current datetime. Therefore it can be omitted for 99% cases.

NONE KNOWN
Task
  • [OPCUA-203] - Integrate doxygen
  • [OPCUA-215] - Cardinality modelling in hasObjects relation
  • [OPCUA-231] - setters: current datetime (UaDateTime::now()) should be default argument for time
0.94
Major features:
  • Config Entries
NONE KNOWN

Beware though that recommended layout of Device headers and sources changed, and you may need to reshuffle it a bit for getting easy merging.
Bug
  • [OPCUA-217] - simple addressspace setters not updated in addressspace body generator
Task
  • [OPCUA-168] - Device header and body shall have a comment that indicates the start of custom section
  • [OPCUA-197] - Config Entries
  • [OPCUA-204] - Document all transformations (including building the project) in a nice diagram and put it into documentation
  • [OPCUA-206] - openssl-dev and libxml2-devel dependency missing in Generic Server documentation
  • [OPCUA-212] - dont generate Device Logic stubs when DeviceLogicTypeName not defined
0.93
Major features:
  • Files database (files.txt) and number of tools that depend on it: consistency checker, new installer
Minor features:
  • Setters for simple data types take plain value instead of reference
  • makeSetGet dropped as a cachevariable attribute (equivalence of true assumed)
Internal features:
  • create_release.sh script
NONE KNOWN
(only deprecation warning shown for makeSetGet attribute)
Task
  • [OPCUA-120] - Consider makeSetGet=true as normal, non-configurable parameter
  • [OPCUA-127] - A way to check that files that shall not be modified (transforms...?) are not modified
  • [OPCUA-160] - Install script should be more gentle ...
  • [OPCUA-167] - Setters: simple data types (integers, floats...) shall be passed by value rather than by reference
  • [OPCUA-188] - A script to verify if proper things are committed to the SVN (and warn if too much/not enough is within version control)
  • [OPCUA-198] - Create script for tagging Generic Server releases
0.92
Major features:
  • Source variables
  • Automated mutex generation
  • UaVariant added as allowed data type
  • honkyTonk tool to simulate address space updates
Improvements:
  • Unified and cleaned initialization of cache variables
  • Configuration.xsd: proper types for various flavours of integers (previously every int irrespectively of length and signedness was just "int")
  • createDiagram.sh creates diagrams of varied level of details