コード例 #1
0
        public static OPCITEMVQT[] CreateOpcItemVQT(IList <OpcDaVQT> values)
        {
            var vqts = new OPCITEMVQT[values.Count];

            for (int i = 0; i < values.Count; i++)
            {
                OpcDaVQT value = values[i];
                vqts[i].bQualitySpecified = false;
                if (value.Quality != short.MinValue)
                {
                    vqts[i].bQualitySpecified = true;
                    vqts[i].wQuality          = value.Quality;
                }

                vqts[i].bTimeStampSpecified = false;
                if (value.Timestamp != DateTimeOffset.MinValue)
                {
                    vqts[i].bTimeStampSpecified = true;
                    vqts[i].ftTimeStamp         = FileTimeConverter.ToFileTime(value.Timestamp);
                }

                vqts[i].vDataValue = value.Value;
            }
            return(vqts);
        }
コード例 #2
0
 internal static OpcDaItemValue[] Create(OpcDaGroup opcDaGroup, int dwCount, int[] phClientItems,
                                         object[] pvValues,
                                         short[] pwQualities, FILETIME[] pftTimeStamps, HRESULT[] pErrors)
 {
     try
     {
         var values = new OpcDaItemValue[dwCount];
         for (var i = 0; i < values.Length; i++)
         {
             values[i] = new OpcDaItemValue
             {
                 Value     = pvValues[i],
                 Item      = opcDaGroup.GetItem(phClientItems[i]),
                 Quality   = pwQualities[i],
                 Timestamp = FileTimeConverter.FromFileTime(pftTimeStamps[i]),
                 Error     = pErrors[i]
             };
         }
         return(values);
     }
     catch (Exception ex)
     {
         Log.Error("Cannot create OpcDaItemValue object.", ex);
         return(new OpcDaItemValue[0]);
     }
 }
コード例 #3
0
 internal static OpcDaItemValue[] Create(OpcDaGroup opcDaGroup, OPCITEMSTATE[] ppItemValues,
                                         HRESULT[] ppErrors)
 {
     try
     {
         var result = new OpcDaItemValue[ppItemValues.Length];
         for (var i = 0; i < result.Length; i++)
         {
             result[i] = new OpcDaItemValue
             {
                 Timestamp = FileTimeConverter.FromFileTime(ppItemValues[i].ftTimeStamp),
                 Value     = ppItemValues[i].vDataValue,
                 Quality   = ppItemValues[i].wQuality,
                 Error     = ppErrors[i],
                 Item      = opcDaGroup.GetItem(ppItemValues[i].hClient)
             };
         }
         return(result);
     }
     catch (Exception ex)
     {
         Log.Error("Cannot create OpcDaItemValue object.", ex);
         return(new OpcDaItemValue[0]);
     }
 }
コード例 #4
0
 internal OpcDaServerStatus(OPCSERVERSTATUS opcserverstatus)
 {
     StartTime      = FileTimeConverter.FromFileTime(opcserverstatus.ftStartTime);
     CurrentTime    = FileTimeConverter.FromFileTime(opcserverstatus.ftCurrentTime);
     LastUpdateTime = FileTimeConverter.FromFileTime(opcserverstatus.ftLastUpdateTime);
     ServerState    = (OpcDaServerState)opcserverstatus.dwServerState;
     GroupCount     = opcserverstatus.dwGroupCount;
     Bandwidth      = opcserverstatus.dwBandWidth;
     Version        = new Version(opcserverstatus.wMajorVersion, opcserverstatus.wMinorVersion,
                                  opcserverstatus.wBuildNumber);
     Reserved   = opcserverstatus.wReserved;
     VendorInfo = opcserverstatus.szVendorInfo;
 }
コード例 #5
0
        public OpcDaVQTE[] Read(IList <string> itemIds, IList <TimeSpan> maxAge)
        {
            if (maxAge == null)
            {
                maxAge = new TimeSpan[itemIds.Count];
            }
            if (itemIds.Count != maxAge.Count)
            {
                throw new ArgumentException("Invalid size of maxAge", "maxAge");
            }

            int[] intMaxAge = ArrayHelpers.CreateMaxAgeArray(maxAge, itemIds.Count);

            string[] pszItemIDs     = itemIds.ToArray();
            var      ppvValues      = new object[pszItemIDs.Length];
            var      ppwQualities   = new short[pszItemIDs.Length];
            var      ppftTimeStamps = new FILETIME[pszItemIDs.Length];
            var      ppErrors       = new HRESULT[pszItemIDs.Length];

            DoComCall(ComObject, "IOPCItemIO::Read", () =>
                      ComObject.Read(pszItemIDs.Length, pszItemIDs, intMaxAge, out ppvValues, out ppwQualities,
                                     out ppftTimeStamps, out ppErrors), pszItemIDs.Length, pszItemIDs,
                      maxAge);

            var result = new OpcDaVQTE[itemIds.Count];

            for (int i = 0; i < ppvValues.Length; i++)
            {
                var vqte = new OpcDaVQTE
                {
                    Value     = ppvValues[i],
                    Quality   = ppwQualities[i],
                    Timestamp = FileTimeConverter.FromFileTime(ppftTimeStamps[i]),
                    Error     = ppErrors[i]
                };
                result[i] = vqte;
            }
            return(result);
        }
コード例 #6
0
        public object[] ReadMaxAge(int[] serverHandles, IList <TimeSpan> maxAge, out OpcDaQuality[] qualities,
                                   out DateTimeOffset[] timestamps, out HRESULT[] errors)
        {
            int[]      intMaxAge      = ArrayHelpers.CreateMaxAgeArray(maxAge, maxAge.Count);
            object[]   ppvValues      = {};
            short[]    ppwQualities   = {};
            FILETIME[] ppftTimeStamps = {};
            HRESULT[]  _errors        = {};
            DoComCall(ComObject, "IOpcSyncIO2::ReadMaxAge", () =>
                      ComObject.ReadMaxAge(serverHandles.Length, serverHandles, intMaxAge, out ppvValues, out ppwQualities,
                                           out ppftTimeStamps, out _errors), serverHandles.Length,
                      serverHandles, intMaxAge);
            timestamps = new DateTimeOffset[ppftTimeStamps.Length];
            qualities  = new OpcDaQuality[ppwQualities.Length];

            for (int i = 0; i < timestamps.Length; i++)
            {
                timestamps[i] = FileTimeConverter.FromFileTime(ppftTimeStamps[i]);
                qualities[i]  = new OpcDaQuality(ppwQualities[i]);
            }
            errors = _errors;
            return(ppvValues);
        }
コード例 #7
0
        public HRESULT[] WriteVQT(IList <string> itemIds, IList <OpcDaVQT> values)
        {
            if (itemIds.Count != values.Count)
            {
                throw new ArgumentException("Invalid size of values", "values");
            }

            var vqts = new OPCITEMVQT[values.Count];

            for (int i = 0; i < values.Count; i++)
            {
                OpcDaVQT opcItemValue = values[i];
                vqts[i].bQualitySpecified = false;
                if (opcItemValue.Quality != short.MinValue)
                {
                    vqts[i].bQualitySpecified = true;
                    vqts[i].wQuality          = opcItemValue.Quality;
                }

                vqts[i].bTimeStampSpecified = false;
                if (opcItemValue.Timestamp != DateTimeOffset.MinValue)
                {
                    vqts[i].bTimeStampSpecified = true;
                    vqts[i].ftTimeStamp         = FileTimeConverter.ToFileTime(opcItemValue.Timestamp);
                }

                vqts[i].vDataValue = opcItemValue.Value;
            }

            string[] pszItemIDs = itemIds.ToArray();
            var      ppErrors   = new HRESULT[pszItemIDs.Length];

            DoComCall(ComObject, "IOPCItemIO::WriteVQT",
                      () => ComObject.WriteVQT(pszItemIDs.Length, pszItemIDs, vqts, out ppErrors), pszItemIDs.Length, pszItemIDs);
            return(ppErrors);
        }