C# winform 设计一个温室监控系统的温度采集模块

        该温室系统采用的是上位机与下位机联动的模式,本文章主要讲述的是上位机温室监控的读取温度模块。模块使用的是温度传感器(DS18B20)数据读取,传感器概述 传感器为单线接口,使用一个接口引脚即可通信 每个传感器都有唯一的序列号,因此可以多个DS18B20存在一条总线上,可以在不同的地方放置温 度传感器 可以使用数据线供电 测量范围从-55℃至+125℃ 应用范围包括恒温控制、工业系统、消费类产品、温度计或者任何热敏系统

1、温室监控的页面设计:

 2、主要程序代码

        上位机的读取温度控制代码

        2.1、读取温度的button按键

private void btn_TEMP_Click(object sender, EventArgs e)  //读取温度
{
    label4.Text = (Convert.ToDouble(greenHouse.ReadTemperture()) / 10).ToString() + "℃";
}

        2.2、温度读取的主要指令

FRAME_HEAD1 = 0xAA;    //帧头1

FRAME_HEAD2 = 0x55;    //帧头2

FRAME_END = 0x0D;      //帧尾

FRAME_DIR_CMD = 0x01;  //数据方向  上位机发送命令

DEVICE_TEMP = 0x03;    //设备类型  温度传感器

         2.3、读取的程序代码

public int ReadTemperture()    //读取温度
{
    byte[] data = new byte[7];

    data[0] = FRAME_HEAD1;
    data[1] = FRAME_HEAD2;
    data[2] = FRAME_DIR_CMD;
    data[3] = DEVICE_TEMP;
    data[4] = 0;
    data[5] = 0;
    data[6] = FRAME_END;

    if (RequestSendData != null)
    {
       RequestSendData(data);
    }
    if(sema.WaitOne(200) == true)  //2、使用信号变量
    {
       return temperature;  //等待200毫秒,如果接收到就返回
    }
    else
    {
       return 0xFFFF;         //没有接收到就返回一个很大的值
    }
}

        2.4、读取数据的主要代码

public void ReceivedRawData(byte[] data)            //遍历数组中的每一个元素
{
   foreach(byte b1 in data)
   {
      switch(pharse_state)
      {
         case 0:
             if (b1 == FRAME_HEAD1)
                 pharse_state = 1;
             break;
         case 1:
             if (b1 == FRAME_HEAD2)
                 pharse_state = 2;
             else
                 pharse_state = 0;
             break;
         case 2:
             if (b1 == FRAME_DIR_REC)
             {
                 pharse_state = 3;
                 data_object.Clear();
             }
             else
                 pharse_state = 0;
             break;
         case 3:
             data_object.Add(b1);
             if(data_object.Count >= FRAME_DIR_NUM)
                 pharse_state = 4;
             break;
         case 4:
             if (b1 == FRAME_END)
                 PhrasaseValidData(data_object);
             pharse_state = 0;
             break;
       }
    }
}

         2.5、解析读取到的有效数据

private void PhrasaseValidData(List<byte> data_list)      //解析有效数据
{
    switch (data_list[0])
    {
        case DEVICE_TEMP:     //读取温度
            temperature = data_list[1] * 256 + data_list[2];
            try
            {
                sema.Release();   //检测是否接收到数据
            }
            catch
            {
                 //捕捉异常但不处理
            }
            break;
      }
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值