基于C++的IOT网关和平台1:github项目ctGateway
初级代码游戏的专栏介绍与文章目录-CSDN博客
我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。
这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。
源码指引:github源码指引_初级代码游戏的博客-CSDN博客
这是一个开源项目,LGPL许可。github位置:https://github.com/codetoys/ctGateway.git
支持Modbus等常见协议,可以定制上报规则和语法,可以扩展协议支持。主要是经过了工厂环境考验,基本架构稳定性比较好,程序该考虑的通用问题都考虑到了。
什么意思呢,意思是各种现场BUG都遇到了,都做了预防,作为一个通用的基础架构是比较理想的。
网关程序基于C++和linux,只需要基本的linux环境,附加依赖的东西都可以自行编译,可以交叉编译为arm,整个程序包括依赖的库不到10M,可以在很小的设备上运行。CPU占用率都测过了,很低(有些设备散热不好,CPU占用率要严格控制)。
网关嘛,一般是个控制台程序,没啥好看。配套的管理工具大概是这样的(就像个专有的MQTT客户端):
这个工具很方便,所有网关支持的指令都支持,还支持通过MQTT远程执行指令和文件传输(也就是原本用telnet和ftp实现的能力在这个网关和工具上用MQTT实现了)。大部分指令也支持批量操作。
文档是比较多的,而且还在补充中,目前的文档是这些(就是项目根目录下的index.html):
下面是readme.md的格式化版本:
目录
ctGateway (Engish-Chinese 英文中文对照)
ctGateway
introduction 介绍
Source 源码
Copyright 许可证
ManageTools
introduction 介绍
ServerDemon
introduction 介绍
Document 文档
Quick Guide 快速指南
1. Compile and run 编译和运行
2. North Config MQTT config 北向配置 MQTT配置
3. Using Modbus 使用Modbus
4. Using Tunnel Protocol(Transparent transmission) 使用隧道协议(透传)
5. Using Custom Protocol 使用定制协议
6. More protocols 更多协议
7. ServerDemon and MySql
8. ManageTools and MySql
ctGateway (Engish-Chinese 英文中文对照)
IOT gateway C++ OpenSSL GmSSL Linux Arm/Arm64
Open Source , Modular and Scalable
物联网网关 C++ OpenSSL GmSSL Arm/Arm64
开源 模块化 可扩展
ctGateway
introduction 介绍
The gateway program is implemented in C++,Use the UTF-8 character set.<br>
Support Modbus and transparent transmission, MQTT and MQTTS.<br>
Log files and data files are limited in size to ensure that there is no disk full failure.<br>
The data is saved instantly to ensure not lost data when power lost.<br>
The data sequence number and confirmation mechanism ensure that there is no data loss from the gateway to the platform.<br>
The storage capacity of the network is different depending on the amount of data, and the gateway supports data compression.<br>
This program has been tested in harsh production environments in large quantities,<br>
Performance, stability, reliability, and environmental adaptability have all been verified.<br>
网关程序以C++实现,使用utf-8字符集。<br>
支持Modbus和透传,支持MQTT和MQTTS。<br>
日志文件和数据文件大小受限,确保不出现磁盘满故障。<br>
数据即时存盘,确保断电不丢失。<br>
数据序号和确认机制保证网关到平台不存在数据丢失。<br>
断网存储能力取决于数据量,网关支持数据压缩。<br>
这个程序已经经过了大批量恶劣生产环境的考验。<br>
性能、稳定性、可靠性、环境适应性均经过了验证。<br>
Source 源码
subdirectory ctGateway<br>
Gateway program, C++, Linux.<br>
The sln file can be opened with Visual Studio 2022, but only used to edit file.<br>
How to compile the project see [readme.txt](ctGateway/readme.txt) in subdirectory ctGateway.<br>
子目录 ctGateway<br>
网关程序, C++, Linux.<br>
sln 文件可以用 Visual Studio 2022 打开, 但只用来编辑。<br>
如何编译项目请看子目录ctGateway下的 [readme.txt](ctGateway/readme.txt)。<br>
Copyright 许可证
Please see the file [LICENSE](./LICENSE) for copyright.<br>
Copyright notices for third-party software used in this software:<br>
See [third-party-LICENSE.txt](./third-party-LICENSE.txt)<br>
请看文件 [LICENSE](./LICENSE) 了解许可证信息。<br>
本软件用到的第三方软件的许可证信息:<br>
请看 [third-party-LICENSE.txt](./third-party-LICENSE.txt)<br>
ManageTools
introduction 介绍
Supporting management tools.(a mqtt client)<br>
C# .Net 8.0<br>
The basic functionality depends MQTT only.<br>
The program is for testing purposes only.<br>
配套的管理工具。(一个 mqtt 客户端工具)<br>
C# .Net 8.0<br>
基本功能仅仅依赖 MQTT 。<br>
这个程序仅用作测试目的<br>
ServerDemon
introduction 介绍
Simple server to insert all mqtt message into MySql database.<br>
C# .Net 8.0<br>
It also supported InfluxDB(in source code).
The program is just a demo.<br>
用来把mqtt消息插入MySql数据库的服务程序。<br>
C# .Net 8.0<br>
也支持InfluxDB(在源码里)。
这个程序只是个演示<br>
Document 文档
Please see the file [index.html](https://codetoys.github.io/ctGateway/index.html) , English and Chinese.<br>
请看文件 [index.html](https://codetoys.github.io/ctGateway/index.html) ,英文和中文。<br>
Quick Guide 快速指南
1. Compile and run 编译和运行
Linux or Linux virtual machine, MQTT broker(server), [Developer Guide](https://codetoys.github.io/ctGateway/doc/en/ctGateway_DeveloperGuide.htm)<br>
Linux 或 Linux 虚拟机, MQTT 代理(服务器), [开发指南](https://codetoys.github.io/ctGateway/doc/zh/ctGateway_DeveloperGuide.htm)<br>
2. North Config MQTT config 北向配置 MQTT配置
defaultNorthConfig.json:
```json
{
"func": "connt",
"data": {
"comment": "本机测试",
"type": "MQTTS",
"platform": "localtest",
"hostname": "mqtt.test.com",
"port": "8883",
"userid": "user",
"upwd": "user1234",
"ntp": "time.windows.com"
}
}
```
3. Using Modbus 使用Modbus
```json
{
"func": "conf",
"data": [
{
"protocolCode": "MODBUS_TCP",
"protocolName": "ModbusTcp协议",
"resolvePropertyMap": {
"port": "10503",
"rate": "30000",
"ip": "127.0.0.1"
},
"confTabs": [
{
"deviceCode": "device503",
"stationCode": "1",
"resolveParamConfigVOList": [
{
"paramCode": "code1",
"paramName": "工单规格",
"dataType": "ushort",
"paramAddr": "0001",
"functionCode": "03",
"transferRuleStr": "",
"dataLength": 1,
"processType": "3",
"reportStrategy": 1
},
{
"paramCode": "code2",
"paramName": "负值",
"dataType": "short",
"paramAddr": "0002",
"functionCode": "03",
"transferRuleStr": "",
"dataLength": 1,
"processType": "3",
"reportStrategy": 1
},
{
"paramCode": "codef1",
"paramName": "浮点",
"dataType": "float",
"paramAddr": "0004",
"functionCode": "03",
"transferRuleStr": "ABCD",
"dataLength": 1,
"processType": "3",
"reportStrategy": 1
}
]
}
]
}
]
}
```
4. Using Tunnel Protocol(Transparent transmission) 使用隧道协议(透传)
```json
{
"func": "conf",
"data": [
{
"protocolCode": "TCP_TUNNEL",
"protocolName": "TCP隧道协议",
"resolvePropertyMap": {
"ip": "192.168.136.1",
"port": "503",
"rate": "30000"
},
"confTabs": [
{
"deviceCode": "deviceTcpTunnel",
"encodeType": "hex",
"resolveParamConfigVOList": [
{
"paramCode": "read",
"paramName": "从0开始读取10个保持寄存器",
"paramCommand": "00 06 00 00 00 06 01 03 00 00 00 0A"
}
]
}
]
},
{
"protocolCode": "SERIAL_PORT_TUNNEL",
"protocolName": "串口隧道协议",
"resolvePropertyMap": {
"rate": "30000",
"serial_port": "/dev/ttyS0",
"baudRate": 115200,
"parity": "N",
"dataBit": 8,
"stopBit": 1,
"timeout": 1
},
"confTabs": [
{
"deviceCode": "deviceSerialPortTunnel",
"encodeType": "hex",
"resolveParamConfigVOList": [
{
"paramCode": "read",
"paramName": "从0开始读取10个保持寄存器",
"paramCommand": "01 03 00 00 00 0A C5 CD "
}
]
}
]
}
]
}
```
5. Using Custom Protocol 使用定制协议
gateway/gwprotocol/ProtocolDemo.h .cpp
QJ57B_1A is an instrument for measuring the resistance of a cable.<br>
QJ57B_1A 是一款测量电缆电阻的仪器.<br>
```json
{
"func": "conf",
"data": [
{
"protocolCode": "TCP_DEMO",
"protocolName": "TCP demo协议",
"resolvePropertyMap": {
"ip": "192.168.213.1",
"port": "2200",
"rate": "30000"
},
"confTabs": [
{
"deviceCode": "QJ57B_1A",
"encodeType": "hex",
"deviceModel": "QJ57B_1A"
}
]
}
]
}
```
6. More protocols 更多协议
Some of the adapted protocols will be available in an extended manner<br>
部分适配过的协议将以扩展的方式提供<br>
DLT645,Siemens S7,OPC-UA<br>
7. ServerDemon and MySql
Connection info just in source code.<br>
连接信息就在源码里。
8. ManageTools and MySql
Connection info is ("127.0.0.1", "user1", "user1", "gateway").<br>
Of course, I could change to parameterization.<br>
连接信息是("127.0.0.1", "user1", "user1", "gateway")。<br>
当然,我可以改成参数化的。<br>
相关文章:
基于C++的IOT网关和平台1:github项目ctGateway
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
LeetCode 2962.统计最大元素出现至少 K 次的子数组:滑动窗口
【LetMeFly】2962.统计最大元素出现至少 K 次的子数组:滑动窗口 力扣题目链接:https://leetcode.cn/problems/count-subarrays-where-max-element-appears-at-least-k-times/ 给你一个整数数组 nums 和一个 正整数 k 。 请你统计有多少满足 「 nums 中…...
Nginx反向代理的负载均衡配置
Nginx 负载均衡详解 在互联网应用中,随着网站访问量的不断攀升,服务器的服务模式也需要进行相应升级。诸如分离数据库服务器、将图片作为单独服务等操作,这些都属于简单的数据负载均衡,其目的是将压力分散到不同机器上。而来自 We…...
案例速成GO+Socket,个人笔记
更多个人笔记:(仅供参考,非盈利) gitee: https://gitee.com/harryhack/it_note github: https://github.com/ZHLOVEYY/IT_note 文章目录 简单知识了解实现一个TCP 服务器与客户端(聊天室&#x…...
篮球足球体育球员综合资讯网站模板
采用帝国CMS7.5新版核心。栏目和内容模板超多变换。后台操作简单,安全可靠,性能稳定。整站浏览效果高端大气,可以帮助你快速建立一个适合自己的软件下载类型的站点! 演示地址:https://www.tmuban.com/store/620.html …...
HTTP(超文本传输协议)全面总结
HTTP(HyperText Transfer Protocol,超文本传输协议)是万维网(World Wide Web)应用中的基础协议,用于客户端与服务器之间的数据传输。随着互联网技术的发展,HTTP协议也经历了多个版本的更新&…...
OpenCV 图形API(72)图像与通道拼接函数-----根据指定的方式翻转图像(GMat)函数 flip()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 翻转一个2D矩阵,围绕垂直轴、水平轴或同时围绕两个轴。 该函数以三种不同的方式之一翻转矩阵(行和列的索引是从0开始的&a…...
【报错问题】 macOS 的安全策略(Gatekeeper)阻止了未签名的原生模块(bcrypt_lib.node)加载
这个错误是由于 macOS 的安全策略(Gatekeeper)阻止了未签名的原生模块(bcrypt_lib.node)加载 导致的。以下是具体解决方案: 1. 临时允许加载未签名模块(推荐先尝试) 在终端运行以下命令&#x…...
keep-alive具体使用方法
什么是 Keep-Alive <keep-alive> 是 Vue.js 提供的一个内置组件,用于缓存动态组件实例,从而避免重复渲染已加载过的组件。它的主要功能是在切换组件时保留状态和 DOM 结构,提升性能。 工作原理 <keep-alive> 的核心在于维护一个…...
【C++11】包装器:function与bind
前言: 上文我们学了C11中一个新的表达式:Lambda表达式。Lambda表达式可以在函数内部定义,其本质是仿函数【C11】Lambda表达式-CSDN博客 本文我们来学习C11的下一个新语法:包装器 function function的定义为: templat…...
Educational Codeforces Round 178 div2(题解ABCDE)
A. Three Decks #1.由于最后三个数会相等,提前算出来和,%3判断,再判前两个数是否大于 #include<iostream> #include<vector> #include<stdio.h> #include<map> #include<string> #include<algorithm> #…...
mermaid 序列图 解析
sequenceDiagramparticipant UI as 用户界面participant Executor as 任务执行器participant StateMgr as 状态管理器participant Repo as 数据仓库UI->>Executor: 执行任务3350c74e...Executor->>StateMgr: 更新状态为"measuring"StateMgr->>Repo…...
DTO,VO,PO,Entity
1. DTO (Data Transfer Object) 定义 DTO 是数据传输对象,用于在不同系统或层之间传输数据。 目的 简化数据传输,降低耦合,通常只包含需要传输的字段,避免暴露内部实现细节。 使用场景 Controller 和 Service 或 远程调用 之…...
Proser:重新介绍
回想Proser的定位:一款直观的【协议发送】模拟软件。 现在间断更新下来,基本成了一款通信调试助手类软件 Proser 是一款支持串口与网络的通信调试助手,其独有的协议编辑器、数据检视、标尺等功能,让指令模拟与数据分析更加易用。…...
微信小程序 首页之轮播图和搜索框 代码分享
注意!!! 只有样式,还没功能开发!!! index.wxml <!-- 搜索框 --> <view class"search"><input placeholder"请输入搜索的内容"></input><imag…...
3D可视化编辑器模版
体验地址:http://mute.turntip.cn 整个搭建平台核心模块包含如下几个部分: 3D场景渲染 组件拖拽系统 元素编辑功能 状态管理 历史记录与撤销/重做 技术栈 前端框架与库 React 18 用于构建用户界面的JavaScript库 Next.js 14 React框架,提供服…...
foc控制 - clarke变换和park变换
1. foc控制框图 下图是foc控制框图,本文主要是讲解foc控制中的larke变换和park变换clarke变换将 静止的 a b c abc abc坐标系 变换到 静止的 α β αβ αβ坐标系,本质上还是以 定子 为基准的坐标系park变换 则将 α β αβ αβ坐标系 变换到 随 转…...
DeepSeek: 探索未来的深度学习搜索引擎
深度学习驱动的下一代搜索引擎:DeepSeek 在信息爆炸的时代,搜索引擎作为连接用户与互联网世界的桥梁,其重要性不言而喻。然而,随着用户需求的日益多样化和复杂化,传统搜索引擎在理解和满足用户需求方面逐渐显现出局限…...
如何在本地部署小智服务器:从源码到全模块运行的详细步骤
小智聊天机器人本地后台服务器源码全模块部署 作者:林甲酸 -不是小女子也不是女汉子 是大女子 更新日期:2025年4月29日 🎯 前言:为什么要写这篇教程? 上周按照虾哥小智服务器的教程去部署本地后台,我用的是…...
基于论文的大模型应用:基于SmartETL的arXiv论文数据接入与预处理(四)
上一篇介绍了基于SmartETL框架实现arxiv采集处理的基本流程,通过少量的组件定制开发,配合yaml流程配置,实现了复杂的arxiv采集处理。 由于其业务流程复杂,在实际应用中还存在一些不足需要优化。 5. 基于Kafka的任务解耦设计 5.…...
GrapesJS 终极定制组件设计方案:扁平化对象属性编辑、多区域拖拽、多层嵌套与组件扩展实战
掌握 GrapesJS 复杂组件实用技巧,打造高复用、高交互的前端低代码组件体系 随着低代码可视化编辑需求日益提升,GrapesJS 作为优秀开源画布编辑器,灵活的组件机制是其核心优势。但在实际项目中,你可能会遇到: 如何编辑…...
Spring MVC 如何映射 HTTP 请求到 Controller 方法?
我们来详细分析一下如何在 Spring MVC 中将 HTTP 请求映射到 Controller 的处理方法(Handler Methods)上,以及 RequestMapping 注解的使用方法。 请求映射的核心:RequestMapping 注解 RequestMapping 是 Spring MVC 中最核心、最…...
vue.js中的一些事件修饰符【前端】
不要一直责怪过去的自己,他独自站在雾里也很迷茫。 目录 .stop:.prevent:.self:.once:.capture:.native:何时使用 .native? .stop: 作用:调用 event.stopPro…...
WEBSTORM前端 —— 第2章:CSS —— 第4节:盒子模型
目录 1.画盒子 2.Pxcook软件 3.盒子模型——组成 4.盒子模型 ——边框线 5.盒子模型——内外边距 6.盒子模型——尺寸计算 7.清除默认样式 8.盒子模型——元素溢出 9.外边距问题 ①合并现象 ②塌陷问题 10.行内元素——内外边距问题 11.盒子模型——圆角 12.盒子…...
Cursor —— AI编辑器 使用详解
Cursor - The AI Code Editor 一、Cursor 是什么? Cursor 是一款优秀的AI代码编辑器,它内置了 Deepseek-R1、GPT-4、Claude等 AI 模型。 简单说,就是:Cursor VS Code 编辑器 AI 大模型 Cursor 功能特性(代码补全、…...
故障诊断——复现github代码ClassBD-CNN(BDCNN)
刚好看到这篇文献有github代码,而且也比较新,感觉可以当作自己论文中的对比方法。 https://www.sciencedirect.com/science/article/pii/S0888327024006484 (论文地址) (看到4090,有点想劝退自己......&…...
局部和整体的关系
Prompt:为什么要研究局部和整体的关系呢?是因为很多情况下,局部就能表达出整体? 这是一个非常本质的问题,其实你已经接近数学和物理中“几何本质”的核心了。我们研究局部和整体的关系,是因为:…...
1.5 点云数据获取方式——双目立体相机
图1-5-1 双目立体相机 双目相机通过模拟人眼立体视觉,利用两个摄像头的视差信息计算物体深度,进而生成 3D 点云,具有成本低、体积小、信息丰富等优势,成为中...
Flume启动报错
报错1: 报错2: File Channel transaction capacity cannot be greater than the capacity of the channel capacit... 解决方案:删除配置...
leetcode 21. 合并两个有序链表(c++解法+相关知识点复习)
目录 题目 所需知识点复习 1.链表 1.1单链表 1.2哑结点(Dummy Node) 解答过程 1.循环双指针解法 2.递归解法 2025.4.29想到其他知识点会后续再继续补充。 题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表…...
链表反转_leedcodeP206
P206反转链表 原题 反转思路 将链表反转的过程分为两个区域: 🟦 未反转区(待处理) 原链表中还没有处理(还没有反转指针方向)的部分,从 current 开始一直到链表尾部。 🟩 已反转…...
Laravel+API 接口
LaravelAPI 接口 网课连接:BIlibili. 中文文档. 1.RestFul Api编码风格 一、API设计 修改hosts,C:\Windows\System32\drivers\etc\hosts,增加127.0.0.1 api.lv8.com # Laravel 框架 用这个域名来测试(推荐规范) 在…...
在 Ubuntu 上离线安装 ClickHouse
在 Ubuntu 上离线安装 ClickHouse 的步骤如下: 一.安装验证 # 检查服务状态 sudo systemctl status clickhouse-server #删除默认文件 sudo rm /etc/clickhouse-server/users.d/default-password.xml # 使用客户端连接 clickhouse-client --password...
【AI微信小程序开发】掷骰子小程序项目代码:自设骰子数量和动画(含完整前端代码)
系列文章目录 【AI微信小程序开发】AI减脂菜谱小程序项目代码:根据用户身高/体重等信息定制菜谱(含完整前端+后端代码)【AI微信小程序开发】AI菜谱推荐小程序项目代码:根据剩余食材智能生成菜谱(含完整前端+后端代码)【AI微信小程序开发】图片工具小程序项目代码:图片压…...
Linux-02-VIM和VI编辑器
第一节:什么是VI和VIM编辑器: VI是Unix和类Unix操作系统中出现的通用的文本编辑器。VIM是从VI发展出来的一个性能更强大的文本编辑器可以主动的以字体颜色辨别语法的正确性,方便程序设计,VIM和VI编辑器完全兼容。使用:vi xxx文件 或者vim xxx文件,简单来说就是用来编辑文件的一…...
同为科技 智能PDU产品选型介绍-EN10/G801FR
随着各行业对数据中心机房重视程度的不断提高, 加强机柜微环境及电源计量、监控和管理则十分必要。在新型微模块化数据中心供配电系统建设中,UPS电源、智能PDU、监控管理系统、资产管理等产品早已成为IDC机房不可或缺的部分。其中,智能PDU通过…...
NS-SWIFT微调Qwen3
目录 一、NS-SWIFT简介 二、Qwen3简介 三、微调Qwen3 1、安装NS-SWIFT环境 2、准备训练数据 3、Lora微调 4、GROP训练 5、Megatron并行训练 一、NS-SWIFT简介 SWIFT(Scalable lightWeight Infrastructure for Fine-Tuning)是魔搭ModelScope开源社…...
借 AI 热潮,深挖 [风车 AI ] 为跨境电商打造的图片翻译黑科技
家人们,这几年 AI 技术简直像坐了火箭一样飞速发展,生活里、工作中到处都能看到它的身影。对咱们跨境行业来说,语言翻译一直是个让人头疼的大问题。今天咱就借着这股 AI 热潮,好好深挖一下风车 AI 为跨境打造的那些超厉害的翻译黑…...
uni-app 中封装全局音频播放器
在开发移动应用时,音频播放功能是一个常见的需求。无论是背景音乐、音效还是语音消息,音频播放都需要一个稳定且易于管理的解决方案。在 uni-app 中,虽然原生提供了 uni.createInnerAudioContext 方法用于音频播放,但直接使用它可…...
Uniapp:设置TabBar
目录 一、setTabBarBadge:增加文本二、removeTabBarBadge:移除文本三、showTabBarRedDot:显示红点四、hideTabBarRedDot:隐藏红点一、setTabBarBadge:增加文本 为 tabBar 某一项的右上角添加文本。 uni.setTabBarBadge({index: 0,text: 1 })参数类型必填说明indexNumber…...
如何查看k8s获取系统是否清理过docker镜像
k8s集群某个节点down掉后,pod就会漂移到其他节点,但是在该节点却又执行了拉取镜像操作,明明该节点之前部署过该容器的,不知为什么又拉取了一次镜像(镜像拉取配置的优先使用本地),所以怀疑是触发…...
【Linux网络】深入解析I/O多路转接 - Select
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
如何解决 Xcode 签名证书和 Provisioning Profile 过期问题
在 iOS 应用开发过程中,签名证书和 Provisioning Profile 是确保应用安全性和合法性的关键组件。然而,当这些证书或配置文件过期时,开发者可能会遇到编译或归档失败的问题。本文将详细介绍如何解决 Xcode 中“iOS Distribution”证书未找到和…...
[C++]C++20协程的原理
文章目录 协程的状态机Promise 对象挂起和恢复机制协程的执行流程示例代码分析 C 协程是 C20 引入的一项重要特性,它提供了一种更简洁、高效的异步编程方式。下面从协程的状态机、Promise 对象、挂起和恢复机制等方面介绍其底层实现原理。 协程的状态机 从底层角度…...
Oracle OCP证书有效期是三年?
这一段时间,网上经常传出消息Oracle OCM认证证书有效期为三年,其实这个假消息,通过博睿谷与Oracle官方人员确认,OCP认证证书有效期是永久的。 OCP证书本身永久有效,但老版本的OCP证书代表着更多的项目经验,…...
2025.4.29_STM32_看门狗WDG
1.WDG简介 大概意思就是给看门狗设置一个时间范围,在这个范围内必须喂狗(重置定时器),这个操作必须一直执行,比如看门狗的的时间范围是1-2秒,我们就必须间隔1-2秒就喂一次狗,否则它自减到0时就会重置电路,相…...
基于Java,SpringBoot,HTML水文水质监测预警系统设计
摘要 随着水资源管理需求的日益增长,构建高效、精准的水文监测预警系统至关重要。本文设计并实现了一套基于 Java、SpringBoot 和 HTML 技术的水文监测预警系统。系统采用 Java 语言与 SpringBoot 框架搭建后端服务,利用其强大的业务逻辑处理能力与高效…...
Qt开发:JSON字符串的序列化和反序列化
文章目录 一、构建和解析单个JSON对象二、JSON对象中嵌套多个JSON对象三、JSON对象中组建多个数组对象四、构建和解析数组对象 一、构建和解析单个JSON对象 1.1 JSON对象的构建 使用key-value形式生成JSON对象 #include <QJsonObject> #include <QJsonDocument> …...
第10次:电商项目配置开发环境
本次内容主要为给整个电商项目配置好开发环境,包括如下环节: 创建电商项目xiaoyu_mall,Django版本默认是最新的大版本5.2配置应用目录,因项目会涉及到多个应用,为保证项目结构清晰,将在项目下建立apps目录…...
【强化学习系列】Q-learning——从贝尔曼最优方程谈起
引言 上一篇贝尔曼最优方程中我们已经推导出动作价值形式的贝尔曼最优方程: q π ∗ ( s , a ) ∑ s ′ ∈ S ∑ r ∈ R p ( s ′ , r ∣ s , a ) [ r γ max a ′ q π ∗ ( s ′ , a ′ ) ] \begin{equation}q_{\pi^*}(s,a)\sum_{s\in S}\sum_{r\in R}p(s,…...