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.
432 lines
16 KiB
C#
432 lines
16 KiB
C#
using Rs.Controls;
|
|
using Rs.DataAccess;
|
|
using Rs.Framework;
|
|
using Rs.Motion;
|
|
using Rs.Motion.Base;
|
|
using Rs.Motion.GugaoEcat;
|
|
using Rs.MotionPlat.Commom;
|
|
using Rs.MotionPlat.SysConfig;
|
|
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
|
|
{
|
|
SqliteHelper db = new SqliteHelper();
|
|
private TabControlEx tab;
|
|
List<IIOCard> ioCards = new List<IIOCard>();
|
|
private Dictionary<string, IOStatus> ioDicIn = new Dictionary<string, IOStatus>();
|
|
private Dictionary<string, IOStatus> ioDicOut = new Dictionary<string, IOStatus>();
|
|
private IOStatus selectIOStatus;
|
|
List<ButtonEx> btnList = new List<ButtonEx>();
|
|
PanelEx mainPanel;
|
|
string m_query = "";
|
|
public FormIO()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
public FormIO(string query)
|
|
{
|
|
InitializeComponent();
|
|
m_query = query;
|
|
}
|
|
|
|
private void FormIO_Load(object sender, EventArgs e)
|
|
{
|
|
DataTable dt= new DataTable();
|
|
if(string.IsNullOrEmpty(m_query))
|
|
{
|
|
dt = db.GetDataTable("select * from io where enable=1 order by sortindex asc");
|
|
}
|
|
else
|
|
{
|
|
dt = db.GetDataTable($"select * from io where enable=1 and cardname like '%{m_query}%' order by sortindex asc");
|
|
}
|
|
ioCards = IoManager.Instance.GetCards();
|
|
this.tableLayoutPanel1.RowCount = dt.Rows.Count + 1;
|
|
tableLayoutPanel1.ColumnCount = 1;
|
|
tableLayoutPanel1.RowStyles.Clear();
|
|
for(int i=0;i<dt.Rows.Count;i++)
|
|
{
|
|
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 53));
|
|
ButtonEx button = new ButtonEx();
|
|
button.SelectedColor = Color.Red;
|
|
button.Cursor= Cursors.Hand;
|
|
btnList.Add(button);
|
|
button.Tag = IoManager.Instance.GetCard(ushort.Parse(dt.Rows[i]["cardid"].ToString()), dt.Rows[i]["vender"].ToString().ToLower());
|
|
button.Click += Button_Click;
|
|
button.ForeColor = Color.White;
|
|
button.Margin = new Padding(0,3,0,0);
|
|
button.ShowText = dt.Rows[i]["cardname"].ToString();
|
|
button.Dock = DockStyle.Fill;
|
|
button.FlatStyle = FlatStyle.Flat;
|
|
button.FlatAppearance.BorderColor = System.Drawing.Color.White;
|
|
tableLayoutPanel1.Controls.Add(button, 0, i);
|
|
}
|
|
//tableLayoutPanel1.Height = 50;
|
|
//tableLayoutPanel1.Dock = DockStyle.Top;
|
|
|
|
mainPanel = new PanelEx();
|
|
mainPanel.BackColor = Color.Blue;
|
|
mainPanel.Dock = DockStyle.Fill;
|
|
timer1.Enabled = true;
|
|
if (btnList != null && btnList.Count > 0)
|
|
{
|
|
btnList[0].PerformClick();
|
|
}
|
|
// this.Controls.Add(tableLayoutPanel1);
|
|
//this.Controls.Add(mainPanel);
|
|
|
|
|
|
//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 + "_" + card.CardID;
|
|
// 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.White;
|
|
// lblIn.Font = new Font("宋体", 20);
|
|
// lblIn.AutoSize = false;
|
|
// lblIn.Dock = DockStyle.Top;
|
|
// lblIn.TextAlign = ContentAlignment.MiddleCenter;
|
|
// lblIn.Text = "输入";
|
|
// lblIn.Height = 50;
|
|
// lblIn.BackColor = Color.Gray;
|
|
|
|
// 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;
|
|
}
|
|
|
|
|
|
private void ClearSelect()
|
|
{
|
|
foreach (ButtonEx btn in btnList)
|
|
{
|
|
btn.Selected = false;
|
|
}
|
|
}
|
|
private void Button_Click(object sender, EventArgs e)
|
|
{
|
|
int btnWidth = (((Screen.PrimaryScreen.WorkingArea.Width - 180) / 2) - 130) / 4;
|
|
ClearSelect();
|
|
((ButtonEx)sender).Selected = true;
|
|
//timer1.Enabled = false;
|
|
panelIn.Controls.Clear();
|
|
panelOut.Controls.Clear();
|
|
IIOCard card=(IIOCard)(((ButtonEx)sender).Tag);
|
|
if (card == null) return;
|
|
ioDicIn.Clear();
|
|
ioDicOut.Clear();
|
|
if(card.DIn.Count>0)
|
|
{
|
|
card.DIn= card.DIn.OrderBy(ob => ob.Disabled).ToList();
|
|
foreach (IIO iO in card.DIn)
|
|
{
|
|
CreateIoControl(panelIn, iO, true, btnWidth);
|
|
}
|
|
}
|
|
|
|
if (card.DOut.Count > 0)
|
|
{
|
|
card.DOut = card.DOut.OrderBy(ob => ob.Disabled).ToList();
|
|
foreach (IIO iO in card.DOut)
|
|
{
|
|
CreateIoControl(panelOut, iO, false, btnWidth);
|
|
}
|
|
}
|
|
|
|
//timer1.Enabled = true;
|
|
//TableLayoutPanel table = new TableLayoutPanel();
|
|
//table.Dock = DockStyle.Fill;
|
|
////table.BackColor = Color.Red;
|
|
//table.ColumnCount = 2;
|
|
//table.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
|
|
//table.RowCount = 1;
|
|
//table.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
|
|
//table.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
|
|
|
|
//Panel panel = new Panel();
|
|
//panel.Dock = DockStyle.Fill;
|
|
|
|
//panel.BackColor = Color.Red;
|
|
|
|
|
|
//Button lblIn = new Button();
|
|
//lblIn.Height = 150;
|
|
//lblIn.ForeColor = Color.White;
|
|
//lblIn.Font = new Font("宋体", 20);
|
|
//lblIn.AutoSize = false;
|
|
////lblIn.Dock = DockStyle.Top;
|
|
//lblIn.TextAlign = ContentAlignment.MiddleCenter;
|
|
//lblIn.Text = "输入";
|
|
//lblIn.BackColor = Color.Blue;
|
|
//panel.Controls.Add(lblIn);
|
|
//table.Controls.Add(panel, 0, 0);
|
|
|
|
//mainPanel.Controls.Add(table);
|
|
}
|
|
|
|
void CreateIoControl(FlowLayoutPanel panel, IIO io,bool inIo=false,int btnWidth=100)
|
|
{
|
|
try
|
|
{
|
|
IOStatus iostatus = new IOStatus();
|
|
if(inIo==false)
|
|
{
|
|
iostatus.Cursor = Cursors.Hand;
|
|
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);
|
|
};
|
|
}
|
|
iostatus.Font = new Font("宋体", 10);
|
|
iostatus.Tag = io;
|
|
iostatus.Margin = new Padding(15, 10, 15, 10);
|
|
iostatus.IoNO = io.Index;
|
|
iostatus.Radius = 10;
|
|
iostatus.Passed = io.Passed;
|
|
iostatus.Disabled = io.Disabled;
|
|
iostatus.AutoSize = false;
|
|
iostatus.ForeColor = Color.White;
|
|
iostatus.Size = new Size(btnWidth, 50);
|
|
iostatus.Status = 0;
|
|
iostatus.Text = io.Name;
|
|
iostatus.MouseDown += Iostatus_MouseDown;
|
|
if(inIo)
|
|
{
|
|
if (!ioDicIn.ContainsKey(io.Name))
|
|
{
|
|
ioDicIn.Add(io.Name, iostatus);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (!ioDicOut.ContainsKey(io.Name))
|
|
{
|
|
ioDicOut.Add(io.Name, iostatus);
|
|
}
|
|
}
|
|
panel.Controls.Add(iostatus);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
private void ReloadIoStatus()
|
|
{
|
|
ioDicIn.Clear();
|
|
ioDicOut.Clear();
|
|
foreach (var ioStatus in panelIn.Controls)
|
|
{
|
|
IOStatus ios=ioStatus as IOStatus;
|
|
ioDicIn.Add(ios.Text, ios);
|
|
}
|
|
foreach (var ioStatus in panelOut.Controls)
|
|
{
|
|
IOStatus ios = ioStatus as IOStatus;
|
|
ioDicOut.Add(ios.Text, ios);
|
|
}
|
|
}
|
|
private void Iostatus_MouseDown(object sender, MouseEventArgs e)
|
|
{
|
|
if(GlobalUser.UserName=="超级用户"|| GlobalUser.UserName == "厂商")
|
|
{
|
|
if (e.Button == MouseButtons.Right)
|
|
{
|
|
IOStatus io = (IOStatus)sender;
|
|
selectIOStatus = io;
|
|
contextMenuStrip1.Show(MousePosition.X, MousePosition.Y);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void timer1_Tick(object sender, EventArgs e)
|
|
{
|
|
foreach (KeyValuePair<string, IOStatus> item in ioDicIn)
|
|
{
|
|
if (!item.Value.Disabled)
|
|
{
|
|
short value = IoManager.Instance.ReadIn(item.Value.Text);
|
|
ioDicIn[item.Value.Text].Status = value;
|
|
}
|
|
}
|
|
foreach (KeyValuePair<string, IOStatus> item in ioDicOut)
|
|
{
|
|
if (!item.Value.Disabled)
|
|
{
|
|
short value = IoManager.Instance.ReadOut(item.Value.Text);
|
|
ioDicOut[item.Value.Text].Status = value;
|
|
}
|
|
}
|
|
|
|
//if (tab.SelectedIndex>=0 && tab.Controls.Count>0)
|
|
//{
|
|
// IIOCard card = ioCards[tab.SelectedIndex];
|
|
// foreach (IIO iO in card.DIn)
|
|
// {
|
|
// if(!iO.Disabled)
|
|
// {
|
|
// short value = IoManager.Instance.ReadIn(iO.Name);
|
|
// if (ioDic.ContainsKey(iO.Name))
|
|
// ioDic[iO.Name].Status = value;
|
|
// }
|
|
|
|
// }
|
|
|
|
// foreach (IIO iO in card.DOut)
|
|
// {
|
|
// if(!iO.Disabled)
|
|
// {
|
|
// short value = IoManager.Instance.ReadOut(iO.Name);
|
|
// if (ioDic.ContainsKey(iO.Name))
|
|
// ioDic[iO.Name].Status = value;
|
|
// }
|
|
// }
|
|
//}
|
|
}
|
|
|
|
private void reverseToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
if(selectIOStatus!=null)
|
|
{
|
|
IIO io = (IIO)selectIOStatus.Tag;
|
|
io.IsReverse=!io.IsReverse;
|
|
io.Card.Save();
|
|
selectIOStatus = null;
|
|
}
|
|
}
|
|
|
|
private void checkedToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
if (selectIOStatus != null)
|
|
{
|
|
selectIOStatus.Passed = !selectIOStatus.Passed;
|
|
IIO io = (IIO)selectIOStatus.Tag;
|
|
io.Passed = selectIOStatus.Passed;
|
|
io.Card.Save();
|
|
selectIOStatus = null;
|
|
}
|
|
}
|
|
|
|
private void disabledToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
if (selectIOStatus != null)
|
|
{
|
|
selectIOStatus.Disabled = !selectIOStatus.Disabled;
|
|
IIO io = (IIO)selectIOStatus.Tag;
|
|
io.Disabled = selectIOStatus.Disabled;
|
|
io.Card.Save();
|
|
selectIOStatus = null;
|
|
}
|
|
}
|
|
|
|
private void renameToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
if (selectIOStatus != null)
|
|
{
|
|
RenameIO renameIO = new RenameIO(selectIOStatus);
|
|
renameIO.StartPosition = FormStartPosition.CenterParent;
|
|
DialogResult dr = renameIO.ShowDialog();
|
|
//if(dr == DialogResult.OK)
|
|
{
|
|
ReloadIoStatus();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|