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

基于S7-200 SMART实现PID控制仿真实验

关键字:Matalb;S7-200 SMART;Modbus TCP;PID控制

系列文章目录

基于S7-200 SMART实现一键启停
顺序功能图——(二)设计机组延时关机程序
基于S7-200 SMART实现Modbus TCP通信
基于S7-200 SMART实现MATLAB写入与读取PLC数据


文章目录

  • 系列文章目录
  • 前言
  • 一、MATLAB代码
    • 1.清除命令窗口、工作区、画图窗口
    • 2.参数设置
    • 3.创建modbus连接对象
    • 4.求离散传递函数
    • 5. 循环更新参数
  • 二、S7-200 SMART代码
    • 1.将double类型变量转换为real类型变量
    • 2.建立Modbus TCP服务器
    • 3.将real类型的过程变量转换为word类型的过程变量
    • 4.PID控制器
      • 4.1PID回路控制算法
      • 4.2PID向导
      • 4.3PID0_CTRL
    • 5.控制器输出处理
  • 三、仿真实验
    • 1.手动模式下的输出
    • 2.自动模式下的输出
  • 总结


前言

  基于S7-200 SMART可以通过向导实现PID控制,但是如果没有实验器材,很难观察到实际的控制效果。MATLAB作为一个强大的开发软件,支持工业上常用的通信协议,而且MATLAB也经常用作仿真实验。如果在MATLAB中模拟被控对象,并将被控对象数据与控制器数据通过Modbus TCP进行传输,就可以实现基于PLC的PID控制仿真。


一、MATLAB代码

1.清除命令窗口、工作区、画图窗口

clc;
clear;
close all;

2.参数设置

  建立电加热锅炉模型:
G ( s ) = Δ T Δ U = K T 1 s + 1 e T 2 s = 0.134 s + 0.035 e − 0.03 s (1) G\left( s \right)=\frac{\Delta T}{\Delta U}=\frac{K}{T_1s+1}e^{T_2s}=\frac{0.134}{s+0.035}e^{-0.03s} \tag{1} G(s)=ΔUΔT=T1s+1KeT2s=s+0.0350.134e0.03s(1)

tol=0.03;                                                                   % 纯滞后时间
num_c=[0.134];                                                              % 连续系统分子系数
den_c=[1,0.035];                                                            % 连续系统分母系数
Ts=1;                                                                       % 采样时间
c=0;c_1=0;                                                                  % 系统输出c=c(k)、c_1=c(k-1)
u=0;u_1=0;u_2=0;                                                            %控制器输出u=u(k)、u_1=u(k-1)、u_2=u(k-2)

3.创建modbus连接对象

mb = modbus('tcpip','192.168.2.1',502);
mb.Timeout = 20;

4.求离散传递函数

  基于采样时间 T s = 1 s T_s=1s Ts=1s,基于Z变换对连续系统进行离散化:
G ( z ) = 0.1278 z − 1 + 0.003884 z − 2 1 − 0.9656 z − 1 = n u m _ d ( 1 ) z − 1 + n u m _ d ( 2 ) z − 2 1 + d e n _ d ( 2 ) z − 2 (2) G\left( z \right)=\frac{0.1278z^{-1}+0.003884z^{-2}}{1-0.9656z^{-1}}=\frac{num\_d\left( 1 \right)z^{-1}+num\_d\left( 2 \right)z^{-2}}{1+den\_d\left( 2 \right)z^{-2}} \tag{2} G(z)=10.9656z10.1278z1+0.003884z2=1+den_d(2)z2num_d(1)z1+num_d(2)z2(2)从上式可得离散化的对象输出公式:
c ( k ) = − d e n _ d ( 2 ) c ( k − 1 ) + n u m _ d ( 1 ) u ( k − 1 ) + n u m d ( 2 ) u ( k − 2 ) ; (3) c\left( k \right)=-den\_d\left( 2 \right)c\left( k-1 \right)+num\_d\left( 1 \right)u\left( k-1 \right)+num\ _d\left( 2 \right)u\left( k-2 \right); \tag{3} c(k)=den_d(2)c(k1)+num_d(1)u(k1)+num d(2)u(k2);(3)

% continue system
sys_c=tf(num_c,den_c,'inputdelay',tol);
% discrete system
sys_d=c2d(sys_c,Ts,'zoh');
[num_d,den_d]=tfdata(sys_d,'v');

5. 循环更新参数

while true% 基于离散传递函数计算锅炉的温度c=-den_d(2)*c_1+num_d(1)*u_1+num_d(2)*u_2;% 将对象的输出写入到PLC中write(mb,'holdingregs',1,c,'double');% 将控制器输出读取到u中u = read(mb,'holdingregs',9,1,'int16');u = 100*u/27648;% 更新参数c_1=c;u_2=u_1;u_1=u;pause(Ts);
end

二、S7-200 SMART代码

1.将double类型变量转换为real类型变量

Alt

图2.1 将MATLAB传输的double类型数据转换为real类型数据

  在MATLAB中的小数是通过double类型写入PLC中,而PLC中的double类型变量是存放在V寄存器的一个字节中,将输入的double类型数据转换为可以供PID指令使用的real类型可以使用指令DF_R。

2.建立Modbus TCP服务器

Alt

图2.2 建立Modbus TCP服务器

  在PLC中建立Modbus TCP服务器,用于和MATLAB中的Modbus TCP客户端进行通信,各个端口的含义如下:

  • EN:功能块使能端,EN=1功能块有效,EN=0功能块无效;
  • Connect:功能块Server功能,Connect=1激活Server功能,Connect=0关闭Server功能,注意在更改相关参数时需要令Connect=0,否在将会报错;
  • IP_Port:网络端口,默认502;
  • MaxIQ:可操作输入/输出线圈最大个数,将可用于 Modbus 地址 0xxxx 到 1xxxx 的 I 和 Q 点数设置为 0 至 256。值 0 表示禁用对输入和输出的所有读取和写入。建议将 MaxIQ 值设置为 256;
  • MaxAI:可操作输入寄存器最大个数,将可用于 Modbus 地址 3xxxx 的字输入 (AI) 数设置为 0 至 56。值 0 表示禁用对模拟量输入的读取。要允许访问所有 CPU 模拟量输入。对于 CPU CR40 和 CR60为 0,对于所有其它 CPU 型号为 56;
  • MaxHold:可操作保持寄存器最大个数,设置可用于 Modbus 地址 4xxxx 或 4yyyyy 的 V 存储器中的字保持寄存器数,需要注意的是一个保持寄存器占用两个V寄存器的字节,即一个VM;
  • HoldStart:保持寄存器的开始地址,如果 HoldStart 指向超出允许范围的存储位置,则 Modbus TCP 库指令将返回错误。CPU 还会生成非致命错误:间接寻址错误 (0x06);
  • Done:Modbus TCP通信状态,Done=1连接至客户端设备、与客户端断开连接、响应 Modbus 请求、返回错误,Done=0没有请求用于此程序周期
  • Error:指令执行结果代码,且仅在发生错误后的一个周期内有效。

3.将real类型的过程变量转换为word类型的过程变量

Alt

图2.3 将real类型的过程变量转换为word类型的过程变量

  在PLC中将过程变量的REAL值转换为PID控制器可以识别的WORD,各个端口的含义如下:

  • EN:功能块使能端,EN=1功能块有效,EN=0功能块无效;
  • Inpuut:输入的REAL类型值;
  • ISH:输入REAL类型值的上限;
  • ISL:输入REAL类型值的下限;
  • OSH:输出WORD类型值的上限;
  • OSL:输出WORD类型值的下限;
  • Output:输出的WORD类型值。

4.PID控制器

4.1PID回路控制算法

  在介绍如何使用向导设置PID控制之前,需要了解S7-200 SMART的PID控制器算法。首先给出时域下的PID控制器输出:
M ( t ) = K C e + K I ∫ e d t + M i n i t i a l + K D d e d t (4) M\left( t \right)=K_Ce+K_I{\int e\, dt}+M_{initial}+K_D\frac{de}{dt} \tag{4} M(t)=KCe+KIedt+Minitial+KDdtde(4)其中 M ( t ) 、 e 、 K C 、 K I 、 K D 、 M i n i t i a l M\left( t \right)、e、K_C、K_I、K_D、M_{initial} M(t)eKCKIKDMinitial分别表示当前时间下的控制器输出函数、当前时间下的系统误差函数、比例系数、积分系数、微分系数、回路输出的初始值。将上述公式离散化后可得:
M n = K C e n + K I T S ∑ k = 1 n e n + M i n i t i a l + K D e n − e n − 1 T S (5) M_n=K_Ce_n+K_IT_S{\sum_{k=1}^n e_n}+M_{initial}+K_D\frac{e_n-e_{n-1}}{T_S} \tag{5} Mn=KCen+KITSk=1nen+Minitial+KDTSenen1(5)其中 M n 、 e n 、 e n − 1 、 T S M_n、e_n、e_{n-1}、T_S Mnenen1TS分别表示当前采样时刻的控制器输出、当前采样时刻的误差、前一个采样时刻的误差、采样时间。引入参数前一个采样时刻的积分值 M X MX MX,上述离散化PID控制器输出可化为:
M n = K C e n + K I T S e n + M X + M i n i t i a l + K D e n − e n − 1 T S (6) M_n=K_Ce_n+K_IT_Se_n+MX+M_{initial}+K_D\frac{e_n-e_{n-1}}{T_S} \tag{6} Mn=KCen+KITSen+MX+Minitial+KDTSenen1(6)考虑
e n = P V n − S V n (7) e_n=PV_n-SV_n \tag{7} en=PVnSVn(7)其中 P V n 、 S V n PV_n、SV_n PVnSVn分别表示过程变量与设定变量。将公式(4)代入公式(3)可得:
M n = M P n + M I n + M D n = K C ( S P n − P V n ) + K I T S ( S P n − P V n ) + M X + K D [ ( S P n − P V n ) − ( S P n − 1 − P V n − 1 ) ] T S = K C ( S P n − P V n ) + K I T S ( S P n − P V n ) + M X + K D ( P V n − 1 − P V n ) T S = K C ( S P n − P V n ) + K C T I T S ( S P n − P V n ) + M X + K C T D ( P V n − 1 − P V n ) T S (8) \begin{align} M_n &=MP_n+MI_n+MD_n \\ &={K_C\left( SP_n-PV_n \right)} +{K_IT_S\left( SP_n-PV_n \right)+MX} +{K_D\frac{\left[ \left( SP_n-PV_n \right)-\left( SP_{n-1}-PV_{n-1} \right) \right]}{T_S}} \\ &={K_C\left( SP_n-PV_n \right)}+{K_IT_S\left( SP_n-PV_n \right)+MX} +{K_D\frac{\left( PV_{n-1}-PV_n \right)}{T_S}} \\ &={K_C\left( SP_n-PV_n \right)}+{\frac{K_C}{T_I}T_S\left( SP_n-PV_n \right)+MX} +{K_CT_D\frac{\left( PV_{n-1}-PV_n \right)}{T_S}} \end{align} \tag{8} Mn=MPn+MIn+MDn=KC(SPnPVn)+KITS(SPnPVn)+MX+KDTS[(SPnPVn)(SPn1PVn1)]=KC(SPnPVn)+KITS(SPnPVn)+MX+KDTS(PVn1PVn)=KC(SPnPVn)+TIKCTS(SPnPVn)+MX+KCTDTS(PVn1PVn)(8)其中 M P n 、 M I n 、 M D n MP_n、MI_n、MD_n MPnMInMDn分别表示当前采样时刻控制器比例项输出、积分项输出、微分项输出。

4.2PID向导

  在PLC中可以通过向导实现PID控制器的各种参数设置:
①点击工具栏的PID向导:
Alt

图2.4 打开PID向导

②回路选择
Alt

图2.5 选择需要组态的回路

③回路命名
Alt

图2.6 回路命名

④控制参数设置
Alt

图2.7 PID控制参数设置

控制器类型可以选择温度或常规:
Alt

图2.8 控制器类型

这里由于是对MATLAB中的被控对象进行仿真,控制器类型选择常规。
Alt

图2.9 启用双向输出

如果勾选了双向输出,正向参数中的增益只能为正,负向参数中的增益只能为负。在双向输出的情况下允许 S V n < P V n SV_n<PV_n SVn<PVn的情况出现,此时负向输出有效,在 S V n ≥ P V n SV_n \ge PV_n SVnPVn时正向输出有效。如果不勾选双向输出则没有负向参数设置、只有正向参数设置,如果增益大于零则属于正向控制——控制器正作用于回路,此时只有 S V n ≥ P V n SV_n \ge PV_n SVnPVn输出有效;如果增益小于零则属于负向控制——控制器反作用于回路,此时只有 S V n ≤ P V n SV_n \le PV_n SVnPVn输出有效。不勾选双向输出的情况下,对于增益值为 0.0 的 I 或 ID 控制,如果将积分时间和微分时间指定为正值,则控制器将是正作用回路;如果指定负值,则控制器将是反作用回路。
Alt

图2.10 设置增益与积分时间

在MATLAB中通过比例度整定法确认增益 K C = 7.21 K_C=7.21 KC=7.21、积分时间 T I = 11 s T_I=11s TI=11s故在向导中分别将增益、积分时间设置为 7.21 、 1.7 60 ≈ 0.028 7.21、\frac{1.7}{60}\approx0.028 7.21601.70.028分钟。需要注意的是如果不需要积分作用,则可设置积分时间= 10000.0 m i n 10000.0min 10000.0min;如果不需要微分作用,则可设置微分时间= 0.0 m i n 0.0min 0.0min;如果不需要比例作用,则设置增益= 0.0 0.0 0.0,此时积分环节与微分环节的计算是基于 K C = 1.0 K_C=1.0 KC=1.0进行的:
M I n = K C T I T S ( S P n − P V n ) + M X = 1 T I T S ( S P n − P V n ) + M X M D n = K C T D ( P V n − 1 − P V n ) T S = T D ( P V n − 1 − P V n ) T S (9) \begin{align} MI_n &=\frac{K_C}{T_I}T_S\left( SP_n-PV_n \right)+MX \\ &=\frac{1}{T_I}T_S\left( SP_n-PV_n \right)+MX \\ MD_n &=K_CT_D\frac{\left( PV_{n-1}-PV_n \right)}{T_S} \\ &=T_D\frac{\left( PV_{n-1}-PV_n \right)}{T_S} \end{align} \tag{9} MInMDn=TIKCTS(SPnPVn)+MX=TI1TS(SPnPVn)+MX=KCTDTS(PVn1PVn)=TDTS(PVn1PVn)(9)
Alt

图2.11 不激活PID

为了获得更好的PID控制效果,往往会选择不激活PID,在程序运行后通过PID整定控制面板进行控制激活。
⑤输入参数设置
Alt

图2.12 不激活PID

过程变量的标定有单极、单极20%偏移量、双极、温度×10℃和温度×10℉:

  • 单极: 0 ∼ 10 0\sim10 010V、 0 ∼ 20 0\sim20 020mA、 0 ∼ 5 0\sim5 05V;
  • 单极20%偏移量: 1 ∼ 5 1\sim5 15V、 4 ∼ 20 4\sim20 420mA;
  • 双极: − 10 ∼ 10 -10\sim10 1010V、 − 5 ∼ 5 -5\sim5 55V
  • 温度×10℃/℉:特定的温度模块

这里使用的选择双极。
⑥输出参数设置
Alt

图2.13 输出参数设置

在输出类型中可选择模拟量或数字量。模拟量可从模拟量模块输出、数字量是通过PWM控制其他传感器。
⑦控制区域参数设置
Alt

图2.14 控制区域参数设置

在控制区域中无任何设置。
⑧报警
Alt

图2.15 报警

报警包括过程变量上限报警、过程变量下限报警、模拟量模块报警。
⑨代码
Alt

图2.16 设置代码名称与手动控制

需要注意的是子例程与中断例程内容是被封存的,添加手动PID控制可以控制PID控制器屏蔽过程变量与设置变量,输出任意合法值。
⑩为PID控制相关参数分配地址
Alt

图2.17 为控制器相关参数分配存储地址

分配地址后相关参数将会存储到对应的位置,在数据块中可见:
Alt

图2.18 数据块

从数据块中的分布可见,参数保存到了VB8000~VB8239的地址中。
⑪组件
Alt

图2.19 组件

在组件页面中主要是确认准备初始化的各种内容信息。
⑫最后在完成页面点击生成
Alt

图2.20 在完成页面点击生成

4.3PID0_CTRL

Alt

图2.21 PID控制器

  在PLC中实现PID控制,各个端口的含义如下:

  • EN:功能块使能端,EN=1功能块有效,EN=0功能块无效;
  • PV_I:输入过程变量
  • Setpont_R:输入设定变量
  • Auto_Manual:自动模式/手动模式切换,Auto_Manual=1自动模式,Auto_Manual=0手动模式;
  • Manual_Output:手动模式下的输出 0.0 ∼ 1.0 0.0\sim1.0 0.01.0
  • Output_Forward:正向回路输出,输出的范围与向导中的选择有关,单极 0 ∼ 27648 0\sim27648 027648,双极 − 27648 ∼ 27648 -27648\sim27648 2764827648
  • Output_Reverse:反向回路输出,输出的范围与向导中的选择有关,单极 0 ∼ 27648 0\sim27648 027648,双极 − 27648 ∼ 27648 -27648\sim27648 2764827648
  • HighAlarm:PV值高限位报警,PV值高限位值可在向导中确定;
  • LowAlarm:PV值低限位报警,PV值低限位值可在向导中确定;
  • ModuleErr:PID控制器错误信号,ModuleErr=1PID控制器错误,ModuleErr=0PID控制器无错误;
  • ErrorCode:错误代码。

5.控制器输出处理

Alt

图2.22 PID控制器输出处理

  基于输入的过程变量实数值 r P V rPV rPV与设定变量实数值 r S V rSV rSV,即实际的温度与设定温度之间的关系,确定控制器输出:

  • r S V ≥ r P V rSV \ge rPV rSVrPV:PID控制输出为正向输出,此时令 w M = w M 1 wM=wM1 wM=wM1,即实际控制器输出=正向控制器输出;
  • r S V < r P V rSV < rPV rSV<rPV:PID控制输出为正向输出,此时令 w M = − w M 2 wM=-wM2 wM=wM2,即实际控制器输出=-反向控制器输出。

三、仿真实验

1.手动模式下的输出

  将Auto_Manual的输入端置0,开启手动模式:
Alt

图3.1 手动模式

在单极输出的情况下:
Alt

图3.2 单极输出

激活PID控制:
Alt

图3.3 激活PID输出

对于单极输出的情况下Manual_Output=0.5:
Alt

图3.4 单极输出Manual_Output=0.5

对于单极输出的情况下Manual_Output=1.0:
Alt

图3.5 单极输出Manual_Output=1.0

对于单极输出的情况下Manual_Output=-0.5:
Alt

图3.6 单极输出Manual_Output=-0.5

对于单极输出的情况下Manual_Output=-1.0:
Alt

图3.7 单极输出Manual_Output=-1.0

在双极输出的情况下:
Alt

图3.8 双极输出

对于双极输出的情况下Manual_Output=0.5:
Alt

图3.9 双极输出Manual_Output=0.5

对于双极输出的情况下Manual_Output=1.0:
Alt

图3.10 双极输出Manual_Output=1.0

对于双极输出的情况下Manual_Output=-0.5:
Alt

图3.11 双极输出Manual_Output=-0.5

对于双极输出的情况下Manual_Output=-1.0:
Alt

图3.12 双极输出Manual_Output=-1.0

2.自动模式下的输出

Alt

图3.13 自动模式

启动MATLAB程序:
Alt

图3.14 运行MATLAB程序

通过PID整定控制面板激活PID控制:
Alt

图3.15 激活PID控制

写入设定值SV=40.0:
Alt

图3.16 写入设定值40.0

PID控制结果:
Alt

图3.17 设定值等于40.0时的PID控制结果

写入设定值SV=-30.0:
Alt

图3.18 写入设定值-30.0

PID控制结果:
Alt

图3.19 设定值等于-30.0时的PID控制结果

总结

  本文基于MATLAB与S7-200 SMART实现了PID控制的仿真。

相关文章:

基于S7-200 SMART实现PID控制仿真实验

关键字&#xff1a;Matalb&#xff1b;S7-200 SMART&#xff1b;Modbus TCP&#xff1b;PID控制 系列文章目录 基于S7-200 SMART实现一键启停 顺序功能图——&#xff08;二&#xff09;设计机组延时关机程序 基于S7-200 SMART实现Modbus TCP通信 基于S7-200 SMART实现MATLAB写…...

社交及时通讯平台完整版源码,uniapp技术,可打包成app

源码简介&#xff1a; 全原生&#xff0c;从底层开始结构就完全不一样&#xff0c;mongodb的库&#xff0c;uniapp混编手端&#xff0c;二开难度要比视酷或者酷信容易很多。全开源&#xff0c;带开发文档。前端用的是uniapp技术&#xff0c;所以是多端合一&#xff0c;可以做h…...

TensorFlow和Pytorch是什么?干什么用的?

TensorFlow和Pytorch都是机器学习框架&#xff0c;允许用户自定义开发机器学习模型&#xff08;利用已经实现好的神经网络层&#xff09;。 1. 加载和预处理数据 加载数据&#xff1a;使用合适的库&#xff08;如 Pandas、Numpy 或 TensorFlow 的数据处理 API&#xff09;从文…...

采购人可否自行选择采购方式?|数智化招采系统支持多种采购方式

采购人是否有权自行确定采购方式&#xff0c;主要取决于采购项目的性质和规模&#xff0c;特别是是否达到公开招标的数额标准。 一、达到公开招标数额标准以上的项目 《中华人民共和国政府采购法实施条例》第二十三条规定&#xff1a;“采购人采购公开招标数额标准以上的货物…...

ubuntu dde 改为中文

在 Ubuntu Deepin Desktop Environment (DDE) 中&#xff0c;如果已经将系统语言设置为中文&#xff0c;但系统菜单仍然显示英文&#xff0c;可以尝试以下步骤解决&#xff1a; 检查语言设置&#xff1a;确保你的系统语言已经正确设置为中文。你可以在“系统设置”->“区域和…...

Nginx配置小细节,location和proxy_pass 斜杠/ 问题

理解nginx的配置有助于理解前后端调用的过程&#xff0c;这里是location与proxy_pass需要注意的点 location 不带斜杠 的是模糊匹配&#xff0c;例如 location /abc 可以匹配 /abc/index.html&#xff0c;也可以匹配 /abcd/index.html location 带斜杠的是固定匹配&#xff0c…...

java 解析 PDF OFD 发票 部分文字缺失

1、pdfbox https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox 到这里用最新的版本 最近碰到发票各式各样&#xff0c;千奇百怪&#xff1a;记录其中一个 解析出来是&#xff1a;缺少一个通字 发票好几处都缺少文字&#xff0c;解析出来的是 一个 圆点 原因&…...

C/C++数字与字符串互相转换

前言&#xff1a; 在C/C程序中&#xff0c;会需要把数字与字符串做出互相转换的操作&#xff0c;用于实现程序想要的效果。下面将介绍多种方法实现数字与字符串互相转换。 字符串转为数字 一、利用ASCII 我们知道每个字符都有一个ASCII码&#xff0c;利用这一点可以将字符-0…...

[Spring] Spring AOP

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…...

鸿蒙 webview 实现顶部 Progress进度条

1, 先看效果 2, 直接cv代码 import web_webview from ohos.web.webview;interface PerUrl {url: string,age: number } Component export struct webviews {controller: web_webview.WebviewController new web_webview.WebviewController();ports: web_webview.WebMessageP…...

Pytest-BDD实现接口自动化测试,并附全部代码

引言 在之前的文章中简单的介绍了怎么使用Pytest-BDD进行接口测试&#xff0c;可以参考《pytest-bdd 行为驱动自动化测试》。本篇文章主要介绍使用Pytest-BDD实现接口自动化测试。后面的文章会介绍生成测试报告&#xff0c;和流程性接口测试。 feature文件 首先我们先整理好…...

Sqli-labs-master靶场--布尔盲注

目录 1、布尔盲注 2、布尔盲注的流程&#xff08;以靶场less-8为例&#xff09; 2.1输入id尝试是否存在注入点 2.1.1通过以上尝试&#xff0c;联想到可能是布尔盲注 2.2猜测数据库长度 2.3获取数据库名 2.3.1python脚本获取 代码&#xff1a; 获取结果为&#xff1a; …...

【QGroundControl二次开发】十. QT添加GStreamer视频播放同时保存

上一章介绍使用QT播放GStreamer视频流 【QGroundControl二次开发】八. QT实现播放gstreamer视频。 这章介绍如何在原有基础上保存为视频,同时保存为一个个规定大小的小视频。 先展示代码: #include <QApplication> #include <QWidget> #include <QtConcurrent…...

double类型 精度丢失的问题

前言 精度丢失的问题是在其他计算机语言中也都会出现&#xff0c;float和double类型的数据在执行二进制浮点运算的时候&#xff0c;并没有提供完全精确的结果。产生误差不在于数的大小&#xff0c;而是因为数的精度。 一、double进行运算时,经常出现精度丢失 0.10.2使用计算…...

C++ 重要特性探究

shared_from_this 使用分析 场景 类的成员函数需要获取指向自身的shared_ptr的时候类成员函数传递shared_ptr给其他函数或者对象的时候&#xff0c;目的是为了管理对象生命周期使用方法 首先类必须继承 std::enable_shared_from_this<T>必须使用 shared_from_this 获取指…...

c++_游戏_狼人杀

思路主要包括以下几个部分&#xff1a; 角色分配&#xff1a;代码中通过随机数的方式给狼人、平民、预言家和法师等角色进行分配&#xff0c;保证每个角色的数量和身份的随机性。 游戏进行&#xff1a;根据狼人、平民、预言家和法师等角色的身份&#xff0c;游戏进行了夜晚和白…...

MySQL——数据类型、索引的建立、数据的约束

文章目录 数据类型索引的建立普通索引唯一索引使用ALTER 命令添加和删除索引使用ALTER 命令添加和删除主键显示索引信息 数据的约束非空约束&#xff1a;not null&#xff0c;值不能为null唯一约束&#xff1a;unique&#xff0c;值不能重复主键约束&#xff1a;primary key外键…...

常见框架漏洞详解③!!

Apache Apache 是世界使⽤排名第⼀的 Web 服务器软件。它可以运⾏在⼏乎所有⼴泛使⽤的计算 机平台上&#xff0c;由于其跨平台和安全性被⼴泛使⽤&#xff0c;是最流⾏的 Web 服务器端软件之⼀。 apache⽬录结构&#xff1a; bin&#xff1a;存放常⽤命令⼯具&#xff0c;如h…...

大数据基础知识

大数据&#xff08;Big Data&#xff09;是指无法用传统数据处理工具和技术有效处理的大规模、复杂的数据集。大数据技术通过对这些数据进行存储、处理和分析&#xff0c;从中提取有价值的信息和见解。 1. 大数据的特点 大数据通常具有以下四个主要特点&#xff0c;被称为“4…...

SQL Server 的透明数据加密

透明数据加密是SQL Server数据库安全众多特性中的一个&#xff0c;本文只针对透明数据加密。 在此测试之前&#xff0c;已经按照文档如何快速获得一个测试用SQL Server企业版创建了一个SQL Server 2019&#xff0c;并按照文档为SQL Server安装示例数据库AdventureWorks安装了…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...