using Rs.Controls; using Rs.Motion; using Rs.Motion.GugaoEcat; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Rs.MotionPlat { public partial class FormIO : BaseForm { private TabControlEx tab; List ioCards = new List(); private Dictionary ioDic = new Dictionary(); public FormIO() { InitializeComponent(); this.Padding = new Padding(0,20,0,0); } private void FormIO_Load(object sender, EventArgs e) { ioCards = IoManager.Instance.GetCards(); tab = new TabControlEx(); tab.DrawMode = TabDrawMode.OwnerDrawFixed; tab.ItemSize = new Size(150, 50); tab.SuspendLayout(); foreach (IIOCard card in ioCards) { TabPage tp = new TabPage(); tp.BackColor = Color.FromArgb(11, 16, 36); tp.Text = card.Name; tab.TabPages.Add(tp); if(card.DIn.Count>0 && card.DOut.Count>0) { TableLayoutPanel table= new TableLayoutPanel(); table.Dock= DockStyle.Fill; //table.BackColor = Color.Red; table.ColumnCount = 1; table.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); table.RowCount = 2; table.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); table.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); Panel panel = new Panel(); panel.Dock = DockStyle.Fill; table.Controls.Add(panel, 0, 0); Label lblIn = new Label(); lblIn.ForeColor = Color.Black; lblIn.Font = new Font("宋体", 20); lblIn.AutoSize = false; lblIn.Dock = DockStyle.Top; lblIn.TextAlign = ContentAlignment.MiddleCenter; lblIn.Text = "输入"; lblIn.Height = 50; lblIn.BackColor = Color.FromArgb(255, 255, 255); FlowLayoutPanel tableLayoutPanel = new FlowLayoutPanel(); tableLayoutPanel.Dock = DockStyle.Fill; foreach (IIO io in card.DIn) { CreateIoControl(tableLayoutPanel, io); } panel.Controls.Add(tableLayoutPanel); panel.Controls.Add(lblIn); Panel panel2 = new Panel(); panel2.Dock = DockStyle.Fill; table.Controls.Add(panel2, 0, 1); Label lblOut = new Label(); lblOut.ForeColor=Color.White; lblOut.Font = new Font("宋体", 24); lblOut.AutoSize = false; lblOut.Dock = DockStyle.Top; lblOut.TextAlign = ContentAlignment.MiddleCenter; lblOut.Text = "输出"; lblOut.Height = 50; lblOut.BackColor = Color.Gray; FlowLayoutPanel tableLayoutPane2 = new FlowLayoutPanel(); tableLayoutPane2.Dock = DockStyle.Fill; foreach (IIO io in card.DOut) { CreateIoControl(tableLayoutPane2, io); } panel2.Controls.Add(tableLayoutPane2); panel2.Controls.Add(lblOut); tp.Controls.Add(table); //分上下两部分,均分 } else { FlowLayoutPanel tableLayoutPanel= new FlowLayoutPanel(); tableLayoutPanel.Dock= DockStyle.Fill; foreach (IIO io in card.DOut) { CreateIoControl(tableLayoutPanel, io); tp.Controls.Add(tableLayoutPanel); } foreach (IIO io in card.DIn) { CreateIoControl(tableLayoutPanel, io); tp.Controls.Add(tableLayoutPanel); } } } tab.Dock = DockStyle.Fill; this.Controls.Add(tab); timer1.Enabled = true; } void CreateIoControl(FlowLayoutPanel panel, IIO io) { try { IOStatus iostatus = new IOStatus(); iostatus.Font = new Font("宋体", 16); iostatus.Tag = io; iostatus.Margin = new Padding(30, 20, 30, 20); iostatus.IoNO = io.Index; iostatus.Radius = 10; iostatus.AutoSize = false; iostatus.ForeColor = Color.White; iostatus.Size = new Size(170, 70); iostatus.Status = 0; iostatus.Text = io.Name; ioDic.Add(io.Name, iostatus); iostatus.Click += (s, e) => { IOStatus btnIo = (IOStatus)s; IIO _io = (IIO)btnIo.Tag; if(btnIo.Status==0) IoManager.Instance.WriteOut(_io.Name, 1); else IoManager.Instance.WriteOut(_io.Name, 0); }; panel.Controls.Add(iostatus); } catch (Exception ex) { } } private void timer1_Tick(object sender, EventArgs e) { if(tab.SelectedIndex>=0) { IIOCard card = ioCards[tab.SelectedIndex]; foreach (IIO iO in card.DIn) { short value = IoManager.Instance.ReadIn(iO.Name); ioDic[iO.Name].Status = value; } foreach (IIO iO in card.DOut) { short value = IoManager.Instance.ReadOut(iO.Name); ioDic[iO.Name].Status = value; } } } } }