using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.IO; using System.Reflection; using System.Windows.Forms; using HardwareConfig; namespace BaseLibRWFile { public partial class Form_SysSet : Form { IBaseHardware newIBaseHardware; public Form_SysSet() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { ControlLayout(); ChangeLanguage(); GlobalPara.ChangeLanguageEvent += ChangeLanguage; newIBaseHardware = new LeadShineMCardHardConfig() { HardwareType = HardwareTypeEnum.运动控制卡, HardwareName = HardwareNameEnum.雷赛运动控制卡 }; PgHardConfig.SelectedObject = newIBaseHardware; pgSysSetting.SelectedObject = SysSettingPara.Instance; LoadConfig(); } private void ControlLayout() { Rectangle rect = Screen.GetWorkingArea(this); this.Size = new Size(Convert.ToInt32(rect.Width * 0.7), Convert.ToInt32(rect.Height * 0.7) + 20); tabControl1.Location = new Point(0, 0); tabControl1.Size = new Size(this.Width - 20, this.Height - 45); btnAdd.Size = new Size(120, 40); PgHardConfig.Location = new Point(10, 10); PgHardConfig.Size = new Size((tabControl1.Width - btnAdd.Width - 45) / 2, tabControl1.Height - tabControl1.ItemSize.Height - 25); btnAdd.Location = new Point(PgHardConfig.Right + 10, PgHardConfig.Height / 2 - btnAdd.Height - 10); btnHardSave.Location = new Point(btnAdd.Left, btnAdd.Bottom + 40); btnHardSave.Size = btnAdd.Size; treeView1.Location = new Point(btnAdd.Right + 10, PgHardConfig.Top); treeView1.Size = PgHardConfig.Size; pgSysSetting.Location = PgHardConfig.Location; pgSysSetting.Size = PgHardConfig.Size; btnSysSave.Location = btnHardSave.Location; btnSysSave.Size = btnHardSave.Size; } private void ChangeLanguage() { switch (GlobalPara.CurrentLanguage) { case Language.Chinese: tpHardConfig.Text = "硬件配置"; tpSysSetting.Text = "系统设置"; break; case Language.English: tpHardConfig.Text = "HardConfig"; tpSysSetting.Text = "SystemSetting"; break; //case Language.Vietnamese: // tabPage1.Text = "Cấu hình phần cứng"; // tabPage2.Text = "Cài đặt hệ thống"; // break; //case Language.Hindi: // tabPage1.Text = "हार्डवेयर की समाकृति"; // tabPage2.Text = "प्रणाली व्यवस्था"; // break; } } private void LoadConfig() { try { string strPath = HardConfigManager.Ins.HardConfigFilePath; if (File.Exists(strPath)) { treeView1.Nodes.Clear(); HardConfigManager.Ins = HardConfigManager.LoadHardConfigFile(strPath); ShowHardList(); } strPath = SysSettingPara.Instance.StrSysSettingFilePath; if (File.Exists(strPath)) { SysSettingPara.Instance = ClsXml.XmlConfigReader(strPath, typeof(SysSettingPara)) as SysSettingPara; pgSysSetting.SelectedObject = SysSettingPara.Instance; } } catch (Exception ex) { MessageBox.Show($"加载硬件配置文件失败\r\n{ex.Message}"); } } private void ShowHardList() { foreach (var p in HardConfigManager.Ins.HardwareList) { if (!JudgeChildNodesText(p.HardwareType.ToString(), treeView1.Nodes)) { treeView1.Nodes.Add(p.HardwareType.ToString(), p.HardwareType.ToString()); } TreeNode node; switch (p.HardwareName) { case HardwareNameEnum.雷赛运动控制卡: LeadShineMCardHardConfig leadShineMCard = (LeadShineMCardHardConfig)p; node = treeView1.Nodes[HardwareTypeEnum.运动控制卡.ToString()]; string strKey = $"雷赛-{leadShineMCard.型号}[{leadShineMCard.编号}]"; p.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); } break; case HardwareNameEnum.APE运动控制卡: APEMCardHardConfig apeMCard = (APEMCardHardConfig)p; node = treeView1.Nodes[HardwareTypeEnum.运动控制卡.ToString()]; strKey = $"APE-{apeMCard.型号}[{apeMCard.编号}]"; p.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); } break; case HardwareNameEnum.ACS运动控制卡: ACSMCardHardConfig acsmc = (ACSMCardHardConfig)p; node = treeView1.Nodes[HardwareTypeEnum.运动控制卡.ToString()]; strKey = $"ACS-{acsmc.型号}[{acsmc.编号}]"; p.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); } break; case HardwareNameEnum.MC轴组: MCardAxisGroupHardConfig axisGroup = (MCardAxisGroupHardConfig)p; node = treeView1.Nodes[HardwareTypeEnum.MC轴组.ToString()]; strKey = $"{axisGroup.轴组名称}[{axisGroup.编号}]"; p.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); } break; case HardwareNameEnum.PLC轴组: PLCAxisGroupHardConfig plcaxisgroup = (PLCAxisGroupHardConfig)p; node = treeView1.Nodes[HardwareTypeEnum.PLC轴组.ToString()]; strKey = $"{plcaxisgroup.轴组名称}[{plcaxisgroup.编号}]"; p.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); } break; case HardwareNameEnum.雷赛IO卡: LeadShinewIOCardHardConfig leadShineIOCard = (LeadShinewIOCardHardConfig)p; node = treeView1.Nodes[HardwareTypeEnum.IO卡.ToString()]; strKey = $"雷赛-{leadShineIOCard.型号}[{leadShineIOCard.编号}]"; p.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); } break; case HardwareNameEnum.APEIO卡: APEIOCardHardConfig apeIOCard = (APEIOCardHardConfig)p; node = treeView1.Nodes[HardwareTypeEnum.IO卡.ToString()]; strKey = $"APE-{apeIOCard.型号}[{apeIOCard.编号}]"; p.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); } break; case HardwareNameEnum.欧姆龙串口PLC: FinsSeriePortPLCHardConfig finsSeriesPortPLC = (FinsSeriePortPLCHardConfig)p; node = treeView1.Nodes[HardwareTypeEnum.PLC.ToString()]; strKey = $"欧姆龙-{finsSeriesPortPLC.型号}[{finsSeriesPortPLC.编号}]"; p.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); } break; case HardwareNameEnum.欧姆龙网口PLC: FinsTCPPLCHC finsTCPPLC = (FinsTCPPLCHC)p; node = treeView1.Nodes[HardwareTypeEnum.PLC.ToString()]; strKey = $"欧姆龙-{finsTCPPLC.型号}[{finsTCPPLC.编号}]"; p.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); } break; case HardwareNameEnum.三菱QPLC: MXPLCHC mxplc = (MXPLCHC)p; node = treeView1.Nodes[HardwareTypeEnum.PLC.ToString()]; strKey = $"三菱-{mxplc.型号}[{mxplc.编号}]"; p.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); } break; case HardwareNameEnum.三菱机械手: MitRobotHC mitr = (MitRobotHC)p; node = treeView1.Nodes[HardwareTypeEnum.机械手.ToString()]; strKey = $"三菱-{mitr.型号}[{mitr.编号}]"; p.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); } break; case HardwareNameEnum.东芝机械手: ToshibaRobotHC tosr = (ToshibaRobotHC)p; node = treeView1.Nodes[HardwareTypeEnum.机械手.ToString()]; strKey = $"东芝-{tosr.型号}[{tosr.编号}]"; p.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); } break; case HardwareNameEnum.爱普森机械手: EpsonRobotHC epsr = (EpsonRobotHC)p; node = treeView1.Nodes[HardwareTypeEnum.机械手.ToString()]; strKey = $"爱普森-{epsr.型号}[{epsr.编号}]"; p.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); } break; case HardwareNameEnum.APE机械手: APERobotHC aper = (APERobotHC)p; node = treeView1.Nodes[HardwareTypeEnum.机械手.ToString()]; strKey = $"APE-{aper.型号}[{aper.编号}]"; p.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); } break; case HardwareNameEnum.点胶平台: GluePlatHardConfig glue = (GluePlatHardConfig)p; node = treeView1.Nodes[HardwareTypeEnum.点胶平台.ToString()]; strKey = $"{glue.平台名称}[{glue.编号}]"; p.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); } break; case HardwareNameEnum.点胶阀: ValveHC valve = (ValveHC)p; node = treeView1.Nodes[HardwareTypeEnum.点胶阀.ToString()]; strKey = $"{valve.胶阀名称}[{valve.编号}]"; p.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); } break; case HardwareNameEnum.串口: SeriesAtti series = (SeriesAtti)p; node = treeView1.Nodes[HardwareTypeEnum.串口.ToString()]; strKey = $"{series.端口号}-{series.串口名称}[{series.编号}]"; p.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); } break; case HardwareNameEnum.数据库: DatabaseHardConfig db = (DatabaseHardConfig)p; node = treeView1.Nodes[HardwareTypeEnum.数据库.ToString()]; strKey = $"数据库-{db.HardwareType}[{db.编号}]"; p.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); } break; case HardwareNameEnum.网口: SocketAtti socket = (SocketAtti)p; node = treeView1.Nodes[HardwareTypeEnum.网口.ToString()]; strKey = $"{socket.网口名称}[{socket.编号}]"; p.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); } break; default: break; } treeView1.ExpandAll(); } } private void PgHardConfig_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) { switch (e.ChangedItem.Label) { case "HardwareType": switch (e.ChangedItem.Value.ToString()) { case "运动控制卡": newIBaseHardware = new LeadShineMCardHardConfig() { HardwareType = HardwareTypeEnum.运动控制卡, HardwareName = HardwareNameEnum.雷赛运动控制卡 }; PgHardConfig.SelectedObject = newIBaseHardware; break; case "MC轴组": newIBaseHardware = new MCardAxisGroupHardConfig() { HardwareType = HardwareTypeEnum.MC轴组, HardwareName = HardwareNameEnum.MC轴组 }; PgHardConfig.SelectedObject = newIBaseHardware; break; case "PLC": newIBaseHardware = new FinsSeriePortPLCHardConfig() { HardwareType = HardwareTypeEnum.PLC, HardwareName = HardwareNameEnum.欧姆龙串口PLC }; PgHardConfig.SelectedObject = newIBaseHardware; break; case "PLC轴组": newIBaseHardware = new PLCAxisGroupHardConfig() { HardwareType = HardwareTypeEnum.PLC轴组, HardwareName = HardwareNameEnum.PLC轴组 }; PgHardConfig.SelectedObject = newIBaseHardware; break; case "IO卡": newIBaseHardware = new LeadShinewIOCardHardConfig() { HardwareType = HardwareTypeEnum.IO卡, HardwareName = HardwareNameEnum.雷赛IO卡 }; PgHardConfig.SelectedObject = newIBaseHardware; break; case "机械手": newIBaseHardware = new MitRobotHC() { HardwareType = HardwareTypeEnum.机械手, HardwareName = HardwareNameEnum.三菱机械手 }; PgHardConfig.SelectedObject = newIBaseHardware; break; case "点胶平台": newIBaseHardware = new GluePlatHardConfig() { HardwareType = HardwareTypeEnum.点胶平台, HardwareName = HardwareNameEnum.点胶平台 }; PgHardConfig.SelectedObject = newIBaseHardware; break; case "点胶阀": newIBaseHardware = new ValveHC() { HardwareType = HardwareTypeEnum.点胶阀, HardwareName = HardwareNameEnum.点胶阀 }; PgHardConfig.SelectedObject = newIBaseHardware; break; case "串口": newIBaseHardware = new SeriesAtti() { HardwareType = HardwareTypeEnum.串口, HardwareName = HardwareNameEnum.串口 }; PgHardConfig.SelectedObject = newIBaseHardware; break; case "数据库": newIBaseHardware = new DatabaseHardConfig() { HardwareType = HardwareTypeEnum.数据库, HardwareName = HardwareNameEnum.数据库 }; PgHardConfig.SelectedObject = newIBaseHardware; break; case "网口": newIBaseHardware = new SocketAtti() { HardwareType = HardwareTypeEnum.网口, HardwareName = HardwareNameEnum.网口 }; PgHardConfig.SelectedObject = newIBaseHardware; break; default: break; } btnAdd.Enabled = true; break; case "品牌": switch (newIBaseHardware.HardwareType.ToString()) { case "运动控制卡": switch (e.ChangedItem.Value.ToString()) { case "LeadShine": newIBaseHardware = new LeadShineMCardHardConfig() { HardwareType = HardwareTypeEnum.运动控制卡, HardwareName = HardwareNameEnum.雷赛运动控制卡 }; PgHardConfig.SelectedObject = newIBaseHardware; break; case "APE": newIBaseHardware = new APEMCardHardConfig() { HardwareType = HardwareTypeEnum.运动控制卡, HardwareName = HardwareNameEnum.APE运动控制卡 }; PgHardConfig.SelectedObject = newIBaseHardware; break; case "ACS": newIBaseHardware = new ACSMCardHardConfig() { HardwareType = HardwareTypeEnum.运动控制卡, HardwareName = HardwareNameEnum.ACS运动控制卡 }; PgHardConfig.SelectedObject = newIBaseHardware; break; } break; case "IO卡": switch (e.ChangedItem.Value.ToString()) { case "LeadShine": newIBaseHardware = new LeadShinewIOCardHardConfig() { HardwareType = HardwareTypeEnum.IO卡, HardwareName = HardwareNameEnum.雷赛IO卡 }; PgHardConfig.SelectedObject = newIBaseHardware; break; case "APE": newIBaseHardware = new APEIOCardHardConfig() { HardwareType = HardwareTypeEnum.IO卡, HardwareName = HardwareNameEnum.APEIO卡 }; PgHardConfig.SelectedObject = newIBaseHardware; break; } break; case "PLC": switch (e.ChangedItem.Value.ToString()) { case "欧姆龙串口": newIBaseHardware = new FinsSeriePortPLCHardConfig() { HardwareType = HardwareTypeEnum.PLC, HardwareName = HardwareNameEnum.欧姆龙串口PLC }; PgHardConfig.SelectedObject = newIBaseHardware; break; case "欧姆龙网口": newIBaseHardware = new FinsTCPPLCHC() { HardwareType = HardwareTypeEnum.PLC, HardwareName = HardwareNameEnum.欧姆龙网口PLC }; PgHardConfig.SelectedObject = newIBaseHardware; break; case "西门子": break; case "三菱": newIBaseHardware = new MXPLCHC() { HardwareType = HardwareTypeEnum.PLC, HardwareName = HardwareNameEnum.三菱QPLC }; PgHardConfig.SelectedObject = newIBaseHardware; break; } break; case "机械手": switch (e.ChangedItem.Value.ToString()) { case "三菱": newIBaseHardware = new MitRobotHC() { HardwareType = HardwareTypeEnum.机械手, HardwareName = HardwareNameEnum.三菱机械手 }; PgHardConfig.SelectedObject = newIBaseHardware; break; case "爱普森": newIBaseHardware = new EpsonRobotHC() { HardwareType = HardwareTypeEnum.机械手, HardwareName = HardwareNameEnum.爱普森机械手 }; PgHardConfig.SelectedObject = newIBaseHardware; break; case "APE": newIBaseHardware = new APERobotHC() { HardwareType = HardwareTypeEnum.机械手, HardwareName = HardwareNameEnum.APE机械手 }; PgHardConfig.SelectedObject = newIBaseHardware; break; case "东芝": newIBaseHardware = new ToshibaRobotHC() { HardwareType = HardwareTypeEnum.机械手, HardwareName = HardwareNameEnum.东芝机械手 }; PgHardConfig.SelectedObject = newIBaseHardware; break; default: break; } break; default: break; } break; } } private void BtnAdd_Click(object sender, EventArgs e) { try { newIBaseHardware = (BaseHardware)PgHardConfig.SelectedObject; if (!JudgeChildNodesText(newIBaseHardware.HardwareType.ToString(), treeView1.Nodes)) { treeView1.Nodes.Add(newIBaseHardware.HardwareType.ToString(), newIBaseHardware.HardwareType.ToString()); } AddCommand(newIBaseHardware); treeView1.ExpandAll(); } catch (Exception ex) { MessageBox.Show($"添加P{newIBaseHardware.HardwareType}失败\r\n{ex.Message}"); } } private void AddCommand(IBaseHardware ibaseHard) { TreeNode node; switch (ibaseHard.HardwareName) { case HardwareNameEnum.雷赛运动控制卡: LeadShineMCardHardConfig motionCard = (LeadShineMCardHardConfig)ibaseHard; LeadShineMCardHardConfig newLeadShine = new LeadShineMCardHardConfig { Enable = motionCard.Enable, HardwareName = motionCard.HardwareName, 型号 = motionCard.型号, 卡号 = motionCard.卡号, HardwareType = HardwareTypeEnum.运动控制卡, 编号 = treeView1.Nodes[HardwareTypeEnum.运动控制卡.ToString()].Nodes.Count, 扩展IO卡个数 = motionCard.扩展IO卡个数, 轴数 = motionCard.轴数, 配置文件名 = motionCard.配置文件名 }; node = treeView1.Nodes[HardwareTypeEnum.运动控制卡.ToString()]; string strKey = $"雷赛-{newLeadShine.型号}[{newLeadShine.编号}]"; newLeadShine.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); HardConfigManager.Ins.HardwareList.Add(newLeadShine); } else { MessageBox.Show($"已包含{strKey}"); } break; case HardwareNameEnum.APE运动控制卡: APEMCardHardConfig apemc = (APEMCardHardConfig)ibaseHard; APEMCardHardConfig newApeMCard = new APEMCardHardConfig { Enable = apemc.Enable, HardwareName = apemc.HardwareName, 型号 = apemc.型号, 卡号 = apemc.卡号, HardwareType = HardwareTypeEnum.运动控制卡, 编号 = treeView1.Nodes[HardwareTypeEnum.运动控制卡.ToString()].Nodes.Count, 轴数 = apemc.轴数 }; node = treeView1.Nodes[HardwareTypeEnum.运动控制卡.ToString()]; strKey = $"APE-{newApeMCard.型号}[{newApeMCard.编号}]"; newApeMCard.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); HardConfigManager.Ins.HardwareList.Add(newApeMCard); } else { MessageBox.Show($"已包含{strKey}"); } break; case HardwareNameEnum.ACS运动控制卡: ACSMCardHardConfig acsmc = (ACSMCardHardConfig)ibaseHard; ACSMCardHardConfig acsmc1 = new ACSMCardHardConfig(); acsmc1.Enable = acsmc.Enable; acsmc1.HardwareName = acsmc.HardwareName; acsmc1.型号 = acsmc.型号; acsmc1.卡号 = acsmc.卡号; acsmc1.HardwareType = HardwareTypeEnum.运动控制卡; acsmc1.编号 = treeView1.Nodes[HardwareTypeEnum.运动控制卡.ToString()].Nodes.Count; acsmc1.轴数 = acsmc.轴数; node = treeView1.Nodes[HardwareTypeEnum.运动控制卡.ToString()]; strKey = $"ACS-{acsmc1.型号}[{acsmc1.编号}]"; acsmc1.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); HardConfigManager.Ins.HardwareList.Add(acsmc1); } else { MessageBox.Show($"已包含{strKey}"); } break; case HardwareNameEnum.MC轴组: if (!treeView1.Nodes.ContainsKey("运动控制卡")) { MessageBox.Show($"请先添加运动控制卡"); return; } MCardAxisGroupHardConfig axisGroup = (MCardAxisGroupHardConfig)ibaseHard; MCardAxisGroupHardConfig newAxisGroup = new MCardAxisGroupHardConfig(); for (int i = 0; i < treeView1.Nodes[HardwareTypeEnum.MC轴组.ToString()].Nodes.Count; i++) { if (treeView1.Nodes[HardwareTypeEnum.MC轴组.ToString()].Nodes.ContainsKey($"{axisGroup.轴组名称}[{i}]")) { MessageBox.Show($"轴组名称重复"); return; } } newAxisGroup.Enable = axisGroup.Enable; newAxisGroup.HardwareName = axisGroup.HardwareName; newAxisGroup.HardwareType = HardwareTypeEnum.MC轴组; newAxisGroup.轴数 = axisGroup.轴数; newAxisGroup.编号 = treeView1.Nodes[HardwareTypeEnum.MC轴组.ToString()].Nodes.Count; newAxisGroup.轴组名称 = axisGroup.轴组名称; newAxisGroup.轴卡编号 = axisGroup.轴卡编号; node = treeView1.Nodes[HardwareTypeEnum.MC轴组.ToString()]; strKey = $"{newAxisGroup.轴组名称}[{newAxisGroup.编号}]"; newAxisGroup.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); HardConfigManager.Ins.HardwareList.Add(newAxisGroup); } else { MessageBox.Show($"已包含{strKey}"); } break; case HardwareNameEnum.PLC轴组: if (!treeView1.Nodes.ContainsKey("PLC")) { MessageBox.Show($"请先添加PLC"); return; } PLCAxisGroupHardConfig plcaxisgroup = (PLCAxisGroupHardConfig)ibaseHard; PLCAxisGroupHardConfig newPLCAxisgroup = new PLCAxisGroupHardConfig(); for (int i = 0; i < treeView1.Nodes[HardwareTypeEnum.PLC轴组.ToString()].Nodes.Count; i++) { if (treeView1.Nodes.ContainsKey($"{plcaxisgroup.轴组名称}[{i}]")) { MessageBox.Show($"PLC轴组名称重复"); return; } } newPLCAxisgroup.Enable = plcaxisgroup.Enable; newPLCAxisgroup.HardwareName = plcaxisgroup.HardwareName; newPLCAxisgroup.HardwareType = HardwareTypeEnum.PLC轴组; newPLCAxisgroup.轴数 = plcaxisgroup.轴数; newPLCAxisgroup.PLC编号 = plcaxisgroup.PLC编号; newPLCAxisgroup.编号 = treeView1.Nodes[HardwareTypeEnum.PLC轴组.ToString()].Nodes.Count; newPLCAxisgroup.轴组名称 = plcaxisgroup.轴组名称; node = treeView1.Nodes[HardwareTypeEnum.PLC轴组.ToString()]; strKey = $"{newPLCAxisgroup.轴组名称}[{newPLCAxisgroup.编号}]"; newPLCAxisgroup.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); HardConfigManager.Ins.HardwareList.Add(newPLCAxisgroup); } else { MessageBox.Show($"已包含{strKey}"); } break; case HardwareNameEnum.雷赛IO卡: LeadShinewIOCardHardConfig leadShineCard = (LeadShinewIOCardHardConfig)ibaseHard; LeadShinewIOCardHardConfig newLeadShinewIOCard = new LeadShinewIOCardHardConfig(); newLeadShinewIOCard.Enable = leadShineCard.Enable; newLeadShinewIOCard.HardwareName = leadShineCard.HardwareName; newLeadShinewIOCard.型号 = leadShineCard.型号; newLeadShinewIOCard.卡号 = leadShineCard.卡号; newLeadShinewIOCard.HardwareType = HardwareTypeEnum.IO卡; newLeadShinewIOCard.编号 = treeView1.Nodes[HardwareTypeEnum.IO卡.ToString()].Nodes.Count; node = treeView1.Nodes[HardwareTypeEnum.IO卡.ToString()]; strKey = $"雷赛-{newLeadShinewIOCard.型号}[{newLeadShinewIOCard.编号}]"; newLeadShinewIOCard.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); HardConfigManager.Ins.HardwareList.Add(newLeadShinewIOCard); } else { MessageBox.Show($"已包含{strKey}"); } break; case HardwareNameEnum.APEIO卡: APEIOCardHardConfig apeiocard = (APEIOCardHardConfig)ibaseHard; APEIOCardHardConfig apeiocard1 = new APEIOCardHardConfig { Enable = apeiocard.Enable, HardwareName = apeiocard.HardwareName, 型号 = apeiocard.型号, 卡号 = apeiocard.卡号, HardwareType = HardwareTypeEnum.IO卡, 编号 = treeView1.Nodes[HardwareTypeEnum.IO卡.ToString()].Nodes.Count }; node = treeView1.Nodes[HardwareTypeEnum.IO卡.ToString()]; strKey = $"APE-{apeiocard1.型号}[{apeiocard1.编号}]"; apeiocard1.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); HardConfigManager.Ins.HardwareList.Add(apeiocard1); } else { MessageBox.Show($"已包含{strKey}"); } break; case HardwareNameEnum.欧姆龙串口PLC: FinsSeriePortPLCHardConfig finsSeries = (FinsSeriePortPLCHardConfig)ibaseHard; FinsSeriePortPLCHardConfig finsS = new FinsSeriePortPLCHardConfig(); finsS.Enable = finsSeries.Enable; finsS.HardwareType = HardwareTypeEnum.PLC; finsS.HardwareName = finsSeries.HardwareName; finsS.型号 = finsSeries.型号; finsS.编号 = treeView1.Nodes[HardwareTypeEnum.PLC.ToString()].Nodes.Count; finsS.端口号 = finsSeries.端口号; finsS.波特率 = finsSeries.波特率; finsS.数据位 = finsSeries.数据位; finsS.校验位 = finsSeries.校验位; finsS.停止位 = finsSeries.停止位; node = treeView1.Nodes[HardwareTypeEnum.PLC.ToString()]; strKey = $"欧姆龙-{finsS.型号}[{finsS.编号}]"; finsS.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); HardConfigManager.Ins.HardwareList.Add(finsS); } else { MessageBox.Show($"已包含{strKey}"); } break; case HardwareNameEnum.欧姆龙网口PLC: FinsTCPPLCHC finsTCP = (FinsTCPPLCHC)ibaseHard; FinsTCPPLCHC finsT = new FinsTCPPLCHC(); finsT.Enable = finsTCP.Enable; finsT.HardwareType = HardwareTypeEnum.PLC; finsT.HardwareName = finsTCP.HardwareName; finsT.型号 = finsTCP.型号; finsT.编号 = treeView1.Nodes[HardwareTypeEnum.PLC.ToString()].Nodes.Count; finsT.PLCIP = finsTCP.PLCIP; finsT.PLC端口号 = finsTCP.PLC端口号; finsT.工控机IP = finsTCP.工控机IP; node = treeView1.Nodes[HardwareTypeEnum.PLC.ToString()]; strKey = $"欧姆龙-{finsT.型号}[{finsT.编号}]"; finsT.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); HardConfigManager.Ins.HardwareList.Add(finsT); } else { MessageBox.Show($"已包含{strKey}"); } break; case HardwareNameEnum.三菱QPLC: MXPLCHC mxplc = (MXPLCHC)ibaseHard; MXPLCHC mxplc1 = new MXPLCHC(); mxplc1.Enable = mxplc.Enable; mxplc1.HardwareType = HardwareTypeEnum.PLC; mxplc1.HardwareName = mxplc.HardwareName; mxplc1.型号 = mxplc.型号; mxplc1.编号 = treeView1.Nodes[HardwareTypeEnum.PLC.ToString()].Nodes.Count; mxplc1.PLCIP = mxplc.PLCIP; mxplc1.PLC端口号 = mxplc.PLC端口号; mxplc1.工控机IP = mxplc.工控机IP; node = treeView1.Nodes[HardwareTypeEnum.PLC.ToString()]; strKey = $"三菱-{mxplc1.型号}[{mxplc1.编号}]"; mxplc1.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); HardConfigManager.Ins.HardwareList.Add(mxplc1); } else { MessageBox.Show($"已包含{strKey}"); } break; case HardwareNameEnum.三菱机械手: MitRobotHC mitr = (MitRobotHC)ibaseHard; MitRobotHC mitr1 = new MitRobotHC(); mitr1.Enable = mitr.Enable; mitr1.HardwareType = HardwareTypeEnum.机械手; mitr1.HardwareName = mitr.HardwareName; mitr1.型号 = mitr.型号; mitr1.编号 = treeView1.Nodes[HardwareTypeEnum.机械手.ToString()].Nodes.Count; mitr1.IP = mitr.IP; mitr1.端口号 = mitr.端口号; node = treeView1.Nodes[HardwareTypeEnum.机械手.ToString()]; strKey = $"三菱-{mitr1.型号}[{mitr1.编号}]"; mitr1.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); HardConfigManager.Ins.HardwareList.Add(mitr1); } else { MessageBox.Show($"已包含{strKey}"); } break; case HardwareNameEnum.东芝机械手: ToshibaRobotHC tosr = (ToshibaRobotHC)ibaseHard; ToshibaRobotHC tosr1 = new ToshibaRobotHC(); tosr1.Enable = tosr.Enable; tosr1.HardwareType = HardwareTypeEnum.机械手; tosr1.HardwareName = tosr.HardwareName; tosr1.型号 = tosr.型号; tosr1.编号 = treeView1.Nodes[HardwareTypeEnum.机械手.ToString()].Nodes.Count; tosr1.IP = tosr.IP; tosr1.端口号 = tosr.端口号; node = treeView1.Nodes[HardwareTypeEnum.机械手.ToString()]; strKey = $"东芝-{tosr1.型号}[{tosr1.编号}]"; tosr1.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); HardConfigManager.Ins.HardwareList.Add(tosr1); } else { MessageBox.Show($"已包含{strKey}"); } break; case HardwareNameEnum.爱普森机械手: EpsonRobotHC epsr = (EpsonRobotHC)ibaseHard; EpsonRobotHC epsr1 = new EpsonRobotHC(); epsr1.Enable = epsr.Enable; epsr1.HardwareType = HardwareTypeEnum.机械手; epsr1.HardwareName = epsr.HardwareName; epsr1.型号 = epsr.型号; epsr1.编号 = treeView1.Nodes[HardwareTypeEnum.机械手.ToString()].Nodes.Count; epsr1.IP = epsr.IP; epsr1.端口号 = epsr.端口号; node = treeView1.Nodes[HardwareTypeEnum.机械手.ToString()]; strKey = $"爱普森-{epsr1.型号}[{epsr1.编号}]"; epsr1.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); HardConfigManager.Ins.HardwareList.Add(epsr1); } else { MessageBox.Show($"已包含{strKey}"); } break; case HardwareNameEnum.APE机械手: APERobotHC aper = (APERobotHC)ibaseHard; APERobotHC aper1 = new APERobotHC(); aper1.Enable = aper.Enable; aper1.HardwareType = HardwareTypeEnum.机械手; aper1.HardwareName = aper.HardwareName; aper1.型号 = aper.型号; aper1.编号 = treeView1.Nodes[HardwareTypeEnum.机械手.ToString()].Nodes.Count; aper1.IP = aper.IP; aper1.端口号 = aper.端口号; node = treeView1.Nodes[HardwareTypeEnum.机械手.ToString()]; strKey = $"APE-{aper1.型号}[{aper1.编号}]"; aper1.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); HardConfigManager.Ins.HardwareList.Add(aper1); } else { MessageBox.Show($"已包含{strKey}"); } break; case HardwareNameEnum.点胶平台: if (!treeView1.Nodes.ContainsKey(HardwareTypeEnum.MC轴组.ToString())) { MessageBox.Show($"请先添加运动控制卡轴组"); return; } GluePlatHardConfig glue = (GluePlatHardConfig)ibaseHard; GluePlatHardConfig glue1 = new GluePlatHardConfig(); for (int i = 0; i < treeView1.Nodes[HardwareTypeEnum.点胶平台.ToString()].Nodes.Count; i++) { if (i>3) { MessageBox.Show($"点胶平台最多添加4个"); return; } if (treeView1.Nodes[HardwareTypeEnum.点胶平台.ToString()].Nodes.ContainsKey($"{glue.平台名称}[{i}]")) { MessageBox.Show($"点胶平台名称重复"); return; } } glue1.Enable = glue.Enable; glue1.HardwareName = glue.HardwareName; glue1.HardwareType = HardwareTypeEnum.点胶平台; glue1.平台名称 = glue.平台名称; glue1.编号 = treeView1.Nodes[HardwareTypeEnum.点胶平台.ToString()].Nodes.Count; glue1.轴组编号 = glue.轴组编号; node = treeView1.Nodes[HardwareTypeEnum.点胶平台.ToString()]; strKey = $"{glue1.平台名称}[{glue1.编号}]"; glue1.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); HardConfigManager.Ins.HardwareList.Add(glue1); } else { MessageBox.Show($"已包含{strKey}"); } break; case HardwareNameEnum.点胶阀: if (!treeView1.Nodes.ContainsKey(HardwareTypeEnum.点胶平台.ToString())) { MessageBox.Show($"请先添加点胶平台"); return; } ValveHC valve = (ValveHC)ibaseHard; ValveHC valve1 = new ValveHC(); for (int i = 0; i < treeView1.Nodes[HardwareTypeEnum.点胶阀.ToString()].Nodes.Count; i++) { if (i > 3) { MessageBox.Show($"点胶阀最多添加4个"); return; } if (treeView1.Nodes[HardwareTypeEnum.点胶阀.ToString()].Nodes.ContainsKey($"{valve.胶阀名称}[{i}]")) { MessageBox.Show($"点胶阀名称重复"); return; } } valve1.Enable = valve.Enable; valve1.HardwareName = valve.HardwareName; valve1.HardwareType = HardwareTypeEnum.点胶阀; valve1.胶阀名称 = valve.胶阀名称; valve1.编号 = treeView1.Nodes[HardwareTypeEnum.点胶阀.ToString()].Nodes.Count; valve1.胶阀 = valve.胶阀; valve1.端口号 = valve.端口号; valve1.波特率 = valve.波特率; valve1.数据位 = valve.数据位; valve1.校验位 = valve.校验位; valve1.停止位 = valve.停止位; node = treeView1.Nodes[HardwareTypeEnum.点胶阀.ToString()]; strKey = $"{valve1.胶阀名称}[{valve1.编号}]"; valve1.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); HardConfigManager.Ins.HardwareList.Add(valve1); } else { MessageBox.Show($"已包含{strKey}"); } break; case HardwareNameEnum.串口: SeriesAtti seriePort = (SeriesAtti)ibaseHard; SeriesAtti newSeriePort = new SeriesAtti { Enable = seriePort.Enable, HardwareType = HardwareTypeEnum.串口, HardwareName = seriePort.HardwareName, 串口名称 = seriePort.串口名称, 串口类型 = seriePort.串口类型, 端口号 = seriePort.端口号, 波特率 = seriePort.波特率, 数据位 = seriePort.数据位, 校验位 = seriePort.校验位, 停止位 = seriePort.停止位, 编号 = treeView1.Nodes[HardwareTypeEnum.串口.ToString()].Nodes.Count }; for (int i = 0; i < treeView1.Nodes[HardwareTypeEnum.串口.ToString()].Nodes.Count; i++) { if (treeView1.Nodes[HardwareTypeEnum.串口.ToString()].Nodes.ContainsKey($"{newSeriePort.端口号}-{newSeriePort.串口名称}[{i}]")) { MessageBox.Show($"串口名称重复"); return; } } node = treeView1.Nodes[HardwareTypeEnum.串口.ToString()]; strKey = $"{newSeriePort.端口号}-{newSeriePort.串口名称}[{newSeriePort.编号}]"; newSeriePort.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); HardConfigManager.Ins.HardwareList.Add(newSeriePort); } else { MessageBox.Show($"已包含{strKey}"); } break; case HardwareNameEnum.数据库: DatabaseHardConfig db = (DatabaseHardConfig)ibaseHard; DatabaseHardConfig db1 = new DatabaseHardConfig(); db1.Enable = db.Enable; db1.HardwareType = HardwareTypeEnum.数据库; db1.HardwareName = db.HardwareName; db1.编号 = treeView1.Nodes[HardwareTypeEnum.数据库.ToString()].Nodes.Count; db1.IP = db.IP; db1.端口号 = db.端口号; node = treeView1.Nodes[HardwareTypeEnum.数据库.ToString()]; strKey = $"数据库-{db1.HardwareType}[{db1.编号}]"; db1.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); HardConfigManager.Ins.HardwareList.Add(db1); } else { MessageBox.Show($"已包含{strKey}"); } break; case HardwareNameEnum.网口: SocketAtti socket = (SocketAtti)ibaseHard; SocketAtti newSocket = new SocketAtti { Enable = socket.Enable, HardwareType = HardwareTypeEnum.网口, HardwareName = socket.HardwareName, 编号 = treeView1.Nodes[HardwareTypeEnum.网口.ToString()].Nodes.Count, 网口类型 = socket.网口类型, 网口名称 = socket.网口名称 }; for (int i = 0; i < treeView1.Nodes[HardwareTypeEnum.网口.ToString()].Nodes.Count; i++) { if (treeView1.Nodes[HardwareTypeEnum.网口.ToString()].Nodes.ContainsKey($"{newSocket.网口名称}[{i}]")) { MessageBox.Show($"网口名称重复"); return; } } newSocket.IP = socket.IP; newSocket.端口号 = socket.端口号; node = treeView1.Nodes[HardwareTypeEnum.网口.ToString()]; strKey = $"{newSocket.网口名称}[{newSocket.编号}]"; newSocket.Key = strKey; if (!node.Nodes.ContainsKey(strKey)) { node.Nodes.Add(strKey, strKey); HardConfigManager.Ins.HardwareList.Add(newSocket); } else { MessageBox.Show($"已包含{strKey}"); } break; default: break; } } private bool JudgeChildNodesText(string strText, TreeNodeCollection treeNodeCollection) { foreach (TreeNode node in treeNodeCollection) { if (node.Text == strText) { return true; } } return false; } private void BtnSave_Click(object sender, EventArgs e) { treeView1.Nodes.Clear(); ShowHardList(); HardConfigManager.Ins.Save(); } private void TreeView1_AfterSelect(object sender, TreeViewEventArgs e) { if (treeView1.SelectedNode.Level == 1) { PgHardConfig.SelectedObject = HardConfigManager.Ins.HardwareList.Find(p => p.Key == treeView1.SelectedNode.Text && p.HardwareType.ToString() == treeView1.SelectedNode.Parent.Text); newIBaseHardware = HardConfigManager.Ins.HardwareList.Find(p => p.Key == treeView1.SelectedNode.Text && p.HardwareType.ToString() == treeView1.SelectedNode.Parent.Text); PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(PgHardConfig.SelectedObject); PropertyDescriptor type = properties["品牌"]; //SetPropertyReadOnly(PgHardConfig.SelectedObject, "HardwareType", true);//类型 //if (properties.Contains(type)) //{ // SetPropertyReadOnly(PgHardConfig.SelectedObject, "品牌", true); //} ////propertyGrid1.SelectedObject = HardConfigManager.Ins.HardList.Find(p => p.Key == treeView1.SelectedNode.Text && p.类型.ToString() == treeView1.SelectedNode.Parent.Text); //btnAdd.Enabled = false; } } void SetPropertyReadOnly(object obj, string propertyName, bool readOnly) { Type type = typeof(ReadOnlyAttribute); PropertyDescriptorCollection props = TypeDescriptor.GetProperties(obj); AttributeCollection attrs = props[propertyName].Attributes; FieldInfo fld = type.GetField("isReadOnly", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.CreateInstance); fld.SetValue(attrs[type], readOnly); } private void DeleteToolStripMenuItem_Click(object sender, EventArgs e) { if (treeView1.SelectedNode.Level == 1) { HardConfigManager.Ins.HardwareList.Remove(HardConfigManager.Ins.HardwareList.Find(p => p.Key == treeView1.SelectedNode.Text)); treeView1.SelectedNode.Remove(); newIBaseHardware = new LeadShineMCardHardConfig() { HardwareType = HardwareTypeEnum.运动控制卡, HardwareName = HardwareNameEnum.雷赛运动控制卡 }; PgHardConfig.SelectedObject = newIBaseHardware; } else if (treeView1.SelectedNode.Level == 0) { if (treeView1.Nodes[treeView1.SelectedNode.Text].Nodes.Count == 0) { treeView1.SelectedNode.Remove(); } } } private void Form_SysSet_FormClosing(object sender, FormClosingEventArgs e) { this.Hide(); e.Cancel = true; } private void DeleteAllToolStripMenuItem_Click(object sender, EventArgs e) { treeView1.Nodes.Clear(); HardConfigManager.Ins.HardwareList.Clear(); } private void BtnSysSave_Click(object sender, EventArgs e) { string strPath = SysSettingPara.Instance.StrSysSettingFilePath; ClsXml.XmlConfigWriter(SysSettingPara.Instance, strPath); } } }