基于 Modbus 的工业数据采集、控制(part 2)
基本处理流程
服务器
parse_and_process(char * input)//input :post请求发送的正文
{...// 请求 modbus 数据else if(strstr(input, "modbus_get")){return handle_get(sock, input);}// 控制 modbus 设备else if(strstr(input, "modbus_set")){return handle_set(sock, input);}
....
}static int handle_get(int sock, const char *input)
{// 1.创建 key// 2.创建或打开共享内存// 3.映射// 4.读取共享内存中的数据// 5.发送
}static int handle_set(int sock, const char *input)
{// 1.创建key// 2.创建或打开消息队列// 3.将 postman 中下发指令添加到消息队列// 4.发送
}
采集控制程序
// 采集传感器数据线程
void *info(void *arg)
{// 创建或打开共享内存、映射while(1){// 读寄存器的数据// 写入共享内存sleep(1);}
}// 控制设备线程
void *control(void *arg)
{// 创建或打开消息队列while(1){// 读消息队列// 控制设备}
}
VsCode 开发环境
安装库“open in browser”
库安装完成后,编写 html 文件。
在编写文本位置右击 ——> open in other browser ——> 选择合适的浏览器,
即可在网页显示 html 标签内容。

Html 简介
HTML(Hyper Text Markup Language),中文译为“超文本标记语言”。是用来描述网页的一种语言。所谓超文本,是因为它可以加入图片、声音、动画、多媒体等内容,不仅如此,它还可以从一个文件跳转到另一个文件,与世界各地主机的文件连接。
HTML 不是一种编程语言,而是一种标记语言(markup language)。
Web 浏览器的作用是读取 HTML 文档,并以网页的形式显示出它们。浏览器不会显示 HTML 标签,而是使用标签来解释页面的内容。
Html标签
标签格式
1、有尖括号包围的关键字,如:<html>;
2、通常成对存在,如:<body></body>;
3、上面的标签前面是开始标签,后面是结束标签。
标签分类
1、单标签:也称空标签 <标签名 /> 如:
2、双标签:成对存在 <标签名> 内容 </标签名>
常用标签
h1-h6 标题标签
格式:<hn> 标题文本 </hn>
举例:
<h1>这是标题标签</h1>
<h2>这是标题标签</h2>
<h3>这是标题标签</h3>
<h4>这是标题标签</h4>
<h5>这是标题标签</h5>
<h6>这是标题标签</h6>
p 段落标签
格式:<p> 文本内容 </p>
一个段落中会根据浏览器窗口的大小自动换行。
br 换行标签
格式:<br />
div 标签
一个块级元素,可以把文档分割为独立的、不同的部分,可以在 div 中嵌套标签。
举例:
<div class=“news”>
<h2>News headline 1</h2>
<p>some text. some text. some text…</p>
</div>
注:可以给 div 设置 class 或 id,通过选择器设置属性,则内部成员具有相同属性。
input 表单标签
格式:<input type=”” name=”” value=”” id=””…>

当 type 为 text,表示文本输入框,用法如下:
<input type=“text” value=“文本框默认值”>
当 type 为 radio,表示单选框,用法如下:
<input type=“radio” name=“控件名称” value=“提交的数值” οnclick=“处理函数” checked=“checked”>
解释:name:控件名称,同一组单选框设置相同名称
value:必须要有,是当点击时会提交的数据
onclick:点击时会执行双引号中的处理函数
checked:默认选中,同一组中只设置一个即可
代码示例
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><script>function fun(obj){if(obj == 'man'){console.log("I am man!");}else{console.log("I am woman!");}}function get_info(){// 获取标签为usrname的标签,赋值给vvar v = document.getElementsByName("usrname");// v[0].value="hello";var xhr = new XMLHttpRequest();//创建XMLHttpRequest对象var url="";xhr.open("post",url,true);xhr.onreadystatechange = function(){if(xhr.readyState == 4 && xhr.status == 200)//请求完成且成功{v[0].value = xhr.responseText;//响应正文}};xhr.send("modbus_get");//发送正文}</script></head><body>hello world!<!-- br表示换行 --><br>你好<h1>一级标题</h1><div style="color: hotpink;background: ivory"><h2>二级标题</h2><!-- p是段落标签 --><p>HTML(英文Hyper Text Markup Language的缩写)中文译为“超文本标记语言”。是用来描述网页的一种语言。所谓超文本,因为它可以加入图片、声音、动画、多媒体等内容,不仅如此,它还可以从一个文件跳转到另一个文件,与世界各地主机的文件连接。HTML 不是一种编程语言,而是一种标记语言 (markup language)Web 浏览器的作用是读取 HTML 文档,并以网页的形式显示出它们。浏览器不会显示 HTML 标签,而是使用标签来解释页面的内容</p></div>123456<br>学习新思想,争做新青年!<br><!-- input表单标签,type类型为text,表示文本输入,value为默认值 -->用户名:<input type="text" name="usrname" value="admin">刷新<input type="button" name="flash" onclick="get_info()"><br><!-- type类型为radio表示单选框,表示同一类型的单选框name必须相同 ,checked表示默认选中-->男:<input type="radio" name="sex" id="man" checked="checked" onclick="fun(id)">女:<input type="radio" name="sex" id="woman" onclick="fun(id)"></body></html>
补充:当请求被发送到服务器时,我们需要执行一些基于响应的任务。
每当 readyState 改变时,就会触发 onreadystatechange 事件。
readyState 属性存有 XMLHttpRequest 的状态信息。
下面是 XMLHttpRequest 对象的三个重要的属性:

如果想要用多个文本框显示数据:
var response = xhr.responseText; //获取响应数据
var v = response.split(','); //用,拆分响应字符串// v[0]:表示第一个数据// v[1]: 表示第二个数据....
相关文章:
基于 Modbus 的工业数据采集、控制(part 2)
基本处理流程 服务器 parse_and_process(char * input)//input :post请求发送的正文 {...// 请求 modbus 数据else if(strstr(input, "modbus_get")){return handle_get(sock, input);}// 控制 modbus 设备else if(strstr(input, "modbus_set")){return …...
vue前端项目如何配置后端项目的请求地址
在 Vue 前端项目中配置后端项目的访问地址可以通过修改项目的配置文件来实现。Vue 常用的配置文件是 vue.config.js,你可以按照以下步骤进行配置: 在 Vue 项目的根目录下,创建或编辑 vue.config.js 文件。 在 vue.config.js 中,可…...
Lora学习资料汇总
目录 LoRa联盟 Semtech lora网关供应商: LoRaMAC API文档 论坛 开发板 主流技术对比分析 LoRa网络距离模拟测试方法 LoRa应用 LoRa联盟 LoRa联盟:LoRaWAN规范的制定组织 https://www.lora-alliance.org/ LoRa技术白皮书:https://www.lora-alli…...
Oracle的控制文件多路复用,控制文件备份,控制文件手工恢复
一.配置控制文件多路复用 1.查询Oracle的控制文件所在位置 SQL> select name from v$controlfile;NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/fast_recovery_a…...
在线视频课程教育系统源码/网课网校/知识付费/在线教育系统/在线课程培训系统源码
源码简介: 在线视频课程教育系统源码,作为网课/网校/知识付费/在线教育系统,它有文章付费阅读在线点播自动发货付费阅读VIP会员系统等功能。它是实用的在线课程培训系统源码。 发货100-在线视频课程教育系统,它是一款功能实用的…...
程序员护城河:保障系统安全与网络稳定的不可或缺力量
引言: 在当今数字化时代,计算机和互联网的广泛应用使得程序员的角色变得越来越重要。作为保障系统安全与网络稳定的关键力量,程序员需要具备一系列的基本能力,同时还需掌握一些专业技术和策略,以确保系统运行的安全性…...
html属性值可以不用引号吗,实例验证
html属性值可以不用引号 HTML元素的属性值可以不适用引号来包裹,浏览器一样可以将其进行渲染。不过,如果这样写HTML的代码的话,属性与属性值之间需要用空格来进行隔开,避免后面的属性变成前面属性的属性值。 提示:虽…...
angular 实现模块共享
angular 实现共享模块 新建共享模块: ng g m material material.module.ts import {NgModule } from @angular/core; import {OverlayModule } from @angular/cdk/overlay; import {CdkTreeModule } f...
带记忆的超级GPT智能体,能做饭、煮咖啡、整理家务!
随着AI技术的快速迭代,Alexa、Siri、小度、天猫精灵等语音助手得到了广泛应用。但在自然语言理解和完成复杂任务方面仍然有限。 相比文本的标准格式,语音充满复杂性和多样性(例如,地方话),传统方法很难适应不同用户的…...
易点易动设备管理系统提升设备能耗管理和设备状态监控效率
如今,能源效率和设备状态监控对于企业来说变得越发重要。传统的设备管理方式往往存在能耗浪费和难以实时监控设备状态的问题。为了解决这些问题,易点易动设备管理系统应运而生。本文将介绍易点易动设备管理系统的功能和优势,以及如何通过它提…...
【idea】解决idea 执行maven build总下载 Downloading maven-metadata.xml文件
可以看到如下日志中打印了执行的命令行,其中包含 --update-snapshots,是强制更新的意思。 日志内容如下: D:\env\jdk1.8.0_261\bin\java.exe --update-snapshots -s D:\env\apache-maven-3.8.6\conf\settings.xml -Dmaven.repo.localD:\env\…...
HttpClient发送MultipartFile多文件及多参数请求
1、环境准备: <dependency><groupId>commons-httpclient</groupId><artifactId>commons-httpclient</artifactId><version>3.1</version></dependency><dependency><groupId>org.apache.httpcomponent…...
TMUX设置鼠标滚轮滑动来浏览之前的前面内容
在Ubuntu上使用Tmux有时使用鼠标滚轮时,和平时使用终端的习惯不怎么一致,因此可以设置启用鼠标滚轮。 通过鼠标滚轮滑动来浏览之前的前面内容 具体方式: 1 按完前缀ctrlB后 2 再按冒号:(记得shift) 3 进入命令行模式(下方绿色栏变…...
「go查漏补缺」命名规则以及 GROM 结构体的应用
概述: 在学习GORM过程中,总是在调用结构体和文件导入这里出错,所以整理了以下文档用于梳理变量/结构体命名规则和import导入的知识点 一、变量/结构体命名规则 变量/结构体都遵守同样的命名规则:可见性由首字母大小写决定 大写…...
Django 集成 Celery 实现高效的异步任务处理
概要 在复杂的 Web 应用中,处理长时间运行的任务或定期任务是一项挑战。Django 作为一个强大的 Python Web 框架,可以通过集成 Celery 这一异步任务队列来优化这些任务的处理。Celery 不仅能提高应用性能,还能改善用户体验。本文将深入探讨如…...
Java之异常(上):基本异常体系
一、背景引入: Java中的异常是指:Java程序在运行时可能出现的错误或非正常情况。例如:在程序中试图打开一个根本不存在的文件,在程序中除0等。异常是否出现:通常取决于程序的输入、程序中对象的当前状态以及程序所处的…...
你的关联申请已发起,请等待企业微信的管理员确认你的申请
微信支付对接时,需要申请AppID,具体在下面的位置: 关联AppID,发起申请时,会提示这么一句话: 此时需要登录企业微信网页版,使用注册人的企业微信扫码登录进去,然后按照下面的步骤操作即可。 点击…...
.nvmrc 文件使用详解
文章目录 1. 前言2. .nvmrc 是什么3. 创建 .nvmrc 文件4. 使用 .nvmrc 文件5. 终端自动切换版本 1. 前言 当开发多个项目时,每个项目运行环境要求的 node 版本不一样,那么我们就需要给每个项目指定 node 版本,也就是通过终端执行 nvm install…...
深度学习之基于YoloV5抽烟检测系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于YOLOv5(You Only Look Once)的抽烟检测系统可以用于实时检测图像或视频中是否存在抽烟行…...
解释器模式 (Interpreter Pattern)
定义 解释器模式(Interpreter Pattern)是一种行为型设计模式,用于定义一种语言的语法表示,并提供一个解释器来处理这种语法。这种模式用于实现语言解释器,通常用于专业领域或复杂文本处理中。在解释器模式中ÿ…...
告别租客信息碎片化,让关系运营真正可控
在楼宇资产运营过程中,客户管理往往是最容易被忽视、却影响最深远的环节。租客信息分散在Excel、合同、微信聊天记录中,联系人与合同之间缺乏关联,跟进记录无处沉淀,工商信息变更无人知晓——这些问题反复出现,根源在于…...
RimSort终极指南:如何用开源模组管理器彻底解决《环世界》模组冲突问题
RimSort终极指南:如何用开源模组管理器彻底解决《环世界》模组冲突问题 【免费下载链接】RimSort RimSort is an open source mod manager for the video game RimWorld. There is support for Linux, Mac, and Windows, built from the ground up to be a reliable…...
专业做庭院灯的公司
在打造温馨舒适的庭院环境中,庭院灯扮演着至关重要的角色。它不仅提供照明功能,还能为庭院增添独特的氛围和美感。市场上庭院灯公司众多,今天就为大家介绍一家专业的庭院灯公司——广东景楠照明有限公司。一、景楠照明的专业实力1. 丰富的产品…...
Python基础:列表的定义、增删改查核心操作
Python基础:列表的定义、增删改查核心操作📚 本章学习目标:深入理解列表的定义、增删改查核心操作的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。本文属于《Python从入门到精通教程》Python入门…...
深度解析KKManager:3大架构设计与5个实战应用方案
深度解析KKManager:3大架构设计与5个实战应用方案 【免费下载链接】KKManager Mod, plugin and card manager for games by Illusion that use BepInEx 项目地址: https://gitcode.com/gh_mirrors/kk/KKManager KKManager作为一款专为Illusion系列游戏设计的…...
为什么CodeCombat能让你在游戏中轻松成为编程高手?
为什么CodeCombat能让你在游戏中轻松成为编程高手? 【免费下载链接】codecombat Game for learning how to code. 项目地址: https://gitcode.com/gh_mirrors/co/codecombat 在数字时代,编程已成为一项基础技能,但传统的学习方式往往让…...
CubeMX配置FreeRTOS的隐藏细节:为什么HAL库最好别用SysTick做时钟源?
CubeMX配置FreeRTOS的隐藏细节:为什么HAL库最好别用SysTick做时钟源? 在STM32开发中,CubeMX和FreeRTOS的组合已经成为许多嵌入式工程师的首选工具链。然而,当你在CubeMX中启用FreeRTOS支持时,可能会注意到一个看似不起…...
BarrageGrab:基于WebSocket直连架构的全平台直播弹幕实时采集技术栈
BarrageGrab:基于WebSocket直连架构的全平台直播弹幕实时采集技术栈 【免费下载链接】BarrageGrab 抖音快手bilibili直播弹幕wss直连,非系统代理方式,无需多开浏览器窗口 项目地址: https://gitcode.com/gh_mirrors/ba/BarrageGrab 在…...
揭秘Parse12306:如何用C自动化抓取全国高铁时刻表数据
揭秘Parse12306:如何用C#自动化抓取全国高铁时刻表数据 【免费下载链接】Parse12306 分析12306 获取全国列车数据 项目地址: https://gitcode.com/gh_mirrors/pa/Parse12306 你是否曾为获取权威的铁路数据而烦恼?无论是开发旅行规划应用、进行交通…...
终极指南:如何定制iseed扩展开发专属的种子生成器
终极指南:如何定制iseed扩展开发专属的种子生成器 【免费下载链接】iseed Laravel Inverse Seed Generator 项目地址: https://gitcode.com/gh_mirrors/is/iseed iseed是一款强大的Laravel反向种子生成器,能够帮助开发者轻松地从数据库表中生成种…...
