From e10ccb7788a93c4ae4d5d4f1ac6d239004d0e65e Mon Sep 17 00:00:00 2001
From: C3204 <zhengyabo@lanpucloud.cn>
Date: 星期五, 16 一月 2026 09:28:46 +0800
Subject: [PATCH] 西门子S7通讯:支持多数据类型、UI布局调整及配置持久化修复 * 多类型支持:完善 SendMessage 和 ReceiveMsg,支持 Bool, Byte, Int, DInt, Real, Double, Word, DWord, String的读写。
---
LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.cs | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 52 insertions(+), 6 deletions(-)
diff --git a/LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.cs b/LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.cs
index 0e70eb0..c748948 100644
--- a/LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.cs
+++ b/LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.cs
@@ -44,12 +44,15 @@
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;
@@ -74,6 +77,8 @@
lblAddress.Visible = false;
cmbType.Visible = false;
txtAddress.Visible = false;
+ lblDataType.Visible = false;
+ cmbDataType.Visible = false;
lblIP.Text = "COM鍙�";
lblPort.Text = "娉㈢壒鐜�";
@@ -81,7 +86,7 @@
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;
@@ -92,6 +97,8 @@
lblAddress.Visible = false;
cmbType.Visible = false;
txtAddress.Visible = false;
+ lblDataType.Visible = false;
+ cmbDataType.Visible = false;
lblIP.Text = "鍦板潃";
lblPort.Text = "绔彛";
@@ -111,6 +118,15 @@
{
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;
@@ -119,6 +135,9 @@
lblAddress.Visible = true;
cmbType.Visible = true;
txtAddress.Visible = true;
+ lblDataType.Visible = true;
+ cmbDataType.Visible = true;
+ cmbDataType.Enabled = true; // 鍚敤鏁版嵁绫诲瀷閫夋嫨
lblIP.Text = "IP";
lblPort.Text = "妲�";
@@ -127,6 +146,15 @@
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();
@@ -228,6 +256,24 @@
}
}
+ 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)
@@ -235,6 +281,8 @@
if (communicator.SendMessage(txtSendMsg.Text))
ShowSendMsg(txtSendMsg.Text);
+ else
+ ShowLogMsg(communicator.Msg);
}
private void btnRuleSend_Click(object sender, EventArgs e)
@@ -253,17 +301,15 @@
if (communicator.SendMessage(SendMsg))
ShowSendMsg(SendMsg);
+ else
+ ShowLogMsg(communicator.Msg);
}
private void txtAddress_TextChanged(object sender, EventArgs e)
{
- if (communicator != null && !communicator.CommunicatorConnections.Contains("鍙橀噺鍦板潃"))
+ if (communicator != null)
{
communicator.CommunicatorConnections.Add("鍙橀噺鍦板潃", txtAddress.Text);
- }
- else if (communicator != null)
- {
- communicator.CommunicatorConnections["鍙橀噺鍦板潃"] = txtAddress.Text;
communicatorChanged(communicator);
}
}
--
Gitblit v1.9.3