Skip to content

Commit de194c9

Browse files
committed
Add Softdatatype 132, and check for only supported datatypes.
Softdatatype 132 is used as SFB parameter (e.g. AID). These parameters are hidden from the user of the engineering software, but are accessible (at least they can be read). Add a check that we only add variables to the tree, which datatype we support.
1 parent c2877ed commit de194c9

File tree

2 files changed

+98
-6
lines changed

2 files changed

+98
-6
lines changed

src/S7CommPlusDriver/ClientApi/Browser.cs

Lines changed: 93 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,13 +102,16 @@ private void AddFlatSubnodes(Node node, string names, string accessIds)
102102
if (node.Childs.Count == 0)
103103
{
104104
// Am Blatt des Baums angekommen
105-
var info = new VarInfo
105+
if (IsSoftdatatypeSupported(node.Softdatatype))
106106
{
107-
Name = names,
108-
AccessSequence = accessIds,
109-
Softdatatype = node.Softdatatype
110-
};
111-
m_varInfoList.Add(info);
107+
var info = new VarInfo
108+
{
109+
Name = names,
110+
AccessSequence = accessIds,
111+
Softdatatype = node.Softdatatype
112+
};
113+
m_varInfoList.Add(info);
114+
}
112115
}
113116
else
114117
{
@@ -327,6 +330,90 @@ private void AddSubNodes(ref Node node, PObject o)
327330
}
328331
}
329332

333+
private bool IsSoftdatatypeSupported(uint softdatatype)
334+
{
335+
switch (softdatatype)
336+
{
337+
case Softdatatype.S7COMMP_SOFTDATATYPE_BOOL:
338+
case Softdatatype.S7COMMP_SOFTDATATYPE_BYTE:
339+
case Softdatatype.S7COMMP_SOFTDATATYPE_CHAR:
340+
case Softdatatype.S7COMMP_SOFTDATATYPE_WORD:
341+
case Softdatatype.S7COMMP_SOFTDATATYPE_INT:
342+
case Softdatatype.S7COMMP_SOFTDATATYPE_DWORD:
343+
case Softdatatype.S7COMMP_SOFTDATATYPE_DINT:
344+
case Softdatatype.S7COMMP_SOFTDATATYPE_REAL:
345+
case Softdatatype.S7COMMP_SOFTDATATYPE_DATE:
346+
case Softdatatype.S7COMMP_SOFTDATATYPE_TIMEOFDAY:
347+
case Softdatatype.S7COMMP_SOFTDATATYPE_TIME:
348+
case Softdatatype.S7COMMP_SOFTDATATYPE_S5TIME:
349+
case Softdatatype.S7COMMP_SOFTDATATYPE_DATEANDTIME:
350+
case Softdatatype.S7COMMP_SOFTDATATYPE_STRING:
351+
case Softdatatype.S7COMMP_SOFTDATATYPE_POINTER:
352+
case Softdatatype.S7COMMP_SOFTDATATYPE_ANY:
353+
case Softdatatype.S7COMMP_SOFTDATATYPE_BLOCKFB:
354+
case Softdatatype.S7COMMP_SOFTDATATYPE_BLOCKFC:
355+
case Softdatatype.S7COMMP_SOFTDATATYPE_COUNTER:
356+
case Softdatatype.S7COMMP_SOFTDATATYPE_TIMER:
357+
case Softdatatype.S7COMMP_SOFTDATATYPE_BBOOL:
358+
case Softdatatype.S7COMMP_SOFTDATATYPE_LREAL:
359+
case Softdatatype.S7COMMP_SOFTDATATYPE_ULINT:
360+
case Softdatatype.S7COMMP_SOFTDATATYPE_LINT:
361+
case Softdatatype.S7COMMP_SOFTDATATYPE_LWORD:
362+
case Softdatatype.S7COMMP_SOFTDATATYPE_USINT:
363+
case Softdatatype.S7COMMP_SOFTDATATYPE_UINT:
364+
case Softdatatype.S7COMMP_SOFTDATATYPE_UDINT:
365+
case Softdatatype.S7COMMP_SOFTDATATYPE_SINT:
366+
case Softdatatype.S7COMMP_SOFTDATATYPE_WCHAR:
367+
case Softdatatype.S7COMMP_SOFTDATATYPE_WSTRING:
368+
case Softdatatype.S7COMMP_SOFTDATATYPE_LTIME:
369+
case Softdatatype.S7COMMP_SOFTDATATYPE_LTOD:
370+
case Softdatatype.S7COMMP_SOFTDATATYPE_LDT:
371+
case Softdatatype.S7COMMP_SOFTDATATYPE_DTL:
372+
case Softdatatype.S7COMMP_SOFTDATATYPE_REMOTE:
373+
case Softdatatype.S7COMMP_SOFTDATATYPE_AOMIDENT:
374+
case Softdatatype.S7COMMP_SOFTDATATYPE_EVENTANY:
375+
case Softdatatype.S7COMMP_SOFTDATATYPE_EVENTATT:
376+
case Softdatatype.S7COMMP_SOFTDATATYPE_FOLDER: // Should we support this internal datatype? Only used internally in SFBs
377+
case Softdatatype.S7COMMP_SOFTDATATYPE_AOMLINK:
378+
case Softdatatype.S7COMMP_SOFTDATATYPE_HWANY:
379+
case Softdatatype.S7COMMP_SOFTDATATYPE_HWIOSYSTEM:
380+
case Softdatatype.S7COMMP_SOFTDATATYPE_HWDPMASTER:
381+
case Softdatatype.S7COMMP_SOFTDATATYPE_HWDEVICE:
382+
case Softdatatype.S7COMMP_SOFTDATATYPE_HWDPSLAVE:
383+
case Softdatatype.S7COMMP_SOFTDATATYPE_HWIO:
384+
case Softdatatype.S7COMMP_SOFTDATATYPE_HWMODULE:
385+
case Softdatatype.S7COMMP_SOFTDATATYPE_HWSUBMODULE:
386+
case Softdatatype.S7COMMP_SOFTDATATYPE_HWHSC:
387+
case Softdatatype.S7COMMP_SOFTDATATYPE_HWPWM:
388+
case Softdatatype.S7COMMP_SOFTDATATYPE_HWPTO:
389+
case Softdatatype.S7COMMP_SOFTDATATYPE_HWINTERFACE:
390+
case Softdatatype.S7COMMP_SOFTDATATYPE_HWIEPORT:
391+
case Softdatatype.S7COMMP_SOFTDATATYPE_OBANY:
392+
case Softdatatype.S7COMMP_SOFTDATATYPE_OBDELAY:
393+
case Softdatatype.S7COMMP_SOFTDATATYPE_OBTOD:
394+
case Softdatatype.S7COMMP_SOFTDATATYPE_OBCYCLIC:
395+
case Softdatatype.S7COMMP_SOFTDATATYPE_OBATT:
396+
case Softdatatype.S7COMMP_SOFTDATATYPE_CONNANY:
397+
case Softdatatype.S7COMMP_SOFTDATATYPE_CONNPRG:
398+
case Softdatatype.S7COMMP_SOFTDATATYPE_CONNOUC:
399+
case Softdatatype.S7COMMP_SOFTDATATYPE_CONNRID:
400+
case Softdatatype.S7COMMP_SOFTDATATYPE_PORT:
401+
case Softdatatype.S7COMMP_SOFTDATATYPE_RTM:
402+
case Softdatatype.S7COMMP_SOFTDATATYPE_PIP:
403+
case Softdatatype.S7COMMP_SOFTDATATYPE_OBPCYCLE:
404+
case Softdatatype.S7COMMP_SOFTDATATYPE_OBHWINT:
405+
case Softdatatype.S7COMMP_SOFTDATATYPE_OBDIAG:
406+
case Softdatatype.S7COMMP_SOFTDATATYPE_OBTIMEERROR:
407+
case Softdatatype.S7COMMP_SOFTDATATYPE_OBSTARTUP:
408+
case Softdatatype.S7COMMP_SOFTDATATYPE_DBANY:
409+
case Softdatatype.S7COMMP_SOFTDATATYPE_DBWWW:
410+
case Softdatatype.S7COMMP_SOFTDATATYPE_DBDYN:
411+
return true;
412+
default:
413+
return false;
414+
}
415+
}
416+
330417
protected class Node
331418
{
332419
public eNodeType NodeType;

src/S7CommPlusDriver/ClientApi/PlcTags.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,11 @@ public PlcTag TagFactory(string name, ItemAddress address, uint softdatatype)
136136
case Softdatatype.S7COMMP_SOFTDATATYPE_EVENTATT:
137137
return new PlcTagDWord(name, address, softdatatype);
138138

139+
case Softdatatype.S7COMMP_SOFTDATATYPE_FOLDER:
140+
// Softdatatype 132: This type is only used as parameter for internal SFBs (e.g. AID input parameter)
141+
// Length of value (4 byte) calculated from the offsetinfo byte addresses.
142+
return new PlcTagDWord(name, address, softdatatype);
143+
139144
case Softdatatype.S7COMMP_SOFTDATATYPE_AOMLINK:
140145
return new PlcTagDWord(name, address, softdatatype);
141146

0 commit comments

Comments
 (0)