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 KnownBy="OPCWriteAction" Name="OpcData"/>
      <String Name="NodeID"/>
      <String Name="Operation"/>
      <Integer Name="AttribueID"/>
      <ConnectionConfig Name="OPCSubscribeConnectionConfig"/>
      <Action Name="OPCWriteAction">
        <Workflow Limit="1" Live="1" Timeout="-1">
          <Task name="Main">
            <Event as="ActionArgument" name="Argument"/>
            <Invoke name="InvokeOPCWrite" post="opcua://?ServerUri=[%:Event.Argument.OPCSubscribeConnectionConfig.ServerUri.Value:%]&amp;
    			SecurityMode=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityMode.Value:%]&amp;
    			UserName=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.UserName.Value:%]&amp;
    			Password=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.Password.Value:%]&amp;
    			Path=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.Path.Value:%]&amp;
    			ValidityInDay=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.ValidityInDay.Value:%]&amp;
    			AutoCertificateRenewal=
    			[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.AutoCertificateRenewal.Value:%]&amp;
            	PrivateKeyPwd=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.PrivateKeyPwd.Value:%]&amp;
            	OrgName=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.OrgName.Value:%]&amp;
                KeySize=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.KeySize.Value:%]&amp;
                AppUri=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.ApplicationIdentity.AppUri.Value:%]&amp; 
                AppName=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.ApplicationIdentity.AppName.Value:%]&amp;                             
    			ProductUri=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.ApplicationIdentity.ProductUri.Value:%]&amp;
                Operation=[%:Event.Argument.Operation.Value:%]" scope="local" waitFor="Argument">
              <Message>
                <Value>
                  <Payload>
                        [%:Event.Argument.OpcData.Value:%]
                  </Payload>
                  <NodeID>
                      [%:Event.Argument.NodeID.Value:%]
                  </NodeID>
                  <AttributeID>
                      [%:Event.Argument.AttributeID.Value:%]
                  </AttributeID>
                </Value>
              </Message>
            </Invoke>
            <Output As="ActionResult" Name="Result">
              <Value>
                <OpcData>
                  <Include>
    				Invoke.InvokeOPCWrite.Message.Value
                  </Include>
                </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>
                <NodeID>
                    ns=2;s=Atomiton.Device1.TankData.USSAV1S01HST.Tank1.Tank_1_FCU_Temperature
                </NodeID>
                <AttributeID>
                    $Null()
                </AttributeID>
                <OPCSubscribeConnectionConfig>
                    <ServerUri>
                        opc.tcp://MSEDGEWIN10:49320
                    </ServerUri>
                    <SecurityMode>
                        0
                    </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>
                <OpcData>
                    80
                </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"/>
            <String Name="PublishingInterval"/>
            <String Name="NotificationBufferSize"/>
    	</Def>
    
    	<ThingFacet Name="OPCSubscriberFacet">
      		<String Format="$ObjectFormat(xml)" KnownBy="OPCSubscriberAction" Name="SubscriptionData" 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 name="InvokeOPCSubscription" post="opcua://?ServerUri=[%:Event.Argument.OPCSubscribeConnectionConfig.ServerUri.Value:%]&amp;
                         SecurityMode=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityMode.Value:%]&amp;
                         UserName=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.UserName.Value:%]&amp;
    					 Password=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.Password.Value:%]&amp;
    					 Path=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.Path.Value:%]&amp;
            			 ValidityInDay=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.ValidityInDay.Value:%]&amp;
    					 AutoCertificateRenewal=	 
    						[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.AutoCertificateRenewal.Value:%]&amp;
            			 PrivateKeyPwd=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.PrivateKeyPwd.Value:%]&amp;
            			 OrgName=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.OrgName.Value:%]&amp;
                         KeySize=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.CertificationParameters.KeySize.Value:%]&amp;
                         AppUri=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.ApplicationIdentity.AppUri.Value:%]&amp;
                         AppName=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.ApplicationIdentity.AppName.Value:%]&amp;
    					 ProductUri=[%:Event.Argument.OPCSubscribeConnectionConfig.SecurityOptions.ApplicationIdentity.ProductUri.Value:%]&amp;
                         Operation=[%:Event.Argument.Operation.Value:%]" scope="process" waitFor="Argument">
              			 <Message>
                			<Value>
                  				<OPCSubscriptionConfig>
                      				[:Event.Argument.OPCSubscriptionConfig:]
                  				</OPCSubscriptionConfig>
                		  	</Value>
              			</Message>
            		   </Invoke>
            		   <Output As="ActionResult" Name="Result">
              			<Value>
                			<SubscriptionData>
                  				<Include>
                      				Invoke.InvokeOPCSubscription.Message.Value
                  				</Include>
                			</SubscriptionData>
              			</Value>
            		   </Output>
          		</Task>
        	</Workflow>
     	 </Action>
    	</ThingFacet>


    Code Block
    languagexml
    titleSubscription Initialization Query
    linenumberstrue
    <Query>
      <DeleteAll>
        <OPCSubscriberModel>
          <subscribeId ne=""/>
        </OPCSubscriberModel>
      </DeleteAll>
      <Create>
        <OPCSubscriberModel>
          <Operation>
            subscription
          </Operation>
          <OPCSubscribeConnectionConfig>
            <ServerUri>
              opc.tcp://MSEDGEWIN10:49320
            </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=VopakAtomiton.OilAndGas.Test.Device1.TankData.USSAV1S01HSTTest.Tank1
            </NodeID>
            <NodeID>
              	ns=2;s=VopakAtomiton.OilAndGas.Test.Device1.TankData.USSAV1S01HSTTest.Tank2
            </NodeID>
            <AttributeID/>
            <PublishingInterval>1000</PublishingInterval>
            <NotificationBufferSize>5000</NotificationBufferSize>
            <SubscribeChild>
              true
            </SubscribeChild>
          </OPCSubscriptionConfig>
          <SubscriptionData>$Null()</SubscriptionData>
          <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, use multiple Node ID's as shown in above subscription query

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

     

...