首页 > 其他分享 >Winform窗体控件双向绑定数据模拟读写PLC数据

Winform窗体控件双向绑定数据模拟读写PLC数据

时间:2024-12-02 16:12:16浏览次数:8  
标签:控件 set get ushort DB ushorts 窗体 PLC public

1.用Modbus工具模拟PLC

2.创建一个实体类

点击查看代码
internal class Data : INotifyPropertyChanged
{
    ushort[] ushorts = new ushort[10];
    public ushort D0 { get => ushorts[0]; set { ushorts[0] = value; OnPropertyChanged(nameof(D0)); } }
    public ushort D1 { get => ushorts[1]; set { ushorts[1] = value; } }
    public ushort D2 { get => ushorts[2]; set { ushorts[2] = value; } }
    public ushort D3 { get => ushorts[3]; set { ushorts[3] = value; } }
    public ushort D4 { get => ushorts[4]; set { ushorts[4] = value; } }
    public ushort D5 { get => ushorts[5]; set { ushorts[5] = value; } }
    public ushort D6 { get => ushorts[6]; set { ushorts[6] = value; } }
    public ushort D7 { get => ushorts[7]; set { ushorts[7] = value; } }
    public ushort D8 { get => ushorts[8]; set { ushorts[8] = value; } }
    public ushort D9 { get => ushorts[9]; set { ushorts[9] = value; } }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
3.创建窗体,添加10个TextBox控件用于显示和设置plc端数据

4.把数据绑定控件,利用定时器事件读取和写入PLC数据。

点击查看代码
        Data DB = new Data();
        ModbusTcp ModbusTcp = new ModbusTcp();
        private void Form1_Load(object sender, EventArgs e)
        {
            
            try
            {
                textBox1.DataBindings.Add("Text", DB, "D0");
                textBox2.DataBindings.Add("Text", DB, "D1");
                textBox3.DataBindings.Add("Text", DB, "D2");
                textBox4.DataBindings.Add("Text", DB, "D3");
                textBox5.DataBindings.Add("Text", DB, "D4");
                textBox6.DataBindings.Add("Text", DB, "D5");
                textBox7.DataBindings.Add("Text", DB, "D6");
                textBox8.DataBindings.Add("Text", DB, "D7");
                textBox9.DataBindings.Add("Text", DB, "D8");
                textBox10.DataBindings.Add("Text", DB, "D9");
                ModbusTcp.ModbusTcpConnect("127.0.0.1", 502);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            ushort[] ushorts = {DB.D0,DB.D1,DB.D2,DB.D3,DB.D4,DB.D5,DB.D6,DB.D7,DB.D8,DB.D9};
            ModbusTcp.WriteMultipleRegisters(1, 0, ushorts);

            ushorts = ModbusTcp.ReadHoldingRegisters(1, 0, 10);
            
        }

标签:控件,set,get,ushort,DB,ushorts,窗体,PLC,public
From: https://www.cnblogs.com/Wulinhai/p/18582066

相关文章

  • 界面控件DevExpress WPF v24.2新功能预览 - 人工智能(AI)集成
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......
  • 怎样去除iOS和Android中的输入URL地址的控件条呢?
    在iOS和Android中完全去除浏览器自带的地址栏是不可能的,除非你开发的是一个独立的应用程序,而不是在浏览器中运行的网页。如果你的目标是在Web应用中提供更沉浸式的体验,隐藏地址栏可以实现,但用户仍然可以通过下拉或其他操作重新显示地址栏。以下是一些方法可以尝试在你的......
  • 宝信软件推出全栈自主可控PLC
    2024年9月20日,宝信软件在上海隆重发布了历时十余年自主研发的工业控制系统核心部件——全栈自主可控PLC的T3、T4系列产品。宝信软件的全栈自主可控PLC具有以下特点和优势:该系列产品的推出是基于国家对工业安全和自主可控的战略需求,特别是在钢铁等关键基础产业......
  • Android 简单控件
    创建一个新模块chapter03:创建成功:在模块chapter03中创建一个布局:布局文件的内容:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_pare......
  • B4X编程语言:B4X控件的尺寸大小属性(宽度/高度属性)
            B4X控件的尺寸大小属性(宽度/高度属性)是指Width /Height属性(B4J中还有PrefWidth /PrefHeight属性)。        1、Width        设置或获取控件的宽度。        用法示例:        设置控件Label1的宽度:Label1.Width=200......
  • vs2022中windows窗体winform没有窗体设计器问题处理
    环境:vs2022,.net8,winfrom项目。问题:这几天重新换了个代码托管库,上传拉取代码后(换了本地目录),发现所有窗体都只能打开代码,不能打开窗体设计器进行控件的调整修改等。网上找了n多资料都无效。无意中发现是.user文件导致,这个文件一般在源码管理中是排除的。处理如下:项目名:WinForms......
  • React编译之后如何修改input控件的值
    问题: 因为React是通过setState方法改变值来影响页面展示的,所以直接修改页面值,并不能让React意识到state已经变化了。 修改自chatgpt4o提供的方法,20241129测试有效。 //第一个参数为原生组件,第二个参数为新值functionsetReactInputValue(input,value){constl......
  • 【Qt】QDateTimeEdit控件实现清空(不保留默认时间/最小时间)
    一、QDateTimeEdit控件 QDateTimeEdit提供了一个用于编辑日期和时间的控件。用户可以通过键盘或使用上下箭头键来增加或减少日期和时间值。日期和时间的显示格式根据设置的格式显示,可以通过setDisplayFormat()方法来设置。二、如何清空我在使用的时候,发现这个控件不管......
  • 鸿蒙安全控件之位置控件简介
    位置控件使用直观且易懂的通用标识,让用户明确地知道这是一个获取位置信息的按钮。这满足了授权场景需要匹配用户真实意图的需求。只有当用户主观愿意,并且明确了解使用场景后点击位置控件,应用才会获得临时的授权,获取位置信息并完成相应的服务功能。一旦应用集成了位置控件,用户点击......
  • 界面控件Kendo UI for Angular中文教程:如何构建带图表的仪表板?(二)
    KendoUIforAngularListView可以轻松地为客户端设置一个带有图表列表的仪表板,包括分页、按钮选项、数字或滚动,以及在没有更多项目要显示时的通知等。KendoUIforAngular是专用于Angular开发的专业级Angular组件。telerik致力于提供纯粹的高性能AngularUI组件,无需任何jQuery......