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

CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境

CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境

文章目录

  • CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境
    • 一、前言
    • 二、资料收集
    • 三、Ubuntu18.04从安装到更换实时内核
      • 1、下载安装Ubuntu18.04
      • 2、下载安装实时内核,解决编译问题及替换内核时的问题
        • 2.1、首先使用此命令查看你的Ubuntu内核,本人的Ubuntu18.04的内核版本是5.4.0-84-generic
        • 2.2、安装依赖项
        • 2.3、创建内核目录
        • 2.4、下载linux内核以及RT-PREEMPT patch
        • 2.5、解压,并给内核打补丁
        • 2.6、配置内核
        • 2.7、编译内核
        • 2.8、安装内核
        • 2.9、修改grub文件
        • 2.10、更新grub
        • 2.11、重启
      • 3、实时性测试
    • 四、CoDeSys安装及Linux runtime包下载安装
    • 五、创建应用并测试
      • 1、创建项目
        • 1.1、创建标准工程
        • 1.2、添加设备并激活
        • 1.3、回声测试
        • 1.4、安装p-net类型Profinet设备
        • 1.5、配置添加Profinet主站网络
      • 3、PLC编程
      • 4、烧录程序并测试
    • 六、最后

一、前言

我们之前已经在windows机上运行起了基于codesys的软PLC,并且其作为主站和跑在虚拟机上的p-net从站进行了简单的IO操作,但是跑在Windows上的运行时PLC会影响网卡,而不跑运行时的则由于实时性不足导致一些超时的问题,因此我们这里在Ubuntu18.04上更换实时Linux内核,然后利用codesys的for Linux扩展包将该实时的Ubuntu18.04改造运行软PLC作为主站来和树莓派从站做profinet交互,也熟悉一下更换Linux实时内核的过程。

二、资料收集

● Ubuntu18.04虚拟机(使用desktop版本)搭建codesys:http://bbs.hicodesys.com/thread-28335-1-1.html
● 编译替换实时内核:https://www.jianshu.com/p/b74b05d26cf9
● 内核编译错误处理:https://blog.csdn.net/qq_36393978/article/details/118157426
● 修改grup时报错:https://askubuntu.com/questions/1024593/failed-to-execute-child-process-net-when-entering-nautilus
● 树莓派安装codesys运行时,Ubuntu安装codesys运行时可以相互借鉴:https://www.cnblogs.com/ChenMichael/p/16352297.html

三、Ubuntu18.04从安装到更换实时内核

1、下载安装Ubuntu18.04

建议在虚拟机下进行,这个教程已经很多了,这里不再赘述,也可以参考这里:
Ubuntu18.04下载安装及配置网络:
下载地址:https://releases.ubuntu.com/18.04/
虚拟机安装参考:
Ubuntu更换国内源:https://www.qkeke.com/archives/1762.html
解决安装完vmtools仍不能和Windows复制黏贴的问题(或者安装虚拟机过程中就配置好了网卡自动安装了相关工具):

sudo apt-get autoremove open-vm-tools
sudo apt-get update
sudo apt-get install open-vm-tools
sudo apt-get install open-vm-tools-desktop
reboot

1、备份原来的源

sudo cp /etc/apt/sources.list /etc/apt/sources_init.list

2、使用 vim 编辑源

sudo apt-get install vim
sudo vim /etc/apt/sources.list

3、更换为阿里的源(Ubuntu18.04)

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

4、更新源

sudo apt-get update

5、复损坏的软件包,尝试卸载出错的包,重新安装正确版本的

sudo apt-get -f install

6、更新软件

sudo apt-get upgrade

2、下载安装实时内核,解决编译问题及替换内核时的问题

根据网上的资料按照步骤处理即可。

2.1、首先使用此命令查看你的Ubuntu内核,本人的Ubuntu18.04的内核版本是5.4.0-84-generic
uname -aLinux ubuntu 5.4.0-84-generic #94~18.04.1-Ubuntu SMP Thu Aug 26 23:17:46 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
2.2、安装依赖项
sudo apt-get install libncurses-dev
sudo apt-get install libssl-dev
2.3、创建内核目录
mkdir ~/kernel && cd ~/kernel
2.4、下载linux内核以及RT-PREEMPT patch

我的内核版本是5.4.0-84-generic,所以下载与目前我的版本最接近的,linux-5.4.10.tar.gz我们可以选择国内清华的镜像网站,国外的源下载速度特别慢。linux内核网址:https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/,你可以在此找到与你想要的内核版本,我下载了linux-5.10.180.tar.gzRT-PREEMPT patch:https://mirrors.tuna.tsinghua.edu.cn/kernel/projects/rt/
我下载了patch-5.10.180-rt89-rc1.patch.gz,可以在older文件夹下找到更多的版本。需要注意的是补丁与所下载的内核版本要一致。

2.5、解压,并给内核打补丁

下载完内核和补丁后把文件移到刚才创建的kernel目录下。

tar zxvf linux-5.10.180.tar.gz
gunzip patch-5.10.180-rt89-rc1.patch.gz

将 patch-文件放到 linux-5.4.10文件夹里,(直接将patch文件拖进 linux-5.4.10文件夹)执行打补丁

cp patch-5.10.180-rt89-rc1.patch linux-5.10.180
cd linux-5.10.180/
patch -p1 < patch-5.10.180-rt89-rc1.patch
2.6、配置内核
sudo apt install make
sudo apt install make-guile
sudo apt install gcc
sudo apt install flex
sudo apt install bison
make menuconfig

General setup —> [Enter]
在这里插入图片描述

Preemption Model (Voluntary Kernel Preemption (Desktop)) ->[Enter]
在这里插入图片描述

Fully Preemptible Kernel (Real-Time)-> [Enter] #Select
在这里插入图片描述

然后一直按esc键返回至主页面
Kernel hacking –> [Enter]
在这里插入图片描述

Memory Debugging [Enter]
在这里插入图片描述

取消选择Check for stack overflows,我的里面没有此选项,直接忽略
返回主页面,保存配置退出

2.7、编译内核
vim .config
#修改CONFIG_SYSTEM_TRUSTED_KEYS,将其赋空值
#如果CONFIG_SYSTEM_REVOCATION_KEYS的值不为空的话,也将其赋空值。
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""
make -j8

我的cpu内核数是4,所以是j8,内核数的2倍。

2.8、安装内核
sudo make modules_install -j8
sudo make install -j8
2.9、修改grub文件

打开文件 /etc/default/grub,我的这个文件是只读文件,不能直接进行修改。在终端输入命令

sudo nautilus

选择grub文件进行修改,注释掉GRUB_TIMEOUT_STYLE=hidden,将GRUB_TIMEOUT=0改成了GRUB_TIMEOUT=5

2.10、更新grub
sudo update-grub
2.11、重启
sudo reboot

重启后在开机界面,选择Ubuntu高级选项,选择安装好的带rt的版本(默认第一个就可以)。
开机后,查看当前的内核版本

uname -aLinux ubuntu 5.10.180-rt89-rc1 #1 SMP PREEMPT_RT Wed Sep 27 01:35:01 PDT 2023 x86_64 x86_64 x86_64 GNU/Linux

至此安装成功。

3、实时性测试

可参考以下网页:
https://blog.csdn.net/kl1125290220/article/details/78560220
https://blog.csdn.net/longerzone/article/details/16897655

sudo apt-get install rt-tests

运行cyclictest程序进行实时性测试:

shellsudo cyclictest -t 5 -p 80 -n  #运行五个线程,线程优先级为80,无限循环

cyclictest运行结果详解

P: 0 线程优先级为0
C: 9397 计数器。线程的时间间隔每达到一次,计数器加1
I: 1000 时间间隔为1000微秒(us)
Min: 最小延时(us)
Act: 最近一次的延时(us)
Avg:平均延时(us)
Max: 最大延时(us)

我的测试结果:

# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 2.62 1.81 0.77 1/787 2295          T: 0 ( 2290) P:80 I:1000 C:  20854 Min:      5 Act:  127 Avg:  251 Max:    1166
T: 1 ( 2291) P:80 I:1500 C:  13903 Min:      6 Act:  113 Avg:  252 Max:     681
T: 2 ( 2292) P:80 I:2000 C:  10427 Min:      7 Act:  115 Avg:  255 Max:    1000
T: 3 ( 2293) P:80 I:2500 C:   8341 Min:      6 Act:   79 Avg:  253 Max:    2721
T: 4 ( 2294) P:80 I:3000 C:   6951 Min:      7 Act:  114 Avg:  254 Max:    2931

四、CoDeSys安装及Linux runtime包下载安装

配置Linux运行时:
在这里插入图片描述

通过ssh登录设备配置安装,这里可以查看、安装及操作(之后点击安装并查看System Info来确定安装是否成功,最后Start启动运行时即可):
在这里插入图片描述

创建codesys项目时设备选择Linux设备:
之后通信配置激活即可:
在这里插入图片描述

五、创建应用并测试

1、创建项目

1.1、创建标准工程

标准工程,CODESYS Control for Linux SL(运行时环境),控制设备(主站控制器):
在这里插入图片描述

1.2、添加设备并激活

添加设备(只有安装了对应的Linux扩展包才能找到添加如下对应类型的设备):
在这里插入图片描述

1.3、回声测试

发送回声服务:
在这里插入图片描述
在这里插入图片描述

1.4、安装p-net类型Profinet设备

下载对应GSDML文件:github.com/rtlabs-com/p-net/blob/master/samples/pn_dev/GSDML-V2.4-RT-Labs-P-Net-Sample-App-20220324.xml
安装GSDML文件:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

安装成功:
在这里插入图片描述

1.5、配置添加Profinet主站网络

● 在左侧面板的 Device(CODESYS Ccontrol RTE V3 x64)上,右键单击并选择添加设备。使用 以太网适配器、 以太网。
在这里插入图片描述

● 在 以太网上,右键单击并选择 添加设备。使用 Profinet IO主站、 PN-控制器。
在这里插入图片描述

● 在 PN_Controller上,右键单击并选择 添加设备。使用 P-Net 示例应用程序。
在这里插入图片描述

● 在 P_Net_Sample_App上,右键单击并选择 添加设备。使用 DIO 8xLogicLevel。
在这里插入图片描述

● 双击 左侧菜单中的以太网节点。选择自己的网络接口。IP 地址将相应更新。
在这里插入图片描述

● 双击 左侧菜单中的PN_controller节点。使用“第一个 IP” 和 “最后一个 IP”调整 IP 范围, 使其都具有 IO 设备的现有 IP 地址(例如运行 example_app 的 Linux 笔记本电脑或嵌入式 Linux 板)。在本教程中,我们使用 First IP 172.16.1.174 和 Last IP 172.16.1.174。
在这里插入图片描述

● 双击 左侧菜单中的P_Net_Sample_App节点。将 IP 地址设置为 IO 设备的现有地址。在本教程中我们使用 172.16.1.174.
在这里插入图片描述

3、PLC编程

● 单击左侧面板中的 PLC 逻辑 ‣ Applicaiton ‣ PLC_PRG并输入程序。
在控制器应用程序中,根据教程,使用ST语言编程,变量部分和程序部分的代码都给了,这里我们添加进去即可:

PROGRAM PLC_PRG
VARin_pin_button_LED: BOOL;out_pin_LED: BOOL;in_pin_button_LED_previous: BOOL;flashing: BOOL := TRUE;oscillator_state: BOOL := FALSE;oscillator_cycles: UINT := 0;
END_VAR
oscillator_cycles := oscillator_cycles + 1;
IF oscillator_cycles > 200 THEN oscillator_cycles := 0;
oscillator_state := NOT oscillator_state;
END_IF IF in_pin_button_LED = TRUE THEN IF in_pin_button_LED_previous = FALSE THEN flashing := NOT flashing;
END_IF out_pin_LED := TRUE;
ELSIF flashing = TRUE THEN out_pin_LED := oscillator_state;
ELSE out_pin_LED := FALSE;
END_IF in_pin_button_LED_previous := in_pin_button_LED;

在这里插入图片描述

● 在左侧菜单中的 DIO_8xLogicLevel节点上 ,右键单击并选择“编辑 IO 映射”。
在这里插入图片描述

● 单击小 +号打开 “Input 8 bits”行 。
在这里插入图片描述

● 双击您想要编辑的行上的图标。
● 将“Input Bit 7”映射到“in_pin_button_LED”(通过Application/PLC_PRG找到),将“Output Bit 7”映射到“out_pin_LED”。
或者双击在这里编辑也可以:
在这里插入图片描述

● 在 Application ‣ MainTask 中选择 Cyclic with 4 ms。
在这里插入图片描述

● 在 Application ‣ Profinet_CommunicationTask 中选择 10 ms 的循环。使用优先级 14。
在这里插入图片描述

4、烧录程序并测试

● 在顶部菜单中,使用 Build ‣ 生成代码。
在这里插入图片描述

● 使用顶部菜单 Online ‣ Login 将应用程序传输到Linux。 在弹出窗口中按 “是” 。
● 在顶部菜单中,使用 Debug ‣ Start 您可以使用顶部菜单 Tools ‣ “Update Linux”来跟踪控制器日志。单击 “系统信息” 按钮,然后查看 “运行时信息” 文本框。如果在网络上找不到 IO 设备,它将显示错误消息。使用 Wireshark 验证控制器是否每 5 秒发送一次 LLDP 数据包。每 15 秒,它会发送一个 ARP 数据包来询问(第一个?)IO 设备 IP 地址,并发送一个 PN-DCP 数据包来询问名为“rt-labs-dev”的 IO 设备。
实际我这里需要登录->运行:
在这里插入图片描述

wireshark抓包(参考这里:https://rt-labs.com/docs/p-net/how-to-guides/capturing-and-analyzing-ethernet-packets/,后面也会单独出一节怎么抓包分析profinet的总结,这里实时的内核总算抓到了PNIO的协议数据):
在这里插入图片描述

● 配置完在 Raspberry Pi 上运行的 Codesys softplc 后,您可以关闭用于配置它的个人计算机(运行 Codesys 桌面应用程序)。请记住,您需要每两个小时重新启动运行 Softplc 的 Raspberry Pi,如果使用试用版。
Codesys 故障排除 —————- ——- 如果您收到错误,声称缺少库,请单击左侧面板中的 PLC 逻辑 ‣ 应用程序 ‣ 库管理。Codesys 应该自动检测是否有任何缺失的库。单击 “库管理器”选项卡 下的 “下载缺少的库” 以下载任何缺少的库。(这里也是上一节提到的第一次运行会缺少库,需要挂tz下载解决)

六、最后

接下来理论上还可以安装树莓派的扩展包,利用两个树莓派虚拟机来模拟搭建PN的IO设备交互;此外,还应当利用p-net做更多的交互开发,但是目前项目因为一些原因停止了,所以研究也被迫暂停了,可惜,生活所迫,并不总是有的选,国内科研情况不太清楚,但是企业内部确实没有太多的研究空间,只是急着套现,问题就留给后人吧,也或许留给以后不为生活所迫的自己。

相关文章:

CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境

CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境 文章目录 CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境一、前言二、资料收集三、Ubuntu18.04从安装到更换实时内核1、下载安装Ubuntu18.042、下载安装实时内核&#xff0c;解决编…...

shell_70.Linux调整谦让度

调整谦让度 1.nice 命令 (1)nice 命令允许在启动命令时设置其调度优先级。要想让命令以更低的优先级运行&#xff0c;只需用nice 命令的-n 选项指定新的优先级即可&#xff1a; $ nice -n 10 ./jobcontrol.sh > jobcontrol.out & [2] 16462 $ $ ps -p 16462 -o pid,…...

【jvm】虚拟机栈

目录 一、背景二、栈与堆三、声明周期四、作用五、特点&#xff08;优点&#xff09;六、可能出现的异常七、设置栈内存大小八、栈的存储单位九、栈运行原理十、栈帧的内部结构10.1 说明10.2 局部变量表10.3 操作数栈10.4 动态链接10.5 方法返回地址10.6 一些附加信息 十一、代…...

Flink SQL Over 聚合详解

Over 聚合定义&#xff08;⽀持 Batch\Streaming&#xff09;&#xff1a;**特殊的滑动窗⼝聚合函数&#xff0c;拿 Over 聚合 与 窗⼝聚合 做对⽐。 窗⼝聚合&#xff1a;不在 group by 中的字段&#xff0c;不能直接在 select 中拿到 Over 聚合&#xff1a;能够保留原始字段…...

【鸿蒙软件开发】ArkUI之容器组件Counter(计数器组件)、Flex(弹性布局)

文章目录 前言一、Counter1.1 子组件1.2 接口1.3 属性1.4 事件 1.5 示例代码二、Flex弹性布局到底是什么意思&#xff1f; 2.1 权限列表2.2 子组件2.3 接口参数 2.4 示例代码示例代码1示例代码2 总结 前言 Counter容器组件&#xff1a;计数器组件&#xff0c;提供相应的增加或…...

PyTorch入门学习(十一):神经网络-线性层及其他层介绍

目录 一、简介 二、PyTorch 中的线性层 三、示例&#xff1a;使用线性层构建神经网络 四、常见的其他层 一、简介 神经网络是由多个层组成的&#xff0c;每一层都包含了一组权重和一个激活函数。每层的作用是将输入数据进行变换&#xff0c;从而最终生成输出。线性层是神经…...

农业水土环境与面源污染建模及对农业措施响应

目录 ​专题一 农业水土环境建模概述 专题二 ArcGIS入门 专题三 农业水土环境建模流程 专题四 DEM数据制备流程 专题五 土地利用数据制备流程 专题六 土壤数据制备流程 专题七 气象数据制备流程 专题八 农业措施数据制备流程 专题九 参数率定与结果验证 专题十 模型结…...

回归预测 | Matlab实现MPA-BP海洋捕食者算法优化BP神经网络多变量回归预测(多指标、多图)

回归预测 | Matlab实现MPA-BP海洋捕食者算法优化BP神经网络多变量回归预测&#xff08;多指标、多图&#xff09; 目录 回归预测 | Matlab实现MPA-BP海洋捕食者算法优化BP神经网络多变量回归预测&#xff08;多指标、多图&#xff09;效果一览基本介绍程序设计参考资料 效果一览…...

扫地机器人遇瓶颈?科沃斯、石头科技“突围”

曾经&#xff0c;扫地机器人行业也曾有过高光时刻&#xff0c;而如今&#xff0c;扫地机器人已然告别高增长阶段&#xff0c;增速开始放缓。据中怡康零售推总数据显示&#xff0c;2023年上半年&#xff0c;中国扫地机器人市场规模为63.6亿元人民币&#xff0c;同比下滑了0.6%&a…...

基于SSM的防疫信息登记系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

VBA将字典按照item的值大小排序key

方法&#xff1a;利用数组交换位置 sub 字典排序() s 0 Dim arr(dic1.keys)将字典key和value存入一个数组中 For Each ke In dic1.keysarr(s) Array(ke, dic1(ke))s s 1 Next进行排序 For i LBound(arr) To UBound(arr) - 1For j i 1 To UBound(arr)If arr(i)(1) >…...

MySQL第四讲·如何正确设置主键?

你好&#xff0c;我是安然无虞。 文章目录 主键&#xff1a;如何正确设置主键&#xff1f;业务字段做主键自增字段做主键手动赋值字段做主键 主键总结 主键&#xff1a;如何正确设置主键&#xff1f; 前面我们在讲解存储的时候&#xff0c;有提到过主键&#xff0c;它可以唯一…...

K8S知识点(三)

&#xff08;1&#xff09;环境搭建-环境初始化 Centos的版本是有要求的必须是7.5或以上&#xff0c;否则安装出来的集群是有问题的Node节点可能加入不到集群中来 详细步骤 1.同时连接三台服务器&#xff1a;查看一下版本 是否正确 2.主机名解析&#xff0c;方便节点之间的…...

c语言刷题(9周)(6~10)

输入10个不等的整数创建数组a[10]&#xff0c;在数组a中找是否存在整数t。若存在显示找到了及下标位置&#xff0c;若不存在显示error。 题干输入10个不等的整数创建数组a[10]&#xff0c;在数组a中找是否存在整数t。若存在显示找到了及下标位置&#xff0c;若不存在显示error…...

SpringBoot集成-阿里云对象存储OSS

文章目录 阿里云 OSS 介绍准备工作SpringBoot 集成 OSS 阿里云 OSS 介绍 阿里云对象存储 OSS &#xff08;Object Storage Service&#xff09;&#xff0c;是一款海量、安全、低成本、高可靠的云存储服务。使用 OSS&#xff0c;你可以通过网络随时存储和调用包括文本、图片、…...

fastapi-Headers和Cookies

在FastAPI中&#xff0c;Headers是一个特殊的类型&#xff0c;用于处理HTTP请求头&#xff08;Headers&#xff09;。Headers允许你接收、访问和修改HTTP请求中的头部信息。 使用Headers&#xff0c;你可以在FastAPI的路由视图中将请求头作为参数接收&#xff0c;并对它们进行…...

云计算的思想、突破、产业实践

文章目录 &#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作者、产品软文创造者、技术文章评审老师、问卷调查设计师、个人社区创始人、开源项目贡献者。&#x1f30e;跑过十五…...

【漏洞复现】Apache_HTTP_2.4.49_路径穿越漏洞(CVE-2021-41773)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞验证方式一 curl方式二 bp抓包 说明内容漏洞编号CVE-2021-41773漏洞名称Apache HTTP 路径穿越漏洞漏…...

AD9371 官方例程 NO-OS 主函数 headless 梳理

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…...

WSL 下载

可以使用单个命令安装运行 WSL 所需的一切内容。 在管理员模式下打开 PowerShell 或 Windows 命令提示符&#xff0c;方法是右键单击并选择“以管理员身份运行”&#xff0c;输入 wsl --install 命令&#xff0c;然后重启计算机。 首先查看可以下载的版本 最后再运行wsl --ins…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...