TwinCAT3 Modbus-TCP Client/Server使用

目录

一、环境配置和准备

1、PLC中安装TF6250-Modbus-TCP库

2、勾选TF6250的license

3、PLC工程中添加Tc2_ModbusSrv库文件

4、分别创建测试ModbusTCP测试的Server和Client程序

二、PLC作为Client端

1、设置测试电脑IP地址

2、运行MobusTCP测试工具

3、PLC端程序编写

(1)读取离散量输入

(2)读取线圈

(3)单个线圈写操作

(4)多个线圈写操作

(5)读取输入寄存器值

(6)读取保持寄存器值

(7)单个保持寄存器写操作

(8)多个保持寄存器写操作

三、PLC作为Server端

1、PLC程序

(1)寄存器变量定义

2、Client客户端工具

3、通讯测试

(1)客户端写操作

四、PLC中使用服务端和客户端程序进行寄存器操作

1、PLC程序

(1)服务端程序

(2)客户端程序

2、通讯测试

(1)寄存器说明

(2)PLC的Client程序读操作

(3)PLC的Client程序写操作

五、测试工程下载


一、环境配置和准备

1、PLC中安装TF6250-Modbus-TCP库

PLC地址

安装库文件

PLC硬件环境设置、库文件安装、防火墙设置等,参见博客文章:TwinCAT3中ModbusTCP Server和C# Client连接-CSDN博客

2、勾选TF6250的license

3、PLC工程中添加Tc2_ModbusSrv库文件

4、分别创建测试ModbusTCP测试的Server和Client程序

将创建的程序添加到Task中。

二、PLC作为Client端

1、设置测试电脑IP地址

测试电脑IP地址和PLC的IP地址在一个网段内。

2、运行MobusTCP测试工具

使用测试工具ModSim32,创建ModbusTCP Server服务端。端口号默认502,测试软件默认IP地址是计算机本地地址。

3、PLC端程序编写

定义变量:ModbusTCP Server服务端ip地址

Server_IpAddress	:STRING:='192.168.1.33';        //ModbusTCP Server服务端ip地址

(1)读取离散量输入

定义变量

	02: Input Status 读取//fbReadInputs      : FB_MBReadInputs;						(*读取离散量输入功能块*)bReadInputs       : BOOL;									(*读取离散量输入执行条件*)nQuantityinput    : WORD:=1 ;								(*读取离散量输入个数*)nMBAddrinput      : WORD:=1 ;								(*读取离散量输入起始地址*)arrDatainput      : BYTE;									(*存放离散量输入的值*)

程序

nUnitID:Modbus-Tcp从站号。如果实际中不知道从站号多少,默认写1就行。

fbReadInputs(//sIPAddr:='169.254.0.1' , 				//modsim32的IP地址sIPAddr:=Server_IpAddress , 				//modsim32的IP地址nTCPPort:=502, 							//Modbus-Tcp端口号nUnitID:=1 , 							//Modbus-Tcp从站号nQuantity:=nQuantityinput , 			//读取离散量输入个数nMBAddr:= nMBAddrinput, 				//读取离散量输入 Modbus起始地址cbLength:= SIZEOF(arrDatainput), 		//存放离散量输入变量的个数pDestAddr:=ADR(arrDatainput), 			//存放离散量输入变量指针起始地址bExecute:=bReadInputs , 				//读取离散量输入执行条件tTimeout:=T#1S ,    bBusy=> , bError=> , nErrId=> , cbRead=> );

运行测试1,单个离散量读操作:

对10002写1

PLC读取

读取个数是1,nQuantityinput值为1

起始地址nMBAddrinput写1对应的寄存器是10002。离散变量实际地址=10001+nMBAddrinput

读取

运行测试2,多个离散量读操作:

对10002写1、10003写1、10004写1

PLC读取

设置读取个数是3。读取出来的值是7。(三个位都为1,就是7)

(2)读取线圈

定义变量

    fbReadCoils       			: FB_MBReadCoils;				(*读取线圈功能块*) bReadCoils        			: BOOL; 						(*读取线圈执行条件*)      nQuantitycoils    			: WORD :=3;  					(*读取线圈个数*) nMBAddrcoils      			: WORD :=1;  					(*读取线圈起始地址*) arrDatacoils      			: BYTE;							(*存放线圈的值*)

PLC程序

fbReadCoils(//sIPAddr:='169.254.0.1' , 				//modsim32的IP地址sIPAddr:=Server_IpAddress , 				//modsim32的IP地址nTCPPort:=502 ,							//Modbus-Tcp端口号 nUnitID:=1 , 							//Modbus-Tcp从站号nQuantity:=nQuantitycoils , 			//读取线圈个数nMBAddr:=nMBAddrcoils , 				//读取线圈 Modbus起始地址cbLength:=SIZEOF(arrDatacoils) , 		//存放线圈变量的个数pDestAddr:=ADR(arrDatacoils) , 			//存放线圈变量指针起始地址bExecute:=bReadCoils , 					//读取线圈执行条件tTimeout:= T#1S, bBusy=> , bError=>, nErrId=> , cbRead=> );

运行测试,多个线圈读操作:

对线圈00005/00006/0007/0008/00009写1操作

PLC

nMBAddrcoils:读取线圈的地址

nQuantitycoils:读取的线圈个数

线圈的实际地址=00001+nMBAddrcoils。

00005对应的nMBAddrcoils地址设置就是4。

5个线圈的值都是ON,即31

PLC中数据显示,2进制、10进制、16进制显示设置

(3)单个线圈写操作

定义变量

    fbWriteSingleCoil       	: FB_MBWriteSingleCoil;			(*写入单个线圈功能块*)bWriteSingleCoil            : BOOL;							(*写入单个线圈执行条件*)nMBAddrWriteSingleCoil      : WORD := 3;					(*写入单个线圈Modbus 地址*)nValueWriteSingleCoil       : WORD := 16#FF00;				(*16#FF00:True;16#0000:False*)

PLC程序

fbWriteSingleCoil(//sIPAddr:='169.254.0.1' , 				//modsim32的IP地址sIPAddr:=Server_IpAddress , 				//modsim32的IP地址nTCPPort:= 502, 						//Modbus-Tcp端口号nUnitID:= 1, 							//Modbus-Tcp从站号nMBAddr:=nMBAddrWriteSingleCoil , 		//写入单个线圈Modbus起始地址nValue:=nValueWriteSingleCoil , 		//写入单个线圈的值:16#FF00:True;16#0000:FalsebExecute:=bWriteSingleCoil , 			//写入单个线圈执行条件tTimeout:=T#1S , bBusy=> , bError=> , nErrId=> );

运行测试,单个线圈写操作:

对线圈00004写操作

线圈地址nMBAddrWriteSingleCoil值设置:3。(线圈地址=00001+nMBAddrWriteSingleCoil)

nValueWriteSingleCoil值设置:

TRUE:16#FF00,即10进制65280。

FALSE:16#0000,即10进制0。

(4)多个线圈写操作

变量定义

  	fbWriteCoils       			: FB_MBWriteCoils;				(*写入线圈功能块*)bWriteCoils      			: BOOL;							(*写入线圈执行条件*)nQuantityWriteCoils 		: WORD := 10;					(*写入离散量输入个数*)nMBAddrWriteCoils   		: WORD := 14;					(*写入离散量输入起始地址*)arrDataWriteCoils   		: ARRAY[1..2] OF  BYTE  := [16#11, 16#33];(*写入离散量输入的值*)

PLC程序

fbWriteCoils(//sIPAddr:='169.254.0.1' , 				//modsim32的IP地址sIPAddr:=Server_IpAddress , 				//modsim32的IP地址nTCPPort:=502, 							//Modbus-Tcp端口号nUnitID:=1 , 							//Modbus-Tcp从站号nQuantity:= nQuantityWriteCoils , 		//写入线圈个数nMBAddr:=nMBAddrWriteCoils , 			//写入线圈Modbus起始地址cbLength:=SIZEOF(arrDataWriteCoils), 	//写入线圈的变量个数pSrcAddr:=ADR(arrDataWriteCoils), 		//写入线圈的变量指针起始地址bExecute:=bWriteCoils , 				//写入线圈的执行条件tTimeout:=T#1S , bBusy=> , bError=> , nErrId=> );

运行测试,多个线圈写操作:

写16个线圈,线圈地址从00006开始。(00001+nMBAddrWriteCoils,nMBAddrWriteCoils设置值为5)。

1个BYTE是8位,8位都是1即BYTE值是255。

BYTE数组arrDataWriteCoils长度为2、即16位。最多可以写16个线圈操作。

注意:的线圈BYTE个数要和数组长度相同,16个线圈2个BYTE。对应否则会报错。)

(5)读取输入寄存器值

变量定义

    fbReadInputRegs    : FB_MBReadInputRegs;		(*读取输入寄存器功能块*)bReadInputRegs     : BOOL;						(*读取输入寄存器执行条件*)nQuantityInputRegs : WORD := 3;					(*读取输入寄存器个数*)nMBAddrInputRegs   : WORD:= 2;					(*读取输入寄存器起始地址*)arrDataInputRegs   : ARRAY [1..3] OF WORD;		(*存放输入寄存器的值*)

PLC程序

fbReadInputRegs(//sIPAddr:='169.254.0.1' , 				//modsim32的IP地址sIPAddr:=Server_IpAddress , 				//modsim32的IP地址nTCPPort:=502, 							//Modbus-Tcp端口号nUnitID:=1, 							//Modbus-Tcp从站号nQuantity:=nQuantityInputRegs, 			//读取输入寄存器个数nMBAddr:=nMBAddrInputRegs  , 			//读取输入寄存器Modbus起始地址cbLength:= SIZEOF(arrDataInputRegs),	//存放输入寄存器变量的个数和指针起始地址pDestAddr:=ADR(arrDataInputRegs), 		//存放输入寄存器变量指针起始地址bExecute:= bReadInputRegs  , 			//读取输入寄存器执行条件tTimeout:=T#1S , bBusy=> , bError=> , nErrId=> , cbRead=> );

运行测试,多个输入寄存器读操作:

给30003、30004、30005赋值

PLC读

寄存器地址30003=30001+nMBAddrInputRegs,nMBAddrInputRegs设置值2

多三个寄存器

注意:读的寄存器个数要和数组长度相同,否则会报错。)

(6)读取保持寄存器值

变量定义:

    fbReadRegs        			: FB_MBReadRegs;				(*读取保持寄存器功能块*)bReadRegs         			: BOOL;     					(*读取保持寄存器执行条件*) nQuantityregs     			: WORD:=2;   					(*读取保持寄存器个数*)nMBAddrregs       			: WORD:=24;   					(*读取保持寄存器起始地址*)arrDataregs       			: ARRAY [1..2] OF WORD;			(*存放保持寄存器的值*)

PLC程序:

fbReadRegs(//sIPAddr:='169.254.0.1' , 				//modsim32的IP地址sIPAddr:=Server_IpAddress , 				//modsim32的IP地址nTCPPort:=502,							//Modbus-Tcp端口号nUnitID:= 1, 							//Modbus-Tcp从站号nQuantity:=nQuantityregs, 				//读取保持寄存器个数nMBAddr:=nMBAddrregs , 					//读取保持寄存器Modbus起始地址cbLength:=SIZEOF(arrDataregs) , 		//存放保持寄存器变量的个数pDestAddr:=ADR(arrDataregs) , 			//存放保持寄存器变量指针起始地址bExecute:=bReadRegs, 					//读取保持寄存器执行条件tTimeout:= T#1S , bBusy=> , bError=> , nErrId=> , cbRead=> );

运行测试,多个保持寄存器读操作:

读保持寄存器40005、40006

寄存器首地址40005=40001+nMBAddrregs,设置nMBAddrregs值为4。读两个寄存器。

注意:读的寄存器个数要和数组长度相同,否则会报错。)

(7)单个保持寄存器写操作

变量定义:

 	fbWriteSingleReg            : FB_MBWriteSingleReg;			(*写入单个寄存器功能块*)bWriteSingleReg             : BOOL;							(*写入单个寄存器执行条件*)nMBAddrSingleReg            : WORD := 4;					(*写入单个寄存器Modbus 地址*)nValueSingleReg             : WORD := 16#1234;				(*写入单个寄存器数值*)

PLC程序:

fbWriteSingleReg(//sIPAddr:='169.254.0.1' , 				//modsim32的IP地址sIPAddr:=Server_IpAddress , 				//modsim32的IP地址nTCPPort:=502, 							//Modbus-Tcp端口号nUnitID:=1 , 							//Modbus-Tcp从站号nMBAddr:=nMBAddrSingleReg, 				//写入单个保持寄存器起始地址nValue:=nValueSingleReg, 				//写入单个寄存器数值bExecute:=bWriteSingleReg , 			//写入单个寄存器的执行条件tTimeout:=T#1S , bBusy=> , bError=> , nErrId=> );	

运行测试,单个保持寄存器写操作:

写保持寄存器40005。40005=40001+nMBAddrSingleReg,设置nMBAddrSingleReg值为4

(8)多个保持寄存器写操作

变量定义:

  	fbWriteRegs         		: FB_MBWriteRegs;				(*写入保持寄存器功能块*)bWriteRegs          		: BOOL;							(*写入保持寄存器个数*)nQuantityWriteRegs  		: WORD := 4;					(*写入保持寄存器个数*)nMBAddrWriteRegs    		: WORD := 4;					(*写入保持寄存器起始地址*)arrDataWriteRegs			: ARRAY[1..4] OF WORD := [1122, 3344, 5566, 7788];(*写入保持寄存器的值*)

PLC程序:

fbWriteRegs(//sIPAddr:='169.254.0.1' , 				//modsim32的IP地址sIPAddr:=Server_IpAddress , 				//modsim32的IP地址nTCPPort:=502, 							//Modbus-Tcp端口号nUnitID:=1 ,							//Modbus-Tcp从站号nQuantity:=nQuantityWriteRegs , 		//写入保持寄存器个数nMBAddr:= nMBAddrWriteRegs , 			//写入保持寄存器起始地址cbLength:= SIZEOF(arrDataWriteRegs), 	//写入变量的个数和指针起始地址pSrcAddr:=ADR(arrDataWriteRegs) , 		//写入变量指针起始地址bExecute:= bWriteRegs , 				//写入保持寄存器的执行条件tTimeout:=T#1S  , bBusy=> , bError=> , nErrId=> );

运行测试,多个保持寄存器写操作:

写保持寄存器40003、40004、40005,寄存器首地址40003=40001+nMBAddrWriteRegs,设置nMBAddrWriteRegs值2

注意:寄存器个数要和数组长度相同,否则会报错。)

三、PLC作为Server端

1、PLC程序

(1)寄存器变量定义

    arr1							AT%MB0			:ARRAY[1..5]		OF		WORD;		//起始地址是12289arr2							AT%MB10			:ARRAY[1..10]		OF		WORD;		//起始地址是12294

2、Client客户端工具

使用测试工具ModScan32模拟ModbusTCP Client客户端。

打开ModScan32

根据Server服务端PLC 中定义的寄存器,做如下设置

MB0对应的起始地址是12289。

寄存器说明:一个MW寄存器对应两个MB寄存器,比如MW0是MB0、MB1组成。一个12289对应一个MW0寄存器,即对应MB0、MB1。

3、通讯测试

(1)客户端写操作

客户端ModScan32对服务端PLC的寄存器写操作

PLC服务端接收的

(2)PLC服务端写操作

PLC寄存器写

客户端ModScan32接收的

四、PLC中使用服务端和客户端程序进行寄存器操作

1、PLC程序

(1)服务端程序

PLC服务端程序不变,就定义读写的寄存器变量

变量定义

    arr1							AT%MB0			:ARRAY[1..5]		OF		WORD;		//起始地址是12289arr2							AT%MB10			:ARRAY[1..10]		OF		WORD;		//起始地址是12294

(2)客户端程序

变量定义

Server_IpAddress	:STRING:='192.168.1.21';03: Holding Register 读取&写入fbReadRegs        			: FB_MBReadRegs;				(*读取保持寄存器功能块*)bReadRegs         			: BOOL;     					(*读取保持寄存器执行条件*) nQuantityregs     			: WORD:=5;   					(*读取保持寄存器个数*)nMBAddrregs       			: WORD:=12288;   				(*读取保持寄存器起始地址*)			//	寄存器地址=40001+nMBAddrregsarrDataregs       			: ARRAY [1..5] OF WORD;			(*存放保持寄存器的值*)fbWriteRegs         		: FB_MBWriteRegs;				(*写入保持寄存器功能块*)bWriteRegs          		: BOOL;							(*写入保持寄存器个数*)nQuantityWriteRegs  		: WORD := 10;					(*写入保持寄存器个数*)nMBAddrWriteRegs    		: WORD := 12294;				(*写入保持寄存器起始地址*)			//	寄存器地址=40001+nMBAddrWriteRegsarrDataWriteRegs			: ARRAY[1..10] OF WORD := [11, 22, 33, 44,55,66,77,88,99,100];		(*写入保持寄存器的值*)fbWriteSingleReg            : FB_MBWriteSingleReg;			(*写入单个寄存器功能块*)bWriteSingleReg             : BOOL;							(*写入单个寄存器执行条件*)nMBAddrSingleReg            : WORD := 4;					(*写入单个寄存器Modbus 地址*)nValueSingleReg             : WORD := 16#1234;				(*写入单个寄存器数值*)
//

PLC程序

fbReadRegs(//sIPAddr:='169.254.0.1' , 				//modsim32的IP地址sIPAddr:=Server_IpAddress , 				//modsim32的IP地址nTCPPort:=502,							//Modbus-Tcp端口号nUnitID:= 1, 							//Modbus-Tcp从站号nQuantity:=nQuantityregs, 				//读取保持寄存器个数nMBAddr:=nMBAddrregs , 					//读取保持寄存器Modbus起始地址cbLength:=SIZEOF(arrDataregs) , 		//存放保持寄存器变量的个数pDestAddr:=ADR(arrDataregs) , 			//存放保持寄存器变量指针起始地址bExecute:=bReadRegs, 					//读取保持寄存器执行条件tTimeout:= T#1S , bBusy=> , bError=> , nErrId=> , cbRead=> );fbWriteRegs(//sIPAddr:='169.254.0.1' , 				//modsim32的IP地址sIPAddr:=Server_IpAddress , 				//modsim32的IP地址nTCPPort:=502, 							//Modbus-Tcp端口号nUnitID:=1 ,							//Modbus-Tcp从站号nQuantity:=nQuantityWriteRegs , 		//写入保持寄存器个数nMBAddr:= nMBAddrWriteRegs , 			//写入保持寄存器起始地址cbLength:= SIZEOF(arrDataWriteRegs), 	//写入变量的个数和指针起始地址pSrcAddr:=ADR(arrDataWriteRegs) , 		//写入变量指针起始地址bExecute:= bWriteRegs , 				//写入保持寄存器的执行条件tTimeout:=T#1S  , bBusy=> , bError=> , nErrId=> );fbWriteSingleReg(//sIPAddr:='169.254.0.1' , 				//modsim32的IP地址sIPAddr:=Server_IpAddress , 				//modsim32的IP地址nTCPPort:=502, 							//Modbus-Tcp端口号nUnitID:=1 , 							//Modbus-Tcp从站号nMBAddr:=nMBAddrSingleReg, 				//写入单个保持寄存器起始地址nValue:=nValueSingleReg, 				//写入单个寄存器数值bExecute:=bWriteSingleReg , 			//写入单个寄存器的执行条件tTimeout:=T#1S , bBusy=> , bError=> , nErrId=> );	

2、通讯测试

(1)寄存器说明

一个MW寄存器对应两个MB寄存器,比如MW0对应12289、12289对应MB0、MB1

PLC 客户端程序中变量

读寄存器地址=40001+nMBAddrregs        则MB0对应设置nMBAddrregs12288

写寄存器地址=40001+nMBAddrWriteRegs        

(2)PLC的Client程序读操作

先给服务端的寄存器赋值

PLCServer程序读

(3)PLC的Client程序写操作

PLC客户端写寄存器

PLC服务端接收到客户端写的寄存器

五、测试工程下载

https://download.csdn.net/download/panjinliang066333/88609166

工程包括:

(1)客户端、服务端PLC程序

(2)TF6250-Modbus-TCP库文件安装软件

(3)ModbusTCP测试工具

模拟客户端:modscan32

模拟服务端:modsim32

(4)倍福官方简单测试参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/212596.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

报错处理集

这个报错处理集的错误来源于编译arm平台的so文件产生的。但是后续可以补充成linux一个大的错误处理集。 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 第一次整理的时间是2023年12月8日10:05:59,以下错误来源于欧拉系统编译…

LoadBalancer将服务暴露到外部实现负载均衡Openelb-layer2模式配置介绍

目录 一.openelb简介 二.主要介绍layer2模式 1.简介 2.原理 3.部署 (1)先在集群master上开启kube-proxy的strictARP (2)应用下载openelb.yaml(需要修改镜像地址) (3)编写yam…

字节跳动面试挂在2面,复盘后,决定二战.....

先说下我基本情况,本科不是计算机专业,现在是学通信,然后做图像处理,可能面试官看我不是科班出身没有问太多计算机相关的问题,因为第一次找工作,字节的游戏专场又是最早开始的,就投递了&#xf…

dockerfile简单实践部署(jenkins,wordpress)

实现部署jenkins的流程 配置java环境,导入jenkins包,运行命令 java -jar jenkins包,这里为了减少进入jenkins的web端安装插件,将插件提前部署到容器内。 制作dockerfile 创建镜像所在的文件夹和Dockerfile文件 mkdir /test cd …

岳阳楼3D模型纹理贴图

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 岳阳楼,位于湖南省岳阳市岳阳楼区洞庭北路,地…

会声会影2024软件还包含了视频教学以及模板素材

会声会影2024中文版是一款加拿大公司Corel发布的视频编软件。会声会影2024官方版支持视频合并、剪辑、屏幕录制、光盘制作、添加特效、字幕和配音等功能,用户可以快速上手。会声会影2024软件还包含了视频教学以及模板素材,让用户剪辑视频更加的轻松。 会…

使用高防IP防护有哪些优势

高防IP是针对互联网服务器在遭受大流量的DDoS攻击后导致服务不可用的情况下,推出的付费增值服务,用户可以通过配置高防IP,将攻击流量引流到高防IP,确保源站的稳定可靠。高防IP相当于搭建完转发的服务器。 高防IP有两种接入方式&a…

CodeBlocks添加头文件,解决fatal error: ui.h No such file or directory

问题描述 在使用codeblocks工具进行LVGL仿真过程中报错,找不到头文件 原因分析: 没有将头文件加入编辑器搜索的目录中,编译时找不到头文件。 解决方案: 将要包含的头文件的目录加进去就可以了

kyuubi整合flink yarn application model

目录 概述配置flink 配置kyuubi 配置kyuubi-defaults.confkyuubi-env.shhive 验证启动kyuubibeeline 连接使用hive catalogsql测试 结束 概述 flink 版本 1.17.1、kyuubi 1.8.0、hive 3.1.3、paimon 0.5 整合过程中,需要注意对应的版本。 注意以上版本 姊妹篇 k…

06、pytest将多个测试放在一个类中

官方用例 # content of test_class.py # 实例1 class TestClass:def test_one(self):x "this"assert "h" in xdef test_two(self):x "hello"assert hasattr(x,"check")# content of test_class_demo.py # 每个测试都有唯一的类实例…

GaussDB数据库语法及gsql入门

一、GaussDB数据库语法入门 之前我们讲了如何连接数据库实例,那连接数据库后如何使用数据库呢?那么我们今天就带大家了解一下GaussDB,以下简称GaussDB的基本语法。 关于如何连接数据库,请戳这里。 学习本节课程之后&#xff0c…

python画立体玫瑰图

1.源代码 from matplotlib import cm import matplotlib.pyplot as plt import numpy as npfig plt.figure()#显示绘图窗口 ax fig.add_subplot(projection 3d)#绘图窗口设置 [x, t] np.meshgrid(np.array(range(25))/24.0, np.arange(0, 575.5, 0.5)/575*17*np.pi-2*np.pi…

玩转代码|组件封装之Slots、Emit和Props穿透

目录 背景 准备工作 Slots穿透方案-单子组件 Slots穿透方案-多子组件 Props和Emit穿透方案-单子组件 Props和Emit穿透方案-多子组件 最后 背景 组内多人共同开发时免不了基于某UI库二次封装组件来适应项目业务场景的情况,但不知道大家有没有遇到过需要兼容部…

伦茨科技宣布ST17H6x芯片已通过Apple Find My「查找」认证

深圳市伦茨科技有限公司(以下简称“伦茨科技”)发布ST17H6x Soc平台。成为继Nordic之后全球第二家取得Apple Find My「查找」认证的芯片厂家,该平台提供可通过Apple Find My认证的Apple查找(Find My)功能集成解决方案。…

DevOps搭建(一)-之swappiness安装详细步骤

1、安装swappiness yum install procps 修改配置 vim /etc/sysctl.conf 在配置文件中添加参数 vm.swappiness10 使生效 sysctl -p 如何确认swap分区是否开启 # free -mtotal used free shared buff/cache available Mem: 971 …

【React + Typescript】使用WebPack包管理、各种扩展插件组成的初始模板,开源协议:CC-BY-4.0

React Typescript Webpack 模板 模板展示项目结构使用的部分扩展包页面配置代码Layout 公共容器组件路由Jspackage.json 开源模板下载TIP 模板展示 项目结构 使用的部分扩展包 📂 System ├── 📂 Plugin │ ├── 📄 file-loader | 在处…

为什么SSL证书要设置有效期?如何避免SSL证书过期?

作为企业网站安全防护的基础设施之一,SSL证书对于验证网站真实性和保障网站数据传输安全具有重要作用。然而,当SSL证书过期时,用户与网站之间的传输过程就会处于暴露状态,很容易造成数据被监听、篡改和泄露。那么为什么SSL证书要设…

vue 前端实现login页登陆 验证码

实现效果 // template <el-form :model"loginForm" :rules"fieldRules" ref"loginForm" label-position"left" label-width"0px" class"login-container"><span class"tool-bar"></sp…

Docker本地部署Drupal内容管理框架并实现公网远程访问

文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal6. 固定Drupal 公网地址7. 结语 前言 Dupal是一个强大的CMS&#xff0c;适用于各种不同的网站项目&#xff0c;从小型个人博客到大型企业级门户网站。它…

AtCoder ABC周赛2023 11/4 (Sat) D题题解

目录 原题截图&#xff1a; 题目大意&#xff1a; 主要思路&#xff1a; 注意事项&#xff08;很多人再这个地方掉坑&#xff09;&#xff1a; 代码&#xff1a; 原题截图&#xff1a; 题目大意&#xff1a; 给你两个数组&#xff08;A和B)长度都为n&#xff0c;然你求出一…