Example #1
0
        //导出枚举
        private void btnMj_Click(object sender, EventArgs e)
        {
            try
            {
                SaveFileDialog save = new SaveFileDialog();
                save.Title            = "枚举另存";
                save.Filter           = "txt files   (*.txt)|*.txt";
                save.FilterIndex      = 2;
                save.RestoreDirectory = true;
                if (save.ShowDialog() == DialogResult.OK)
                {
                    string file = save.FileName;
                    save.Dispose();
                    try
                    {
                        System.IO.File.Delete(file);
                    }
                    catch { }
                    Log.LogWriter.WriteEnum(file, "/// <summary>");
                    Log.LogWriter.WriteEnum(file, "/// PLC设备枚举");
                    Log.LogWriter.WriteEnum(file, "/// </summary>");
                    Log.LogWriter.WriteEnum(file, "public enum PlcDevice");
                    Log.LogWriter.WriteEnum(file, "{{");

                    Log.LogWriter.WriteEnum(file, "    /// <summary>");
                    Log.LogWriter.WriteEnum(file, "    /// 错误");
                    Log.LogWriter.WriteEnum(file, "    /// </summary>");
                    Log.LogWriter.WriteEnum(file, "    ERROR=-1,");
                    Log.LogWriter.WriteEnum(file, "    ");

                    Log.LogWriter.WriteEnum(file, "    /// <summary>");
                    Log.LogWriter.WriteEnum(file, "    /// 空");
                    Log.LogWriter.WriteEnum(file, "    /// </summary>");
                    Log.LogWriter.WriteEnum(file, "    NULL=0,");
                    Log.LogWriter.WriteEnum(file, "    ");


                    for (int i = 0; i < this.dgvPlcData.RowCount; i++)
                    {
                        Config.PlcDataItem o = (Config.PlcDataItem) this.dgvPlcData.Rows[i].DataBoundItem;
                        if (o != null)
                        {
                            Log.LogWriter.WriteEnum(file, "    /// <summary>");
                            Log.LogWriter.WriteEnum(file, "    /// {0}", o.Descrip);
                            Log.LogWriter.WriteEnum(file, "    /// </summary>");
                            Log.LogWriter.WriteEnum(file, "    {0},", o.ItemName);
                            Log.LogWriter.WriteEnum(file, "    ");
                        }
                    }
                    Log.LogWriter.WriteEnum(file, "}}");
                    System.Threading.Thread.Sleep(100);
                    System.Diagnostics.Process.Start("notepad", file);
                }
            }
            catch { }
        }
Example #2
0
        // 写设备的值
        public bool  WriteValue(Common.PlcDevice plcDevice, object value)
        {
            bool IsOk = false;

            try
            {
                Config.PlcDataItem devData = this.GetPlcDataItem(plcDevice);
                Config.PlcTypeItem devType = this.GetPlcTypeItem(devData.DeviceName);

                switch (devType.DevType)
                {
                //Keyence
                case Common.DeviceType.Keyence:
                    KeyenceMcNet kPlcClient = (KeyenceMcNet)devType.Tag;
                    IsOk = this.WriteSieTcpValue(devType, devData, kPlcClient, value);
                    break;

                //Melsec
                case Common.DeviceType.Qseries:
                    MelsecMcNet mPlcClient = (MelsecMcNet)devType.Tag;
                    IsOk = this.WriteSieTcpValue(devType, devData, mPlcClient, value);
                    break;


                case Common.DeviceType.S1200:
                case Common.DeviceType.S300:
                case Common.DeviceType.S400:
                case Common.DeviceType.S1500:
                case Common.DeviceType.S200Smart:
                case Common.DeviceType.S200:
                    SiemensS7Net sPlcClient = (SiemensS7Net)devType.Tag;
                    IsOk = this.WriteSieTcpValue(devType, devData, sPlcClient, value);
                    break;

                case Common.DeviceType.ModbusTcp:
                    ModbusTcpNet mTcpClient = (ModbusTcpNet)devType.Tag;
                    IsOk = this.WriteModTcpValue(devType, devData, mTcpClient, value);
                    break;

                case Common.DeviceType.ModbusRtu:
                    ModbusRtu mRtuClinet = (ModbusRtu)devType.Tag;
                    IsOk = this.WriteModRtuValue(devType, devData, mRtuClinet, value);
                    break;

                default:
                    break;
                }
            }
            catch { }
            return(IsOk);
        }
Example #3
0
        /// <summary>
        /// PLC值改变回调
        /// </summary>
        /// <param name="item"></param>
        public void PlcValueChange(Config.PlcDataItem item)
        {
            //try
            //{
            //    business business = SystemHandle.Instance.GetMachineKylin(item.MachineID);
            //    if (business != null)
            //        business.PlcValueChange(item);
            //}
            //catch (Exception ex)
            //{
            //    Log.LogWriter.WriteException(ex);
            //}
            if (PlcValueChangedEvent == null)
            {
                return;
            }
            Regex regex = new Regex(@"V_[0-9]{2}_TriggerGrab");

            if (!regex.IsMatch(item.PlcDevice.ToString()))
            {
                return;
            }
            // if (regex.IsMatch(item.PlcDevice.ToString())&&(bool)item.ValueNew ==true)
            if (item.DataType == Common.DataTypes.Short)
            {
                short value = (short)item.ValueNew;
                bool  IsOk  = true;
                if (value < 1)
                {
                    IsOk = false;
                }
                else
                {
                    IsOk = true;
                }
                if (IsOk)
                {
                    PlcValueChangedEvent(item, new object());
                }
            }

            if (item.DataType == Common.DataTypes.Bool)
            {
                bool value = (bool)item.ValueNew;
                if (value)
                {
                    PlcValueChangedEvent(item, new object());
                }
            }
        }
Example #4
0
        private void dgvPlcData_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (e.RowIndex >= 0)
                {
                    //当前网络客户端
                    if (this.dgvPlcData.CurrentRow.DataBoundItem == null)
                    {
                        return;
                    }
                    Config.PlcDataItem plcdata = (Config.PlcDataItem) this.dgvPlcData.CurrentRow.DataBoundItem;
                    Config.PlcTypeItem devType = Logic.PlcHandle.Instance.GetPlcTypeItem(plcdata.DeviceName);
                    //Config.PlcTypeItem devType = (Config.PlcTypeItem)this.dgvPlcType.CurrentRow.DataBoundItem;
                    switch (dgvPlcData.Columns[e.ColumnIndex].Name)
                    {
                    case "btnDelData":
                        //删除
                        //  if (MessageBox.Show("是否删除该项设备?    ", "删除提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) return;
                        Config.ConfigManager.Instance.ConfigPlc.PlcDataItems.Remove(plcdata);
                        this.dgvPlcType_Focus(devType);
                        break;

                    case "btnReadPlc":       //读值
                        Logic.PlcHandle.Instance.ReadValue(plcdata.PlcDevice);
                        this.dgvPlcData.CurrentRow.Cells["valueNewCol"].Value = plcdata.ValueNew;
                        //int i = this.dgvPlcData.CurrentRow.Index;
                        //this.dgvPlcData.InvalidateRow(i);
                        break;

                    case "btnWritePlc":       //写值
                        Logic.PlcHandle.Instance.WriteValue(plcdata.PlcDevice, plcdata.ValueWrite);
                        //if(!devType.IsConnected && Common.IsSimulator)
                        //{
                        //    //plcdata.ValueNew = false;
                        //    //plcdata.ValueNew = true;
                        //}
                        break;

                    default:
                        break;
                    }
                }
            }
            catch
            {   }
        }
Example #5
0
        // 读设备的值
        public object ReadValue(string itemName)
        {
            //try
            //{
            Config.PlcDataItem devData = this.GetPlcDataItem(itemName);
            Config.PlcTypeItem devType = this.GetPlcTypeItem(devData.DeviceName);

            switch (devType.DevType)
            {
            case Common.DeviceType.S1200:
            case Common.DeviceType.S300:
            case Common.DeviceType.S400:
            case Common.DeviceType.S1500:
            case Common.DeviceType.S200Smart:
            case Common.DeviceType.S200:
                SiemensS7Net sPlcClient = (SiemensS7Net)devType.Tag;
                return(this.ReadSieTcpValue(devType, devData, sPlcClient));

            //break;

            case Common.DeviceType.ModbusTcp:
                ModbusTcpNet mTcpClient = (ModbusTcpNet)devType.Tag;
                return(this.ReadModTcpValue(devType, devData, mTcpClient));

            //break;

            case Common.DeviceType.ModbusRtu:
                ModbusRtu mRtuClinet = (ModbusRtu)devType.Tag;
                return(this.ReadModRtuValue(devType, devData, mRtuClinet));

            //break;

            default:
                return(null);
                //break;
            }
            //}
            //catch (Exception ex)
            //{

            //}
        }
Example #6
0
        // 读设备的值
        public object ReadValue(Common.PlcDevice plcDevice)
        {
            Config.PlcDataItem devData = this.GetPlcDataItem(plcDevice);
            if (devData == null)
            {
                return(null);
            }
            Config.PlcTypeItem devType = this.GetPlcTypeItem(devData.DeviceName);
            switch (devType.DevType)
            {
            //Keyence
            case Common.DeviceType.Keyence:
                KeyenceMcNet kPlcClient = (KeyenceMcNet)devType.Tag;
                return(this.ReadSieTcpValue(devType, devData, kPlcClient));

            //Melsec 三菱PLC
            case Common.DeviceType.Qseries:
                MelsecMcNet mPlcClient = (MelsecMcNet)devType.Tag;
                return(this.ReadSieTcpValue(devType, devData, mPlcClient));

            //Siemens
            case Common.DeviceType.S1200:
            case Common.DeviceType.S300:
            case Common.DeviceType.S400:
            case Common.DeviceType.S1500:
            case Common.DeviceType.S200Smart:
            case Common.DeviceType.S200:
                SiemensS7Net sPlcClient = (SiemensS7Net)devType.Tag;
                return(this.ReadSieTcpValue(devType, devData, sPlcClient));

            case Common.DeviceType.ModbusTcp:
                ModbusTcpNet mTcpClient = (ModbusTcpNet)devType.Tag;
                return(this.ReadModTcpValue(devType, devData, mTcpClient));

            case Common.DeviceType.ModbusRtu:
                ModbusRtu mRtuClinet = (ModbusRtu)devType.Tag;
                return(this.ReadModRtuValue(devType, devData, mRtuClinet));

            default:
                return(null);
            }
        }
Example #7
0
        //PLC数据变化事件回调
        public void plc_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            try
            {
                this.Invoke(new EventHandler(delegate
                {
                    try
                    {
                        if (e.PropertyName == "ValueNew")
                        {
                            Config.PlcDataItem plcdata = (Config.PlcDataItem)sender;

                            dgvPlcData.Refresh();
                        }
                    }
                    catch { }
                }));
            }
            catch { }
        }
Example #8
0
        //添加新行数据
        private void btnAddNew_Click(object sender, EventArgs e)
        {
            try
            {
                Config.PlcTypeItem plc = (Config.PlcTypeItem) this.dgvPlcType.CurrentRow.DataBoundItem;

                Config.PlcDataItem newData = new Config.PlcDataItem();
                newData.DeviceName = plc.DevName;
                newData.ItemName   = plc.DevName + "_";
                newData.MachineID  = plc.MachineID;
                Config.ConfigManager.Instance.ConfigPlc.PlcDataItems.Add(newData);
                //this.dgvPlcData.DataSource = Config.ConfigManager.Instance.ConfigPlc.PlcDataItems;
                //this.dgvPlcData.Refresh();
                this.dgvPlcType_Focus(plc);
            }
            catch
            {
                //throw;
            }
        }
Example #9
0
        // 写设备的值
        public bool  WriteValue(string itemName, object value)
        {
            bool IsOK = false;

            try
            {
                Config.PlcDataItem devData = this.GetPlcDataItem(itemName);
                Config.PlcTypeItem devType = this.GetPlcTypeItem(devData.DeviceName);

                switch (devType.DevType)
                {
                case Common.DeviceType.S1200:
                case Common.DeviceType.S300:
                case Common.DeviceType.S400:
                case Common.DeviceType.S1500:
                case Common.DeviceType.S200Smart:
                case Common.DeviceType.S200:
                    SiemensS7Net sPlcClient = (SiemensS7Net)devType.Tag;
                    IsOK = this.WriteSieTcpValue(devType, devData, sPlcClient, value);
                    break;

                case Common.DeviceType.ModbusTcp:
                    ModbusTcpNet mTcpClient = (ModbusTcpNet)devType.Tag;
                    IsOK = this.WriteModTcpValue(devType, devData, mTcpClient, value);
                    break;

                case Common.DeviceType.ModbusRtu:
                    ModbusRtu mRtuClinet = (ModbusRtu)devType.Tag;
                    IsOK = this.WriteModRtuValue(devType, devData, mRtuClinet, value);
                    break;

                default:
                    break;
                }
            }
            catch { }
            return(IsOK);
        }
Example #10
0
        private void btnImport_Click(object sender, EventArgs e)
        {
            bool bFindSame = false;

            for (int i = 0; i < this.plcList.Count; i++)
            {
                Config.PlcDataItem plcData = plcList[i];
                if (plcData != null)
                {
                    Config.PlcDataItem replcData = Logic.PlcHandle.Instance.GetPlcDataItem(plcData.ItemName);
                    if (replcData == null)
                    {
                        plcData.IsActive  = false;
                        plcData.MachineID = (plcData.MachineID + "  ").Substring(0, 2).Trim();
                        Logic.PlcHandle.Instance.config.PlcDataItems.Add(plcData);
                    }
                    else
                    {
                        bFindSame = false;
                        for (int j = 0; j < Logic.PlcHandle.Instance.config.PlcDataItems.Count; j++)
                        {
                            Config.PlcDataItem di = Logic.PlcHandle.Instance.config.PlcDataItems[j];
                            if (di.MachineID == plcData.MachineID && di.ItemName == plcData.ItemName &&
                                di.DeviceName == plcData.DeviceName && di.Address == plcData.Address &&
                                di.DataType == plcData.DataType)
                            {
                                bFindSame = true;
                                break;
                            }
                        }
                        if (!bFindSame)
                        {
                            Logic.PlcHandle.Instance.config.PlcDataItems.Add(plcData);
                        }
                    }
                }
            }
        }
Example #11
0
        //modbusRtu write
        private bool  WriteModRtuValue(Config.PlcTypeItem plctype, Config.PlcDataItem plcdata, ModbusRtu mod, object value)
        {
            HslCommunication.OperateResult rlt = new HslCommunication.OperateResult();
            rlt.IsSuccess = false;
            try
            {
                //string[] strAdrss = plcdata.Address.Split('.');
                //string Address = strAdrss[0] + "." + Regex.Replace(strAdrss[1], @"^[A-Za-z]+", string.Empty);

                if (plctype == null || !plctype.IsConnected || plcdata == null || mod == null)
                {
                    return(rlt.IsSuccess);
                }

                switch (plcdata.DataType)
                {
                case Common.DataTypes.Bool:    //Bool
                    rlt = mod.WriteCoil(plcdata.Address, Convert.ToBoolean(value));
                    break;

                case Common.DataTypes.Short:
                    rlt = mod.Write(plcdata.Address, Convert.ToInt16(value));
                    break;

                case Common.DataTypes.Ushort:
                    rlt = mod.Write(plcdata.Address, Convert.ToUInt16(value));
                    break;

                case Common.DataTypes.Int:
                    rlt = mod.Write(plcdata.Address, Convert.ToInt32(value));
                    break;

                case Common.DataTypes.UInt:
                    rlt = mod.Write(plcdata.Address, Convert.ToUInt32(value));
                    break;

                case Common.DataTypes.Long:
                    rlt = mod.Write(plcdata.Address, Convert.ToInt64(value));
                    break;

                case Common.DataTypes.ULong:
                    rlt = mod.Write(plcdata.Address, Convert.ToUInt64(value));
                    break;

                case Common.DataTypes.Float:
                    rlt = mod.Write(plcdata.Address, float.Parse(value.ToString()));
                    break;

                case Common.DataTypes.Double:
                    rlt = mod.Write(plcdata.Address, Convert.ToDouble(value));
                    break;

                case Common.DataTypes.String:
                    rlt = mod.Write(plcdata.Address, Convert.ToString(value));
                    break;

                default: break;
                }
            }
            catch
            {
                //MessageBox.Show(ex.Message);
            }
            return(rlt.IsSuccess);
        }
Example #12
0
 public object GetValue(Common.PlcDevice plcDevice)
 {
     Config.PlcDataItem devData = this.GetPlcDataItem(plcDevice);
     return(devData.ValueNew);
 }
Example #13
0
        //modbusRtu read
        private object ReadModRtuValue(Config.PlcTypeItem plctype, Config.PlcDataItem plcdata, ModbusRtu mod)
        {
            try
            {
                //string[] strAdrss = plcdata.Address.Split('.');
                //string Address = strAdrss[0] + "." + Regex.Replace(strAdrss[1], @"^[A-Za-z]+", string.Empty);

                if (plctype == null || !plctype.IsConnected || plcdata == null || mod == null)
                {
                    return(null);
                }

                switch (plcdata.DataType)
                {
                case Common.DataTypes.Bool:    //Coil
                    plcdata.ValueNew = mod.ReadCoil(plcdata.Address).Content;
                    break;

                case Common.DataTypes.Discrete:    //Discrete
                    plcdata.ValueNew = mod.ReadDiscrete(plcdata.Address).Content;
                    break;

                case Common.DataTypes.Short:
                    plcdata.ValueNew = mod.ReadInt16(plcdata.Address).Content;
                    break;

                case Common.DataTypes.Ushort:
                    plcdata.ValueNew = mod.ReadUInt16(plcdata.Address).Content;
                    break;

                case Common.DataTypes.Int:
                    plcdata.ValueNew = mod.ReadInt32(plcdata.Address).Content;
                    break;

                case Common.DataTypes.UInt:
                    plcdata.ValueNew = mod.ReadUInt32(plcdata.Address).Content;
                    break;

                case Common.DataTypes.Long:
                    plcdata.ValueNew = mod.ReadInt64(plcdata.Address).Content;
                    break;

                case Common.DataTypes.ULong:
                    plcdata.ValueNew = mod.ReadUInt64(plcdata.Address).Content;
                    break;

                case Common.DataTypes.Float:
                    plcdata.ValueNew = mod.ReadFloat(plcdata.Address).Content;
                    break;

                case Common.DataTypes.Double:
                    plcdata.ValueNew = mod.ReadDouble(plcdata.Address).Content;
                    break;

                case Common.DataTypes.String:
                    plcdata.ValueNew = mod.ReadString(plcdata.Address, 10).Content;
                    break;

                default:
                    break;
                }
            }
            catch
            {
                //MessageBox.Show(ex.Message);
            }
            return(plcdata.ValueNew);
        }
Example #14
0
        //PLC写入
        private bool  WriteSieTcpValue(Config.PlcTypeItem plctype, Config.PlcDataItem plcdata, SiemensS7Net plc, object value)
        {
            HslCommunication.OperateResult rlt = new HslCommunication.OperateResult();
            rlt.IsSuccess = false;
            try
            {
                //string[] strAdrss = plcdata.Address.Split('.');
                //string Address = strAdrss[0] + "." + Regex.Replace(strAdrss[1], @"^[A-Za-z]+", string.Empty);

                if (plctype == null || !plctype.IsConnected || plcdata == null || plc == null)
                {
                    return(rlt.IsSuccess);
                }
                switch (plcdata.DataType)
                {
                case Common.DataTypes.Bool:    //Bool
                    rlt = plc.Write(plcdata.Address, Convert.ToBoolean(value));
                    break;

                case Common.DataTypes.Byte:    //Byte
                    rlt = plc.Write(plcdata.Address, Convert.ToChar(value));
                    break;

                case Common.DataTypes.Short:
                    rlt = plc.Write(plcdata.Address, Convert.ToInt16(value));
                    break;

                case Common.DataTypes.Ushort:
                    rlt = plc.Write(plcdata.Address, Convert.ToUInt16(value));
                    break;

                case Common.DataTypes.Int:
                    rlt = plc.Write(plcdata.Address, Convert.ToInt32(value));
                    break;

                case Common.DataTypes.UInt:
                    rlt = plc.Write(plcdata.Address, Convert.ToUInt32(value));
                    break;

                case Common.DataTypes.Long:
                    long lValue = 0;
                    if (long.TryParse(value.ToString(), out lValue))
                    {
                        long lValueNew = BpLong.SwapInt64(lValue);
                        rlt = plc.Write(plcdata.Address, lValueNew);
                    }
                    //plc.Write(plcdata.Address, Convert.ToInt64(value));
                    break;

                case Common.DataTypes.ULong:
                    rlt = plc.Write(plcdata.Address, Convert.ToUInt64(value));
                    break;

                case Common.DataTypes.Float:
                    rlt = plc.Write(plcdata.Address, float.Parse(value.ToString()));
                    break;

                case Common.DataTypes.Double:
                    rlt = plc.Write(plcdata.Address, Convert.ToDouble(value));
                    break;

                case Common.DataTypes.String:
                    if (value != null)
                    {
                        byte[] btValue = System.Text.Encoding.ASCII.GetBytes(value.ToString());
                        byte[] arrData = new byte[btValue.Length + 2];
                        arrData[0] = 50;
                        arrData[1] = (byte)btValue.Length;
                        btValue.CopyTo(arrData, 2);
                        rlt = plc.Write(plcdata.Address, arrData);
                    }
                    break;

                default: break;
                }
            }
            catch
            {
                //MessageBox.Show(ex.Message);
            }
            return(rlt.IsSuccess);
        }
Example #15
0
        //PLC读取
        private object ReadSieTcpValue(Config.PlcTypeItem plctype, Config.PlcDataItem plcdata, SiemensS7Net plc)
        {
            try
            {
                if (plctype == null || !plctype.IsConnected || plcdata == null || plc == null)
                {
                    return(null);
                }

                switch (plcdata.DataType)
                {
                case Common.DataTypes.Bool:    //Bool
                    plcdata.ValueNew = plc.ReadBool(plcdata.Address).Content;
                    break;

                case Common.DataTypes.Byte:    //Byte
                    plcdata.ValueNew = plc.ReadByte(plcdata.Address).Content;
                    break;

                case Common.DataTypes.Short:
                    plcdata.ValueNew = plc.ReadInt16(plcdata.Address).Content;
                    break;

                case Common.DataTypes.Ushort:
                    plcdata.ValueNew = plc.ReadUInt16(plcdata.Address).Content;
                    break;

                case Common.DataTypes.Int:
                    plcdata.ValueNew = plc.ReadInt32(plcdata.Address).Content;
                    break;

                case Common.DataTypes.UInt:
                    plcdata.ValueNew = plc.ReadUInt32(plcdata.Address).Content;
                    break;

                case Common.DataTypes.Long:
                    long lValueNew = 0;
                    if (long.TryParse(plc.ReadInt64(plcdata.Address).Content.ToString(), out lValueNew))
                    {
                        long temp = BpLong.SwapInt64(lValueNew);
                        plcdata.ValueNew = temp;
                    }
                    // plcdata.ValueNew = plc.ReadInt64(plcdata.Address).Content;
                    break;

                case Common.DataTypes.ULong:
                    plcdata.ValueNew = plc.ReadUInt64(plcdata.Address).Content;
                    break;

                case Common.DataTypes.Float:
                    plcdata.ValueNew = plc.ReadFloat(plcdata.Address).Content;
                    break;

                case Common.DataTypes.Double:
                    plcdata.ValueNew = plc.ReadDouble(plcdata.Address).Content;
                    break;

                case Common.DataTypes.String:
                    HslCommunication.OperateResult <byte[]> data = (HslCommunication.OperateResult <byte[]>)plc.Read(plcdata.Address, 50);
                    if (data != null && data.Content != null && data.Content.Length > 2)
                    {
                        List <byte> lstData = new List <byte>();
                        int         nLen    = data.Content[1];
                        for (int i = 2; i < nLen + 2; i++)
                        {
                            lstData.Add(data.Content[i]);
                        }
                        plcdata.ValueNew = System.Text.Encoding.ASCII.GetString(lstData.ToArray());
                    }
                    break;

                default:
                    break;
                }
            }
            catch
            {
                //MessageBox.Show(ex.Message);
            }

            return(plcdata.ValueNew);
        }
Example #16
0
        //数据匹配
        private void btnMatch_Click(object sender, EventArgs e)
        {
            try
            {
                m_plcDataItem.Clear();
                for (int i = 0; i < this.dgvPlcData.RowCount; i++)
                {
                    Config.PlcDataItem o = (Config.PlcDataItem) this.dgvPlcData.Rows[i].DataBoundItem;
                    if (o != null)
                    {
                        Config.PlcDataItem plc = Logic.PlcHandle.Instance.GetPlcDataItem(o.ItemName);
                        if (plc != null)
                        {
                            try
                            {
                                plc.PlcDevice = (Common.PlcDevice)Enum.Parse(typeof(Common.PlcDevice), plc.ItemName);
                            }
                            catch
                            {
                                m_plcDataItem.Add(plc);
                            }
                        }
                        else
                        {
                            m_plcDataItem.Add(plc);
                        }
                    }
                }
                this.dgvPlcData.Refresh();
                if (m_plcDataItem.Count > 0)
                {
                    SaveFileDialog save = new SaveFileDialog();
                    save.Title            = "枚举另存";
                    save.Filter           = "txt files   (*.txt)|*.txt";
                    save.FilterIndex      = 2;
                    save.RestoreDirectory = true;
                    if (save.ShowDialog() == DialogResult.OK)
                    {
                        string file = save.FileName;
                        try
                        {
                            System.IO.File.Delete(file);
                        }
                        catch { }
                        Log.LogWriter.WriteEnum(file, "/// <summary>");
                        Log.LogWriter.WriteEnum(file, "/// PLC设备枚举");
                        Log.LogWriter.WriteEnum(file, "/// </summary>");
                        Log.LogWriter.WriteEnum(file, "public enum PlcDevice");
                        Log.LogWriter.WriteEnum(file, "{{");


                        for (int i = 0; i < this.m_plcDataItem.Count; i++)
                        {
                            Config.PlcDataItem o = this.m_plcDataItem[i];
                            if (o != null)
                            {
                                Log.LogWriter.WriteEnum(file, "    /// <summary>");
                                Log.LogWriter.WriteEnum(file, "    /// {0}", o.Descrip);
                                Log.LogWriter.WriteEnum(file, "    /// </summary>");
                                Log.LogWriter.WriteEnum(file, "    {0},", o.ItemName);
                                Log.LogWriter.WriteEnum(file, "    ");
                            }
                        }
                        Log.LogWriter.WriteEnum(file, "}}");
                        System.Threading.Thread.Sleep(100);
                        System.Diagnostics.Process.Start("notepad", file);
                        m_plcDataItem.Clear();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }