连接上PLC后,怎么不能中断?

代码铺到天琴座 2025-08-11 15:25:52

连接PLC程序如下:

        private void ConnectPLC_Click(object sender, EventArgs e)
        {
            LocalPLC = new Plc(CpuType.S71200,"192.168.0.1", 0, 1);
            LocalPLC.Open();
            if (LocalPLC.IsConnected == true)
            {
                ConnectPLC.BackColor = Color.Green; //如果通讯成功,连接键变成绿色
            }

            else
            {
                MessageBox.Show("连接失败");
            }
        }

连接上的,按钮会变成绿色

中断PLC程序如下:

        private void DisconnectPLC_Click(object sender, EventArgs e)

        {

            ConnectPLC.Enabled=false; //此前没有这行,后来因为中断不了,加上的,但还是中断不了
            LocalPLC.Close();

            if (LocalPLC.IsConnected == false)
            {
                ConnectPLC.BackColor = Color.Gray; //如果通讯中断,连接键变成灰色
            }

            else
            {
                MessageBox.Show("中断失败");
            }
        }

可是中断不了,连接按钮不会变成灰色,也一直没有显示“中断失败”

...全文
954 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

试一下:


// 声明PLC对象(确保类级别声明)
private Plc LocalPLC { get; set; }

private void ConnectPLC_Click(object sender, EventArgs e)
{
    // 清理现有连接
    if (LocalPLC != null)
    {
        LocalPLC.Close();
        LocalPLC = null;
    }

    // 创建新连接
    LocalPLC = new Plc(CpuType.S71200, "192.168.0.1", 0, 1);
    
    try
    {
        LocalPLC.Open();
        ConnectPLC.BackColor = LocalPLC.IsConnected ? Color.Green : Color.Red;
    }
    catch (Exception ex)
    {
        MessageBox.Show($"连接失败: {ex.Message}");
        ConnectPLC.BackColor = Color.Red;
    }
}

private void DisconnectPLC_Click(object sender, EventArgs e)
{
    try
    {
        if (LocalPLC != null)
        {
            LocalPLC.Close();
            // 等待连接状态更新(根据库的实现可能需要)
            System.Threading.Thread.Sleep(100); 
        }
        
        // 无论是否成功都更新UI状态
        UpdateConnectionState();
    }
    catch (Exception ex)
    {
        MessageBox.Show($"断开异常: {ex.Message}");
        UpdateConnectionState();
    }
}

// 统一更新连接状态
private void UpdateConnectionState()
{
    if (InvokeRequired)
    {
        Invoke(new Action(UpdateConnectionState));
        return;
    }

    bool isConnected = LocalPLC?.IsConnected == true;
    ConnectPLC.BackColor = isConnected ? Color.Green : Color.Gray;
    
    // 可选:显示状态提示
    statusLabel.Text = isConnected ? "已连接" : "已断开"; 
}
  • 举报
回复
@吉普赛的歌 非常好,谢谢!

111,113

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧