|
using LB_VisionControl;
|
using LB_VisionProcesses.Communicators;
|
using VisionControl.Forms;
|
|
namespace LB_SmartVision.Forms.Pages.CommunicatorPage
|
{
|
public partial class CommunicatorsEditPage : UserControl
|
{
|
public Action<string, LogInfoType> LogInfo;
|
|
public CommunicatorsEditPage()
|
{
|
InitializeComponent();
|
|
Name = "CommunicatorsPage";
|
Text = "通讯设置";
|
//this.Font = new Font("Microsoft YaHei UI", 16F, FontStyle.Regular, GraphicsUnit.Point, 0);
|
}
|
|
private void CommunicatorsEditPage_Paint(object sender, PaintEventArgs e)
|
{
|
uiFlowLayoutPanel1.Controls.Clear();
|
|
if (GlobalVar.dicCommunicators.Count <= 0)
|
return;
|
|
foreach (var item in GlobalVar.dicCommunicators)
|
{
|
string ClassName = item.Value.GetType().Name;// "TCP"
|
string IP = item.Value.CommunicatorConnections["地址"].ToString();//"127.0.0.1"
|
string PORT = item.Value.CommunicatorConnections["端口"].ToString();//"1111"
|
|
if (string.IsNullOrEmpty(ClassName) || string.IsNullOrEmpty(IP) || string.IsNullOrEmpty(PORT))
|
return;
|
|
string DataType = item.Value.CommunicatorConnections.Contains("数据类型") ?
|
item.Value.CommunicatorConnections["数据类型"].ToString() : "String";
|
string CommunicatorConnectionString = $"({ClassName}){IP}:{PORT} [{DataType}]";
|
|
UserItem flow = new UserItem(new string[] { "测试", "刷新", "移除", "重命名" });
|
//flow.SetDPIScale();
|
flow.Name = item.Key;
|
flow.Text = CommunicatorConnectionString;
|
if (item.Value.bConnected)
|
flow.state = State.Pass;
|
else
|
flow.state = State.Error;
|
LoadFlowEvent(flow);
|
|
uiFlowLayoutPanel1.Controls.Add(flow);
|
}
|
}
|
|
private void uiButton1_Click(object sender, System.EventArgs e)
|
{
|
CreateCommunicatorForm createCommunicatorForm = new CreateCommunicatorForm();
|
createCommunicatorForm.ShowDialog();
|
|
if (createCommunicatorForm.bCreate)
|
{
|
BaseCommunicator communicator = createCommunicatorForm.communicator;
|
string Name = "通讯口" + GlobalVar.dicCommunicators.Count;
|
if (GlobalVar.dicCommunicators.ContainsKey(Name))
|
Name += "副本";
|
|
string ClassName = communicator.GetType().Name;// "TCP"
|
string IP = communicator.CommunicatorConnections["地址"].ToString();//"127.0.0.1"
|
string PORT = communicator.CommunicatorConnections["端口"].ToString();//"1111"
|
|
if (string.IsNullOrEmpty(ClassName) || string.IsNullOrEmpty(IP) || string.IsNullOrEmpty(PORT))
|
return;
|
|
string DataType = communicator.CommunicatorConnections.Contains("数据类型") ?
|
communicator.CommunicatorConnections["数据类型"].ToString() : "String";
|
string CommunicatorConnectionString = $"({ClassName}){IP}:{PORT} [{DataType}]";
|
|
GlobalVar.dicCommunicators.TryAdd(Name, communicator);
|
communicator.CommunicatorName = Name;
|
LogInfo?.Invoke(string.Format("添加通讯口[{0}]成功", Name), LogInfoType.PASS);
|
}
|
this.Invalidate();
|
}
|
|
private void uiButton2_Click(object sender, System.EventArgs e)
|
{
|
//清除用Clear方法
|
uiFlowLayoutPanel1.Controls.Clear();
|
foreach (var communicator in GlobalVar.dicCommunicators.Values)
|
{
|
communicator.Disconnect();
|
}
|
GlobalVar.dicCommunicators.Clear();
|
this.Refresh();
|
}
|
|
private void LoadFlowEvent(UserItem flow)
|
{
|
//按键1为测试
|
flow.MenuItem1ClickedEvent += TestEvent;
|
//按键2为刷新
|
flow.MenuItem2ClickedEvent += ReconnectEvent;
|
//按键3为移除
|
flow.MenuItem3ClickedEvent += DeleteEvent;
|
//按键4为重命名
|
flow.MenuItem4ClickedEvent += RenameEvent;
|
}
|
|
private void RemoveFlowEvent(UserItem flow)
|
{
|
//按键1为测试
|
flow.MenuItem1ClickedEvent -= TestEvent;
|
//按键2为刷新
|
flow.MenuItem2ClickedEvent -= ReconnectEvent;
|
//按键3为移除
|
flow.MenuItem3ClickedEvent -= DeleteEvent;
|
//按键4为重命名
|
flow.MenuItem4ClickedEvent -= RenameEvent;
|
}
|
|
// 测试通讯口
|
private void TestEvent(string Name, string Text)
|
{
|
for (int i = 0; i < uiFlowLayoutPanel1.Controls.Count; i++)
|
{
|
UserItem flow = (UserItem)uiFlowLayoutPanel1.Controls[i];
|
string name = flow.Name;
|
if (name != Name)
|
continue;
|
|
if (GlobalVar.dicCommunicators.ContainsKey(name))
|
{
|
CommunicatorForm communicatorFForm = new CommunicatorForm(GlobalVar.dicCommunicators[name], name);
|
communicatorFForm.CommunicatorChanged += CommunicatorFForm_CommunicatorChanged;
|
communicatorFForm.Show();
|
}
|
}
|
}
|
|
private void CommunicatorFForm_CommunicatorChanged(BaseCommunicator communicator)
|
{
|
if (this.InvokeRequired)
|
{
|
this.Invoke(new Action<BaseCommunicator>(CommunicatorFForm_CommunicatorChanged), communicator);
|
return;
|
}
|
|
for (int i = 0; i < uiFlowLayoutPanel1.Controls.Count; i++)
|
{
|
if (uiFlowLayoutPanel1.Controls[i] is UserItem flow && flow.Name == communicator.CommunicatorName)
|
{
|
string ClassName = communicator.GetType().Name;
|
string IP = communicator.CommunicatorConnections["地址"].ToString();
|
string PORT = communicator.CommunicatorConnections["端口"].ToString();
|
string DataType = communicator.CommunicatorConnections.Contains("数据类型") ?
|
communicator.CommunicatorConnections["数据类型"].ToString() : "String";
|
|
flow.Text = $"({ClassName}){IP}:{PORT} [{DataType}]";
|
flow.Refresh();
|
break;
|
}
|
}
|
}
|
|
// 移除通讯口
|
private void DeleteEvent(string Name, string Text)
|
{
|
for (int i = 0; i < uiFlowLayoutPanel1.Controls.Count; i++)
|
{
|
UserItem flow = (UserItem)uiFlowLayoutPanel1.Controls[i];
|
string name = flow.Name;
|
if (name != Name)
|
continue;
|
|
RemoveFlowEvent(flow);
|
uiFlowLayoutPanel1.Controls.Remove(uiFlowLayoutPanel1.Controls[i]);
|
GlobalVar.dicCommunicators.TryRemove(name, out BaseCommunicator BaseCommunicator);
|
if (BaseCommunicator != null)
|
LogInfo?.Invoke(string.Format("移除通讯口[{0}]", name), LogInfoType.INFO);
|
}
|
}
|
|
private void RenameEvent(string Name, string Text)
|
{
|
RenameForm renameForm = new RenameForm(Name);
|
// 订阅事件
|
renameForm.ShowDialog();
|
if (!renameForm.bRename)
|
return;
|
|
if (GlobalVar.dicCommunicators.ContainsKey(renameForm.strNewName))
|
{
|
MessageBox.Show("命名重复!", "异常");
|
return;
|
}
|
|
for (int i = 0; i < uiFlowLayoutPanel1.Controls.Count; i++)
|
{
|
UserItem flow = (UserItem)uiFlowLayoutPanel1.Controls[i];
|
string name = flow.Name;
|
if (name != Name)
|
continue;
|
flow.Name = renameForm.strNewName;
|
string oldName = name;
|
string newName = renameForm.strNewName;
|
|
if (GlobalVar.dicCommunicators.ContainsKey(oldName))
|
GlobalVar.dicCommunicators.TryRename(oldName, newName);
|
foreach (var item in GlobalVar.dicMotionControlData.Keys)
|
{
|
foreach (var item1 in GlobalVar.dicMotionControlData[item].Keys)
|
{
|
if (GlobalVar.dicMotionControlData[item][item1].CommunicatorsName.Contains(oldName))
|
{
|
GlobalVar.dicMotionControlData[item][item1].CommunicatorsName = newName;
|
}
|
}
|
}
|
|
flow.Refresh();
|
}
|
}
|
|
// 重连流程
|
private void ReconnectEvent(string Name, string Text)
|
{
|
for (int i = 0; i < uiFlowLayoutPanel1.Controls.Count; i++)
|
{
|
UserItem flow = (UserItem)uiFlowLayoutPanel1.Controls[i];
|
string name = flow.Name;
|
if (name != Name)
|
continue;
|
|
GlobalVar.dicCommunicators[name].Disconnect();
|
Thread.Sleep(50);
|
GlobalVar.dicCommunicators[name].Connect();
|
if (GlobalVar.dicCommunicators[name].bConnected)
|
{
|
flow.state = State.Pass;
|
LogInfo?.Invoke(string.Format("重连通讯口[{0}]成功", name), LogInfoType.PASS);
|
}
|
else
|
{
|
flow.state = State.Error;
|
LogInfo?.Invoke(string.Format("重连通讯口[{0}]失败", name), LogInfoType.ERROR);
|
}
|
flow.Refresh();
|
}
|
}
|
}
|
}
|