蔬菜大棚nmodbus4以及邮件发送

首先搭建页面

安装第三方nmodbus4

 nmodbus4:可以实现串口直连,需要传进串口对象设置串口参数配置 Serialport,
 如果需要把串口数据通过tcp进行网口传递,需要创建tcpClient对象 

定义数据源
ModbusSerialMaster master;
// 温度的数据源
DataPointCollection wenDuValues;

// 湿度数据源
DataPointCollection shiDuValues;

// 氧气数据源
DataPointCollection yangQiValues;
创建TCPClient对象
 TcpClient tcp = new TcpClient();
 tcp.Connect("192.168.107.5", 8014);// 连接服务器
CreateRtu 创建rtu通信对象
方法有三个重载函数

1 CreateRtu(tcpclient) 用的网口通信 HY-E504串口服务器
2 CreateRtu(serialport) 用的串口直连 485转换器

master = ModbusSerialMaster.CreateRtu(tcp);

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

 timer 定时器事件

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

    }

    // 处理湿度的
    if(checkBox2.Checked) // 选中湿度
    {
        // 读取湿度数据
        ushort[]  data = master.ReadHoldingRegisters(1, 0x2, 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 (checkBox3.Checked) // 选中湿度
    {
        // 读取湿度数据
        ushort[] data = master.ReadHoldingRegisters(1, 0x000B, 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 定时器可用6
    {
        timer1.Stop(); // 关闭定时器
    }else // 默认情况下 定时器不可用
    {
        timer1.Start(); // 开始定时器
    }
}

设置时间间隔

private void button1_Click(object sender, EventArgs e)
{
    timer1.Interval = int.Parse(textBox1.Text);
}

发送邮件

这边是封装了一个MyEmail类
// 有static时候 类名.方法名
// MyEmail.方法名
/// <summary>
/// 给目标发送邮件
/// </summary>
/// <param name="mailTo"> 发送目标</param>
/// <param name="title"> 邮箱发送的标题</param>
/// <param name="content"> 邮箱内容</param>
/// <returns></returns>
public static bool SendEmail(string mailTo,string title,string content)
{
    // 第一步设置发送的邮件信息
    // 如果163邮箱 @"stmp.163.com"
    string smtpServer = @"smtp.qq.com"; // 发送邮件的服务器
    string emailPeople = "2220905182@qq.com"; // 发送者的邮箱
    string pwd = "okoyzwhlfpclecee"; // 授权码

    // 邮件服务配置
    SmtpClient client = new SmtpClient(); // 创建邮件客户端对象
    client.DeliveryMethod = SmtpDeliveryMethod.Network; // 通过网络进行发送邮件
    client.Host = smtpServer; // 设置发送服务器
    client.EnableSsl = true; // 是否开启ssl安全验证
    client.UseDefaultCredentials = true; // 不和请求一起发送
    client.Credentials = new NetworkCredential(emailPeople,pwd); // 发给服务器的信息,设置发送凭证

    // 设置邮件标题或者内容等
    MailMessage mailMessage = new MailMessage(emailPeople, mailTo); // 配置邮件的对象
    mailMessage.Subject = title; // 邮件的标题
    mailMessage.Body = content; // 设置邮件的内容
    mailMessage.BodyEncoding = Encoding.UTF8; // 设置内容编码
    mailMessage.IsBodyHtml = false; // 设置是否支持html格式<p><p>
    mailMessage.Priority = MailPriority.Normal; // 设置邮件的优先级
    try
    {
        client.Send(mailMessage);// 发送邮件的方法
        return true;
    }catch (Exception e)
    {
        throw e;
    }

}
最后在按钮事件进行调用
private void button3_Click(object sender, EventArgs e)
{
    string email = textBox2.Text;
    MyEmail.SendEmail(email, "大棚警告","大鹏温度过高,请及时打开空调");
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值