Can anyone confirm how Thingworx manages logging Properties to a Value Stream? Specifically when logging Thing Properties that are bound to remote KEPServer tags? Does Thingworx use the timestamp that comes with the data from KEPServerEX? or does it create its own timestamp when it logs the Property data to Value Stream?
We think that the Properties are logged with the timestamp that comes from KEPServer but don't know that for sure. Of course, you'd want to log the data with the timestamp received from the OPC server rather than create one at log time since there will be some lag time between when the values are captured and when Thingworx receives them and schedules them to be logged.
My setup for reference:
Right now we're using Thingworx 7.1 with the KEPServerEX extension. I've got a RemoteKEPServerEXThing set up with KEPServer tags as remotely bound Properties, and the data is coming through properly as far as I can tell. From there I've got Things created and used "Manage Bindings" to locally bind tag Properties on the KEPServerEXThing to the respective machine Thing the tags belong to. I am then setting the Logged aspect on the Properties on the machine Thing.
Thanks in advance
I made an experiment of monitoring the KEPServer tags on both the KEPServer and the Thing's Value Stream that I was logging them to in an attempt to solve this. I used the OPC Quick Client program to watch the changing tag values on the KEPServer server, and I created a mashup consisting of a time series chart and grid to show the raw tag data being logged by Thingworx.
By refreshing the data in my mashup right after a change in a tag value on OPC Quick Client, I took a screenshot and checked the values and timestamps for the same tag in both programs. I found that the timestamp of the latest log to the Value Stream is the exact same as the timestamp of the tag I just watched change.
This supports the statement that logged data bound to KEPServer tags ARE, in fact, logged with the timestamps given by KEPServerEX. That or the communication between our KEPServer and Thingworx servers and logging to Value Stream occur in less than 1 ms.
If anyone else can positively confirm that's how Thingworx manages KEPServer tag data logging, please share.
I would be interested in the answer to this question of Timestamping too!! And would appreciate someone from PTC or Kepware answering it. I can't find an answer either way in any of the Manuals I have read. Something this critical should be clearly defined and explained so we don't have to test the behavior (which takes time) and potentially draw false conclusions. Your test above really doesn't prove anything either way as you mention. If Timestamps of the actual change on the Devices can't be made available in the Value stream it possibly makes the data completely useless in the event of excessive network latency or disruption...
My first question is, whether the last changed Timestamp in KepServerEX is the time KepServerEX registered the change or the time the value changed on the Device? This would be device driver dependent (the device has to be capable of providing this data in the first place) but I believe OPC UA allows for either situation to be possible.
The next question is, as you have posed, what Timestamp does ThingWorx get and store in the Value stream??
One way you could test this is to disconnect the Device from KepServerEX, change the Tag value on the Device and then reconnect the Device. You can then look at what Timestamp you see in KepServerEX.
Next you could turn on Store and Forward (Active Mode) on KepServerEX, disconnect KepServerEX from ThingWorx, make a change to the Tag value, then reconnect KepServerEX. Again check the TimeStamp on the Property and then in the Value Stream.
Disconnecting the connection between each pair of systems should give an appreciable difference between when the value changes and when the next system up registers the change in value.
I also would like an answer what timestamp is used for the Stream to store the tag value. And how can I easily obtain the quality information of the tag that is being read ?
I believe the timestamp stored with the value on DataChange is the value-time-quality (VTQ) timestamp from KEPServer.
You can get the VTQ quality using the generic service GetPropertyQuality() on the property the KEPServer tag is bound to.