自学内容网 自学内容网

C# 智慧大棚nmodbus4

窗体 :图表(chart):

下载第三方:

nmodbus4:可以实现串口直连,需要创建串口对象设置串口参数配置Serialport

如果需要把串口数据表通过tcp进行网口传递 需要创建tcpclient对象

ModbusSerialMaster master;
// 温度的数据源
// Collection 集合
DataPointCollection wenDuValues;
// 温度数据源
DataPointCollection shiDuValues;
// 氧气数据源
DataPointCollection yangQiValues;
public Form1()
{
    InitializeComponent();
    // 创建TCPClient对象
    TcpClient tcp = new TcpClient();
    tcp.Connect("192.168.107.5",8014); // 连接服务器


    // CreateRtu 创建rtu通信对象,
    // 方法有三个重载函数
    // 1 CreateRtu(tcpclient) 用的网口通信 HY-E504串口服务器
    // 2 CreateRtu(serialport) 用的串口直连 485转换器
    // 以后使用master进行读取指定地址数据即可
    master = ModbusSerialMaster.CreateRtu(tcp); //

    // 初始化数据源
    wenDuValues = chart1.Series[0].Points;
    shiDuValues = chart1.Series[1].Points; // 把图表湿度point默认值赋值给变量
    yangQiValues = chart1.Series[2].Points;

}

double 温度;
double 湿度;
double 氧气;
private void timer1_Tick(object sender, EventArgs e)
{
    // 获取温度 湿度 氧气数据
    string time = DateTime.Now.ToString("HH:mm:ss");
    // 判断复选框是否选中
    if (checkBox1.Checked) // 选中温度
    {
        // 取出温度数据
        // ReadHoldingRegisters 读取寄存器的数据
        // 参数1 设备地址 一般都是1
        // 参数2 寄存器地址 温度寄存器地址0003
        // 参数3  读取寄存器个数,读取一个温度数据个数就为1
        ushort[] values = master.ReadHoldingRegisters(1, 0x03, 1);// values 就是数据
        float value = values[0] / 10F;// values[0]就是温度数据
        // 图标添加xy轴;x轴是时间 y轴是温度值
        wenDuValues.AddXY(time, value);
        温度 = value; // 记录最后一个值
    }
    else // 未选中温度的时候
    {
        int index = wenDuValues.AddXY(time, 温度); // 返回值是集合末尾的索引值
        // 把当前点设置为透明
        DataPoint dp = wenDuValues[index];
        dp.Color = Color.Transparent; // 设置透明颜色

        //wenDuValues[温度];
    }

    // 处理湿度的
    if (checkBox2.Checked) // 选中湿度
    {
        // 读取湿度数据
        ushort[] data = master.ReadHoldingRegisters(1, 0x02, 1);
        float s = data[0] * 0.1F;
        shiDuValues.AddXY(time, s);// 添加xy轴
        湿度 = s;
    }
    else
    {
        // 未选择湿度
        int index = shiDuValues.AddXY(time, 湿度);
        DataPoint p = shiDuValues[index];
        p.Color = Color.Transparent;
    }

    // 处理湿氧气
    if (checkBox2.Checked) // 选中湿度
    {
        // 读取湿度数据
        ushort[] data = master.ReadHoldingRegisters(1, 0x0B, 1);
        float s = data[0] * 0.1F;
        yangQiValues.AddXY(time, s);// 添加xy轴
        氧气 = s;
    }
    else
    {
        // 未选择湿度
        int index = yangQiValues.AddXY(time, 氧气);
        DataPoint p = yangQiValues[index];
        p.Color = Color.Transparent;
    }

}

// 开始定时器 停止定时器
private void button2_Click(object sender, EventArgs e)
{
    if (timer1.Enabled) // 如果等于true 定时器可用
    {
        timer1.Stop(); // 关闭定时器
    }
    else // 默认情况定时器不可用
    {
        timer1.Start();// 开启定时器
    }
}

// 设置事件间隔
private void button1_Click(object sender, EventArgs e)
{
    timer1.Interval = int.Parse(textBox1.Text);
}
}
}

原文地址:https://blog.csdn.net/weixin_73535261/article/details/140505721

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!