Welcome to the new Schneider Electric Community

It's your place to connect with experts and peers, get continuous support, and share knowledge.

  • Explore the new navigation for even easier access to your community.
  • Bookmark and use our new, easy-to-remember address (community.se.com).
  • Get ready for more content and an improved experience.

Contact SchneiderCommunity.Support@se.com if you have any questions.

Invite a Co-worker
Send a co-worker an invite to the Exchange portal.Just enter their email address and we’ll connect them to register. After joining, they will belong to the same company.
Send Invite Cancel

[Imported] Read array from script without any values set in array first.

EcoStruxure Geo SCADA Expert Forum

Find out how SCADA systems and networks, like EcoStruxure Geo SCADA Expert, help industrial organizations maintaining efficiency, processing data for smarter decision making with IoT, RTU and PLC devices.

Janeway Janeway

[Imported] Read array from script without any values set in array first.

>>Message imported from previous forum - Category:Scripts and Tips<<
User: mchartrand, originally posted: 2018-10-25 19:36:38 Id:285
This is a re-posting from the obsoleted (October 2018) "Schneider Electric Telemetry & SCADA" forum.


I'm looking for a solution on reading a CVariableStringArray. The array values have never been set. I want to read them in script from a CVariableStringArray. Because of the array im trying to read element values are not set it returns an unspecified error. If I go ahead and set values in DB tree to the array and run script it works fine. Please help with this._**


Can you provide examples of your code for the reading?


I want to query a group of instances, create array of these instances.
then build form to show that array in list box, but first set selected with the array that is empty. but to start the list will have none selected until i select them.
finally i will set the array to the is selected
again if i set the elements in array outside of script it will work fine. its only when no element are ever set or if i make the query array larger.
Thanks for help_**

_Public Sub Zone_Assign
Set oZone_Name = Server.FindObject(Server.ThisObject.Parent.FullName)
oZone_Grp_Name = oZone_Name.Parent.Name
Set oZone_Sirens = oZone_Name.FindChild("Sirens")
Set oSiren_Grp = Server.FindObject("Sirens")
Set DGRS = Server.Query("SELECT Name AS Name FROM CDBOBJECT WHERE ( TypeName = 'CTemplateInstance' ) AND ( ParentGroupName Like '"&oSiren_Grp.Name&"' )")
DGRows = DGRS.Rows
For r = 0 To (DGRS.RowCount - 1)
Redim Preserve oSirens(r)
oSirens(r) = DGRows(r,0)

_arrCount = uBound(oSirens) + 1_

_Form.Init (oZone_Name.Name + " Siren Assignment")
Set frmGrpbx1 = Form.AddGroupBox(0,0,90,17,"Select Sirens")
Set frmCmbo1 = Form.AddListBox(2,2,10,4,oSirens)
frmCmbo1.Multiple = True
x = 0
For x = 0 To (arrCount - 1)
IF Server.GetOPCValue(""& oZone_Name.FullName &".Sirens.Value["& x &"]") "" THEN 'Here is the problem
frmCmbo1.SetSelected x,TRUE
Set frmOKButton = Form.AddPushButton(20,14,"OK")
frmOKButton.Default = True
Set frmCancelButton = Form.AddPushButton(56,14,"Cancel")

_If Form.Selection = "OK" Then_

_x = 0
For x = 0 To (arrCount - 1)
IF frmCmbo1.IsSelected(x) Then
Server.SetOPCValue(""& oZone_Name.FullName &".Sirens.Value["& x &"]"),oSirens(x)
Server.SetOPCValue(""& oZone_Name.FullName &".Sirens.Value["& x &"]"),""
End If
End Sub_



I reckon you are best of with creating some of your own error handling, as an example:

_Sub ArrayError()
For x=0 to 2
On Error Resume Next
msgbox Server.GetOPCValue("SA.Value["&x&"]")
IF Err.Number0 Then
msgbox "x="&x
Exit For
End if
On Error GoTO 0
End sub_


That works for set selected but will not write the isselected part of the array._**

_x = 0
For x = 0 To (arrCount - 1)
IF frmCmbo1.IsSelected(x) Then
MsgBox oZone_Name.FullName + ".Sirens.Value["& x &"]"
Server.SetOPCValue(""& oZone_Name.FullName &".Sirens.Value["& x &"]"),oSirens(x)
Server.SetOPCValue(""& oZone_Name.FullName &".Sirens.Value["& x &"]"),""


I have not tried setting an array from scripts but have you tried setting it through a interface method?

I am not sure how to do this for an array maybe Erik can give an example.

This is my stab in the dark at it but I am pretty sure I do not have it quite right.

_Dim objSirensCmd
Set objSirensCmd = Server.FindObject(Server.GetOPCValue(""& oZone_Name.FullName &".Sirens.FullName["& x &"]"))
objSirensCmd.Interface.SetElement oSirens, x_

edit: had my variable wrong on the last line of the example



Can you explain what the problem is with the set selected (what line gives you an error)?

It works for me as for as I can tell.