当前位置: 高中信息技术 / 综合题
  • 1. (2022·杭州模拟) 小吴编写基于Flask Web框架的蔬菜温室智能灌溉控制系统。系统框架如图a所示。该信息系统实现:

    ①蔬菜温室A中共安装5个采集点,使用智能终端与传感器采集温度、湿度和灌溉阀门每天浇水量等数据,并将数据上传至服务器;

    ②服务器接收数据后,将数据存储在与程序同文件夹的数据库文件中;

    ③服务器每次存储数据后,读取数据库中最近上传的100条数据记录,计算平均湿度,若平均湿度小于50,且温室中5个阀门总共浇水量未超过当天需浇水总量L,则发送浇灌指令。

    1. (1) 数据库设计。

      该系统数据存储在data. db数据库文件,名为m_ tb的数据表中,表中有五个字段id、tim、deg、tem和wat,如图b所示。最近6条记录数据如图c所示,其中第1条记录中“A5”表示温室A的5号采集点,“36”为本次采集的湿度值,“490”为本采集点阀门当前累计的浇水量(阀门每天凌晨重置为0)。

      结合图c数据记录,当截止到2022 -9-1013:06:00 时,温室A总浇水量(填数字) (提示:温室总浇水量=最近所有阀门浇水量之和)。

    2. (2) 数据采集与传输。

      ①系统的采集点使用智能终端连接传感器采集数据,并采用无线技术接入网络,并以GET形式提交数据,则该传输过程中使用的网络协议主要有(多选,填字母:A .TCP/IP协议/ B .FTP 协议/C .HTTP协议/D .Telnet协议)。

      ②若id为Al的采集点某次采集如下数据:湿度值为45,阀门浇水量为500,需用URL格式为:ttp://10.1.0.8:88/s?d=45&w=50O&id=A1将采集数据上传到服务器。为实现上述功能,小吴在智能终端编写的Python程序段如下。

      #导入相关的模块库与无线连接设置,代码略

      IP="10.1.0. 8"; PORT="88"

      0bloq. httpConfig(IP, PORT)

      while True:

          d=pin0. read_ _analog()    #读取湿度值

          w=pinl. read_ analog()     #读取浇水量

          s_ get=  ▲ 

          errno, resp=0bloq. get (s_ get, 10000)

          if errno == 200:    #errno的值为200表示数据传输成功

             if resp==' open':

                 pin8. write_ _digital(1)   #打开浇水的阀门

              else:

                 pin8. write_ _digital (0)   #关闭浇水的阀门

      sleep (1000*60)

      请在  ▲  处选填如下代码,能实现传输数据功能的代码是(单选,填字母)

      A .s?d=45&w=500&id=A1

      B .”s?d=d&w =w&id=A1 '

      C .”s?d=str (d) &w=str (w) &id=A1"

      D . "s?d="+str (d)+" &w="+str (w)+ " &id=A1"

    3. (3) 数据处理。

      服务器每次接收到上传的数据后,立刻读取数据库中该温室最近100条的当天数据记录,计算平均湿度,若平均湿度小于50,且5个阀门总出水量未超过当天需浇水总量L,则发送浇灌指令。服务器实现上述功能的部分Python程序如下,请在划线处填入合适的代码。

      #导入相关的模块库,代码略

      app=Flask(_ name_ )

      db=sqli te3. connect("”)

      L=3000   #变量L存储温室当天需浇水总量

      @app. route("/s")

      def index ():

          s_ id=request. args. get("id")   #获取监测点编号

          s_ d=int (request. args. get("d"))   #获取湿度值

          s_ w=int (request. args. get("w"))   #获取当前出水量

          s_ t=str (datetime. now())[:10]   #获取当天日期

      #存储本次采集的各数据至data. db,代码略

      cur=db. cursor ()

      cur. execute("SELECT * FROM m_tb where tim like '"+s_ .t+"%'")    #执行数据库命令

      rec=cur. fetchall()#从数据库中读取当天的数据记录

      cur. close () ;db. close()

      deg=0;wat=[0]*6;i=0

      for arr in rec[::-1]:

          deg=deg+arr[2]

          w=  ②  

          if wat[w]==0:

              wat[w]=arr[4]

          i=i+1

          if i==100:

              break

      deg=deg/i;sum_ w=0

      for i in range(1, 6):

          sum_ w=sum_ w+wat[i]

      if   ③  

          return" open'

      else:

          return"close"

      app. run(host="10.1. 0.8", port=88)

微信扫码预览、分享更方便