Skip to content

Commit c013da2

Browse files
Release 2.1.0 (#3)
# Release 2.1.0 ## New features - Optionally limit entries of CSV file - Check if persistent data to load provides all relevant parameters. Otherwise add default values ## Improvements - FlowConfig handling ## Bugfix - Legacy bindings of ValueDisplay elements within UI did not work if deployed with VS Code AppSpace SDK - UI differs if deployed via Appstudio or VS Code AppSpace SDK - Fullscreen icon of iFrame was visible
1 parent 3b86d60 commit c013da2

16 files changed

Lines changed: 801 additions & 380 deletions

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,20 @@
11
# Changelog
22
All notable changes to this project will be documented in this file.
33

4+
## Release 2.1.0
5+
6+
### New features
7+
- Optionally limit entries of CSV file
8+
- Check if persistent data to load provides all relevant parameters. Otherwise add default values
9+
10+
### Improvements
11+
- FlowConfig handling
12+
13+
### Bugfix
14+
- Legacy bindings of ValueDisplay elements within UI did not work if deployed with VS Code AppSpace SDK
15+
- UI differs if deployed via Appstudio or VS Code AppSpace SDK
16+
- Fullscreen icon of iFrame was visible
17+
418
## Release 2.0.0
519

620
### New features

CSK_Module_MultiDataLogger/pages/pages/CSK_Module_MultiDataLogger/CSK_Module_MultiDataLogger.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,5 +86,5 @@
8686

8787
.myCustomButton_CSK_Module_MultiDataLogger {
8888
border-radius: 30px;
89-
padding-right: 0px;
89+
padding: 11px;
9090
}

CSK_Module_MultiDataLogger/pages/pages/CSK_Module_MultiDataLogger/CSK_Module_MultiDataLogger.html

Lines changed: 265 additions & 185 deletions
Large diffs are not rendered by default.

CSK_Module_MultiDataLogger/pages/src/converter.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,14 @@ export function convertToList(value) {
55
export function changeStyle(theme) {
66
const style: HTMLStyleElement = document.createElement('style');
77
style.id ='blub'
8+
9+
const toggleSW = document.querySelectorAll("davinci-toggle-switch")
10+
toggleSW.forEach((userItem) => {
11+
const shadowToggle = userItem.shadowRoot
12+
const finalToggleSW = shadowToggle?.querySelector('div')
13+
finalToggleSW?.classList.add('hasIcon')
14+
});
15+
816
if (theme == 'CSK_Style'){
917
var headerToolbar = `.sopasjs-ui-header-toolbar-wrapper { background-color: #FFFFFF; }`
1018
var uiHeader = `.sopasjs-ui-header>.app-logo { margin-right:0px; }`

CSK_Module_MultiDataLogger/pages/src/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ document.addEventListener('sopasjs-ready', () => {
1212
page_Setup.remove();
1313

1414
setTimeout(() => {
15+
const element = document.querySelector("div.sjs-wrapper > div > div.sjs-fullscreen-toggle")
16+
if(element) {
17+
element.parentElement.removeChild(element)
18+
}
1519
document.title = 'CSK_Module_MultiDataLogger'
1620
}, 500);
1721
})

CSK_Module_MultiDataLogger/project.mf.xml

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,14 @@ NUM will be replaced by the number of instance (e.g. "OnNewValueToForward1"). +<
159159
<desc>Notify version of module.</desc>
160160
<param desc="Version" multiplicity="1" name="version" type="string"/>
161161
</event>
162+
<event name="OnNewStatusLimitCSVEntries">
163+
<desc>Notify status if CSV entries are limited.</desc>
164+
<param desc="Status" multiplicity="1" name="status" type="bool"/>
165+
</event>
166+
<event name="OnNewStatusCSVLimitAmount">
167+
<desc>Notify limit of entries in CSV file.</desc>
168+
<param desc="Limit of CSV entries." multiplicity="1" name="limit" type="int"/>
169+
</event>
162170
<function name="setParameterName">
163171
<desc>Function to set the name of the parameters if saved/loaded via the CSK_PersistentData module.</desc>
164172
<param desc="Name of the parameter" multiplicity="1" name="name" type="string"/>
@@ -259,6 +267,14 @@ If FALSE it is needed to call 'saveLog' manually to store log data.</desc>
259267
<function name="resetModule">
260268
<desc>Function to reset main configuration of module.</desc>
261269
</function>
270+
<function name="setCSVLimit">
271+
<desc>Function to set status if CSV entries should be limited.</desc>
272+
<param desc="Status" multiplicity="1" name="status" type="bool"/>
273+
</function>
274+
<function name="setCSVLimitAmount">
275+
<desc>Function to set maximum amount of CSV entries if it is limited.</desc>
276+
<param desc="Amount of maximum CSV entries." multiplicity="1" name="amount" type="int"/>
277+
</function>
262278
</serves>
263279
</crown>
264280
<crown name="MultiDataLogger_FC">
@@ -283,7 +299,7 @@ If FALSE it is needed to call 'saveLog' manually to store log data.</desc>
283299
</crown>
284300
</crown>
285301
<meta key="author">SICK AG</meta>
286-
<meta key="version">2.0.0</meta>
302+
<meta key="version">2.1.0</meta>
287303
<meta key="priority">low</meta>
288304
<meta key="copy-protected">false</meta>
289305
<meta key="read-protected">false</meta>

CSK_Module_MultiDataLogger/scripts/CSK_Module_MultiDataLogger.lua

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,9 @@ local multiDataLogger_Instances = {} -- Handle all instances
5353
local multiDataLoggerController = require('Data/MultiDataLogger/MultiDataLogger_Controller')
5454

5555
if _G.availableAPIs.default then
56-
local setInstanceHandle = require('Data/MultiDataLogger/FlowConfig/MultiDataLogger_FlowConfig')
56+
require('Data/MultiDataLogger/FlowConfig/MultiDataLogger_FlowConfig')
5757
table.insert(multiDataLogger_Instances, multiDataLogger_Model.create(1))
5858
multiDataLoggerController.setMultiDataLogger_Instances_Handle(multiDataLogger_Instances) -- share handle of instances
59-
setInstanceHandle(multiDataLogger_Instances)
6059
else
6160
_G.logger:warning("CSK_MultiDataLogger: Relevant CROWN(s) not available on device. Module is not supported...")
6261
end

CSK_Module_MultiDataLogger/scripts/CSK_MultiDataLogger_Processing.lua

Lines changed: 48 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -29,32 +29,21 @@ processingParams.dataMode = scriptParams:get('dataMode') -- Mode to log data
2929
processingParams.dataType = scriptParams:get('dataType') -- Type of data to log
3030
processingParams.csvFilename = scriptParams:get('csvFilename') -- CSV filename
3131
processingParams.csvLabels = scriptParams:get('csvLabels') -- CSV labels
32+
processingParams.csvLimit = scriptParams:get('csvLimit') -- CSV entries limited
33+
processingParams.csvLimitAmount = scriptParams:get('csvLimitAmount') -- Maximum amount of CSV entries if limited
3234
processingParams.saveOnlyChanges = scriptParams:get('saveOnlyChanges') -- Only save changes within CSV file
3335
processingParams.saveDataDirectly = scriptParams:get('saveDataDirectly') -- Save CSV data automatically
3436
processingParams.imageType = scriptParams:get('imageType') -- Mode to log data
3537
processingParams.imageCompressionValue = scriptParams:get('imageCompressionValue') -- Mode to log data
3638

37-
local latestValue = ''
38-
local dataArray = {}
39+
local latestValue = '' -- Latest received data to log
40+
local dataArray = {} -- Table to store logging data
3941

4042
--- Function to save temp log to file
4143
local function saveCSVLog()
4244

43-
local success
4445
local completeFilepath = processingParams.path .. processingParams.csvFilename .. '.csv'
4546

46-
if not File.exists(completeFilepath) then
47-
local data = processingParams.csvLabels .. "\n"
48-
local newFile = File.open(completeFilepath, "wb")
49-
50-
if (newFile ~= nil) then
51-
success = File.write(newFile, data)
52-
File.close(newFile)
53-
else
54-
_G.logger:warning(nameOfModule .. ": Did not work to create data file.")
55-
end
56-
end
57-
5847
local data = ''
5948
for i = 1, #dataArray do
6049
for k, v in pairs(dataArray[i]) do
@@ -64,11 +53,39 @@ local function saveCSVLog()
6453
end
6554
end
6655

67-
local file = File.open(completeFilepath, "ab")
68-
if (file ~= nil) then
69-
success = File.write(file, data)
70-
File.close(file)
71-
dataArray = {}
56+
if processingParams.csvLimit then
57+
local fullData = processingParams.csvLabels .. "\n" .. data
58+
local limitedFile = File.open(completeFilepath, "wb")
59+
if (limitedFile ~= nil) then
60+
local success = File.write(limitedFile, fullData)
61+
File.close(limitedFile)
62+
if not success then
63+
_G.logger:warning(nameOfModule .. ": Did not work to write data to file.")
64+
end
65+
end
66+
67+
else
68+
if not File.exists(completeFilepath) then
69+
local labelData = processingParams.csvLabels .. "\n"
70+
local newFile = File.open(completeFilepath, "wb")
71+
72+
if (newFile ~= nil) then
73+
File.write(newFile, labelData)
74+
File.close(newFile)
75+
else
76+
_G.logger:warning(nameOfModule .. ": Did not work to create data file.")
77+
end
78+
end
79+
80+
local file = File.open(completeFilepath, "ab")
81+
if (file ~= nil) then
82+
local success = File.write(file, data)
83+
File.close(file)
84+
if not success then
85+
_G.logger:warning(nameOfModule .. ": Did not work to write data to file.")
86+
end
87+
dataArray = {}
88+
end
7289
end
7390
end
7491

@@ -91,6 +108,11 @@ local function handleOnNewProcessing(dataContent, filename)
91108
logKeyPair[formDateTime] = dataAsString
92109

93110
--Save with indeces
111+
if processingParams.csvLimit then
112+
while #dataArray >= processingParams.csvLimitAmount do
113+
table.remove(dataArray, 1)
114+
end
115+
end
94116
dataArray[(#dataArray+1)] = logKeyPair
95117
latestValue = dataAsString
96118

@@ -165,6 +187,12 @@ local function handleOnNewProcessingParameter(multiDataLoggerNo, parameter, valu
165187
elseif parameter == 'saveCSVFile' then
166188
saveCSVLog()
167189

190+
elseif parameter == 'csvLimit' then
191+
if processingParams['csvLimit'] == true and value == false then
192+
dataArray = {}
193+
end
194+
processingParams[parameter] = value
195+
168196
else
169197
processingParams[parameter] = value
170198
end

CSK_Module_MultiDataLogger/scripts/Data/MultiDataLogger/FlowConfig/MultiDataLogger_FlowConfig.lua

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,10 @@
55

66
require('Data.MultiDataLogger.FlowConfig.MultiDataLogger_DataSource')
77

8-
-- Reference to the multiImageFilter_Instances handle
9-
local multiDataLogger_Instances
10-
118
--- Function to react if FlowConfig was updated
129
local function handleOnClearOldFlow()
1310
if _G.availableAPIs.default then
14-
for i = 1, #multiDataLogger_Instances do
15-
if multiDataLogger_Instances[i].parameters.flowConfigPriority then
16-
CSK_MultiDataLogger.clearFlowConfigRelevantConfiguration()
17-
break
18-
end
19-
end
11+
CSK_MultiDataLogger.clearFlowConfigRelevantConfiguration()
2012
end
2113
end
2214
Script.register('CSK_FlowConfig.OnClearOldFlow', handleOnClearOldFlow)
23-
24-
--- Function to get access to the multiDataLogger_Instances
25-
---@param handle handle Handle of multiDataLogger_Instances object
26-
local function setMultiDataLogger_Instances_Handle(handle)
27-
multiDataLogger_Instances = handle
28-
end
29-
30-
return setMultiDataLogger_Instances_Handle

CSK_Module_MultiDataLogger/scripts/Data/MultiDataLogger/MultiDataLogger_Controller.lua

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,11 @@ Script.serveEvent('CSK_MultiDataLogger.OnNewStatusDataMode', 'MultiDataLogger_On
4545
Script.serveEvent('CSK_MultiDataLogger.OnNewStatusDataType', 'MultiDataLogger_OnNewStatusDataType')
4646

4747
Script.serveEvent('CSK_MultiDataLogger.OnNewStatusCSVFilename', 'MultiDataLogger_OnNewStatusCSVFilename')
48-
4948
Script.serveEvent('CSK_MultiDataLogger.OnNewStatusCSVLables', 'MultiDataLogger_OnNewStatusCSVLables')
49+
50+
Script.serveEvent('CSK_MultiDataLogger.OnNewStatusLimitCSVEntries', 'MultiDataLogger_OnNewStatusLimitCSVEntries')
51+
Script.serveEvent('CSK_MultiDataLogger.OnNewStatusCSVLimitAmount', 'MultiDataLogger_OnNewStatusCSVLimitAmount')
52+
5053
Script.serveEvent("CSK_MultiDataLogger.OnNewStatusSaveDataDirectly", "MultiDataLogger_OnNewStatusSaveDataDirectly")
5154
Script.serveEvent("CSK_MultiDataLogger.OnNewStatusSaveOnlyChanges", "MultiDataLogger_OnNewStatusSaveOnlyChanges")
5255

@@ -194,6 +197,10 @@ local function handleOnExpiredTmrMultiDataLogger()
194197

195198
Script.notifyEvent("MultiDataLogger_OnNewStatusCSVFilename", multiDataLogger_Instances[selectedInstance].parameters.csvFilename)
196199
Script.notifyEvent("MultiDataLogger_OnNewStatusCSVLables", multiDataLogger_Instances[selectedInstance].parameters.csvLabels)
200+
201+
Script.notifyEvent("MultiDataLogger_OnNewStatusLimitCSVEntries", multiDataLogger_Instances[selectedInstance].parameters.csvLimit)
202+
Script.notifyEvent("MultiDataLogger_OnNewStatusCSVLimitAmount", multiDataLogger_Instances[selectedInstance].parameters.csvLimitAmount)
203+
197204
Script.notifyEvent("MultiDataLogger_OnNewStatusSaveDataDirectly", multiDataLogger_Instances[selectedInstance].parameters.saveDataDirectly)
198205
Script.notifyEvent("MultiDataLogger_OnNewStatusSaveOnlyChanges", multiDataLogger_Instances[selectedInstance].parameters.saveOnlyChanges)
199206

@@ -281,6 +288,9 @@ local function updateProcessingParameters()
281288
Script.notifyEvent('MultiDataLogger_OnNewProcessingParameter', selectedInstance, 'dataType', multiDataLogger_Instances[selectedInstance].parameters.dataType)
282289
Script.notifyEvent('MultiDataLogger_OnNewProcessingParameter', selectedInstance, 'csvFilename', multiDataLogger_Instances[selectedInstance].parameters.csvFilename)
283290
Script.notifyEvent('MultiDataLogger_OnNewProcessingParameter', selectedInstance, 'csvLabels', multiDataLogger_Instances[selectedInstance].parameters.csvLabels)
291+
Script.notifyEvent('MultiDataLogger_OnNewProcessingParameter', selectedInstance, 'csvLimit', multiDataLogger_Instances[selectedInstance].parameters.csvLimit)
292+
Script.notifyEvent('MultiDataLogger_OnNewProcessingParameter', selectedInstance, 'csvLimitAmount', multiDataLogger_Instances[selectedInstance].parameters.csvLimitAmount)
293+
284294
Script.notifyEvent('MultiDataLogger_OnNewProcessingParameter', selectedInstance, 'imageType', multiDataLogger_Instances[selectedInstance].parameters.imageType)
285295
Script.notifyEvent('MultiDataLogger_OnNewProcessingParameter', selectedInstance, 'imageCompressionValue', multiDataLogger_Instances[selectedInstance].parameters.selectedInstance)
286296

@@ -338,19 +348,34 @@ end
338348
Script.serveFunction('CSK_MultiDataLogger.setDataType', setDataType)
339349

340350
local function setCSVFilename(name)
341-
_G.logger:fine(nameOfModule .. ": Set csv filename to " .. tostring(name))
351+
_G.logger:fine(nameOfModule .. ": Set CSV filename to " .. tostring(name))
342352
multiDataLogger_Instances[selectedInstance].parameters.csvFilename = name
343353
Script.notifyEvent('MultiDataLogger_OnNewProcessingParameter', selectedInstance, 'csvFilename', name)
344354
end
345355
Script.serveFunction('CSK_MultiDataLogger.setCSVFilename', setCSVFilename)
346356

347357
local function setCSVLabels(labels)
348-
_G.logger:fine(nameOfModule .. ": Set csv labels to " .. labels)
358+
_G.logger:fine(nameOfModule .. ": Set CSV labels to " .. labels)
349359
multiDataLogger_Instances[selectedInstance].parameters.csvLabels = labels
350360
Script.notifyEvent('MultiDataLogger_OnNewProcessingParameter', selectedInstance, 'csvLabels', labels)
351361
end
352362
Script.serveFunction('CSK_MultiDataLogger.setCSVLabels', setCSVLabels)
353363

364+
local function setCSVLimit(status)
365+
_G.logger:fine(nameOfModule .. ": Set CSV limit to " .. tostring(status))
366+
multiDataLogger_Instances[selectedInstance].parameters.csvLimit = status
367+
Script.notifyEvent("MultiDataLogger_OnNewStatusLimitCSVEntries", status)
368+
Script.notifyEvent('MultiDataLogger_OnNewProcessingParameter', selectedInstance, 'csvLimit', status)
369+
end
370+
Script.serveFunction('CSK_MultiDataLogger.setCSVLimit', setCSVLimit)
371+
372+
local function setCSVLimitAmount(amount)
373+
_G.logger:fine(nameOfModule .. ": Set CSV limit amount to " .. tostring(amount))
374+
multiDataLogger_Instances[selectedInstance].parameters.csvLimitAmount = amount
375+
Script.notifyEvent('MultiDataLogger_OnNewProcessingParameter', selectedInstance, 'csvLimitAmount', amount)
376+
end
377+
Script.serveFunction('CSK_MultiDataLogger.setCSVLimitAmount', setCSVLimitAmount)
378+
354379
local function setSaveOnlyChanges(status)
355380
multiDataLogger_Instances[selectedInstance].parameters.saveOnlyChanges = status
356381
_G.logger:fine(nameOfModule .. ': Set CSV "save changes only" mode to = ' .. tostring(status))
@@ -393,9 +418,11 @@ Script.serveFunction('CSK_MultiDataLogger.getStatusModuleActive', getStatusModul
393418

394419
local function clearFlowConfigRelevantConfiguration()
395420
for i = 1, #multiDataLogger_Instances do
396-
Script.notifyEvent('MultiDataLogger_OnNewProcessingParameter', i, 'deregisterEvent', true)
397-
multiDataLogger_Instances[i].parameters.registeredEvent = ''
398-
Script.notifyEvent("MultiDataLogger_OnNewStatusRegisteredEvent", '')
421+
if multiDataLogger_Instances[i].parameters.flowConfigPriority then
422+
Script.notifyEvent('MultiDataLogger_OnNewProcessingParameter', i, 'deregisterEvent', true)
423+
multiDataLogger_Instances[i].parameters.registeredEvent = ''
424+
Script.notifyEvent("MultiDataLogger_OnNewStatusRegisteredEvent", '')
425+
end
399426
end
400427
end
401428
Script.serveFunction('CSK_MultiDataLogger.clearFlowConfigRelevantConfiguration', clearFlowConfigRelevantConfiguration)
@@ -446,6 +473,8 @@ local function loadParameters()
446473
_G.logger:info(nameOfModule .. ": Loaded parameters for multiDataLoggerObject " .. tostring(selectedInstance) .. " from CSK_PersistentData module.")
447474
multiDataLogger_Instances[selectedInstance].parameters = helperFuncs.convertContainer2Table(data)
448475

476+
multiDataLogger_Instances[selectedInstance].parameters = helperFuncs.checkParameters(multiDataLogger_Instances[selectedInstance].parameters, helperFuncs.defaultParameters.getParameters())
477+
449478
-- If something needs to be configured/activated with new loaded data
450479
updateProcessingParameters()
451480
tmrMultiDataLogger:start()
@@ -535,7 +564,11 @@ Script.register("CSK_PersistentData.OnInitialDataLoaded", handleOnInitialDataLoa
535564

536565
local function resetModule()
537566
if _G.availableAPIs.default then
538-
clearFlowConfigRelevantConfiguration()
567+
for i = 1, #multiDataLogger_Instances do
568+
Script.notifyEvent('MultiDataLogger_OnNewProcessingParameter', i, 'deregisterEvent', true)
569+
multiDataLogger_Instances[i].parameters.registeredEvent = ''
570+
Script.notifyEvent("MultiDataLogger_OnNewStatusRegisteredEvent", '')
571+
end
539572
pageCalled()
540573
end
541574
end

0 commit comments

Comments
 (0)