| | |
| | | using LB_VisionProcesses.Communicators.TCom; |
| | | using ReaLTaiizor.Forms; |
| | | using RJCP.IO.Ports; |
| | | using S7.Net; |
| | | using System.Diagnostics; |
| | | using System.Linq; |
| | | |
| | | namespace LB_SmartVision.Forms.Pages.CommunicatorPage |
| | | { |
| | | public delegate void CommunicatorChange(BaseCommunicator communicator); |
| | | public partial class CommunicatorForm : Form |
| | | { |
| | | BaseCommunicator communicator { get; set; } |
| | | |
| | | public event CommunicatorChange CommunicatorChanged; |
| | | |
| | | private void communicatorChanged(BaseCommunicator communicator) |
| | | { |
| | | if (CommunicatorChanged != null) |
| | | { |
| | | CommunicatorChanged(communicator); |
| | | } |
| | | } |
| | | |
| | | public CommunicatorForm() |
| | | { |
| | | InitializeComponent(); |
| | | cmbType.Items.Clear(); |
| | | |
| | | if (communicator != null && !string.IsNullOrEmpty(communicator.CommunicatorConnections["型号"]?.ToString())) |
| | | { |
| | | cmbType.Items.Add(communicator.CommunicatorConnections["型号"]?.ToString()); |
| | |
| | | { |
| | | InitializeComponent(); |
| | | if (communicator == null) |
| | | { |
| | | return; |
| | | |
| | | } |
| | | cmbIP.Enabled = false; |
| | | txtIP.Enabled = false; |
| | | txtPort.Enabled = false; |
| | | cmbDataType.Enabled = false; |
| | | |
| | | |
| | | lblType.Visible = false; |
| | | lblAddress.Visible = false; |
| | | cmbType.Visible = false; |
| | | txtAddress.Visible = false; |
| | | lblDataType.Visible = false; |
| | | cmbDataType.Visible = false; |
| | | |
| | | |
| | | this.Text = name; |
| | | |
| | | if (communicator is UARTPort) |
| | | { |
| | | //统计可用端口 |
| | | SerialPortStream temp = new SerialPortStream(); |
| | | string[] ArryPort = temp.GetPortNames(); |
| | | for (int i = 0; i < ArryPort.Length; i++) |
| | | { |
| | | cmbIP.Items.Add(ArryPort[i]); |
| | | |
| | | } |
| | | cmbIP.Text = communicator.CommunicatorConnections["地址"]?.ToString(); |
| | | txtPort.Text = communicator.CommunicatorConnections["端口"]?.ToString(); |
| | | txtIP.Visible = false; |
| | | cmbIP.Visible = true; |
| | | |
| | | this.btnRuleSend.Visible = true; |
| | | lblType.Visible = false; |
| | | lblAddress.Visible = false; |
| | | cmbType.Visible = false; |
| | | txtAddress.Visible = false; |
| | | lblDataType.Visible = false; |
| | | cmbDataType.Visible = false; |
| | | |
| | | lblIP.Text = "COM口"; |
| | | lblPort.Text = "波特率"; |
| | |
| | | else if (communicator is TCPClient || communicator is TCPServer) |
| | | { |
| | | txtIP.Text = communicator.CommunicatorConnections["地址"]?.ToString(); |
| | | txtPort.SelectedText = communicator.CommunicatorConnections["端口"]?.ToString(); |
| | | txtPort.Text = communicator.CommunicatorConnections["端口"]?.ToString(); |
| | | txtIP.Visible = true; |
| | | cmbIP.Visible = false; |
| | | |
| | | this.btnRuleSend.Visible = false; |
| | | lblType.Visible = false; |
| | | lblAddress.Visible = false; |
| | | cmbType.Visible = false; |
| | | txtAddress.Visible = false; |
| | | lblDataType.Visible = false; |
| | | cmbDataType.Visible = false; |
| | | |
| | | lblIP.Text = "地址"; |
| | | lblPort.Text = "端口"; |
| | |
| | | txtIP.Text = communicator.CommunicatorConnections["地址"]?.ToString(); |
| | | txtPort.Text = communicator.CommunicatorConnections["端口"]?.ToString(); |
| | | cmbType.Items.Clear(); |
| | | |
| | | if (!string.IsNullOrEmpty(communicator.CommunicatorConnections["型号"]?.ToString())) |
| | | { |
| | | cmbType.Items.Add(communicator.CommunicatorConnections["型号"]?.ToString()); |
| | | cmbType.Text = communicator.CommunicatorConnections["型号"]?.ToString(); |
| | | } |
| | | cmbType.Text = communicator.CommunicatorConnections["型号"]?.ToString(); |
| | | if (!string.IsNullOrEmpty(communicator.CommunicatorConnections["变量地址"]?.ToString())) |
| | | { |
| | | txtAddress.Text = communicator.CommunicatorConnections["变量地址"]?.ToString(); |
| | | } |
| | | |
| | | // 初始化数据类型 |
| | | cmbDataType.Items.Clear(); |
| | | cmbDataType.Items.AddRange(new string[] { "String", "Bool", "Byte", "Int", "DInt", "Real", "Double", "Word", "DWord" }); |
| | | if (communicator.CommunicatorConnections.Contains("数据类型")) |
| | | cmbDataType.Text = communicator.CommunicatorConnections["数据类型"].ToString(); |
| | | else |
| | | cmbDataType.Text = "String"; |
| | | |
| | | txtIP.Visible = true; |
| | | cmbIP.Visible = false; |
| | | |
| | | this.btnRuleSend.Visible = false; |
| | | lblType.Visible = true; |
| | | lblAddress.Visible = true; |
| | | cmbType.Visible = true; |
| | | txtAddress.Visible = true; |
| | | lblDataType.Visible = true; |
| | | cmbDataType.Visible = true; |
| | | cmbDataType.Enabled = true; // 启用数据类型选择 |
| | | |
| | | lblIP.Text = "IP"; |
| | | lblPort.Text = "槽"; |
| | |
| | | this.communicator = communicator; |
| | | //加载回调函数 |
| | | Subscribe(); |
| | | } |
| | | |
| | | private void cmbDataType_SelectedIndexChanged(object sender, EventArgs e) |
| | | { |
| | | if (communicator != null) |
| | | { |
| | | communicator.CommunicatorConnections.Add("数据类型", cmbDataType.Text); |
| | | communicatorChanged(communicator); |
| | | } |
| | | } |
| | | |
| | | private void CommunicatorForm_FormClosing(object sender, FormClosingEventArgs e) => Unsubscribe(); |
| | |
| | | return; |
| | | //取消回调函数 |
| | | communicator.MessageReceived -= ShowReceiveMsg; |
| | | if (communicator != null) |
| | | { |
| | | communicatorChanged(communicator); |
| | | if (GlobalVar.dicCommunicators != null && GlobalVar.dicCommunicators.Keys.Count > 0 && GlobalVar.dicCommunicators.Keys.Contains(communicator.CommunicatorName)) |
| | | { |
| | | GlobalVar.dicCommunicators[communicator.CommunicatorName] = communicator; |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | private void ShowLogMsg(string msg) |
| | | { |
| | | // 如果当前不是 UI 线程,则通过 Invoke 将操作调度到 UI 线程 |
| | | if (this.InvokeRequired) |
| | | { |
| | | this.Invoke(new Action<string>((message) => |
| | | { |
| | | this.txtReceiveMsg.AppendText("[" + DateTime.Now.ToString("HH:mm:ss.fff") + "] " + message + "\r\n"); |
| | | this.txtReceiveMsg.ScrollToCaret(); |
| | | }), msg); |
| | | } |
| | | else |
| | | { |
| | | this.txtReceiveMsg.AppendText("[" + DateTime.Now.ToString("HH:mm:ss.fff") + "] " + msg + "\r\n"); |
| | | this.txtReceiveMsg.ScrollToCaret(); |
| | | } |
| | | } |
| | | |
| | | private void btnSend_Click(object sender, EventArgs e) |
| | | { |
| | | if (communicator == null) |
| | |
| | | |
| | | if (communicator.SendMessage(txtSendMsg.Text)) |
| | | ShowSendMsg(txtSendMsg.Text); |
| | | else |
| | | ShowLogMsg(communicator.Msg); |
| | | } |
| | | |
| | | private void btnRuleSend_Click(object sender, EventArgs e) |
| | |
| | | |
| | | if (communicator.SendMessage(SendMsg)) |
| | | ShowSendMsg(SendMsg); |
| | | else |
| | | ShowLogMsg(communicator.Msg); |
| | | } |
| | | |
| | | private void txtAddress_TextChanged(object sender, EventArgs e) |
| | | { |
| | | if (communicator != null) |
| | | { |
| | | communicator.CommunicatorConnections.Add("变量地址", txtAddress.Text); |
| | | communicatorChanged(communicator); |
| | | } |
| | | } |
| | | |
| | | private void cmbVarType_SelectedIndexChanged(object sender, EventArgs e) |
| | | { |
| | | //if (communicator != null && !communicator.CommunicatorConnections.Contains("变量类型")) |
| | | //{ |
| | | // communicator.CommunicatorConnections.Add("变量类型", cmbVarType.Text); |
| | | //} |
| | | //else if (communicator != null) |
| | | //{ |
| | | // communicator.CommunicatorConnections["变量类型"] = cmbVarType.Text; |
| | | // communicatorChanged(communicator); |
| | | //} |
| | | } |
| | | } |
| | | } |