@@ -237,26 +237,15 @@ converter.getParameterReadFunctions = getParameterReadFunctions
237237-- Convert a raw binary data from IO-Link device to a meaningful Lua table
238238local function getReadServiceDataResult (binData , parameterInfo )
239239 local Result = {}
240- if parameterInfo .Datatype .type == ' ArrayT' then
241- local simpleDataBitLength = getDatatypeBitlength (parameterInfo .Datatype .Datatype )
242- local bitIndexer = 0
243- for i = 1 , parameterInfo .Datatype .count do
244- local simpleBinaryData = disassembleData (binData , bitIndexer , simpleDataBitLength )
245- bitIndexer = bitIndexer + simpleDataBitLength
246- Result [" element_" .. tostring (i )] = {
247- value = toDataType (simpleBinaryData , parameterInfo .Datatype .Datatype .type )
248- }
249- end
250- elseif parameterInfo .Datatype .type == ' RecordT' then
251- for _ , SingleItem in ipairs (parameterInfo .Datatype .RecordItem ) do
252- local binaryData = disassembleData (binData , tonumber (SingleItem .bitOffset ), getDatatypeBitlength (SingleItem .Datatype ))
253-
254- Result [SingleItem .Name ] = {
255- value = toDataType (binaryData , SingleItem .Datatype .type )
240+ if parameterInfo .info .type == ' ArrayT' or parameterInfo .info .type == ' RecordT' then
241+ for _ , SingleItem in pairs (parameterInfo .subindeces ) do
242+ local binaryData = disassembleData (binData , tonumber (SingleItem .info .bitOffset ), getDatatypeBitlength (SingleItem .info ))
243+ Result [SingleItem .info .Name ] = {
244+ value = toDataType (binaryData , SingleItem .info .type )
256245 }
257246 end
258- elseif parameterInfo .Datatype then
259- Result .value = toDataType (binData , parameterInfo .Datatype .type )
247+ elseif parameterInfo .info then
248+ Result .value = toDataType (binData , parameterInfo .info .type )
260249 end
261250 return Result
262251end
@@ -267,11 +256,11 @@ converter.getReadServiceDataResult = getReadServiceDataResult
267256local function getReadProcessDataResult (binData , processDataInfo )
268257 local resultData = {}
269258 for dataPointID , dataPointInfo in pairs (processDataInfo ) do
270- if dataPointInfo .Datatype .type == ' RecordT' or dataPointInfo .Datatype .type == ' ArrayT' then
259+ if dataPointInfo .info .type == ' RecordT' or dataPointInfo .info .type == ' ArrayT' then
271260 resultData [dataPointID ] = getReadServiceDataResult (binData , dataPointInfo )
272261 else
273- local offsetData = disassembleData (binData , tonumber (dataPointInfo .bitOffset ), getDatatypeBitlength (dataPointInfo .Datatype ))
274- resultData [dataPointID ] = {value = toDataType (offsetData , dataPointInfo .Datatype .type )}
262+ local offsetData = disassembleData (binData , tonumber (dataPointInfo .info . bitOffset ), getDatatypeBitlength (dataPointInfo .info ))
263+ resultData [dataPointID ] = {value = toDataType (offsetData , dataPointInfo .info .type )}
275264 end
276265 end
277266 return resultData
@@ -281,15 +270,9 @@ converter.getReadProcessDataResult = getReadProcessDataResult
281270-- Return a JSON payload of expacted format filled with null values in case reading of a Parameter has failed
282271local function getFailedReadServiceDataResult (parameterInfo )
283272 local Result = {}
284- if parameterInfo .Datatype .type == ' ArrayT' then
285- for i = 1 , parameterInfo .Datatype .count do
286- Result [" element_" .. tostring (i )] = {
287- value = " null"
288- }
289- end
290- elseif parameterInfo .Datatype .type == ' RecordT' then
291- for _ , SingleItem in ipairs (parameterInfo .Datatype .RecordItem ) do
292- Result [SingleItem .Name ] = {
273+ if parameterInfo .info .type == ' ArrayT' or parameterInfo .info .type == ' RecordT' then
274+ for _ , SingleItem in pairs (parameterInfo .subindeces ) do
275+ Result [SingleItem .info .Name ] = {
293276 value = " null"
294277 }
295278 end
@@ -384,34 +367,18 @@ end
384367-- Conver Lua table of a complex type (array or record) to a binary data for writing to IO-Link device
385368local function getComplexServiceDataToWrite (parameterInfo , data )
386369 local bitArray
387- local byteLength = math.ceil (getDatatypeBitlength (parameterInfo .Datatype ) / 8 )
388- if parameterInfo .Datatype .type == ' ArrayT' then
389- bitArray = makeEmptyBitArray (getDatatypeBitlength (parameterInfo .Datatype ))
390-
391- local simpleDataBitLength = getDatatypeBitlength (parameterInfo .Datatype .Datatype )
392- local bitIndexer = 0
393- for i = 1 , tonumber (parameterInfo .Datatype .count ) do
394- insertIntoBitArray (
395- bitArray ,
396- data [i ].value ,
397- parameterInfo .Datatype .Datatype .type ,
398- bitIndexer * simpleDataBitLength ,
399- simpleDataBitLength
400- )
401- bitIndexer = bitIndexer + 1
402- end
403- elseif parameterInfo .Datatype .type == ' RecordT' then
404- bitArray = makeEmptyBitArray (getDatatypeBitlength (parameterInfo .Datatype ))
405- for _ , SingleItem in ipairs (parameterInfo .Datatype .RecordItem ) do
370+ local byteLength = math.ceil (getDatatypeBitlength (parameterInfo .info ) / 8 )
371+ if parameterInfo .info .type == ' ArrayT' or parameterInfo .info .type == ' RecordT' then
372+ bitArray = makeEmptyBitArray (getDatatypeBitlength (parameterInfo .info ))
373+ for _ , SingleItem in pairs (parameterInfo .subindeces ) do
406374 insertIntoBitArray (
407375 bitArray ,
408- data [SingleItem .Name ].value ,
409- SingleItem .Datatype .type ,
410- tonumber (SingleItem .bitOffset ),
411- getDatatypeBitlength (SingleItem .Datatype )
376+ data [SingleItem .info . Name ].value ,
377+ SingleItem .info .type ,
378+ tonumber (SingleItem .info . bitOffset ),
379+ getDatatypeBitlength (SingleItem .info )
412380 )
413381 end
414-
415382 end
416383 local bin = ' '
417384 for i = 1 , byteLength do
@@ -422,58 +389,16 @@ local function getComplexServiceDataToWrite(parameterInfo, data)
422389end
423390converter .getComplexServiceDataToWrite = getComplexServiceDataToWrite
424391
425-
426-
427392---- ---------------------------------------------------------------------------------
428- -- Conver Lua table to a binary data for writing to IO-Link device
393+ -- Convert Lua table to a binary data for writing to IO-Link device
429394local function getBinaryDataToWrite (dataPointInfoInfo , data )
430- if dataPointInfoInfo .Datatype .type == ' ArrayT' or dataPointInfoInfo .Datatype .type == ' RecordT' then
395+ if dataPointInfoInfo .info .type == ' ArrayT' or dataPointInfoInfo .info .type == ' RecordT' then
431396 return getComplexServiceDataToWrite (dataPointInfoInfo , data )
432397 else
433- return toBinaryData (dataPointInfoInfo .Datatype .type , math.ceil (getDatatypeBitlength (dataPointInfoInfo .Datatype )/ 8 ), data .value )
398+ local test = toBinaryData (dataPointInfoInfo .info .type , math.ceil (getDatatypeBitlength (dataPointInfoInfo .info )/ 8 ), data .value )
399+ return test
434400 end
435401end
436402converter .getBinaryDataToWrite = getBinaryDataToWrite
437403
438- -- changing ["xsi:type"] to more convenient .type key
439- local function renameDatatype (dataPointInfo )
440- if dataPointInfo .SimpleDatatype then
441- dataPointInfo .Datatype = helperFuncs .copy (dataPointInfo .SimpleDatatype )
442- dataPointInfo .SimpleDatatype = nil
443- elseif dataPointInfo .Datatype .SimpleDatatype then
444- dataPointInfo .Datatype .Datatype = helperFuncs .copy (dataPointInfo .Datatype .SimpleDatatype )
445- dataPointInfo .Datatype .SimpleDatatype = nil
446- if dataPointInfo .Datatype .Datatype [" xsi:type" ] then
447- dataPointInfo .Datatype .Datatype .type = dataPointInfo .Datatype .Datatype [" xsi:type" ]
448- dataPointInfo .Datatype .Datatype [" xsi:type" ] = nil
449- end
450- elseif dataPointInfo .Datatype .RecordItem then
451- for recordItemID , recordItemInfo in ipairs (dataPointInfo .Datatype .RecordItem ) do
452- if recordItemInfo .SimpleDatatype then
453- dataPointInfo .Datatype .RecordItem [recordItemID ].Datatype = helperFuncs .copy (recordItemInfo .SimpleDatatype )
454- dataPointInfo .Datatype .RecordItem [recordItemID ].SimpleDatatype = nil
455- if recordItemInfo .Datatype [" xsi:type" ] then
456- dataPointInfo .Datatype .RecordItem [recordItemID ].Datatype .type = recordItemInfo .Datatype [" xsi:type" ]
457- dataPointInfo .Datatype .RecordItem [recordItemID ].Datatype [" xsi:type" ] = nil
458- end
459- end
460- end
461- end
462- if dataPointInfo .Datatype [" xsi:type" ] then
463- dataPointInfo .Datatype .type = dataPointInfo .Datatype [" xsi:type" ]
464- dataPointInfo .Datatype [" xsi:type" ] = nil
465- end
466- return dataPointInfo
467- end
468- converter .renameDatatype = renameDatatype
469-
470- -- changing ["xsi:type"] to more convenient .type key
471- local function renameDatamode (dataModeTable )
472- for dataPointID , dataPointInfo in ipairs (dataModeTable ) do
473- dataModeTable [dataPointID ] = renameDatatype (dataPointInfo )
474- end
475- return dataModeTable
476- end
477- converter .renameDatamode = renameDatamode
478-
479404return converter
0 commit comments