Beispiel #1
0
        public int[] AsyncRead(int connection, OpcDataSource source, int[] serverHandles, out int transactionId)
        {
            var ppErrors = IntPtr.Zero;

            AsyncIO.Read(connection, (OPCDATASOURCE)source, serverHandles.Length, serverHandles, out transactionId, out ppErrors);
            return(ComUtils.GetInt32s(ref ppErrors, serverHandles.Length, true));
        }
        public bool Read(OpcDataSource p_Src, int[] p_ArrHSrv, out OpcItemState[] p_ArrStat)
        {
            p_ArrStat = null;
            int    l_Count = p_ArrHSrv.Length;
            IntPtr l_PtrStat;
            IntPtr l_PtrErr;

            int l_HResult = m_IfSync.Read(p_Src, l_Count, p_ArrHSrv, out l_PtrStat, out l_PtrErr);

            if (HResults.Failed(l_HResult))
            {
                Marshal.ThrowExceptionForHR(l_HResult);
            }

            int l_RunErr  = (int)l_PtrErr;
            int l_RunStat = (int)l_PtrStat;

            if ((l_RunErr == 0) || (l_RunStat == 0))
            {
                Marshal.ThrowExceptionForHR(HResults.E_ABORT);
            }

            p_ArrStat = new OpcItemState[l_Count];

            for (int i = 0; i < l_Count; ++i)
            {
                p_ArrStat[i] = new OpcItemState();

                p_ArrStat[i].Error = Marshal.ReadInt32((IntPtr)l_RunErr);
                l_RunErr          += 4;

                p_ArrStat[i].HandleClient = Marshal.ReadInt32((IntPtr)l_RunStat);

                if (HResults.Succeeded(p_ArrStat[i].Error))
                {
                    short l_VT = Marshal.ReadInt16((IntPtr)(l_RunStat + 16));
                    if (l_VT == (short)VarEnum.VT_ERROR)
                    {
                        p_ArrStat[i].Error = Marshal.ReadInt32((IntPtr)(l_RunStat + 24));
                    }

                    p_ArrStat[i].Timestamp = Marshal.ReadInt64((IntPtr)(l_RunStat + 4));
                    p_ArrStat[i].Quality   = Marshal.ReadInt16((IntPtr)(l_RunStat + 12));
                    p_ArrStat[i].DataValue = Marshal.GetObjectForNativeVariant((IntPtr)(l_RunStat + 16));
                    DummyVariant.VariantClear((IntPtr)(l_RunStat + 16));
                }
                else
                {
                    p_ArrStat[i].DataValue = null;
                }

                l_RunStat += 32;
            }

            Marshal.FreeCoTaskMem(l_PtrStat);
            Marshal.FreeCoTaskMem(l_PtrErr);

            return(l_HResult == HResults.S_OK);
        }
Beispiel #3
0
        public OpcItemState[] Read(OpcDataSource source, int[] serverHandles)
        {
            var ppItemValues = IntPtr.Zero;
            var ppErrors     = IntPtr.Zero;

            SyncIO.Read((OPCDATASOURCE)source, serverHandles.Length, serverHandles, out ppItemValues, out ppErrors);

            var errors = ComUtils.GetInt32s(ref ppErrors, serverHandles.Length, true);
            var values = GetStructures <OPCITEMSTATE>(ppItemValues, serverHandles.Length)
                         .Zip(errors, (v, e) => new OpcItemState
            {
                ClientHandle = v.hClient,
                DataValue    = v.vDataValue,
                ErrorCode    = e,
                Quality      = v.wQuality,
                Timestamp    = ComUtils.GetDateTime(v.ftTimeStamp)
            })
                         .ToArray();

            return(values);
        }
Beispiel #4
0
        /// <summary>
        /// 更新单机姿态
        /// </summary>
        /// <param name="machine_name">单机名称</param>
        /// <param name="radar_info">雷达信息实体</param>
        /// <param name="gnss_info">GNSS信息实体</param>
        /// <returns></returns>
        public int UpdateMachinePosture(string machine_name, RadarProtoInfo radar_info, GnssProtoInfo gnss_info, OpcDataSource opc_source)
        {
            string sql = string.Format("update t_rcms_machineposture_time t set t.walking = {1}, t.pitch = {2}, t.yaw = {3}, local_tipx = {4}, local_tipy = {5}, local_tipz = {6}, walking_left_plc = {7}, walking_right_plc = {8}, pitch_plc = {9}, yaw_plc = {10}, local_tipz_abs = {11}, working = {12}, isfixed = {13}, quality = '{14}', latitude = {15}, longitude = {16}, altitude = {17}, coal_on_belt = {18}, local_antex = {19}, local_antey = {20}, local_antez = {21}, stream_per_hour = {22}, stream_total = {23}, wheel_left_dist = {24}, wheel_right_dist = {25}, belt_dist = {26}, wheel_power_raw = {27}, wheel_power_polished = {28}, wheel_left_radius = {29:f3}, wheel_right_radius = {30:f3}, wheel_left_surface_angle = {31}, wheel_right_surface_angle = {32}, beyond_stack_left = {33}, beyond_stack_right = {34}, t.time = sysdate where t.machine_name = '{0}'", machine_name, gnss_info.WalkingPosition, gnss_info.PitchAngle, gnss_info.YawAngle, gnss_info.LocalCoor_Tipx, gnss_info.LocalCoor_Tipy, gnss_info.LocalCoor_Tipz, opc_source.WalkingPosition_Plc, opc_source.WalkingPosition_Plc, opc_source.PitchAngle_Plc, opc_source.YawAngle_Plc, gnss_info.LocalCoor_Tipz + Config.HeightOffset, gnss_info.Working ? 1 : 0, gnss_info.IsFixed ? 1 : 0, gnss_info.PositionQuality, gnss_info.Longitude, gnss_info.Latitude, gnss_info.Altitude, opc_source.CoalOnBeltPlc, gnss_info.LocalCoor_Antex, gnss_info.LocalCoor_Antey, gnss_info.LocalCoor_Antez, opc_source.StreamPerHour, opc_source.StreamTotal, radar_info.DistWheelLeft, radar_info.DistWheelRight, radar_info.DistBelt, opc_source.WheelPowerRaw, opc_source.WheelPowerPolished, radar_info.RadiusAverageLeft, radar_info.RadiusAverageRight, radar_info.SurfaceAngleWheelLeft, radar_info.SurfaceAngleWheelRight, opc_source.WheelLeftBeyondStack, opc_source.WheelRightBeyondStack);

            return(this.provider.ExecuteSql(sql));
        }
 public void Refresh2(OpcDataSource p_SourceMode, int p_TransactionID, out int p_CancelID)
 {
     m_IfAsync.Refresh2(p_SourceMode, p_TransactionID, out p_CancelID);
 }
Beispiel #6
0
 public void Refresh(int connection, OpcDataSource source, out int transactionId)
 {
     AsyncIO.Refresh(connection, (OPCDATASOURCE)source, out transactionId);
 }