Ejemplo n.º 1
0
 //Запись значений
 private bool TryWriteValues()
 {
     if (!IsConnected)
     {
         return(false);
     }
     try
     {
         if (_items.Count > 0)
         {
             int   m             = _itemsList == null ? 0 : _itemsList.Length;//Количество корректно добавленых точек + 1
             Array serverHandles = new int[m];
             Array valuesArr     = new object[m];
             Array errorsArr     = new object[m];
             for (int i = 1; i < m; i++)
             {
                 var item = _itemsList[i];
                 serverHandles.SetValue(item.ServerHandler, i);
                 valuesArr.SetValue(item.Value.LastMoment.Object, i);
             }
             _group.SyncWrite(m - 1, ref serverHandles, ref valuesArr, out errorsArr);
         }
     }
     catch (Exception ex)
     {
         Logger.AddError("Ошибка записи значений в OPC-сервер", ex);
         return(IsConnected = false);
     }
     return(true);
 }
Ejemplo n.º 2
0
 /// <summary>
 /// 写入数据,handle,索引值数组,value对应值数组
 /// 按照 OPC 规范,数组始终以索引 1 开始。
 /// </summary>
 public bool WriteData(int[] handle, object[] value)
 {
     try
     {
         int[] temp = new int[handle.Length + 1];
         temp[0] = 0;
         object[] temp1 = new object[handle.Length + 1];
         temp1[0] = "";
         for (int i = 1; i < temp.Length; i++)
         {
             temp[i]  = handle[i - 1];
             temp1[i] = value[i - 1];
         }
         Array serverHandles = (Array)temp;
         Array values        = (Array)temp1;
         Array Errors;
         //OPCAutomation.OPCDataSource.OPCCache;
         s7Group.SyncWrite(handle.Length, ref serverHandles, ref values, out Errors);
         return(true);
     }
     catch (Exception)
     {
         return(false);
     }
 }
Ejemplo n.º 3
0
 /// <summary>
 /// 写入数据,handle,索引值数组,value对应值数组
 /// </summary>
 public bool WriteData(int[] handle, int[] value)
 {
     try
     {
         int[] temp = new int[handle.Length + 1];
         temp[0] = 0;
         object[] temp1 = new object[handle.Length + 1];
         temp1[0] = "";
         for (int i = 1; i < temp.Length; i++)
         {
             temp[i]  = handle[i - 1];
             temp1[i] = value[i - 1];
         }
         Array serverHandles = (Array)temp;
         Array values        = (Array)temp1;
         Array Errors;
         //OPCAutomation.OPCDataSource.OPCCache;
         //这种在断开的情况下,对应索引的Errors值非0(错误),正常情况下为0.
         s7Group.SyncWrite(handle.Length, ref serverHandles, ref values, out Errors);
         foreach (var item in Errors)
         {
             if (Convert.ToInt32(item) != 0)
             {
                 return(false);
             }
         }
         //这种在断开的情况下会引发异常 ,适合单值写入,正常不会报异常。
         //s7Group.OPCItems.GetOPCItem(handle[0]).Write(2400);
         return(true);
     }
     catch (Exception)
     {
         return(false);
     }
 }
Ejemplo n.º 4
0
        public void SyncWrite(string[] writeItemNames, string[] writeItemValues)
        {
            OPCItem[] bItem = new OPCItem[writeItemNames.Length];
            for (int i = 0; i < writeItemNames.Length; i++)
            {
                for (int j = 0; j < itemNames.Count; j++)
                {
                    if (itemNames[j] == writeItemNames[i])
                    {
                        bItem[i] = opcItems.GetOPCItem(itemHandleServer[j]);
                    }
                }
            }
            int[] temp = new int[writeItemNames.Length + 1];
            temp[0] = 0;
            for (int i = 1; i < writeItemNames.Length; i++)
            {
                temp[i] = bItem[i - 1].ServerHandle;
            }
            Array serverHandles = (Array)temp;

            object[] valueTemp = new object[writeItemNames.Length + 1];
            valueTemp[0] = "";
            for (int i = 1; i < writeItemNames.Length + 1; i++)
            {
                valueTemp[i] = writeItemValues[i - 1];
            }
            Array values = (Array)valueTemp;
            Array Errors;

            opcGroup.SyncWrite(writeItemNames.Length, ref serverHandles, ref values, out Errors);

            GC.Collect();
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 写入值
        /// </summary>
        /// <param name="group"></param>
        public override bool SyncWrite(OPCGroup group)
        {
            /// 写入条码信息
            int[]    SyncItemServerHandles = new int[2];
            object[] SyncItemValues        = new object[2];
            Array    SyncItemServerErrors;

            // 条码 index 是2
            SyncItemServerHandles[1] = (int)this.ItemServerHandles.GetValue(2);
            // OPCItem AnOpcItem = group.OPCItems.GetOPCItem((int)this.ItemServerHandles.GetValue(2));
            SyncItemValues[1] = this.ScanGetInposiBarcode;
            group.SyncWrite(1, SyncItemServerHandles, SyncItemValues, out SyncItemServerErrors);
            if (SyncItemServerErrors != null && ((int)SyncItemServerErrors.GetValue(1) == 0))
            {
                if (this.SyncSetReadableFlag(group))
                {
                    return(true);
                }
            }
            else
            {
                this.ScanGetInposiBarcode = this.ScanGetInposiBarcodeWas;
            }
            return(false);
        }
Ejemplo n.º 6
0
        private void WriteValueBtn_1_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // 写入数据从index从 1开始
                int[]    SyncItemServerHandles = new int[2];
                object[] SyncItemValues        = new object[2];
                Array    SyncItemServerErrors;

                // 写入数据从index从 1开始
                SyncItemServerHandles[1] = (int)this.ItemServerHandles.GetValue(1);
                SyncItemValues[1]        = this.NewValueTB_1.Text;
                // 1--写入数据个数
                ConnectedGroup.SyncWrite(1, SyncItemServerHandles, SyncItemValues, out SyncItemServerErrors);
                if (SyncItemServerErrors != null && ((int)SyncItemServerErrors.GetValue(1) == 0))
                {
                    // 写入成功
                    Logger.Info("写入成功");
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message, ex);
            }
        }
Ejemplo n.º 7
0
        public Boolean PutData(Array Values)
        {
            IntData.IsOPCConnected = true;
            OPCServer OPCSvr = new OPCServer();

            try
            {
                Transacting            = true;
                TransactionFlag        = true;
                IntData.IsOPCConnected = true;
                opcgrp_server          = new OPCServer();
                opcgrp_server.Connect(ServerName);
                opcgrp_group    = opcgrp_server.OPCGroups.Add(GroupName);
                TotalItemNumber = opcgrp_arrayPaths.Length - 1;
                opcgrp_group.OPCItems.DefaultIsActive = true;
                opcgrp_group.OPCItems.AddItems(TotalItemNumber, opcgrp_arrayPaths, opcgrp_arrayHandles, out opcgrp_arraySHandles, out opcgrp_arrayErrors);
                opcgrp_group.SyncWrite(TotalItemNumber, ref opcgrp_arraySHandles, ref Values, out opcgrp_arrayErrors);
                opcgrp_group.OPCItems.Remove(TotalItemNumber, ref opcgrp_arraySHandles, out opcgrp_arrayErrors);
                opcgrp_server.Disconnect();
                OPCSvr      = null;
                Transacting = false;
                Thread.Sleep(1000);
                return(true);
            }
            catch (Exception ex)
            {
                IntData.IsOPCConnected = false;
                Console.WriteLine(ex.Message);
                return(true);
            }
        }
Ejemplo n.º 8
0
        public override void WriteOutputSignal(string signalName, object value)
        {
            int[] temp = new int[2] {
                0, opcGroup.OPCItems.Item(signalName).ServerHandle
            };
            Array serverHandles = (Array)temp;
            Array Errors;

            object[] valueTemp = new object[2] {
                "", value
            };
            Array values = (Array)valueTemp;

            opcGroup.SyncWrite(1, ref serverHandles, ref values, out Errors);//同步写
            if (Errors.GetValue(1).ToString() == "0")
            {
                throw new Exception("写入数据错误");
            }
            else
            {
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 设置可读
        /// </summary>
        /// <param name="group"></param>
        public bool SyncSetRWFlag(OPCGroup group, byte flag)
        {
            /// 写入flag
            int[]    SyncItemServerHandles = new int[2];
            object[] SyncItemValues        = new object[2];
            Array    SyncItemServerErrors;

            // FLAG index 是1
            SyncItemServerHandles[1] = (int)this.ItemServerHandles.GetValue(1);
            SyncItemValues[1]        = flag;
            group.SyncWrite(1, SyncItemServerHandles, SyncItemValues, out SyncItemServerErrors);
            if (SyncItemServerErrors != null && ((int)SyncItemServerErrors.GetValue(1) == 0))
            {
                return(true);
            }
            return(false);
        }
Ejemplo n.º 10
0
 //Запись значений
 protected internal override void WriteValues()
 {
     if (_items.Count > 0)
     {
         StartDanger(2, LoggerStability.Single, "Запись в OPC-сервер", true, 500)
         .Run(() =>
         {
             int m = _itemsList == null ? 0 : _itemsList.Length;
             //Количество корректно добавленых точек + 1
             Array serverHandles = new int[m];
             Array valuesArr     = new object[m];
             Array errorsArr     = new object[m];
             for (int i = 1; i < m; i++)
             {
                 var item = _itemsList[i];
                 serverHandles.SetValue(item.ServerHandler, i);
                 valuesArr.SetValue(item.ValueSignal.InValue.Object, i);
             }
             _group.SyncWrite(m - 1, ref serverHandles, ref valuesArr, out errorsArr);
         });
     }
 }
Ejemplo n.º 11
0
        void WriteItems(OPCGroup ObjOPCGroup)
        {
            try
            {
                while (!stopThreads)
                {
                    if (Workflow.plcInputs != null && Workflow.plcInputs.Count > 0)
                    {
                        CurrentPLCInput = Workflow.plcInputs.First();
                        if (previousPLCInput == null || !previousPLCInput.Equals(CurrentPLCInput))
                        {
                            int index = Globals.INPUT_TAGS.FirstOrDefault(x => x.Name == "iPLC_STATUS").Index;
                            ItemServerWriteValues.SetValue(CurrentPLCInput.iPlc_Status, index);
                            // ItemServerWriteValues.SetValue(CurrentTestInput.input_bool, 1);
                            // ItemServerWriteValues.SetValue(CurrentTestInput.input_int, 2);
                            try
                            {
                                ObjOPCGroup.SyncWrite(tagIndexWriter - 1, ref writerItemServerHandles, ref ItemServerWriteValues, out writerItemServerErrors);
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.Message);
                                throw;
                            }
                            previousPLCInput = CurrentPLCInput;
                        }
                    }

                    //ItemServerWriteValues.SetValue(1.1, Array.IndexOf(OPCItemIDs,(object)("Bucket Brigade.Real1")));
                    System.Threading.Thread.Sleep(1000);
                }
            }
            catch (Exception ex)
            {
                Console.Write(ex.Message);
                throw;
            }
        }
Ejemplo n.º 12
0
        public string SyncWriteTagValue(string tag, string writeStr)
        {
            try
            {
                Array Errors;
                if (itmHandleClientWriteData != 0)
                {
                    OPCItem bItem = KepItemsWrite.GetOPCItem(itmHandleServerWriteData);
                    //注:OPC中以1为数组的基数
                    int[] temp = new int[2] {
                        0, bItem.ServerHandle
                    };
                    Array serverHandle = (Array)temp;
                    //移除上一次选择的项
                    KepItemsWrite.Remove(KepItemsWrite.Count, ref serverHandle, out Errors);
                }
                itmHandleClientWriteData = Array.IndexOf(tagList, tag) + 1;
                KepItemWrite             = KepItemsWrite.AddItem(tag, itmHandleClientWriteData);
                itmHandleServerWriteData = KepItemWrite.ServerHandle;

                OPCItem bItem_ = KepItemsWrite.GetOPCItem(itmHandleServerWriteData);
                int[]   temp_  = new int[2] {
                    0, bItem_.ServerHandle
                };
                Array    serverHandles = (Array)temp_;
                object[] valueTemp     = new object[2] {
                    "", writeStr
                };
                Array values = (Array)valueTemp;
                KepGroupWriteData.SyncWrite(1, ref serverHandles, ref values, out Errors);
                return("OK");
            }
            catch (Exception err)
            {
                return(err.Message);
            }
        }
Ejemplo n.º 13
0
        // 控制入口
        public bool Write(string tagName, object value, out string errMsg)
        {
            errMsg = "";

            try
            {
                // 为避免 COM 对象的并发访问, 再建一个连接
                OPCServer client = new OPCServer();
                client.Connect(this._progId, this._hostIp);

                OPCGroup group = client.OPCGroups.Add("WritingGroup");
                OPCItem  item  = group.OPCItems.AddItem(tagName, 1);

                int[]    serverHandle = new int[] { 0, item.ServerHandle };
                object[] writingValue = new object[] { null, value };
                group.SyncWrite(1, serverHandle, writingValue, out Array error);
                client.Disconnect();

                // 据推测故障码是 COM 函数返回值, 0 表示正常
                int errorCode = Convert.ToInt32(error.GetValue(1));
                if (errorCode != 0)
                {
                    errMsg = this._progId + "的条目: " + tagName + " 写入失败; " + errorCode;
                    return(false);
                }

                return(true);
            }
            catch (Exception ex)
            {
                errMsg = this._progId + "的条目: " + tagName + "写入失败: " + ex.Message + "\n" + ex.StackTrace;
                TraceManagerForOPC.AppendErrMsg(errMsg);

                return(false);
            }
        }
Ejemplo n.º 14
0
 public void SyncWrite(string[] sItemsID, object[] ivalue, string sGroupName, out Array Result)
 {
     try
     {
         int      iNumItem       = sItemsID.Length;
         int[]    iServerHandler = GetServerHandles(sItemsID);
         object[] oValue         = new object[ivalue.Length + 1];
         for (int i = 0; i < ivalue.Length; i++)
         {
             oValue[i + 1] = ivalue[i];
         }
         Array aServerHandler = (Array)iServerHandler;
         Array aValue         = (Array)oValue;
         Array aError;
         KepGroup = KepGroups.GetOPCGroup(sGroupName);
         KepGroup.SyncWrite(iNumItem, ref aServerHandler, ref aValue, out aError);
         Result = aError;
     }
     catch
     {
         // Console.WriteLine("************** " + "SyncWrite Error" + " **************");
         Result = null;
     }
 }