当前位置: 首页 > 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…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...