You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

181 lines
6.3 KiB
C#

2 years ago
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<IIOCard> ioCards = new List<IIOCard>();
private Dictionary<string, IOStatus> ioDic = new Dictionary<string, IOStatus>();
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;
}
}
}
}
}