| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- using PlcCom;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Diagnostics;
- using System.Drawing.Design;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using PlcUiControl;
- using PlcUiForm;
- using Sunny.UI;
- namespace PlcComponent
- {
- public partial class PlcOptionSelection : Component, ISingleOutputComponent
- {
- public PlcOptionSelection()
- {
- InitializeComponent();
- }
- public PlcOptionSelection(IContainer container)
- {
- container.Add(this);
- InitializeComponent();
- }
- [Category("PLC")]
- [Description("PLC读地址,必须为Bool类型")]
- [Editor(typeof(NodeTypeEditor), typeof(UITypeEditor))]
- public Node ReadNode { get; set; }
- [Category("PLC")]
- [Description("确认地址1,必须为Bool类型")]
- [Editor(typeof(NodeTypeEditor), typeof(UITypeEditor))]
- public Node EnsureNode1 { get; set; }
- [Category("PLC")]
- [Description("确认地址2,必须为Bool类型")]
- [Editor(typeof(NodeTypeEditor), typeof(UITypeEditor))]
- public Node EnsureNode2 { get; set; }
- [Category("PLC")]
- [Description("窗体名称")]
- [DefaultValue("请选择")]
- public string FormCaption { get; set; }
- [Category("PLC")]
- [Description("提示信息")]
- [DefaultValue("提示")]
- public string Message { get; set; }
- [Category("PLC")]
- [Description("选项1的名称")]
- public string Text1 { get; set; }
- [Category("PLC")]
- [Description("选项2的名称")]
- public string Text2 { get; set; }
- [Category("PLC")]
- [Description("第一个按钮按下")]
- public event EventHandler Button1MouseDown;
- [Category("PLC")]
- [Description("第二个按钮按下")]
- public event EventHandler Button2MouseDown;
- [Category("PLC")]
- [Description("第一个按钮抬起")]
- public event EventHandler Button1MouseUp;
- [Category("PLC")]
- [Description("第二个按钮抬起")]
- public event EventHandler Button2MouseUp;
- [Browsable(false)]
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
- public IPlcComProtocol Protocol { get; set; }
- [Browsable(false)]
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
- public object State
- {
- get => state;
- set
- {
- if (!object.Equals(state, value))
- {
- state = value;
- OnPLCRegisterValueChanged?.Invoke(this, ReadNode, state);
- }
- if (value is bool b)
- {
- if (b)
- {
- if (optionSelectionForm == null || optionSelectionForm.IsDisposed)
- ShowOptionSelectionForm();
- }
- else
- {
- if (optionSelectionForm != null && !optionSelectionForm.IsDisposed)
- {
- if(plcUiButton1.Read().Equals(true))
- plcUiButton1.WriteValue(false);
- if (plcUiButton2.Read().Equals(true))
- plcUiButton2.WriteValue(false);
- optionSelectionForm.Close();
- }
- }
- }
- }
- }
- private object state;
- PlcUiButton plcUiButton1, plcUiButton2;
- PlcBaseForm optionSelectionForm;
- void ShowOptionSelectionForm()
- {
- optionSelectionForm = new PlcBaseForm();
- optionSelectionForm.Name = FormCaption;
- UILabel uILabel = new UILabel();
- uILabel.AutoSize = true;
- uILabel.Text = Message;
- uILabel.Left = 40;
- uILabel.Top = 60;
- optionSelectionForm.Controls.Add(uILabel);
- plcUiButton1 = new PlcUiButton();
- plcUiButton1.ButtonType = ButtonType.保持型;
- plcUiButton1.WriteNode = EnsureNode1;
- plcUiButton1.Name = Text1;
- plcUiButton1.Text = Text1;
- plcUiButton1.Size = new System.Drawing.Size(80, 40);
- plcUiButton1.Left = 80;
- plcUiButton1.Top = 120;
- plcUiButton1.Height = 40;
- plcUiButton1.OnSymbol = 0;
- plcUiButton1.OffSymbol = 0;
- plcUiButton1.Symbol = 0;
- plcUiButton1.Radius = 20;
- plcUiButton1.AfterMouseDown += PlcUiButton1_AfterMouseDown;
- plcUiButton1.AfterMouseUp += PlcUiButton1_AfterMouseUp;
- optionSelectionForm.Controls.Add(plcUiButton1);
- plcUiButton2 = new PlcUiButton();
- plcUiButton2.ButtonType = ButtonType.保持型;
- plcUiButton2.WriteNode = EnsureNode2;
- plcUiButton2.Name = Text2;
- plcUiButton2.Text = Text2;
- plcUiButton2.Size = new System.Drawing.Size(80, 40);
- plcUiButton2.Left = 220;
- plcUiButton2.Top = 120;
- plcUiButton2.Height = 40;
- plcUiButton2.OnSymbol = 0;
- plcUiButton2.OffSymbol = 0;
- plcUiButton2.Symbol = 0;
- plcUiButton2.Radius = 20;
- plcUiButton2.AfterMouseDown += PlcUiButton2_AfterMouseDown;
- plcUiButton2.AfterMouseUp += PlcUiButton2_AfterMouseUp;
- optionSelectionForm.Controls.Add(plcUiButton2);
- optionSelectionForm.TopMost = true;
- optionSelectionForm.Text = FormCaption;
- optionSelectionForm.Width = 400;
- optionSelectionForm.Height = 200;
- optionSelectionForm.MaximizeBox = false;
- optionSelectionForm.MinimizeBox = false;
- optionSelectionForm.Show();
- }
- private void PlcUiButton1_AfterMouseDown(object obj)
- {
- Button1MouseDown?.Invoke(this, EventArgs.Empty);
- }
- private void PlcUiButton2_AfterMouseDown(object obj)
- {
- Button2MouseDown?.Invoke(this, EventArgs.Empty);
- }
- private void PlcUiButton1_AfterMouseUp(object obj)
- {
- Button1MouseUp?.Invoke(this, EventArgs.Empty);
- }
- private void PlcUiButton2_AfterMouseUp(object obj)
- {
- Button2MouseUp?.Invoke(this, EventArgs.Empty);
- }
- public event RegisterValueChangedHandler OnPLCRegisterValueChanged;
- public event ReadRegisterFailedHandler OnReadRegisterFailed;
- public event UpdateComponentStateFailedHandler OnUpdateComponentStateFailed;
- public object Read()
- {
- if (Protocol != null && ReadNode != null)
- {
- object result;
- var rt = Protocol.ReadValue(ReadNode.Value, out result);
- if (rt == 0)
- {
- UpdateValue(result);
- return result;
- }
- else
- {
- OnReadRegisterFailed?.Invoke(this, ReadNode, rt);
- }
- }
- return null;
- }
- public void UpdateValue(object value)
- {
- if (value is bool)
- State = value;
- else
- OnUpdateComponentStateFailed?.Invoke(this, ReadNode, value, "读取到的值不是Bool类型");
- }
- }
- }
|