using LB_VisionProcesses.Communicators; using LB_VisionProcesses.Communicators.Modbus; using LB_VisionProcesses.Communicators.SiemensS7; using LB_VisionProcesses.Communicators.Tcom; using RJCP.IO.Ports; using S7.Net; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace LB_SmartVision.Forms.Pages.CommunicatorPage { public partial class CreateCommunicatorForm : Form { public BaseCommunicator communicator { get; set; } public bool bCreate = false; public CreateCommunicatorForm(BaseCommunicator communicator = null) { InitializeComponent(); // 禁止修改窗口大小 this.FormBorderStyle = FormBorderStyle.FixedDialog; if (communicator == null) { communicator = new UARTPort(); } rButtonUART.CheckedChanged += rButton_CheckedChanged; rButtonTCPServer.CheckedChanged += rButton_CheckedChanged; rButtonTCPClient.CheckedChanged += rButton_CheckedChanged; rButtonS7.CheckedChanged += rButton_CheckedChanged; rButtonModbusRTU.CheckedChanged += rButton_CheckedChanged; rButtonModbusTCP.CheckedChanged += rButton_CheckedChanged; rButtonUART.Checked = true; uiButtonCreate.Enabled = false; } private void uiButtonTest_Click(object sender, EventArgs e) { uiButtonCreate.Enabled = false; rButtonUART.Enabled = false; rButtonTCPServer.Enabled = false; rButtonTCPClient.Enabled = false; rButtonS7.Enabled = false; if (communicator != null) { communicator.Disconnect(); } if (rButtonUART.Checked) { communicator = new UARTPort(); IP = uiComboBoxPort.Text; PORT = uiTextBoxPort.Text; communicator.CommunicatorConnections.Add("地址", IP); communicator.CommunicatorConnections.Add("端口", PORT); } else if (rButtonTCPServer.Checked) { communicator = new TCPServer(); IP = uiIPTextBox.Text; PORT = uiTextBoxPort.Text; communicator.CommunicatorConnections.Add("地址", IP); communicator.CommunicatorConnections.Add("端口", PORT); } else if (rButtonTCPClient.Checked) { communicator = new TCPClient(); IP = uiIPTextBox.Text; PORT = uiTextBoxPort.Text; communicator.CommunicatorConnections.Add("地址", IP); communicator.CommunicatorConnections.Add("端口", PORT); } else if (rButtonS7.Checked) { communicator = new SiemensLBS7(); IP = uiTextBoxPath.Text; PORT = uiTextBoxPort.Text; switch (uiComboBoxS7Type.Text) { case "S7200": { cpuType = S7.Net.CpuType.S7200; break; } case "Logo0BA8": { cpuType = S7.Net.CpuType.Logo0BA8; break; } case "S7200Smart": { cpuType = S7.Net.CpuType.S7200Smart; break; } case "S7300": { cpuType = S7.Net.CpuType.S7300; break; } case "S7400": { cpuType = S7.Net.CpuType.S7400; break; } case "S71200": { cpuType = S7.Net.CpuType.S71200; break; } case "S71500": { cpuType = S7.Net.CpuType.S71500; break; } default: cpuType = S7.Net.CpuType.S71500; break; } communicator.CommunicatorConnections.Add("地址", IP); communicator.CommunicatorConnections.Add("端口", PORT); communicator.CommunicatorConnections.Add("型号", cpuType); } else if (rButtonModbusRTU.Checked) { communicator = new ModbusRTUMaster(); IP = uiComboBoxPort.Text; PORT = uiTextBoxPort.Text; communicator.CommunicatorConnections.Add("地址", IP); communicator.CommunicatorConnections.Add("端口", PORT); } else if (rButtonModbusRTU.Checked) { communicator = new ModbusTCPMaster(); IP = uiIPTextBox.Text; PORT = uiTextBoxPort.Text; communicator.CommunicatorConnections.Add("地址", IP); communicator.CommunicatorConnections.Add("端口", PORT); } else { MessageBox.Show("未选择通讯类型!", "异常"); return; } if (communicator.Connect()) { uiButtonCreate.Enabled = true; communicator.Disconnect(); } else { MessageBox.Show($"初始化通讯口失败,原因是:{communicator.Msg}", "异常"); } } public string IP = string.Empty; public string PORT = string.Empty; public S7.Net.CpuType cpuType = S7.Net.CpuType.S71500; private void uiButtonCreate_Click(object sender, EventArgs e) { if (communicator.Connect()) { bCreate = true; this.Close(); } else { MessageBox.Show($"初始化通讯口失败,原因是:{communicator.Msg}", "异常"); } } private void uiButtonCancel_Click(object sender, EventArgs e) { if (communicator != null) { communicator.Disconnect(); } bCreate = false; this.Close(); } private void rButton_CheckedChanged(object sender, EventArgs e) { uiButtonCreate.Enabled = false; if (communicator != null) communicator.Disconnect(); switch ((sender as RadioButton).Name) { case "rButtonUART": case "rButtonModbusRTU": if (rButtonUART.Checked || rButtonModbusRTU.Checked) { uiLabelIP.Visible = true; uiLabelIP.Text = "COM口"; uiIPTextBox.Visible = false; uiComboBoxPort.Visible = true; uiTextBoxPath.Visible = false; uiLabelPort.Visible = true; uiLabelPort.Text = "波特率"; uiTextBoxPort.Visible = true; uiButtonCreate.Enabled = false; uiLabelS7Type.Visible = false; uiComboBoxS7Type.Visible = false; } break; case "rButtonTCPServer": case "rButtonTCPClient": case "rButtonModbusTCP": if (rButtonTCPServer.Checked || rButtonTCPClient.Checked || rButtonModbusTCP.Checked) { uiLabelIP.Visible = true; uiLabelIP.Text = "地址"; uiIPTextBox.Visible = true; uiComboBoxPort.Visible = false; uiTextBoxPath.Visible = false; uiLabelPort.Visible = true; uiLabelPort.Text = "端口"; uiTextBoxPort.Visible = true; uiButtonCreate.Enabled = false; uiLabelS7Type.Visible = false; uiComboBoxS7Type.Visible = false; } break; case "rButtonS7": if (rButtonS7.Checked) { uiLabelIP.Visible = true; uiLabelIP.Text = "地址"; uiIPTextBox.Visible = false; uiComboBoxPort.Visible = false; uiTextBoxPath.Visible = true; uiLabelPort.Visible = true; uiLabelPort.Text = "槽"; uiTextBoxPort.Visible = true; } break; default: break; } } private void uiComboBoxPort_MouseClick(object sender, MouseEventArgs e) { uiButtonCreate.Enabled = false; uiComboBoxPort.Text = string.Empty; uiComboBoxPort.Items.Clear(); //统计可用端口 SerialPortStream temp = new SerialPortStream(); string[] ArryPort = temp.GetPortNames(); for (int i = 0; i < ArryPort.Length; i++) { uiComboBoxPort.Items.Add(ArryPort[i]); } } private void uiTextBoxPort_TextChanged(object sender, EventArgs e) { uiButtonCreate.Enabled = false; } private void uiIPTextBox_MouseClick(object sender, MouseEventArgs e) { uiButtonCreate.Enabled = false; } private void rButtonS7_CheckedChanged(object sender, EventArgs e) { uiButtonCreate.Enabled = false; if (communicator != null) { communicator.Disconnect(); } if (rButtonS7.Checked) { uiLabelIP.Visible = true; uiLabelIP.Text = "地址"; uiIPTextBox.Visible = false; uiComboBoxPort.Visible = false; uiTextBoxPath.Visible = true; uiLabelPort.Visible = true; uiLabelPort.Text = "槽"; uiTextBoxPort.Visible = true; uiLabelS7Type.Visible = true; uiComboBoxS7Type.Visible = true; uiComboBoxS7Type.Items.Clear(); foreach (var c in Enum.GetValues(typeof(S7.Net.CpuType))) { uiComboBoxS7Type.Items.Add(c.ToString()); } } } private void rButtonTCPClient_CheckedChanged(object sender, EventArgs e) { uiButtonCreate.Enabled = false; if (communicator != null) { communicator.Disconnect(); } if (rButtonTCPClient.Checked) { uiLabelIP.Visible = true; uiLabelIP.Text = "地址"; uiIPTextBox.Visible = true; uiComboBoxPort.Visible = false; uiTextBoxPath.Visible = false; uiLabelPort.Visible = true; uiLabelPort.Text = "端口"; uiTextBoxPort.Visible = true; uiLabelS7Type.Visible = false; uiComboBoxS7Type.Visible = false; } } private void rButtonTCPServer_CheckedChanged(object sender, EventArgs e) { uiButtonCreate.Enabled = false; if (communicator != null) { communicator.Disconnect(); } if (rButtonTCPServer.Checked) { uiLabelIP.Visible = true; uiLabelIP.Text = "地址"; uiIPTextBox.Visible = true; uiComboBoxPort.Visible = false; uiTextBoxPath.Visible = false; uiLabelPort.Visible = true; uiLabelPort.Text = "端口"; uiTextBoxPort.Visible = true; uiLabelS7Type.Visible = false; uiComboBoxS7Type.Visible = false; uiButtonCreate.Enabled = false; } } private void rButtonModbusTCP_CheckedChanged(object sender, EventArgs e) { uiButtonCreate.Enabled = false; if (communicator != null) { communicator.Disconnect(); } if (rButtonTCPClient.Checked) { uiLabelIP.Visible = true; uiLabelIP.Text = "地址"; uiIPTextBox.Visible = true; uiComboBoxPort.Visible = false; uiTextBoxPath.Visible = false; uiLabelPort.Visible = true; uiLabelPort.Text = "端口"; uiTextBoxPort.Visible = true; uiLabelS7Type.Visible = false; uiComboBoxS7Type.Visible = false; } } private void rButtonModbusRTU_CheckedChanged(object sender, EventArgs e) { uiButtonCreate.Enabled = false; if (communicator != null) { communicator.Disconnect(); } if (rButtonTCPClient.Checked) { uiLabelIP.Visible = true; uiLabelIP.Text = "地址"; uiIPTextBox.Visible = true; uiComboBoxPort.Visible = false; uiTextBoxPath.Visible = false; uiLabelPort.Visible = true; uiLabelPort.Text = "端口"; uiTextBoxPort.Visible = true; uiLabelS7Type.Visible = false; uiComboBoxS7Type.Visible = false; } } private void uiComboBoxS7Type_SelectedIndexChanged(object sender, EventArgs e) { switch (uiComboBoxS7Type.Text) { case "S7200": { cpuType = S7.Net.CpuType.S7200; break; } case "Logo0BA8": { cpuType = S7.Net.CpuType.Logo0BA8; break; } case "S7200Smart": { cpuType = S7.Net.CpuType.S7200Smart; break; } case "S7300": { cpuType = S7.Net.CpuType.S7300; break; } case "S7400": { cpuType = S7.Net.CpuType.S7400; break; } case "S71200": { cpuType = S7.Net.CpuType.S71200; break; } case "S71500": { cpuType = S7.Net.CpuType.S71500; break; } default: cpuType = S7.Net.CpuType.S71500; break; } } } }