Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Opcua Write:

    Code Block
    languagexml
    titleOpcua Write Facet
    linenumberstrue
      <ThingFacet Name="OPCWriteFacet">
        <String Name="OpcData" KnownBy="OPCSubscriberAction"/>
        <String Name="NodeID"/>
        <Integer Name="AttributeID"/>
        <String Name="Operation"/>
        <ConnectionConfig Name="OPCWriteConnectionConfig"/>
        <Action Name="OPCSubscriberAction">
          <Workflow Limit="1" Live="1" Timeout="-1">
            <Task name="Main" >
              <Event as="ActionArgument" name="Argument"/>
              <Invoke get="opcua://" waitFor="Argument" name="InvokeOPCWrite" Operation="[%:Event.Argument.Operation.Value:%]" 
                ServerUri="[%:Event.Argument.OPCWriteConnectionConfig.ServerUri.Value:%]" 
                SecurityMode="[%:Event.Argument.OPCWriteConnectionConfig.SecurityMode.Value:%]" 
                UserName="[%:Event.Argument.OPCWriteConnectionConfig.SecurityOptions.UserName.Value:%]"
                Password="[%:Event.Argument.OPCWriteConnectionConfig.SecurityOptions.Password.Value:%]"
                Path="[%:Event.Argument.OPCWriteConnectionConfig.SecurityOptions.CertificationParameters.Path.Value:%]"
                ValidityInDay="[%:Event.Argument.OPCWriteConnectionConfig.SecurityOptions.CertificationParameters.ValidityInDay.Value:%]"
                AutoCertificateRenewal="[%:Event.Argument.OPCWriteConnectionConfig.SecurityOptions.CertificationParameters.AutoCertificateRenewal.Value:%]"
                PrivateKeyPwd="[%:Event.Argument.OPCWriteConnectionConfig.SecurityOptions.CertificationParameters.PrivateKeyPwd.Value:%]"
                OrgName="[%:Event.Argument.OPCWriteConnectionConfig.SecurityOptions.CertificationParameters.OrgName.Value:%]"
                KeySize="[%:Event.Argument.OPCWriteConnectionConfig.SecurityOptions.CertificationParameters.KeySize.Value:%]"
                AppUri="[%:Event.Argument.OPCWriteConnectionConfig.SecurityOptions.ApplicationIdentity.AppUri.Value:%]"
                AppName="[%:Event.Argument.OPCWriteConnectionConfig.SecurityOptions.ApplicationIdentity.AppName.Value:%]"
                ProductUri="[%:Event.Argument.OPCWriteConnectionConfig.SecurityOptions.ApplicationIdentity.ProductUri.Value:%]"
                NodeID="[%:Event.Argument.NodeID.Value:%]"
                AttributeID="[%:Event.Argument.AttributeID.Value:%]">
                <Message>
                  <Value>
                    "[%:Event.Argument.opcData.Value:%]"
                  </Value>
                </Message>
              </Invoke>
              <Output As="ActionResult" Name="Result">
                <Value>
                  <OpcData>[%:Invoke.InvokeOPCWrite.Message.Value:%]</OpcData>
                </Value>
              </Output>
            </Task>
          </Workflow>
        </Action>
      </ThingFacet>
    Code Block
    languagexml
    titlewrite Initialization Query
    linenumberstrue
    <Query>
      <DeleteAll>
        <OPCWriteModel>
          <writeId ne=""/>
        </OPCWriteModel>
      </DeleteAll>
      <Create>
        <OPCWriteModel>
          <Operation>
            Write
          </Operation>
          <OPCWriteConnectionConfig>
            <ServerUri>
              opc.tcp://ServerURL:ServerPort
            </ServerUri>
            <SecurityMode>
              2
            </SecurityMode>
            <SecurityOptions>
              <UserName/>
              <Password/>
              <ApplicationIdentity>
                <AppName>
                  atomitonClient@localhost
                </AppName>
                <AppUri>
                  urn:localhost:OPCUATQL
                </AppUri>
                <ProductUri>
                  urn:atomiton.com:OPCUA
                </ProductUri>
              </ApplicationIdentity>
              <CertificationParameters>
                <OrgName>
                  atomiton
                </OrgName>
                <Path>
                  /atomiton/certs
                </Path>
                <PrivateKeyPwd>
                  123lk#
                </PrivateKeyPwd>
                <ValidityInDay>
                  3650
                </ValidityInDay>
                <AutoCertificateRenewal>
                  true
                </AutoCertificateRenewal>
                <KeySize>
                  2048
                </KeySize>
              </CertificationParameters>
            </SecurityOptions>
          </OPCWriteConnectionConfig>
          <NodeID>
            ns=2;s=Atomiton.OilAndGas.Device1.TankData.USSAV1S01HST.Tank1.Tank_1_FCU_Temperature
          </NodeID>
          <AttributeID>
            13
          </AttributeID>
          <OpcData>
            1024
          </OpcData>
        </OPCWriteModel>
      </Create>
    </Query>
    Code Block
    languagexml
    titleWrite Update query
    linenumberstrue
    <Query>
      <Find format="version,known">
        <OPCWriteModel>
          <writeId ne=""/>
        </OPCWriteModel>
      </Find>
      <if condition="$Response.Message.Value/Find/Status eq 'Success'">
        <then>
          <SetResponseData>
            <key>
              Message.Value.Find.Result.OPCWriteModel.OpcData.Value
            </key>
            <value>
              200
            </value>
          </SetResponseData>
          <Update>
            <from>
              Result
            </from>
            <Include>
              $Response.Message.Value.Find
            </Include>
          </Update>
        </then>
      </if>
    </Query>
  • Opcua Subscription:

    Code Block
    languagexml
    titleOpcua Subscription Facet
    linenumberstrue
    	<Def Name="CertificationParams">
            <String Name="OrgName"/>
            <String Name="Path"/>
            <String Name="PrivateKeyPwd"/>
            <String Name="ValidityInDay"/>
            <String Name="AutoCertificateRenewal"/>
            <Integer Name="KeySize"/>           
        </Def>
        
        <Def Name="AppIdentity">
            <String Name="AppName"/>
            <String Name="AppUri"/>
            <String Name="ProductUri"/>
        </Def>
    
        <Def Name="SecurityConfig">
            <String Name="UserName"/>
            <String Name="Password"/>
            <AppIdentity Name="ApplicationIdentity"/> 
            <CertificationParams Name="CertificationParameters"/>       
        </Def>    
    
        <Def Name="ConnectionConfig">
            <String Name="ServerUri"/>
            <Integer Name="SecurityMode"/>  
            <SecurityConfig Name="SecurityOptions"/>     
        </Def>
    
        <Def Name="OPCUaSubscribe">
          <String Name="NodeID" Cardinality="0..m"/>
          <String Name="AttributeID"/>
          <String Name="SubscribeChild"/>
        </Def> 
     
        <ThingFacet Name="OPCSubscriberFacet">
          <String Format="$ObjectFormat(xml)" Name="SubscriptionPayload" KnownBy="OPCSubscriberAction" update="auto"/>
          <String Name="Operation"/>
          <ConnectionConfig Name="OPCSubscribeConnectionConfig"/>
          <OPCUaSubscribe Name="OPCSubscriptionConfig"/>
          <Action Name="OPCSubscriberAction">
            <Workflow Limit="1" Live="1" Timeout="-1">
              <Task name="Main" while="true">
                <Event as="ActionArgument" name="Argument"/>
                <Invoke AppName="[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.ApplicationIdentity.AppName.Value:%]" 
    AppUri="[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.ApplicationIdentity.AppUri.Value:%]" 
    AutoCertificateRenewal="[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.AutoCertificateRenewal.Value:%]" 
    KeySize="[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.KeySize.Value:%]" 
    OPCSubscriptionConfig="[%:Event.Argument.OPCSubscriptionConfig:%]" 
    Operation="[%:Event.Argument.Operation.Value:%]" 
    OrgName="[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.OrgName.Value:%]" 
    Password="[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.Password.Value:%]" 
    Path="[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.Path.Value:%]" 
    PrivateKeyPwd="[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.PrivateKeyPwd.Value:%]" 
    ProductUri="[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.ApplicationIdentity.ProductUri.Value:%]" 
    SecurityMode="[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityMode.Value:%]" 
    ServerUri="[%:Event.Argument.OPCSubscribeConnectionConfig.ServerUri.Value:%]"
    UserName="[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.UserName.Value:%]" 
    ValidityInDay="[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.ValidityInDay.Value:%]" 
    get="opcua://Subscribe" name="InvokeOPCSubscription" scope="process" waitFor="Argument"/>
                <Output As="ActionResult" Name="Result">
                  <Value>
                    <SubscriptionPayload>
                      <Include>Invoke.InvokeOPCSubscription.Message.Value</Include>
                    </SubscriptionPayload>
                  </Value>
                </Output>
              </Task>
            </Workflow>
          </Action>
        </ThingFacet>

    Note: The output is stored in the variable SubscriptionPayload although the Known By is on the variable SubscriptionData, this has been done to preserve the Xml structure and avoid TP processing. 

    Code Block
    languagexml
    titleSubscription Initialization Query
    linenumberstrue
    <Query>
      <DeleteAll>
        <OPCSubscriberModel>
          <subscribeId ne=""/>
        </OPCSubscriberModel>
      </DeleteAll>
      <Create>
        <OPCSubscriberModel>
          <Operation>
            subscription
          </Operation>
          <OPCSubscribeConnectionConfig>
            <ServerUri>
              opc.tcp://MSEDGEWIN10Server:49320ServerPort
            </ServerUri>
            <SecurityMode>
              2
            </SecurityMode>
            <SecurityOptions>
              <UserName/>
              <Password/>
              <ApplicationIdentity>
                <AppName>
                  atomitonClient@localhost
                </AppName>
                <AppUri>
                  urn:localhost:OPCUATQL
                </AppUri>
                <ProductUri>
                  urn:atomiton.com:OPCUA
                </ProductUri>
              </ApplicationIdentity>
              <CertificationParameters>
                <OrgName>
                  atomiton
                </OrgName>
                <Path>/atomiton/certs</Path>
                <PrivateKeyPwd>
                  tql123#
                </PrivateKeyPwd>
                <ValidityInDay>
                  3650
                </ValidityInDay>
                <AutoCertificateRenewal>
                  true
                </AutoCertificateRenewal>
                <KeySize>
                  2048
                </KeySize>
              </CertificationParameters>
            </SecurityOptions>
          </OPCSubscribeConnectionConfig>
          <OPCSubscriptionConfig>
            <NodeID>
              ns=2;s=Atomiton.OilAndGas.Test.Device1.TankData.Test.Tank1
            </NodeID>
            <AttributeID/>
            <SubscribeChild>
              true
            </SubscribeChild>
          </OPCSubscriptionConfig>
          <SubscriptionPayload>$Null()</SubscriptionPayload>
        </OPCSubscriberModel>
      </Create>
    </Query>
    Code Block
    languagexml
    titleSubscription Deletion Query
    linenumberstrue
    <Query>
      <DeleteAll>
        <OPCSubscriberModel>
          <subscribeId ne=""/>
        </OPCSubscriberModel>
      </DeleteAll>
    </Query>
  • Note: It is possible to subscribe to multiple root nodes using a single facet, separate the NodeID's with ;; delimiter in subscription initialization query as shown below

    Code Block
    languagexml
    titleMultiple topics subscription
    linenumberstrue
    		 <NodeID>
              ns=2;s=Atomiton.OilAndGas.Test.Device1.TankData.Test.Tank1;;ns=2;s=Atomiton.OilAndGas.Test.Device1.TankData.Test.Tank1
            </NodeID>

     

...