我有一個場景,我通過 TCP/IP 協議連接到服務器。這需要在我單擊 Windows 表單上的“連接到 TCP/IP 服務器”按鈕后完成。單擊此按鈕后,將顯示連接狀態(成功或失敗)。這部分我很容易管理。我需要的是,當連接成功時,程式/代碼才需要開始監聽來自服務器的傳入訊息并繼續進行。我測驗了我是否可以在沒有按鈕的情況下獲取服務器訊息(即,當表單初始化時,它會自動連接到服務器)并且效果很好。您將在下面的代碼中看到,我在處理來自服務器的傳入訊息的同一臺 PC 上使用第三方軟體的參考命令。使用第三方軟體的原因很簡單,因為我使用 VisualStudio 和 C# 來擴展該軟體在其檔案中允許的軟體功能。我確實會為這個第三方軟體寫一些變數。這我也很好。因此,我唯一的問題是僅在按下連接按鈕并且連接成功時才啟用從服務器監聽傳入訊息的功能。
任何幫助都感激不盡。
到目前為止,這是我的代碼,但它不起作用:`
namespace Form1
{
public partial class Main_Form: Form
{
private CogJob Job;
private CogJobManager Job_manager;
private CogJobIndependent Job_independent;
String Received_string;
bool State_of_connection = false;
ICogIOTCPIP TCP_IP_server_device;
public Main_HMI()
{
InitializeComponent();
//Load application
Job_manager = (CogJobManager)(CogSerializer.LoadObjectFromFile(@"Project"));
// Initialize job variables
Job = Job_manager.Job("Application");
Job_independent = Job.OwnedIndependent;
// Flush all job queues
Job.ImageQueueFlush();
Job_manager.UserQueueFlush();
Job_manager.FailureQueueFlush();
Job_independent.RealTimeQueueFlush();
if (State_of_connection == true)
{
TCP_IP_server_device.MessageReceived = new CogIOStreamMessageEventHandler(TCP_IP_server_device_MessageReceived);
}
}
// Decode the message received from the TCP/IP server device
private void TCP_IP_server_device_MessageReceived(object sender, CogIOStreamMessageEventArgs eventArgs)
{
Received_string = eventArgs.DecodedMessage.Substring(2, 9);
}
// Savely shutdown application job manager when the form is closed;
private void Main_HMI_FormClosing(object sender, FormClosingEventArgs e)
{
Job_manager.Shutdown();
}
private void Connect_to_TCP_IP_server_button_Click(object sender, EventArgs e)
{
Job_manager.IOEnable = true;
TCP_IP_server_device = Job_manager.StreamInput("PLC", 2000, true);
if (TCP_IP_server_device == null)
{
MessageBox.Show("Connection failed", "TCP/IP server device connection status");
}
else
{
MessageBox.Show("Connection successful", "TCP/IP server device connection status");
State_of_connection = true;
}
}
}
}
`
uj5u.com熱心網友回復:
解決方案很簡單:
namespace Form1;
public partial class Main_Form: Form
{
private CogJob Job;
private CogJobManager Job_manager;
private CogJobIndependent Job_independent;
String Received_string;
ICogIOTCPIP TCP_IP_server_device;
public Main_HMI()
{
InitializeComponent();
//Load application
Job_manager = (CogJobManager)(CogSerializer.LoadObjectFromFile(@"Project"));
// Initialize job variables
Job = Job_manager.Job("Application");
Job_independent = Job.OwnedIndependent;
// Flush all job queues
Job.ImageQueueFlush();
Job_manager.UserQueueFlush();
Job_manager.FailureQueueFlush();
Job_independent.RealTimeQueueFlush();
}
// Decode the message received from the TCP/IP server device
private void TCP_IP_server_device_MessageReceived(object sender, CogIOStreamMessageEventArgs eventArgs)
{
Received_string = eventArgs.DecodedMessage.Substring(2, 9);
}
// Savely shutdown application job manager when the form is closed;
private void Main_HMI_FormClosing(object sender, FormClosingEventArgs e)
{
Job_manager.Shutdown();
}
private void Connect_to_TCP_IP_server_button_Click(object sender, EventArgs e)
{
Job_manager.IOEnable = true;
TCP_IP_server_device = Job_manager.StreamInput("PLC", 2000, true);
if (TCP_IP_server_device == null)
{
MessageBox.Show("Connection failed", "TCP/IP server device connection status");
}
else
{
MessageBox.Show("Connection successful", "TCP/IP server device connection status");
TCP_IP_server_device.MessageReceived = new CogIOStreamMessageEventHandler(TCP_IP_server_device_MessageReceived);
}
}
}
只需在成功連接時啟用事件處理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/531012.html
下一篇:以編程方式滾動圖表
