<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Prosys Blog and Forum</title>
	<atom:link href="http://www.prosysopc.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.prosysopc.com/blog</link>
	<description>On OPC Software</description>
	<lastBuildDate>Tue, 24 Apr 2012 05:53:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Connecting Traditional OPC to OPC UA with UaGateway</title>
		<link>http://www.prosysopc.com/blog/2012/04/24/eero/connecting-traditional-opc-to-opc-ua-with-uagateway/</link>
		<comments>http://www.prosysopc.com/blog/2012/04/24/eero/connecting-traditional-opc-to-opc-ua-with-uagateway/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 05:40:37 +0000</pubDate>
		<dc:creator>Eero</dc:creator>
				<category><![CDATA[OPC]]></category>
		<category><![CDATA[OPC UA]]></category>
		<category><![CDATA[UaGateway]]></category>

		<guid isPermaLink="false">http://www.prosysopc.com/blog/?p=105</guid>
		<description><![CDATA[We get frequent questions about how to use OPC Unified Architecture in conjunction with traditional OPC servers. Regardless of the new technical details of OPC UA, we cannot get around the fact that majority of the communication systems worldwide are still running traditional OPC servers. OPC UA is not directly backward compatible with traditional OPC. [...]]]></description>
			<content:encoded><![CDATA[<p>We get frequent questions about how to use OPC Unified Architecture in conjunction with traditional OPC servers. Regardless of the new technical details of OPC UA, we cannot get around the fact that majority of the communication systems worldwide are still running traditional OPC servers. OPC UA is not directly backward compatible with traditional OPC. Therefore if one must use traditional OPC and OPC UA together, interfaces for both would have to be implemented. Still, it is not necessary to avoid using OPC UA because of this. Prosys is a retailer for the products of Unified Automation who have created a tool called <a title="UaGateway" href="http://www.prosysopc.com/opc-ua-gateway.php" target="_blank">UaGateway</a> to solve this issue.<span id="more-105"></span></p>
<h2>Basic Usage</h2>
<p>UaGateway can be connected to servers using multiple protocols: OPC UA TCP, OPC DA, OPC AE and OPC XML-DA. All these connections are published to other clients as OPC UA TCP, OPC DA and OPC AE servers. UaGateway comes with a graphical user interface and with it connections to servers and server endpoints can be configured. Next, I will present two common use cases with UaGateway.</p>
<h2>Use case #1</h2>
<p>In the first use case, an OPC UA client is connected to traditional OPC DA or AE servers and to an OPC UA server through a firewall. This is a common use case when trend data and process event messages need to be transferred from the process to higher level information systems, such as Manufacturing Execution Systems (MES). Traditional OPC uses DCOM for communication between computer nodes. Firewall configuration is complex for DCOM communication, because DCOM dynamically assigns port numbers for connections. Therefore it is best to use OPC UA to communicate through firewall, because OPC UA uses only one TCP port for communication. In this use case, only one UaGateway is needed to aggregate data from three servers. UaGateway eliminates the need for other products that would combine data from multiple OPC servers.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<figure> <img src="http://www.prosys.fi/images/blog/eero/case1.png" alt="UaGateway use case #1" /><br />
<figcaption> UaGateway used to connect an OPC UA client to multiple servers through a firewall.<br />
</figcaption>
</figure>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Use case #2</h2>
<p>In the second use case, an OPC DA client is connected to an OPC DA server over Internet. OPC DA uses DCOM to communicate and communication with DCOM over Internet <a title="DCOM should not be used over Internet" href="http://msdn.microsoft.com/en-us/library/aa302336.aspx#webservicesdcom_topic1" target="_blank">cannot be done efficiently</a>. Fortunately, OPC UA uses single port TCP communication which can be used over Internet with ease. OPC DA nodes can be connected to separate UaGateways which communicate with OPC UA to each other. In the OPC UA Security Model, asymmetric encryption and authentication methods are introduced, which assure safe and confidential communication over Internet.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<figure> <img src="http://www.prosys.fi/images/blog/eero/case2.png" alt="UaGateway use case #2" /><br />
<figcaption> UaGateway is used to connect an OPC DA client to an OPC DA server over Internet.<br />
</figcaption>
</figure>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Summary</h2>
<p>UaGateway is a simple solution to start upgrading your systems to using OPC Unified Architecture. With it, the pitfalls of traditional OPC can be avoided. It allows you to use your old systems in harmony with newer ones. There is no question of either/or, with UaGateway, both OPC UA and traditional OPC can co-exist in an industrial communication system.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prosysopc.com/blog/2012/04/24/eero/connecting-traditional-opc-to-opc-ua-with-uagateway/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developing OPC UA for Android</title>
		<link>http://www.prosysopc.com/blog/2012/02/24/otso/15/</link>
		<comments>http://www.prosysopc.com/blog/2012/02/24/otso/15/#comments</comments>
		<pubDate>Fri, 24 Feb 2012 13:40:48 +0000</pubDate>
		<dc:creator>Otso</dc:creator>
				<category><![CDATA[OPC]]></category>

		<guid isPermaLink="false">http://www.prosysopc.com/blog/?p=15</guid>
		<description><![CDATA[I thought I&#8217;d share a few pointers about developing OPC UA on Android, since our Prosys OPC UA Java SDK has supported Android from version 1.3 onwards. In recent times we&#8217;ve had a surge of interest from Android users, who have helped us in understanding some typical use cases of developers on mobile platforms. In [...]]]></description>
			<content:encoded><![CDATA[<p>I thought I&#8217;d share a few pointers about developing OPC UA on Android, since our Prosys OPC UA Java SDK has supported Android from version 1.3 onwards. In recent times we&#8217;ve had a surge of interest from Android users, who have helped us in understanding some typical use cases of developers on mobile platforms. In this vein, we&#8217;ve already shared some of our Android development effort in the form of our Christmas special that was available for a limited time as a preview for our full Android client. It allowed connecting to a Beckhoff programmable logic in our office via OPC UA (the PLC is running Beckhoff&#8217;s OPC UA server for Windows CE) and controling a signal light column, which was viewable via a webcam.<span id="more-15"></span></p>
<p>This tutorial will concentrate on development for Android phones, so we will be using Android 2.3, but everything here also applies to the tablet world (Android 3.x) pretty well. Haven&#8217;t tested on 4.0 yet, but should run okay there as well.</p>
<h3>Gearing up</h3>
<p>To begin, you will need the Prosys OPC UA Java SDK. You can request an evaluation edition or purchase it on our website at <a href="http://www.prosysopc.com/">http://www.prosysopc.com/</a>. With the same credentials, you can download the demo project discussed here from <a href="https://www.prosysopc.com/opcua/JavaSDK/samples/AndroidSampleProject.zip">https://www.prosysopc.com/opcua/JavaSDK/samples/AndroidSampleProject.zip</a></p>
<p>In addition, you&#8217;ll need Eclipse and the Android SDK, available from (<a href="http://www.eclipse.org/">http://www.eclipse.org/</a> and <a href="http://developer.android.com/">http://developer.android.com/</a>) respectively. Install Eclipse and the Android SDK after that. The ADT plugin for Eclipse is also very useful, please see instructions for installing it <a href="http://developer.android.com/sdk/eclipse-adt.html#installing/">http://developer.android.com/sdk/eclipse-adt.html#installing/</a>. I assume here that you have some level of familiarity with Eclipse and Java in general. Also check out the SDK tutorials (especially the Client tutorial) to get a grip on how the SDK is meant to be used. Of course, you could also just dive right in and start off by examining the demo project, which is a simple GUI client for reading the time off a server.</p>
<h3>Creating your project</h3>
<p>After installing the Android SDK, Android projects are added to the New Project wizard in Eclipse. When you create your project, you will need to specify the version of Android you&#8217;re developing for. If you have an Android device available for testing, try to match its version, otherwise you can just select 2.3.1 (API version 9). If you want to use an emulator (handy even if you have a real device you&#8217;re developing for), you can create one using the SDK Manager that comes with the Android SDK. Select New&#8230; and simply enter a name and a target, you can leave the rest of the parameters as they are.</p>
<p>You will need to add the four .jars (bcprov, log4j, Opc.Ua.Stack and the SDK jar itself) in the Java SDK to your project&#8217;s build path. Optionally, in order to use SDK&#8217;s inbuilt logging, you can also add log4j-over-slf4j. The SDK uses log4j, whereas Android uses slf4j and thus this kind of bridge is needed. This way you can view the SDK&#8217;s output in DDMS along with other Android logging. log4j-over-slf4j is available at <a href="http://www.slf4j.org">http://www.slf4j.org</a> as part of the slf4j download package.</p>
<p>You&#8217;ll also need to modify the Android manifest to allow your application to create a connection. This is done by modifying AndroidManifest.xml, you can insert</p>
<pre>&lt;uses-permission android:name="android.permission.INTERNET"&gt;&lt;/uses-permission&gt;</pre>
<p>just below uses-sdk in the manifest file. Similarly, if your application at some point requires file write permissions, position data etc. they all have to be declared here. When installing the application, the user gets notified of these required permissions and so this is a nice security and transparency feature in Android.</p>
<h3>Writing an OPC UA Client</h3>
<p>Now that you&#8217;ve created your project and added the necessary libraries, it&#8217;s time to write your app. I won&#8217;t go through every detail here, see the (well-commented) example project for those, but rather share some general pointers and insight for Android development. I suggest you go through the example code, copy things to your own project and change details here and there and just play around with it. The main parts of creating an Android application are</p>
<ol>
<li>Creating an UI</li>
<li>Creating your application logic</li>
<li>Binding these two together</li>
</ol>
<p>I&#8217;ll go through each of these steps shortly to get you on your way.</p>
<h4>Creating an UI</h4>
<p>Using Eclipse it&#8217;s very easy to design the layout of your application using the WYSIWYG editor. Layout files are at res/layout, and one file has been pre-generated for you, main.xml. Using the editor, you can simply drag and drop components to the layout, or if you prefer, edit the XML file directly.</p>
<p>For the sample app, one textfield and one button should be enough. Remember to give some good ids for the components, you can do this in the component tree view by right-clicking and selecting &#8220;Edit ID&#8230;&#8221;. I gave them ids &#8220;timeBox&#8221; and &#8220;readButton&#8221;, and also changed the text on the button to &#8220;Read&#8221; by selecting &#8220;Edit text&#8221;. Create a new string resource by clicking &#8220;New String&#8230;&#8221; and give it an id like &#8220;read_button&#8221; and a value of &#8220;Read&#8221;. String resources are stored in res/values/strings.xml, if you want to edit them directly without the GUI.</p>
<p>That&#8217;s it for the UI part, easy, isn&#8217;t it!</p>
<h4>Creating your application logic</h4>
<p>This is the part where you get to use our SDK and see how simple it really can be to use OPC UA.</p>
<p>Since reading the time is a long-running activity, we won&#8217;t be doing it on the UI thread to avoid freezing up the UI. Instead, we want to run it in the background and just present the results once they are available. To achieve this, we&#8217;ll be creating a class that inherits from AsyncTask (see the example project for the exact syntax). The two methods that interest us are doInBackground() and onPostExecute(). doInBackground() will do the heavy lifting in the background, and once it&#8217;s done, it&#8217;ll store the results in a field. Upon completion of the task, onPostExecute() will be called using the UI thread of the application, allowing us to modify UI components (by calling setUITime() on our Activity) and display the result.</p>
<p>You&#8217;ll need to set some information into the UaClient object, but as you can see in the sample project, it&#8217;s not too hard. And besides, once that&#8217;s done, you can simply start communicating!</p>
<h4>Doing the binding</h4>
<p>Now we have our UI and the logic for reading the time, but we still need to make the magic happen. For this, we&#8217;ll need to make the button start up the read task and also write an implementation for setUITime(). We can get handles to the UI components by calling findViewById in the onCreate method of our activity. The ids for the UI components are listed in R.id, so you can get a handle to readButton by calling (Button)findViewById(R.id.readButton). You can store them as fields in your Activity. After this, it&#8217;s easy to write an implementation for setUITime() &#8211; but remember, you&#8217;ll have to ensure that it&#8217;s only called from the UI thread, otherwise you&#8217;ll get an exception.</p>
<p>At this point, all we&#8217;ll have to do is make the Read button work. We&#8217;ll do this by making a click listener for it and making it create a ReadTask. We&#8217;ll pass our Activity along as a parameter, so the task can update the time field once it&#8217;s done.</p>
<p>That&#8217;s it, we&#8217;re done! Now you can test the application by firing it up in an emulator. The example project is configured to connect to SampleConsoleServer on the host machine, so simply start that up before firing up your Android app.</p>
<h3>Good to know</h3>
<p>One important bit here is that if you&#8217;re running the application in an Android emulator, you can connect to the host machine (your computer) using the IP address 10.0.2.2. So, if you want to connect to the SampleConsoleServer provided with the SDK, you can use the URI opc.tcp://10.0.2.2:52520/OPCUA/SampleConsoleServer. On the other hand, if you&#8217;re developing on a device and don&#8217;t have an OPC UA server handy, you can connect to our demo server at opc.tcp://uademo.prosysopc.com:52520.</p>
<p>The source code for the app is available from the link mentioned earlier, so you can double-check on the details or simply just jump in and start making your own app using the example as a base. All in all, Android is a very good platform to develop on (even if you&#8217;re not doing OPC UA <img src='http://www.prosysopc.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ) and I expect that there will be interesting UA applications especially on tablet hardware in the future. We&#8217;ll keep on developing our SDK and also we&#8217;ll be releasing the full version of the Android handset client soon, so do check back often!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prosysopc.com/blog/2012/02/24/otso/15/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OPC UA Sessions, Subscriptions and Timeouts</title>
		<link>http://www.prosysopc.com/blog/2012/01/26/jouni/opc-ua-sessions-subscriptions-and-timeouts/</link>
		<comments>http://www.prosysopc.com/blog/2012/01/26/jouni/opc-ua-sessions-subscriptions-and-timeouts/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 13:40:09 +0000</pubDate>
		<dc:creator>Jouni Aro</dc:creator>
				<category><![CDATA[OPC]]></category>

		<guid isPermaLink="false">http://www.prosysopc.com/blog/?p=21</guid>
		<description><![CDATA[In this article I will try to clarify all the various parameters of OPC UA communications, especially related to the various timeouts that are available.  They provide a flexible means to control the connection between the UA client and server, both on the client and server side, but it is not always very clear which [...]]]></description>
			<content:encoded><![CDATA[<p>In this article I will try to clarify all the various parameters of OPC UA communications, especially related to the various timeouts that are available.  They provide a flexible means to control the connection between the UA client and server, both on the client and server side, but it is not always very clear which parameter is which and what is the actual effect of each.<span id="more-21"></span></p>
<p>I am mostly referring to the parameters with names that are available in the <em>UaClient</em> object of Prosys OPC UA Java SDK. Most of these are reflecting the parameters defined in the OPC UA Specifications, but some of them are only related to the internal behavior of <em>UaClient</em>. In <em>UaClient</em>, the parameters are available via the setter and getter methods, as usual, e.g. <em>Timeout</em> is used via<em> getTimeout()</em> and <em>setTimeout()</em>.</p>
<h2>Sessions</h2>
<p>All UA communications are done through sessions, which must be alive all the time in normal cases. Both the server and client can monitor the state of the session so that they will notice problems early enough and can perform proper clean up even if sessions are not not closed properly.</p>
<h3>SessionTimeout</h3>
<p>Sessions should not timeout very easily, so a timeout value of one hour is a good default value (the default also in <em>UaClient</em>). It is there just that the server can close sessions that have not been active (no message of any type from the client received for a longer period than <em>SessionTimeout</em>), because the client has died or is no longer connected to the server .</p>
<h3>Timeout (i.e. service call timeout)</h3>
<p>For individual service calls, you may use <em>Timeout</em>. It is typically used to check if the connection breaks, but you may also get timeouts if the server takes more time to process a service call. 10 s (10000 ms) is OK, but if your server gets loaded you may need to increase that. By default, the timeout is 0 (not used). In this case, however, the default timeout of the Java stack (2 minutes) will become effective.</p>
<h3>StatusCheckTimeout</h3>
<p><em>UaClient</em> is monitoring the connection status to the server constantly with <em>StatusChecks</em>, i.e. it is polling the <em>ServerStatus</em> variable from the server and determining if the connection is alive and if the server is all right.</p>
<p>You can use the <em>ServerStatusListener</em> to monitor changes in the status (see below) or check the value of <em>ServerStatus</em> or <em>ServerState</em> (which is the most useful part of <em>ServerStatus</em>).</p>
<p><em>StatusCheckTimeout</em> is separate from the default <em>Timeout</em>: it defines the timeout for the status reads only. If you get a timeout for that, <em>ServerState</em> is changed to CommunicationFault. <em>Reconnect</em> is then needed, either automatically or manually (see below).</p>
<h2>Subscriptions</h2>
<p>Subscriptions are used to define data acquisition from the server. The subscriptions are only loosely coupled to sessions: if the session timeouts, for example, the subscriptions can be transferred to a new session. The <em>UaClient</em> will perform this automatically, but you can use a few parameters to define how the subscriptions are monitored.</p>
<p>The most important parameters, <em>PublishingInterval</em> and <em>SamplingInterval</em> are used to define data sampling, but there are also parameters to define subscriptions status monitoring.</p>
<h3>PublishingInterval</h3>
<p><em>PublishingInterval </em>defines how often the server checks if there are notification packages (publish responses) for a Subscription to be sent back to the client. A typical value is 1000 (ms). It should not be -1 nor 0.</p>
<p>Instead of using very small <em>PublishingInterval</em>, consider using a smaller <em>SamplingInterval</em>. The server may also increase the <em>PublishingInterval</em> to a default minimum.</p>
<h3>SamplingInterval and QueueSize</h3>
<p>If you wish to record samples at a faster rate than <em>PublishingInterval</em>, you should use the <em>SamplingInterval</em> of the monitored items. You will also need to reserve a longer <em>QueueSize</em>, to be able to keep all the samples in the server. The server can send all the samples in the queue in one notification &#8211; which is sent every <em>PublishingInterval</em>.</p>
<h3>KeepAliveCount</h3>
<p>If there is no data to send after the next <em>PublishingInterval</em>, the server will skip it. But <em>KeepAlive</em> defines how many intervals may be skipped, before an empty notification is sent anyway: to give the client a hint that the subscription is still alive in the server and that  there just has not been any data arriving to the client.</p>
<h3>LifeTimeCount</h3>
<p>The client&#8217;s responsibility is to send <em>PublishRequests</em> to the server, in order to enable the server to send <em>PublishResponses</em> back. The <em>PublishResponses</em> are used to deliver the notifications: but if there are no <em>PublishRequests</em>, the server cannot send a notification to the client.</p>
<p>The server will also verify that the client is alive by checking that new <em>PublishRequests</em> are received &#8211; <em>LifeTimeCount</em> defines the number of <em>PublishingIntervals</em> to wait for a new <em>PublishRequest</em>, before realizing that the client is no longer active. The Subscription is then removed from the server.</p>
<h3>Republish</h3>
<p>The notification packets are identified with a <em>SequenceNumber</em>. The <em>UaClient</em> can use these to detect if it has missed some of the notifications. If that happens, the client can make a <em>RepublishRequest</em> to request notifications that were missed during a communication break, for example. The server must keep the sent notifications to be able to resend, until the client has acknowledged that they were received.</p>
<h3>PublishRequestFactor</h3>
<p><em>UaClient</em> will send several <em>PublishRequest</em>s to the server when the first subscription is created. The server can use these, to fill in <em>PublishResponse</em>s with new notifications. When the client receives the responses, it will send out new <em>PublishRequest</em>s.</p>
<p><em>PubishRequestFactor</em> determines how many requests are sent to the server: it is multiplied by the number of subscriptions to give the final number. The default value 2.</p>
<h2>Communication breaks</h2>
<p>If communication breaks, the server can still record new notifications, assuming that it has got enough <em>PublishRequests</em> in advance from the client.</p>
<p>In case you have 5 subscriptions and <em>PublishRequestFactor=10</em>, the client will send 50 <em>PublishRequests</em> to the server. In case of a communication break the server can send 50 <em>PublishResponses</em> back to the client in a normal rate. Considering a <em>PublishingInterval</em> of 1 s, the server can send 10 notifications for each subscription, if their items are really changing. But if the break is longer than 10 s, the server will start losing data. Unless the monitored items have a <em>QueueSize</em> long enough to record more samples.</p>
<p>Once communication is restored, the client will first call <em>Republish</em> to get the missing samples: after that it can send more <em>PublishRequests</em> and the server can continue generating new <em>PublishResponses</em>.</p>
<h3>Reconnect</h3>
<p><em>UaClient.reconnect()</em> will make sure that once communication is restored, the old session is used whenever possible and that Susbcription data is not missed. You may choose to use <em>AutoReconnect</em> (<em>true</em> by default) or do it manually. <em>AutoReconnect</em> will make the UaClient to try to reconnect to the server every second, once the communication is broken. If you do it manually, you must be prepared to do it until it succeeds.</p>
<h3>Queueing During Communication Break</h3>
<p>In case of reconnect, you will also need to consider the sampling parameters such that the queues can hold all the values during the whole communication breakdown. Considering that it may easily take  half a minute to restore the connection even if it breaks down shortly, and you are sampling several times per second, you should be prepared to use <em>QueueSize</em> over hundred or even more for your items.</p>
<p>The servers will typically only use the queue as much as necessary and <em>QueueSize</em> defines the maximum size allowed in worst case. So you should be pretty safe to use longer queue than you need in normal circumstances.</p>
<p>Of course, this all is necessary only if you need to ensure that all samples are recorded in the client. If you are only interested in the current value, you can do with a <em>QueueSize=1</em> and <em>PublishRequestFactor=2</em> (default), which make sure that you get notified of the new value with a response time of max <em>PublishingInterval</em>.</p>
<h2>Monitoring changes in your client application</h2>
<p>UaClient defines various listener interfaces, which are used your application about these status changes.</p>
<p>Please, note that all the listeners are typically called asynchronously from worker threads, immediately when the respective information is available.</p>
<h3>ServerStatusListener</h3>
<p>The <em>UaClient</em> is checking the server status every <em>StatusCheckInterval</em>. It is doing this with a synchronous Read to the <em>ServerStatus</em> variable. If the read succeeds, <em>ServerStatus</em> is changed accordingly (<em>ServerState</em> is the most interesting part of <em>ServerStatus</em>). If the read fails (or timeouts with <em>StatusCheckTimeout</em>), the <em>UaClient</em> changes the <em>ServerStatus</em> to null, but provides <em>ServerState=ServerState.CommunicationFault</em>.</p>
<p><em>UaClient</em> will notify about changes in these variables to every <em>ServerStatusListener</em>, so that you don&#8217;t need to poll it yourself. In case of a reconnect, the listeners are notified the same, whether you call <em>reconnect()</em> yourself or if <em>AutoReconnect</em> is used.</p>
<h3>SubscriptionNotificationListener</h3>
<p>The <em>SubscriptionNotificationListener</em> provides you the notification data. <em>StatusChange</em> is also a notification from the server that the status of the subscription has changed. For example, when the subscription is transferred to a new session, a <em>StatusChange</em> notification is sent to the old session.</p>
<h3>SubscriptionAliveListener</h3>
<p>The <em>SubscriptionAliveListener</em> notifies your client about the keep-alive messages and timeouts, noticed at the client side.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prosysopc.com/blog/2012/01/26/jouni/opc-ua-sessions-subscriptions-and-timeouts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stay up to date with Prosys OPC Blog &amp; Forum</title>
		<link>http://www.prosysopc.com/blog/2012/01/26/tuomas/stay-up-to-date-with-prosys-opc-blog-forum/</link>
		<comments>http://www.prosysopc.com/blog/2012/01/26/tuomas/stay-up-to-date-with-prosys-opc-blog-forum/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 12:35:30 +0000</pubDate>
		<dc:creator>Tuomas</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[Forum]]></category>
		<category><![CDATA[OPC]]></category>
		<category><![CDATA[OPC UA]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.prosysopc.com/blog/?p=63</guid>
		<description><![CDATA[I am delighted to be the first one to post into the brand new Prosys OPC Blog! Our experts are thrilled to publish their first articles about OPC &#38; OPC UA technologies. In the near future, you will be reading an extremely interesting post by Otso Palonen about OPC UA Android development, from which we [...]]]></description>
			<content:encoded><![CDATA[<p>I am delighted to be the first one to post into the brand new Prosys OPC Blog!</p>
<p>Our experts are thrilled to publish their first articles about OPC &amp; OPC UA technologies. In the near future, you will be reading an extremely interesting post by Otso Palonen about OPC UA Android development, from which we have had loads of inquiries during the past 6 months. Our head of Software Development, Jouni Aro, will guide you to the secrets of handling various issues you face when developing your OPC UA servers or clients.</p>
<p>We have also opened Prosys OPC Support Forums today. Please do not hesitate to start discussions about the topics you find interesting, or ask our specialists if you find yourself in trouble with OPC or OPC UA technology, or our products. There are support sections for each of our OPC &amp; OPC UA products, sections for OPC, OPC UA and Gateway technology, and a General discussion section in which you can discuss about more general topics. You can find a link to Forums in the header of this page, below &#8220;Prosys Blog&#8221;.</p>
<p>To stay informed, please follow us in Twitter. You will receive the information about the latest blog posts and interesting news and events related to OPC &amp; OPC UA. Our Twitter name is ProsysOPC.</p>
<p>I hope you will enjoy our blog and support forums. If there’s some particular topic you would find interesting to read about, please let us know.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prosysopc.com/blog/2012/01/26/tuomas/stay-up-to-date-with-prosys-opc-blog-forum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

