当前位置: 首页 > news >正文

基于 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&#xff0c;你可以按照以下步骤进行配置&#xff1a; 在 Vue 项目的根目录下&#xff0c;创建或编辑 vue.config.js 文件。 在 vue.config.js 中&#xff0c;可…...

Lora学习资料汇总

目录 LoRa联盟 Semtech lora网关供应商: LoRaMAC API文档 论坛 开发板 主流技术对比分析 LoRa网络距离模拟测试方法 LoRa应用 LoRa联盟 LoRa联盟&#xff1a;LoRaWAN规范的制定组织 https://www.lora-alliance.org/ LoRa技术白皮书&#xff1a;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…...

在线视频课程教育系统源码/网课网校/知识付费/在线教育系统/在线课程培训系统源码

源码简介&#xff1a; 在线视频课程教育系统源码&#xff0c;作为网课/网校/知识付费/在线教育系统&#xff0c;它有文章付费阅读在线点播自动发货付费阅读VIP会员系统等功能。它是实用的在线课程培训系统源码。 发货100-在线视频课程教育系统&#xff0c;它是一款功能实用的…...

程序员护城河:保障系统安全与网络稳定的不可或缺力量

引言&#xff1a; 在当今数字化时代&#xff0c;计算机和互联网的广泛应用使得程序员的角色变得越来越重要。作为保障系统安全与网络稳定的关键力量&#xff0c;程序员需要具备一系列的基本能力&#xff0c;同时还需掌握一些专业技术和策略&#xff0c;以确保系统运行的安全性…...

html属性值可以不用引号吗,实例验证

html属性值可以不用引号 HTML元素的属性值可以不适用引号来包裹&#xff0c;浏览器一样可以将其进行渲染。不过&#xff0c;如果这样写HTML的代码的话&#xff0c;属性与属性值之间需要用空格来进行隔开&#xff0c;避免后面的属性变成前面属性的属性值。 提示&#xff1a;虽…...

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技术的快速迭代&#xff0c;Alexa、Siri、小度、天猫精灵等语音助手得到了广泛应用。但在自然语言理解和完成复杂任务方面仍然有限。 相比文本的标准格式&#xff0c;语音充满复杂性和多样性&#xff08;例如&#xff0c;地方话&#xff09;,传统方法很难适应不同用户的…...

易点易动设备管理系统提升设备能耗管理和设备状态监控效率

如今&#xff0c;能源效率和设备状态监控对于企业来说变得越发重要。传统的设备管理方式往往存在能耗浪费和难以实时监控设备状态的问题。为了解决这些问题&#xff0c;易点易动设备管理系统应运而生。本文将介绍易点易动设备管理系统的功能和优势&#xff0c;以及如何通过它提…...

【idea】解决idea 执行maven build总下载 Downloading maven-metadata.xml文件

可以看到如下日志中打印了执行的命令行&#xff0c;其中包含 --update-snapshots&#xff0c;是强制更新的意思。 日志内容如下&#xff1a; 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、环境准备&#xff1a; <dependency><groupId>commons-httpclient</groupId><artifactId>commons-httpclient</artifactId><version>3.1</version></dependency><dependency><groupId>org.apache.httpcomponent…...

TMUX设置鼠标滚轮滑动来浏览之前的前面内容

在Ubuntu上使用Tmux有时使用鼠标滚轮时&#xff0c;和平时使用终端的习惯不怎么一致&#xff0c;因此可以设置启用鼠标滚轮。 通过鼠标滚轮滑动来浏览之前的前面内容 具体方式&#xff1a; 1 按完前缀ctrlB后 2 再按冒号&#xff1a;(记得shift) 3 进入命令行模式(下方绿色栏变…...

「go查漏补缺」命名规则以及 GROM 结构体的应用

概述&#xff1a; 在学习GORM过程中&#xff0c;总是在调用结构体和文件导入这里出错&#xff0c;所以整理了以下文档用于梳理变量/结构体命名规则和import导入的知识点 一、变量/结构体命名规则 变量/结构体都遵守同样的命名规则&#xff1a;可见性由首字母大小写决定 大写…...

Django 集成 Celery 实现高效的异步任务处理

概要 在复杂的 Web 应用中&#xff0c;处理长时间运行的任务或定期任务是一项挑战。Django 作为一个强大的 Python Web 框架&#xff0c;可以通过集成 Celery 这一异步任务队列来优化这些任务的处理。Celery 不仅能提高应用性能&#xff0c;还能改善用户体验。本文将深入探讨如…...

Java之异常(上):基本异常体系

一、背景引入&#xff1a; Java中的异常是指&#xff1a;Java程序在运行时可能出现的错误或非正常情况。例如&#xff1a;在程序中试图打开一个根本不存在的文件&#xff0c;在程序中除0等。异常是否出现&#xff1a;通常取决于程序的输入、程序中对象的当前状态以及程序所处的…...

你的关联申请已发起,请等待企业微信的管理员确认你的申请

微信支付对接时&#xff0c;需要申请AppID,具体在下面的位置&#xff1a; 关联AppID&#xff0c;发起申请时&#xff0c;会提示这么一句话&#xff1a; 此时需要登录企业微信网页版&#xff0c;使用注册人的企业微信扫码登录进去&#xff0c;然后按照下面的步骤操作即可。 点击…...

.nvmrc 文件使用详解

文章目录 1. 前言2. .nvmrc 是什么3. 创建 .nvmrc 文件4. 使用 .nvmrc 文件5. 终端自动切换版本 1. 前言 当开发多个项目时&#xff0c;每个项目运行环境要求的 node 版本不一样&#xff0c;那么我们就需要给每个项目指定 node 版本&#xff0c;也就是通过终端执行 nvm install…...

深度学习之基于YoloV5抽烟检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于YOLOv5&#xff08;You Only Look Once&#xff09;的抽烟检测系统可以用于实时检测图像或视频中是否存在抽烟行…...

解释器模式 (Interpreter Pattern)

定义 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;用于定义一种语言的语法表示&#xff0c;并提供一个解释器来处理这种语法。这种模式用于实现语言解释器&#xff0c;通常用于专业领域或复杂文本处理中。在解释器模式中&#xff…...

大语言模型置信度校准:CritiCal项目技术解析

1. 项目背景与核心价值置信度校准&#xff08;Confidence Calibration&#xff09;是当前大语言模型&#xff08;LLM&#xff09;应用中的关键挑战。当模型对自身输出的正确性缺乏准确评估时&#xff0c;会导致两种典型问题&#xff1a;过度自信的错误预测&#xff08;false po…...

别再搞混了!DBC里描述负数信号,Unsigned和Signed到底怎么选?(附CANdb++实操)

DBC信号定义实战&#xff1a;Signed与Unsigned的精准选择指南 在汽车电子工程领域&#xff0c;DBC文件作为CAN通信的"字典"&#xff0c;其信号定义的准确性直接关系到整车通信的可靠性。温度传感器显示的-10℃究竟是乱码还是真实数据&#xff1f;电流方向的正负如何准…...

C++(标签派发 Tag Dispatching)

一、什么是标签派发&#xff1f;&#x1f3af; 核心概念标签派发&#xff08;Tag Dispatching&#xff09; 是C中一种编译期多态技术&#xff0c;它利用空结构体标签和函数重载&#xff0c;在编译时根据类型特征选择最优的实现路径。&#x1f4ca; 为什么需要标签派发&#xff…...

暗黑破坏神2存档修改器终极指南:3步打造完美角色

暗黑破坏神2存档修改器终极指南&#xff1a;3步打造完美角色 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit Diablo Edit2是一款功能强大的暗黑破坏神2存档修改工具&#xff0c;这款开源免费的存档…...

对比直接使用原厂 API 观察 Taotoken 在账单清晰度上的差异

对比直接使用原厂 API 观察 Taotoken 在账单清晰度上的差异 1. 多厂商账单管理的痛点 在实际开发过程中&#xff0c;当团队或个人需要同时使用多个大模型厂商的服务时&#xff0c;账单管理往往成为一个隐形的负担。每个厂商都有独立的计费系统、不同的结算周期和格式各异的账…...

Ubuntu 20.04 LTS 双显卡笔记本避坑指南:从禁用Nouveau到CUDA 11.4完整配置流程

Ubuntu 20.04 LTS 双显卡笔记本深度配置指南&#xff1a;从驱动安装到CUDA环境搭建 对于使用NVIDIA独显与Intel/AMD集显混合架构的笔记本用户来说&#xff0c;在Ubuntu系统上配置深度学习环境就像在雷区跳舞——一个错误的步骤就可能导致黑屏、循环登录或CUDA无法调用。本文将分…...

终极风扇控制指南:如何用FanControl让电脑静音又高效散热

终极风扇控制指南&#xff1a;如何用FanControl让电脑静音又高效散热 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending…...

别再无脑选Level 9了!Zstd压缩级别(Level 1-6)深度调优指南:用游戏数据告诉你选2还是3

别再无脑选Level 9了&#xff01;Zstd压缩级别(Level 1-6)深度调优指南&#xff1a;用游戏数据告诉你选2还是3 在游戏服务器开发中&#xff0c;我们常常需要处理大量的数据传输和存储问题。压缩算法作为优化网络传输和磁盘占用的关键工具&#xff0c;其选择直接影响到服务器的性…...

终极指南:使用SMU调试工具解锁AMD Ryzen处理器的隐藏性能

终极指南&#xff1a;使用SMU调试工具解锁AMD Ryzen处理器的隐藏性能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:/…...

DouyinLiveRecorder深度剖析:PandaTV直播录制技术方案与性能优化

DouyinLiveRecorder深度剖析&#xff1a;PandaTV直播录制技术方案与性能优化 【免费下载链接】DouyinLiveRecorder 可循环值守和多人录制的直播录制软件&#xff0c;支持抖音、TikTok、Youtube、快手、虎牙、斗鱼、B站、小红书、pandatv、sooplive、flextv、popkontv、twitcast…...