EcoStruxure Geo SCADA Expert Forum
Schneider Electric support forum about installation, configuration, integration and troubleshooting of EcoStruxure Geo SCADA Expert (ClearSCADA, ViewX, WebX).
Link copied. Please paste this link to share this article on your social media post.
Posted: 2019-12-09 01:39 PM . Last Modified: 2023-05-03 12:19 AM
I am pretty sure the answer is no, but is there any way to make the default for "Shared with other embedded mimics" to be False?
I know why it is true by default, but for this project, it should be fine without it.
At the moment I am showing/hiding lines based on some parameters that are read as the mimic loads.
I need it false because with "Shared with other embedded mimics" set to true:
Mimic_load on the embedded mimic does not work.
If a button executes the code all the embedded mimics change, instead of just the one.
Unchecking the "Shared with other embedded mimics" box is an extra step I don't want the users to have to do. It will make their task even more complex when creating a new location.
Link copied. Please paste this link to share this article on your social media post.
Link copied. Please paste this link to share this article on your social media post.
Posted: 2019-12-09 01:49 PM
You could try having your embedded mimic embedded in another mimic that the end-user will 'instantiate' and in which your current embedded mimic has the 'Shared with other embedded mimics' tick box unticked within the new embedded mimic you would create to hold the original.
Gee that felt inception like to describe.
I'm not sure if the Mimic_load method is called on every embedded mimic however, I've only ever really used it on Top Level Mimics.
So the flow would be:
User Mimic -> Your new mimic (tick box setting shouldn't matter) -> Your existing mimic (set to 'Shared with embedded mimics' FALSE)
This is generally all that is required when doing embedded mimics, is to break the chain somewhere before you end up using a hover animation or similar (i.e. something that needs its own unique 'instance data').
Link copied. Please paste this link to share this article on your social media post.
Link copied. Please paste this link to share this article on your social media post.
Posted: 2019-12-09 02:05 PM
Bevan,
Well unfortunately, in this case anyway, that did not work.
I gave me the exact same behavior.
I still had to uncheck it on the embedded version of the New Mimic to make it work.
Link copied. Please paste this link to share this article on your social media post.
Link copied. Please paste this link to share this article on your social media post.
Posted: 2019-12-09 02:13 PM
Mimic_Load is designed to be used with top-level Mimics only, and should not be used in scripts on embedded Mimics. This is because it is difficult to predict when the script will run:
•With embedded Mimics that are configured to be shared, Mimic_Load runs whenever the embedded Mimic is loaded into the Mimic cache. When a host Mimic (a Mimic that contains an embedded Mimic) is displayed, ClearSCADA checks whether the embedded Mimic is stored in the Mimic cache: •If the embedded Mimic is not in the Mimic cache, ClearSCADA will load the embedded Mimic in to the cache and run its script. By loading the embedded Mimic into the Mimic cache, ClearSCADA reduces the overall load of the Mimic, which means the Mimic requires less system resources.
•If the embedded Mimic is already in the Mimic cache, the cached version will be referenced and its script will not run (as it is already in the Mimic cache). The Mimic places less demand on system resources (as a local reference to the cached embedded Mimic is used). As a result, the script does not run.•With embedded Mimics that are not shared, Mimic_Load runs whenever a non-shared instance of that embedded Mimic is initialized. For example, if a Mimic named ‘Control Room’ contains three embedded versions of a ‘Valve’ Mimic, the script on the ‘Valve’ Mimic will run three times - when each of the embedded versions are initialized.
ClearSCADA help says you shouldn't use it on embedded Mimics 😛
But, it sounds like that final item should apply in the situation that I'm suggesting. Each embedded mimic that a user places on the page should have a non-shared instance of your original embedded mimic within it.
I suspect that since you're playing with fringe cases here in the script execution you may be running into slightly less well defined behaviour, and hence 'bugs' (or undesired features).
Do you have a support ticket open for this?
You could try setting the Mimic Cache size to be 0KB. I suspect that this won't work however..
Link copied. Please paste this link to share this article on your social media post.
Link copied. Please paste this link to share this article on your social media post.
Posted: 2019-12-09 02:24 PM
I swear I read in the help that you could use Mimic_Load but not Mimic_Navigate.
I think I found a completely different solution. I think I can just manipulate the animations to do what I want.
Link copied. Please paste this link to share this article on your social media post.
Posted: 2019-12-09 06:47 PM
Link copied. Please paste this link to share this article on your social media post.
Posted: 2019-12-09 06:47 PM
You can't, but you might be able to set it programatically using the unsupported ViewX interface. There is some code hanging around that is 10 years old but might still work. I'll message it to you. Anyone else wanting it please raise a case with support, but don't expect it to work!
Link copied. Please paste this link to share this article on your social media post.
Link copied. Please paste this link to share this article on your social media post.
Posted: 2019-12-10 02:43 AM
To be clear about the automation interface for ViewX, it is extensively used for many purposes, both live and for engineering/configuration, and we can answer queries on its use. But the API is neither complete for all ViewX operations nor is it invariant between releases (although it pretty much has been).
Here is an example of vbs or mimic script to analyse embedded mimic sharing (and also indirect animations).
'Sample vbs or mimic script program to examine mimics for embedded shared mimics and indirect animations
'Sample code only
Sub GoFindEmbeddedShared
LogClear
SystemName = "Local"
Dim xvw
Set xvw = CreateObject("Serck.ViewXApplication")
' If used in a vbs script , then log in:
'xvw.logon systemName, "User", "Password"
MimicName = "Default"
ProcessMimic MimicName, SystemName, xvw
LogClose
End Sub
Sub ProcessMimic( mimicName, systemName, xvw)
Dim mim
Log "Analyse," & mimicName
Set mim = xvw.Mimics.OpenFromServer( False, systemName, mimicName )
if mim.ScriptEnabled then
Log "Script is enabled," & mimicName & "," & len(mim.Script) & ",bytes"
if (InStr( UCASE(mim.Script), "MIMIC_NAVIGATE") > 0) or (InStr( UCASE(mim.Script), "MIMIC_LOAD") > 0) then
Log "Mimic Load or Navigate Found," & mimicName
end if
end if
For each Layer in mim.Layers
mim.ActiveLayer=Layer
For Each Item In Layer
' Find shared flags
If Item.Type = 3 Then
If Item.Shared = True Then
'You can set unshared using:
'Item.Shared = False
Log "Shared," & mimicName & "," & Item.Name & "," & Item.Definition
End If
'Embedded mimic - call inner
cMimicPos = InStr( Item.Definition, "CMimic") 'Get CS Name from SCX:////CMimic/<name>
mName = mid( Item.Definition, cMimicPos + 7)
if left(mName,1) <> "." then
newMimicName = mName
else
'need to convert relative to absolute, using path of mimicName
'get # of dots to left of mName e.g. ..A.B -> ,,A,B
mNameArr = split( mName, ".")
dotCount = 0
i = 0
for i = 0 to ubound(mNameArr)
if (mNameArr(i) <> "") then
exit for
end if
next
'e.g. if .A then i=1, if ..A.B then i = 2
'now split parent mimic path, e.g. a.b.c -> a,b,c
mParentPath = split( mimicName, ".")
newMimicName = ""
for i = 0 to ubound( mParentPath) - i 'Path folder names but not mimic name (-1), remove 1 more for each .
newMimicName = newMimicName + mParentPath( i) + "."
next
'now append non-blank names from relative path
newMimicName = newMimicName
for i = 0 to ubound(mNameArr)
if (mNameArr(i) <> "") then
newMimicName = newMimicName + mNameArr(i) + "."
end if
next
'remove extra .
newMimicName = left(newMimicName, len(newMimicName)-1 )
end if
' Call recursively
ProcessMimic newMimicName, systemName, xvw
End If
' Find animations
For Each Ani In Item.Animations
aniProperty = Ani.Property
aniExpression = Ani.Expression
If InStr(aniExpression,"[")>0 and InStr(aniExpression,"]")>0 then
Log "Indirect," & mimicName & "," & Item.Name & "," & aniProperty & "," & aniExpression
'If any animations are indirect, then all mimics up the chain should not be shared
End If
Next
Next
Next
Mim.Close
End Sub
' Logging to file
Dim objFSO
Dim objFile
Sub Log( text)
objFile.Write text & vbCrLf
End Sub
Sub LogClear( )
Set objFSO=CreateObject("Scripting.FileSystemObject")
outFile="c:\FindEmbeddedIndirect.txt"
Set objFile = objFSO.CreateTextFile(outFile,True)
End Sub
Sub LogClear( )
objFile.Close
End Sub
Link copied. Please paste this link to share this article on your social media post.
Link copied. Please paste this link to share this article on your social media post.
Posted: 2019-12-10 08:39 AM . Last Modified: 2019-12-13 04:53 PM
Thanks, everyone for your suggestions.
I don't think using the Automation interface is practical for this application. That would still be something that the user adding a new location would have to do.
What I ended up with script-wise was a comparison of the first two characters of an instance name with a group of parameters in another instance. to show/hide lines and animate some colors.
getting to that was a process of a few failures on how to get the animation I wanted where there is the option of using a bunch of different instances, in different orders of location.
I found a solution that does not use any scripting. So far I have not broken it anyway.
My new solution just uses the animations and compares the first two characters of the Name (which is set through a mimic parameter) and String Parameter by using LEFT()
This method does not need the Shared with other embedded mimics set to False.
So while it solves my specific issue it is not a solution to the actual question I asked.
Link copied. Please paste this link to share this article on your social media post.
Link copied. Please paste this link to share this article on your social media post.
Posted: 2019-12-13 06:41 AM
i know the documentation on this leaves some to be desired, but are the item.type numbers enumerated anywhere?
ex:
If Item.Type = 3 Then
Link copied. Please paste this link to share this article on your social media post.
Link copied. Please paste this link to share this article on your social media post.
Posted: 2019-12-15 02:43 PM
You can enumerate the DrwType class, from some of my code (ignore the Return, I just didn't change them to something meaningful in the snippet):
Select Case obj.Type
Case DrwType.DrwButton
Return COST_OTHER
Case DrwType.DrwEmbeddedAlarmList
Return COST_ALARMLIST
Case DrwType.DrwEmbeddedDynagraph
Return COST_TREND
Case DrwType.DrwEmbeddedGraph
Return COST_TREND
Case DrwType.DrwEmbeddedList
Return COST_SQLLIST
Case DrwType.DrwEmbeddedMimic
Return 0 '' Calculated on load not on scan, i.e. cost is added elsewhere
Case DrwType.DrwEmbeddedXYPlot
Return COST_TREND
Case DrwType.DrwEmbeddedXYZPlot
Return COST_TREND
Case DrwType.DrwGroup
Return COST_OTHER
Case DrwType.DrwHLink
Return COST_OTHER
Case DrwType.DrwImage
Return COST_BITMAP
Case DrwType.DrwOLE
Return COST_OTHER
Case DrwType.DrwPieChart
Return COST_PIECHART
Case DrwType.DrwPipe
Return COST_PIPE
Case DrwType.DrwPolyline
Return COST_PRIMITIVE
Case DrwType.DrwRemoteImage
Return COST_REMOTEIMAGE
Case DrwType.DrwText
Return COST_PRIMITIVE
Case Else
Return COST_OTHER
End Select
Link copied. Please paste this link to share this article on your social media post.
Link copied. Please paste this link to share this article on your social media post.
Posted: 2019-12-16 06:42 AM
ooooo nice! thanks for this! it'll certainly come in handy.
Link copied. Please paste this link to share this article on your social media post.
Create your free account or log in to subscribe to the board - and gain access to more than 10,000+ support articles along with insights from experts and peers.