3、监测数据采集物联网应用开发步骤(3)

  1. 监测数据采集物联网应用开发步骤(2)

系统整体结构搭建

新建项目

输入项目名称:MonitorData

所谓兵马未动粮草先行,按下图创建好对应的模块备用:

com.plugins                     业务插件模块

com.zxy.adminlog            日志或文本文件读写模块

com.zxy.autoUpdate       程序版本自动更新模块

com.zxy.business             通用业务处理模块

com.zxy.common            通用函数模块

com.zxy.comport             串口通讯模块

com.zxy.db_Self               静态接口配置库(Sqlit3)模块

com.zxy.db1                     静态接口配置库(Sqlit3)模块

com.zxy.db2                     业务数据库(Sqlite3)模块

com.zxy.interfaceReflect         通用插件管理模块

com.zxy.main                   全局变量初始化模块

com.zxy.taskhandler        定时器任务模块

com.zxy.tcp                      tcp协议模块

编写主程序代码MonitorDataCmd.py,打印启动时间,sleep 5秒,然后打印结束时间

#! python3
# -*- coding: utf-8 -
'''
Created on 2023年08月28日
@author: zxyong 13738196011
'''import time
from com.zxy.common.Com_Fun import Com_Fun#监测数据采集物联网应用-主程序
class MonitorDataCmd(object):def __init__(self, params):passif __name__ == '__main__':print("监测数据采集物联网应用软件开始:"+Com_Fun.GetTimeDef())time.sleep(5)print("监测数据采集物联网应用软件结束:"+Com_Fun.GetTimeDef())

新建通用函数代码com.zxy.common.Com_Fun.py

#! python3
# -*- coding: utf-8 -
'''
Created on 2023年08月28日
@author: zxyong 13738196011
'''import datetime,uuid,time
from datetime import timedelta#监测数据采集物联网应用--通用函数
class Com_Fun():def __init__(self):pass@staticmethoddef NoNull(objTag):if objTag is None:return ""else:return str(objTag)@staticmethoddef FloatNull(objTag):if objTag is None or objTag == "" or objTag == "-":return 0else:return float(objTag)@staticmethoddef ZeroNull(objTag):if objTag is None or objTag == "":return 0else:return int(objTag)@staticmethoddef GetLong(inputTimeFormat,inputTime):if len(inputTime) > 19:inputTime = inputTime[0:19]time1=datetime.datetime.strptime(inputTime.replace("T"," "),inputTimeFormat)return time.mktime(time1.timetuple())#获得当前时间戳@staticmethoddef getTimeLong():temT = datetime.datetime.now()timeStamp = time.mktime(temT.timetuple())return timeStamp#日期信息格式化timeFormat : '%Y-%m-%d %H:%M:%S'@staticmethoddef GetTime(inputTimeFormat):return datetime.datetime.now().strftime(inputTimeFormat)#日期信息格式化秒数据10整数化@staticmethoddef GetTimeNum(inputTime):temTime = datetime.datetime.strptime(inputTime.replace("T", " "),"%Y-%m-%d %H:%M:%S")temSB = temTime.strftime("%Y-%m-%d %H:%M")temSE = temTime.strftime("%S")temSec = int(int(temSE) / 10)return temSB+":"+str(temSec)+"0"#日期信息格式化timeFormat : '%Y-%m-%d %H:%M:%S'@staticmethoddef GetTimeDef():return str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))#日期信息格式化timeFormat : '%Y-%m-%d %H:%M:%S' 字符串@staticmethoddef GetTimeInput(inputTimeFormat,inputTime):if inputTime is None or inputTime == "":return "1900-01-01 00:00:00"time1=datetime.datetime.strptime(inputTime.replace("T", " "),inputTimeFormat)return time1#日期信息格式化timeFormat : '%Y-%m-%d %H:%M:%S' 字符串@staticmethoddef GetStrTimeInput(inputTimeFormat,inputTime):if inputTime is None or inputTime == "":return "1900-01-01 00:00:00"time1=datetime.datetime.strptime(inputTime.replace("T", " "),inputTimeFormat)return str(time1)#返回time格式@staticmethoddef GetToTimeInput(inputTimeFormat,inputTime):if inputTime is None or inputTime == "":return "1900-01-01 00:00:00"elif len(inputTime) <= 19:return datetime.datetime.strptime(inputTime.replace("T"," "),inputTimeFormat)else:return datetime.datetime.strptime(inputTime[0:19],inputTimeFormat)#日期信息格式化timeFormat : '%Y-%m-%d %H:%M:%S',返回字符串格式@staticmethoddef GetDateInput(inputDateFormat,inputTimeFormat,inputTime):if len(inputTime) < 10 or inputTime is None or  inputTime == "":return "1900-01-01"time1=datetime.datetime.strptime(inputTime.replace("T"," "),inputTimeFormat)return time1.strftime(inputDateFormat)#(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)@staticmethoddef DateTimeAdd(inputDate,inputDateType,inputNum):#%d %H:%M:%Sdelta = Noneif inputDateType == "d":delta = timedelta(days=inputNum)elif inputDateType == "W":delta = timedelta(weeks=inputNum)elif inputDateType == "H":delta = timedelta(hours=inputNum)elif inputDateType == "M":delta = timedelta(minutes=inputNum)elif inputDateType == "S":delta = timedelta(seconds=inputNum)return inputDate + delta@staticmethoddef SetHashTable(inputHt,inputStrKey,inputStrValue):if inputHt is None:inputHt = {}inputHt[inputStrKey] = inputStrValue@staticmethoddef GetHashTable(inputHt,inputStrKey):if inputHt is None or inputStrKey not in list(inputHt.keys()):return ""else:return inputHt[inputStrKey]@staticmethoddef GetHashTableNone(inputHt,inputStrKey):if inputHt is None or inputStrKey not in list(inputHt.keys()):return Noneelse:return inputHt[inputStrKey]@staticmethoddef RemoveHashTable(inputHt,inputStrKey):if inputHt.get(inputStrKey) is not None:inputHt.pop(inputStrKey)@staticmethoddef Str_To_Int(inputStr):if inputStr is not None and inputStr != "":return int(inputStr)else:return 0@staticmethoddef Get_New_GUID():return str(uuid.uuid1()).upper()

运行程序,选择主程序右键:

程序执行结果:

恭喜你!系统整体结构搭建完成。

  1. 监测数据采集物联网应用开发步骤(4)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/110803.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《C和指针》笔记12: 存储类型(自动变量、静态变量和寄存器变量)

文章目录 1. 自动变量&#xff08;auto&#xff09;1.1 自动变量的初始化 2. 静态变量&#xff08;static&#xff09;2.1 静态变量的初始化 3. 寄存器变量&#xff08;register&#xff09; 1. 自动变量&#xff08;auto&#xff09; 在代码块内部声明的变量的缺省存储类型是…

小白必看:期权行权前必须了解的问题。

期权的本质是一个买权或是卖权&#xff0c;也就是说你是权利方的话&#xff0c;你拥有以约定价格向对手方买入&#xff08;买权&#xff09;或卖出&#xff08;卖权&#xff09;一定数量标的的权利。期权行权就是从对手方买入&#xff0c;或向其卖出标的&#xff01;下文介绍小…

葡萄叶病害识别(图像连续识别和视频识别,Python代码,pyTorch框架)

葡萄叶病害识别&#xff08;图像连续识别和视频识别&#xff0c;Python代码&#xff0c;pyTorch框架&#xff09;_哔哩哔哩_bilibili 葡萄数据集 第一个文件夹为 Grape Black Measles&#xff08;葡萄黑麻疹&#xff09;病害&#xff08;3783张&#xff09; Grape Black rot葡…

C#调用barTender打印标签示例

使用的电脑需要先安装BarTender 我封装成一个类 using System; using System.Windows.Forms;namespace FT_Tools {public class SysContext{public static BarTender.Application btapp new BarTender.Application();public static BarTender.Format btFormat;public void Q…

【pytorch】Unfold和Fold的互逆操作

1. 参数定义 Unfold https://pytorch.org/docs/stable/generated/torch.nn.Unfold.html#torch.nn.Unfold Fold https://pytorch.org/docs/stable/generated/torch.nn.Fold.html#torch.nn.Fold 注意&#xff1a;参数当中的padding是在四周边补零&#xff0c;而当fold后的尺寸…

Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required

项目场景&#xff1a; 最近因为公司业务需要在搭一个新架构&#xff0c;用的springboot3和jdk17,在整合mybatis多数据源的时候报错 &#xff08;引用的mybatisplus 和 mybatisplusjion的是最新的包-2023-08-26&#xff09; Error creating bean with name ‘XXXServiceImpl’:…

无涯教程-Android Studio函数

第1步-系统要求 您将很高兴知道您可以在以下两种操作系统之一上开始Android应用程序的开发- MicrosoftWindows10/8/7/Vista/2003(32或64位)MacOSX10.8.5或更高版本,最高10.9(小牛) GNOME或KDE桌面 第二点是,开发Android应用程序所需的所有工具都是开源的,可以从Web上下载。以…

【FPGA】verilog语法的学习与应用 —— 位操作 | 参数化设计

【FPGA】verilog语法的学习与应用 —— 位操作 | 参数化设计 学习新语法&#xff0c;争做新青年 计数器实验升级&#xff0c;让8个LED灯每个0.5s的速率循环闪烁&#xff0c;流水灯ahh好久不见~ 去年光这个就把我折磨够呛。。我肉眼可见的脱发就是从那时候开始的。。在那两个月…

代码随想录打卡—day46—【DP】— 8.29 背包END

1 139. 单词拆分 139. 单词拆分 做了很久...估计2h 一开始我的思路卡死了 看题解之后的思路的详解见注释&#xff0c; 我的写法和carl 答案在一些微小的细节上略有不同&#xff0c;我的更好理解&#xff0c;但他的解法更简单。 我写的过程中&#xff0c;需要注意下标和字符…

爬虫逆向实战(二十四)--某鸟记录中心

一、数据接口分析 主页地址&#xff1a;某鸟记录中心 1、抓包 通过抓包可以发现数据接口是front/record/search/page 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”模块可以发现&#xff0c;请求参数是加密的 请求头是否加密&#xff1f; 通过查…

基于 OV5640 的图像采集显示系统(DVP 接口时序逻辑设计)

文章目录 前言一、DVP 接口时序逻辑设计二、基本数据流接收三、像素位置输出四、舍弃前 N 张图像五、系统异常状态恢复控制六、完整代码展示七、仿真代码展示八、仿真波形展示前言 上一节,我们已经完成了 OV5640 初始化逻辑的介绍。接下来,将要开始完成 DVP 接口的时序设计。…

【C修炼计划】卷壹 · 初识C语言

文章目录 卷壹 初识C语言一 C语言的起源二 C语言的特性三 C语言的应用范围四 C语言程序结构五 C语言书写规范六 C语言编译器安装附 参考资料 卷壹 初识C语言 一 C语言的起源 C语言的前生是B语言&#xff08;BCPL&#xff0c;一种早期的高级语言&#xff09;。下图描…

1. 卷积原理

① 卷积核不停的在原图上进行滑动&#xff0c;对应元素相乘再相加。 ② 下图为每次滑动移动1格&#xff0c;然后再利用原图与卷积核上的数值进行计算得到缩略图矩阵的数据&#xff0c;如下图右所示。 import torch import torch.nn.functional as Finput torch.tensor([[1, 2…

华为AR路由器 典型配置案例——以太网交换

目录 Eth-Trunk 例&#xff1a;配置三层链路聚合 组网需求 操作步骤 检查配置结果 配置脚本 VLAN 举例&#xff1a;配置基于接口划分VLAN&#xff0c;实现同一VLAN内的互通&#xff08;同设备&#xff09; 组网需求 操作步骤 检查配置结果 配置脚本 举例&#xff…

C# 使用SnsSharp实现文件拖拽功能

CSDN下载地址&#xff1a;https://download.csdn.net/download/sns1991sns/88041637 gitee下载地址&#xff1a;https://gitee.com/linsns/snssharp 技术优势&#xff1a; 不仅使用简单&#xff0c;还可解决由于系统管理权限导致的文件拖拽无响应问题。 使用举例&#xff1a…

PDF制作成翻页电子书

在日常工作中&#xff0c;大部分人使用的都是PDF文档发送给客户&#xff0c;但是PDF文档通常是静态的&#xff0c;缺乏交互性和视觉吸引力。那你有没有想过把它转换成翻页的电子书呢&#xff1f; 小编将告诉你操作步骤&#xff0c;非常简单 1.搜索FLBOOK在线制作电子杂志平台 …

十二、pikachu之URL重定向

文章目录 1、URL重定向概述2、实战3、URL跳转的几种方式:3.1 META标签内跳转3.2 javascript跳转3.3 header头跳转 1、URL重定向概述 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方。如果后端采用了前端传进来的&#xff08;可能是用户传参&#xff0c;或者之前预埋…

官宣|美洽AI客服 x HelpLook 达成联盟合作,AI ChatBot 解放客户运营

重磅消息 美洽AI客服和HelpLook 正式建立合作关系 随着企业扩大规模和业务增长&#xff0c;客户咨询和服务请求增加。传统人工客服难以处理大量咨询&#xff0c;而智能化的AI客服可以同时满足多个客户需求。AI客服系统建立和训练好后&#xff0c;能自动化处理客户咨询&#x…

【计算机网络】HTTPs 传输流程

HTTPS和HTTP的区别 1、HTTP协议传输的数据都是未加密的&#xff0c;是明文的&#xff0c;使用HTTP协议传输隐私信息非常不安 HTTPS协议是由SSLHTTP协议构建的可进行加密传输、身份认证的网络协议&#xff0c;要比http协议安全。 2、HTTPS协议需要到CA申请证书&#xff0c;一般…

【高阶数据结构】二叉树搜索树 {概念;实现:核心结构,增删查,默认成员函数;应用:K模型和KV模型;性能分析;相关练习}

二叉搜索树 一、二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它可以是一棵空树&#xff0c;若果不为空则满足以下性质: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节点…