Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
# Changelog
All notable changes to this project will be documented in this file.

## Release 4.2.0

### New features
- Edit values within parameters via UI
- Trigger other modules to load specific parameters

## Release 4.1.0

### New features
Expand Down

Large diffs are not rendered by default.

84 changes: 82 additions & 2 deletions CSK_Module_PersistentData/project.mf.xml
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,60 @@ After that, do not forget to save the received data as stated in step 4. +
<desc>Notify event to trigger other modules to load their related data.</desc>
<param alias="Container" desc="Data container with parameters to load." multiplicity="1" name="data" type="object"/>
</event>
<event name="OnNewStatusParameterTypeSelected">
<desc>Notify what parameter type was selected within a parameter set.</desc>
<param desc="Type of parameter." multiplicity="1" name="parameterType" type="string"/>
</event>
<event name="OnNewStatusSelectedParameterIsTable">
<desc>Notfiy if currently selected parameter holds table data.</desc>
<param desc="Status" multiplicity="1" name="status" type="bool"/>
</event>
<event name="OnNewStatusSelectedParameterWithinTable">
<desc>Notify name of selected parameter within parameter table.</desc>
<param desc="Name" multiplicity="1" name="name" type="string"/>
</event>
<event name="OnNewStatusListOfTableParameters">
<desc>Notify list of parameter names within parameter table.</desc>
<param desc="List of parameter names." multiplicity="1" name="list" type="string"/>
</event>
<event name="OnNewStatusStringValueOfSelecteParameter">
<desc>Notify string value of currently selected parameter.</desc>
<param desc="Value" multiplicity="1" name="value" type="string"/>
</event>
<event name="OnNewStatusNumberValueOfSelecteParameter">
<desc>Notify number value of currently selected parameter.</desc>
<param desc="Value" multiplicity="1" name="value" type="float"/>
</event>
<event name="OnNewStatusBooleanValueOfSelecteParameter">
<desc>Notify string value of currently selected parameter.</desc>
<param desc="Value" multiplicity="1" name="value" type="bool"/>
</event>
<event name="OnNewStatusListOfModules">
<desc>Notify list of available CSK modules.</desc>
<param desc="List of CSK modules." multiplicity="1" name="list" type="string"/>
</event>
<event name="OnNewStatusSelectedModuleToSendParameter">
<desc>Notify preselected module to send currently selected parameter.</desc>
<param desc="Module" multiplicity="1" name="module" type="string"/>
</event>
<event name="OnNewStatusSendParametersToModule">
<desc>Notify event to trigger a module to load specific parameters.</desc>
<param desc="Name of module." multiplicity="1" name="moduleName" type="string"/>
<param desc="Name of parameters to load." multiplicity="1" name="parameterName" type="string"/>
<param desc="Optional number of instance of module." multiplicity="?" name="instance" type="int"/>
</event>
<event name="OnNewStatusSelectedModuleInstanceToSendParameter">
<desc>Notify instance of preselected module to send currently selected parameter.</desc>
<param desc="Instance identifier." multiplicity="1" name="instance" type="int"/>
</event>
<event name="OnNewStatusSelectionIsMultiModule">
<desc>Notify if selected module to send parameters is a multi module.</desc>
<param desc="Status" multiplicity="1" name="status" type="bool"/>
</event>
<event name="OnNewThreadFeedbackStatus">
<desc>Notify current thread status.</desc>
<param desc="Status of the module." multiplicity="1" name="status" type="string"/>
</event>
<function name="saveData">
<desc>Save current parameter set.</desc>
<return desc="Success of saving parameters." multiplicity="1" name="success" type="bool"/>
Expand Down Expand Up @@ -222,15 +276,41 @@ To make this permanent, it is needed to save the persistent data afterwards (see
<desc>Function to get info what parameter file is currently in use.</desc>
<return desc="Name of parameter file." multiplicity="1" name="parameterName" type="string"/>
</function>
<function name="setSelectedParameterWithinTableViaUI">
<desc>Function to select parameter within UI.</desc>
<param desc="Selection" multiplicity="1" name="selection" type="string"/>
</function>
<function name="setParameterSelectionWithinTable">
<desc>Function to set selected parameter within selected parameter set table.</desc>
<param desc="Selection" multiplicity="1" name="selection" type="string"/>
</function>
<function name="setNewValueForSelectedParameter">
<desc>Function to preset value for selected parameter.</desc>
<param desc="Value (can be string, nnumber or boolean)." multiplicity="1" name="value" type="auto"/>
</function>
<function name="setNewValueToParameterViaUI">
<desc>Function to set preconfigured value to parameter.</desc>
</function>
<function name="setModuleToSendParameters">
<desc>Function to select module to send parameters.</desc>
<param desc="Module to select." multiplicity="1" name="selection" type="string"/>
</function>
<function name="sendParameterToModuleViaUI">
<desc>Function to trigger a module to load currently selected parameters (optionally for specific instance). Needs to be preconfigured via 'setModuleToSendParameters' and (optionally) 'setModuleInstanceToSendParameters'.</desc>
</function>
<function name="setModuleInstanceToSendParameters">
<desc>Function to select instance of selected module to send parameters.</desc>
<param desc="Instance of module." multiplicity="1" name="selection" type="int"/>
</function>
</serves>
</crown>
<meta key="author">SICK AG</meta>
<meta key="version">4.1.0</meta>
<meta key="version">4.2.0</meta>
<meta key="priority">low</meta>
<meta key="copy-protected">false</meta>
<meta key="read-protected">false</meta>
<meta key="crown2-flow-engine">false</meta>
<meta key="LuaLoadAllEngineAPI">true</meta>
<meta key="LuaLoadAllEngineAPI">false</meta>
<entry default="CSK_Module_PersistentData.lua" path="scripts"/>
</application>
</manifest>
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
---@diagnostic disable: undefined-global, redundant-parameter, missing-parameter

Script.serveEvent("CSK_PersistentData.OnNewThreadFeedbackStatus", "PersistentData_OnNewThreadFeedbackStatus")

-- If App property "LuaLoadAllEngineAPI" is FALSE, use this to load and check for required APIs
-- This can improve performance of garbage collection
local availableAPIs = require('Configuration/PersistentData/helper/checkAPIs') -- check for available APIs
Expand All @@ -12,6 +14,17 @@ _G.logger = Log.SharedLogger.create('ModuleLogger')
local json = require("Configuration.PersistentData.helper.Json")
local scriptParams = Script.getStartArgument() -- Get parameters from model

-- Timer to hide UI messages after 5 seconds
local logTmr = Timer.create()
logTmr:setExpirationTime(5000)
logTmr:setPeriodic(false)

--- Function to hide UI message
local function handleOnLogTmrExpired()
Script.notifyEvent('PersistentData_OnNewThreadFeedbackStatus', 'EMPTY')
end
Timer.register(logTmr, 'OnExpired', handleOnLogTmrExpired)

--- Function to trigger other modules to load their specific parameters
---@param data Container Data container with parameters to load.
local function handleOnNewDataToLoad(data)
Expand Down Expand Up @@ -85,3 +98,67 @@ local function handleOnNewDataToLoad(data)
end
Script.register('CSK_PersistentData.OnNewDataToLoad', handleOnNewDataToLoad)


--- Function to trigger other modules to load specific parameters
---@param moduleName string Name of module.
---@param parameterName string Name of parameters to load.
---@param instance? int Optional number of instance of module.
local function handleOnNewStatusSendParametersToModule(moduleName, parameterName, instance)

local name = string.gsub(moduleName, '_1stModule_', '_')
name = string.gsub(name, '_Module_', '_')
name = string.gsub(name, '_Application_', '_')

_G.logger:fine(nameOfModule .. ": Try to set parameters " .. tostring(parameterName) .. " to module " .. tostring(name) .. " (optional instance = " .. tostring(instance) .. ").")
local instanceSelectionExists = false
local setInstanceExists = false
local instanceAmountExists = false

if instance then
instanceSelectionExists = Script.isServedAsFunction(name .. '.setSelectedInstance')
setInstanceExists = Script.isServedAsFunction(name .. '.setInstance')
instanceAmountExists = Script.isServedAsFunction(name .. '.getInstancesAmount')

if instanceAmountExists then
local _, amount = Script.callFunction(name .. '.getInstancesAmount')
if amount <= instance then
if instanceSelectionExists then
Script.callFunction(name .. '.setSelectedInstance', instance)
elseif setInstanceExists then
Script.callFunction(name .. '.setInstance', instance)
else
_G.logger:warning(nameOfModule .. ": Not possible to set instance.")
Script.notifyEvent('PersistentData_OnNewThreadFeedbackStatus', 'ERR')
logTmr:start()
return
end
else
_G.logger:warning(nameOfModule .. ": Instance does not exists.")
Script.notifyEvent('PersistentData_OnNewThreadFeedbackStatus', 'ERR')
logTmr:start()
return
end
end
end

local setParameterNameExists = Script.isServedAsFunction(name .. '.setParameterName')
local loadParametersExists = Script.isServedAsFunction(name .. '.loadParameters')

if setParameterNameExists and loadParametersExists then
Script.callFunction(name .. '.setParameterName', parameterName)
Script.sleep(1000)
local _, suc = Script.callFunction(name .. '.loadParameters')
if suc == nil or suc == false then
Script.notifyEvent('PersistentData_OnNewThreadFeedbackStatus', 'ERR')
logTmr:start()
else
Script.notifyEvent('PersistentData_OnNewThreadFeedbackStatus', 'OK')
logTmr:start()
end
else
_G.logger:warning(nameOfModule .. ": Not possible to load parameters.")
Script.notifyEvent('PersistentData_OnNewThreadFeedbackStatus', 'ERR')
logTmr:start()
end
end
Script.register('CSK_PersistentData.OnNewStatusSendParametersToModule', handleOnNewStatusSendParametersToModule)
Loading