# OPC Timestamp überschreiben



## wapiti (24 August 2010)

Hallo zusammen

Ein S7 OPC Server soll 2 Tags auf der SPS auslesen. 1. Datum & Time 2. Value. Nach erfolgreichem lesen soll dieser zudem ein Bit auf True/False stellen und das Lesen zu quittieren.
Dem gelesenen Value soll dabei nicht der Zeitstempel des OPC (Lesevorgang) zugeordnet sein, sondern der 1. Tag aus der SPS. Der OPC Zeitstempel soll sozusagen mit dem Tag der SPS überschrieben werden.

Mir fehlt passende Software mit der ich mein Vorhaben realisieren kann. Gerne nehme ich auch schon ein erfundenes Rad....

Bisher habe ich bei Matrikon und Softing geschaut, allerdings ohne erfolgt. Google leider auch nicht.


----------



## Dr. OPC (25 August 2010)

Die OPC Funktion, die dafür erforderlich ist, heißt IOPCItemIO::WriteVQT und ist erst ab OPC DA3.0 verfürgbar. Leider darf der Server auch "not_supported" zurückgeben und daher ist sie nicht bei allen Herrstellern implementiert.

```
HRESULT WriteVQT (
[in] DWORD dwCount,
[in, sizeis(dwCount)] LPCWSTR *pszItemIDs,
[in, sizeis(dwCount)] OPCITEMVQT *pItemVQT,
[out, sizeis(,dwCount)] HRESULT **ppErrors
);
```
Also es könnte passieren das der Server das ablehnt 





> OPC_E_NOTSUPPORTED
> If a client attempts to write any value, quality, timestamp combination and the server does not support the requested combination (which could be a single quantity such as just timestamp), then the server will not perform any write and will return this error code.


Und weiter heisst es in der Spec


> Note: There is no way to validate the writing of the timestamp. If writing the timestamp is supported by the server, then the timestamp will be updated on the device as opposed to the cache. Writing timestamps is generally expected to be used for values which are in some sort of manual override mode or for values which are in some form of holding register. In general it is not useful to write timestamps for values which are actually being generated or scanned by the device since the device will generally re-stamp the data each time it is generated or scanned.


was soviel bedeutet wie: selbst wenn er das unterstützt heisst das noch lange nicht das es dir hilft, denn wenn du Pech hast, wird der TS beim nächsten Scan-Zyklus wieder drübergebügelt.

Also ich kenne keinen Server der das für TimeStamp unterstützt.

Dein Ansatz mit zwei Variablen (bzw. drei wenn du das Quittierbit mitrechenen möchtest) scheint mir der einzige Weg zu sein. Du legst den "Wert" und die "Zeit" in zwei unterschiedlichen OPC Items (die dann jeweils einen OPC-TimeStamp haben) und dann setzt du das Flag um zu zeigen das die beiden OPCItems gültig sind und zusammenghören. Natürlich muss der Client das auch genau so verstehen und die "Logik" richtig interpretieren. Und genau an der Stelle wird es schwierig, ein standard Client (von der Stange) kann das nicht, den müsstst du selber schreiben.


----------

