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

【factoryio】使用SCL编写 <机械手控制> 程序

使用虚拟工厂软件和博图联合仿真来编写【scl】机械手控制程序

文章目录

目录

文章目录

 前言

二、程序编写

1.机械手运行部分

2.启动停止部分

3.急停复位部分

 三、完整代码

总结


 前言

在前面我们一起写过了许多案例控制的编写,在这一章我们一起来编写一下一个仿真机械手程序(用SCL),这是一个大的加工中心其中一部分,完整的是:两个机械手完成进料和放托盘,经过传送带后可以进行升降或者进入仓储部分来存放,这里我们先完成第1个机械手控制部分,它的主要工作是完成取料和放料。


一、控制要求

程序要求: 

1.按下启动按钮,出料,传送带A启动,当S传感器检测到物体时,传送带A停止运行,1s后机械手左转,在左转到位后停1s,吸盘得电0.5s后,机械手下降,当抓取到物体1s后机械手上升,上升到位后延时1s右转,右转到位后1s,机械手下降,下降到位后延时0.5s,吸盘失电,同时机械手上升,当料到位传感器检测到物体时 得电,B传送带运行,运行3s后,同时机械臂左转回到原位,3s时间到后,B传动带停止,机械手进入下一循环,继续取料上料。


2.在程序运行时如果按下停止按钮,程序会在循环完一次后回到原位停止操作,并且可以再次启动运行。

3.在程序运行时如果按下急停按钮,程序动作立即停止,当按下复位按钮后程序才能继续运行,在急停期间其他按钮无效。

factoryio(虚拟工厂)参考图:

 到这里看过控制要求和场景后,大家可以自己试着用SCL编写一下,控制要求是参考前面机械手改进的,大家也可以自己写一下控制要求来编写。




 I/O分配:

 I/O分配一定要在题目要求中找到并判断是输入还是输出,这里我写出来了。下面5个指示灯是代表机械手的个个动作,加不加都可以。

输入输出
名称作用地址名称作用地址
SB1启动I0.0A传送带传送带Q0.0
SB2停止I0.1B传送带传送带Q0.1
SB3急停按钮I0.2吸盘Q0.2
SB4复位按钮I0.3机械手Q0.3
S传感器传感器I0.4机械臂右转Q0.4
SQ1下降上升到位传感器I0.5机械臂左转Q0.5
SQ5左右转到位传感器I0.6L1灯指示灯Q0.6
SQ3抓起到位传感器I0.7L2灯指示灯Q0.7
SQ2料到位传感器I1.0L3灯指示灯Q1.0

L4灯指示灯Q1.1
L5灯指示灯Q1.2

 布置场景:

 场景这里自己建一下就可以了,要注意:虚拟工厂变量名和I/O分配一定要和博图中变量和名称的相同。建立好分配好后,就可以和博图仿真连接上了,注意要在主程序带上一个仿真驱动块,要不然连接不上。(如果没有的话可以在博主资源里面下载,然后导入进去就好啦!)

 




二、程序编写

 这里程序的控制可以分3个部分:机械手运行,启动停止,急停复位。

到这里我们其实可以知道要用什么语句来编写!case !对!机械手运行要一步一步来嘛,那case语句就比较合适啦!

1.机械手运行部分

好的,我们来开始这一部分的编写:

按下启动按钮,出料,传送带A启动,当S传感器检测到物体时,传送带A停止运行,1s后机械手左转,在左转到位后停1s,吸盘得电0.5s后,机械手下降,当抓取到物体1s后机械手上升,上升到位后延时1s右转,右转到位后1s,机械手下降,下降到位后延时0.5s,吸盘失电,同时机械手上升,当料到位传感器检测到物体时 得电,B传送带运行,运行3s后,同时机械臂左转回到原位,3s时间到后,B传动带停止,机械手进入下一循环,继续取料上料。

 这里我们一步一步走,按下启动后,传送带A启动,然后等待料到达传感器,到达后进行下一步,2,3,4,5,6,7,8,9就这样就将机械手部分大概完成了。到第10步时将中继复位然后进入一个循环就好了。 

T[0].TON(IN := #ZJ1,PT := T#0.5s);
#T[1].TON(IN := #ZJ2,PT := T#0.5s);
#T[2].TON(IN := #ZJ3,PT := T#0.5s);
#T[3].TON(IN := #ZJ4,PT := T#1s);
#T[4].TON(IN := #ZJ5,PT := T#1s);
#T[5].TON(IN := #ZJ6,PT := T#1s);
#T[6].TON(IN := #ZJ7,PT := T#0.5s);
#T[7].TON(IN := #ZJ8,PT := T#1s);
#T[8].TON(IN := #ZJ9,PT := T#0.5s);CASE #M OF0:IF "启动" THEN"A传送带" := 1;          #M := 1;END_IF;1:IF "S传感器" THEN"A传送带" := 0;"B传送带" := 0;#ZJ1 := 1;END_IF;IF #T[0].Q THEN#M := 2;END_IF;2:"机械臂左转" := 1;IF "SQ5左右转到位" THEN#ZJ2 := 1;END_IF;IF #T[1].Q THEN"机械臂左转" := 0;#M := 3;END_IF;3:"吸盘" := 1;"机械手" := 1;IF "SQ1下降上升到位" & "SQ3抓起到位" THEN#ZJ3 := 1;END_IF;IF #T[2].Q THEN#M := 4;END_IF;4:"机械手" := 0;#ZJ4 := 1;IF #T[3].Q THEN"机械臂右转" := 1;#ZJ5 := 1;END_IF;IF #T[4].Q THEN"机械臂右转" := 0;#M := 5;END_IF;5:"机械臂右转" := 1;#ZJ6 := 1;IF #T[5].Q THEN#M := 6;END_IF;6:"机械臂右转" := 0;"机械手" := 1;IF "SQ1下降上升到位" & "吸盘" THEN#ZJ7 := 1;END_IF;IF #T[6].Q THEN"吸盘" := 0;#M := 7;END_IF;7:IF "SQ1下降上升到位" THEN"机械手" := 0;#ZJ8 := 1;#M := 8;END_IF;8:IF #T[7].Q  THEN"机械臂左转" := 1;#ZJ9 := 1;#M := 9;END_IF;       9:IF "SQ2料到位" THEN"B传送带" := 1;END_IF;IF #T[8].Q THEN"机械臂左转" := 0;"A传送带" := 1;           #M := 10;END_IF;10:"机械臂左转" := 0;#ZJ1 := 0;#ZJ2 := 0;#ZJ3 := 0;#ZJ4 := 0;#ZJ5:= 0;#ZJ6 := 0;#ZJ7 := 0;#ZJ8 := 0;#ZJ9 := 0;#M := 1;

当然这里还有一点小问题,我们先看过程序运行效果!

这里我们可以发现在上料时,是每过一个循环后上料,速度可能会稍慢一些!

我们改进一下,将上料的部分放在case语句外面,这样只要机械手拿走料,就会自动补齐! 

代码如下:按下启动按钮后接通一个标志位,用if 语句来判断S传感器当前的状态然后取反就可以实现啦!例:S传感器为0是,取反赋值给A传送带,A传送带为1,开始进料;当S传感器为1时,取反变为0然后赋值给A传送带,A传送带就停止了! 

 //启动按钮IF "启动" THEN#标志1 := 1;#M := 1;END_IF;IF #标志1 THEN"A传送带" :=NOT "S传感器";END_IF;

 传送带部分提出来后,后面的程序代码要稍微修改一下!

代码如下:

 有一些地方重新修改了一下。

 CASE #M OF1:IF "S传感器" THEN"B传送带" := 0;#M := 2;END_IF;2:#ZJ1 := 1;IF #T[0].Q THEN#M := 3;END_IF;3:"机械臂左转" := 1;//"L5灯" := 1;IF "SQ5左右转到位" THEN#ZJ2 := 1;END_IF;IF #T[1].Q THEN"机械臂左转" := 0;// "L5灯" := 0;#M := 4;END_IF;4:"吸盘" := 1;//"L3灯" := 1;#ZJ3 := 1;IF #T[2].Q THEN// "L1灯" := 1;"机械手" := 1;END_IF;IF "SQ1下降上升到位" & "SQ3抓起到位" THEN#ZJ4 := 1;// "L1灯" := 0;END_IF;IF #T[3].Q THEN//"L2灯" := 1;"机械手" := 0;#M := 5;END_IF;5:IF "SQ1下降上升到位" & "SQ3抓起到位" THEN#ZJ5 := 1;// "L2灯" := 0;END_IF;IF #T[4].Q THEN"机械臂右转" := 1;#ZJ6 := 1;END_IF;IF #T[5].Q THEN"机械臂右转" := 0;#M := 6;END_IF;6:"机械臂右转" := 1;#ZJ7 := 1;IF #T[6].Q THEN#M := 7;END_IF;7:"机械臂右转" := 0;#ZJ8 := 1;IF "吸盘" THENIF #T[7].Q THEN"机械手" := 1;#ZJ9 := 1;#M := 8;END_IF;END_IF;8:IF #T[8].Q THEN"吸盘" := 0;"机械手" := 0;#ZJ10 := 1;END_IF;IF #T[9].Q THEN#M := 9;END_IF;9:IF "SQ2料到位" THEN"B传送带" := 1;"机械臂左转" := 1;#ZJ11 := 1;#M := 10;END_IF;10:IF #T[10].Q THEN"机械臂左转" := 0;#ZJ12 := 1;#M := 11;END_IF;11:IF #T[11].Q  THEN#ZJ1 := 0;#ZJ2 := 0;#ZJ3 := 0;#ZJ4 := 0;#ZJ5 := 0;#ZJ6 := 0;#ZJ7 := 0;#ZJ8 := 0;#ZJ9 := 0;#ZJ10 := 0;#ZJ11 := 0;#ZJ12 := 0;#M := 1;END_IF;END_CASE;

 好的,现在我们再来看效果是否可以!

这里我们可以看到,效果实现了! 

 


 

2.启动停止部分

好的!主要控制我们已经完成,下面就是启动停止部分!

 2.在程序运行时如果按下停止按钮,程序会在循环完一次后回到原位停止操作,并且可以再次启动运行。

 这里它要求,按下后运行一次后停止!到这里大家可以想一想要如何实现这个功能(实现方法可以放在评论区,大家一起讨论)

这里我用的是一个if 判断,在运行到最后一步的时候我们判断是否按下了停止按钮,如果按下就停止,没有按下就继续循环。

按下后再判断系统是否在运行,代码如下:按下后如果成立就将w赋值为1。

//停止按钮
IF "停止" THENIF #标志1 & "A传送带" OR #标志1 & "B传送带" OR #标志1 & "机械臂左转" OR #标志1 & "机械臂右转" OR #标志1 & "机械手" OR #标志1 & "吸盘" OR #标志1 & "SQ1下降上升到位" OR#标志1 & "SQ2料到位" OR #标志1 & "SQ3抓起到位" OR #标志1 & "SQ5左右转到位" OR #标志1 & "S传感器" THEN#W := 1;END_IF;
END_IF;

程序在运行到最后一步时,来判断w是否是1,是1就停止,等待下次启动被按下;不是1就继续循环。

 //判断是否按下停止
11:IF #T[11].Q & #W = 1 THEN"B传送带" := 0;#ZJ1 := 0;#ZJ2 := 0;#ZJ3 := 0;#ZJ4 := 0;#ZJ5 := 0;#ZJ6 := 0;#ZJ7 := 0;#ZJ8 := 0;#ZJ9 := 0;#ZJ10 := 0;#ZJ11 := 0;#ZJ12 := 0;#M := 0;#标志1 := 0;END_IF;IF #T[11].Q & #W = 0 THEN#ZJ1 := 0;#ZJ2 := 0;#ZJ3 := 0;#ZJ4 := 0;#ZJ5 := 0;#ZJ6 := 0;#ZJ7 := 0;#ZJ8 := 0;#ZJ9 := 0;#ZJ10 := 0;#ZJ11 := 0;#ZJ12 := 0;#M := 1;END_IF;

这里我们也来试一下效果:

 


3.急停复位部分

最后的最后就是我们的急停复位部分啦!在实际生成中如果出现紧急情况,急停按钮非常非常的重要!这里我们就来编写一下!(大家如果有好的想法和思路可以在评论区讨论哦!) 

 3.在程序运行时如果按下急停按钮,程序动作立即停止,当按下复位按钮后程序才能继续运行,在急停期间其他按钮无效。

 这里我写的是将机械手运行那部分断开(和开路差不多),按下复位后再闭合,程序还可以继续运行!代码如下:

按下后标志2得电,将机械手部分断开!

//急停按钮
IF "急停按钮" THEN#标志2 := 1;"A传送带" := 0;END_IF;
IF NOT #标志2 THENcase  of//在case外面加一个标志2的取反
end_case;end_if;

 复位的时候再闭合就可以了!(这里因为A传送带不在case里面,所以放在这里进行停止了)

//复位按钮
IF "复位按钮" THEN#标志2 := 0;"A传送带" := 1;END_IF;

 好的!我们看下效果如何:

      可以完成急停要求!


 三、完整代码

 

//停止按钮
IF "停止" THENIF #标志1 & "A传送带" OR #标志1 & "B传送带" OR #标志1 & "机械臂左转" OR #标志1 & "机械臂右转" OR #标志1 & "机械手" OR #标志1 & "吸盘" OR #标志1 & "SQ1下降上升到位" OR#标志1 & "SQ2料到位" OR #标志1 & "SQ3抓起到位" OR #标志1 & "SQ5左右转到位" OR #标志1 & "S传感器" THEN#W := 1;END_IF;
END_IF;//急停按钮
IF "急停按钮" THEN#标志2 := 1;"A传送带" := 0;END_IF;//复位按钮
IF "复位按钮" THEN#标志2 := 0;//"B传送带" := 1;"A传送带" := 1;END_IF;//接通延时定时器部分
#RTRIG[0](CLK := "S传感器");
#T[0].TON(IN := #ZJ1,PT := T#0.5s);
#T[1].TON(IN := #ZJ2,PT := T#0.5s);
#T[2].TON(IN := #ZJ3,PT := T#0.5s);
#T[3].TON(IN := #ZJ4,PT := T#0.5s);
#T[4].TON(IN := #ZJ5,PT := T#1s);
#T[5].TON(IN := #ZJ6,PT := T#1s);
#T[6].TON(IN := #ZJ7,PT := T#0.5s);
#T[7].TON(IN := #ZJ8,PT := T#0.5s);
#T[8].TON(IN := #ZJ9,PT := T#1s);
#T[9].TON(IN := #ZJ10,PT := T#1s);
#T[10].TON(IN := #ZJ11,PT := T#1s);
#T[11].TON(IN := #ZJ12,PT := T#2s);
IF NOT #标志2 THEN//启动按钮IF "启动" THEN#标志1 := 1;#W := 0;#M := 1;END_IF;IF #标志1 THEN"A传送带" :=NOT "S传感器";END_IF;//指示灯部分IF #标志1 THENIF "机械手" THEN"L1灯" := 1;"L2灯" := 0;ELSE"L2灯" := 1;"L1灯" := 0;END_IF;END_IF;IF "吸盘" THEN"L3灯" := 1;ELSE"L3灯" := 0;END_IF;IF "机械臂左转" THEN"L5灯" := 1;ELSE"L5灯" := 0;END_IF;IF "机械臂右转" THEN"L4灯" := 1;ELSE"L4灯" := 0;END_IF;
END_IF;
//机械手执行动作部分
IF NOT #标志2 THENCASE #M OF1:IF "S传感器" THEN"B传送带" := 0;#M := 2;END_IF;2:#ZJ1 := 1;IF #T[0].Q THEN#M := 3;END_IF;3:"机械臂左转" := 1;//"L5灯" := 1;IF "SQ5左右转到位" THEN#ZJ2 := 1;END_IF;IF #T[1].Q THEN"机械臂左转" := 0;// "L5灯" := 0;#M := 4;END_IF;4:"吸盘" := 1;//"L3灯" := 1;#ZJ3 := 1;IF #T[2].Q THEN// "L1灯" := 1;"机械手" := 1;END_IF;IF "SQ1下降上升到位" & "SQ3抓起到位" THEN#ZJ4 := 1;// "L1灯" := 0;END_IF;IF #T[3].Q THEN//"L2灯" := 1;"机械手" := 0;#M := 5;END_IF;5:IF "SQ1下降上升到位" & "SQ3抓起到位" THEN#ZJ5 := 1;// "L2灯" := 0;END_IF;IF #T[4].Q THEN"机械臂右转" := 1;#ZJ6 := 1;END_IF;IF #T[5].Q THEN"机械臂右转" := 0;#M := 6;END_IF;6:"机械臂右转" := 1;#ZJ7 := 1;IF #T[6].Q THEN#M := 7;END_IF;7:"机械臂右转" := 0;#ZJ8 := 1;IF "吸盘" THENIF #T[7].Q THEN"机械手" := 1;#ZJ9 := 1;#M := 8;END_IF;END_IF;8:IF #T[8].Q THEN"吸盘" := 0;"机械手" := 0;#ZJ10 := 1;END_IF;IF #T[9].Q THEN#M := 9;END_IF;9:IF "SQ2料到位" THEN"B传送带" := 1;"机械臂左转" := 1;#ZJ11 := 1;#M := 10;END_IF;10:IF #T[10].Q THEN"机械臂左转" := 0;#ZJ12 := 1;#M := 11;END_IF;11:IF #T[11].Q & #W = 1 THEN"B传送带" := 0;#ZJ1 := 0;#ZJ2 := 0;#ZJ3 := 0;#ZJ4 := 0;#ZJ5 := 0;#ZJ6 := 0;#ZJ7 := 0;#ZJ8 := 0;#ZJ9 := 0;#ZJ10 := 0;#ZJ11 := 0;#ZJ12 := 0;#M := 0;#标志1 := 0;END_IF;IF #T[11].Q & #W = 0 THEN#ZJ1 := 0;#ZJ2 := 0;#ZJ3 := 0;#ZJ4 := 0;#ZJ5 := 0;#ZJ6 := 0;#ZJ7 := 0;#ZJ8 := 0;#ZJ9 := 0;#ZJ10 := 0;#ZJ11 := 0;#ZJ12 := 0;#M := 1;END_IF;END_CASE;END_IF;

 



 

总结

以上就是本篇文章的内容啦!我们一起编写了机械手的控制部分,停止部分和急停部分!感谢大家的观看,谢谢!

相关文章:

【factoryio】使用SCL编写 <机械手控制> 程序

使用虚拟工厂软件和博图联合仿真来编写【scl】机械手控制程序 文章目录 目录 文章目录 前言 二、程序编写 1.机械手运行部分 2.启动停止部分 3.急停复位部分 三、完整代码 总结 前言 在前面我们一起写过了许多案例控制的编写,在这一章我们一起来编写一下一个…...

QT学习记录散件

fromLocal8Bit() qt中fromLocal8Bit()函数可以设置编码。 因为QT默认的编码是unicode,不能显示中文的 而windows默认使用(GBK/GB2312/GB18030) 所以使用fromLocal8Bit()函数,可以实现从本地字符集GB到Unicode的转换,从…...

[SSD科普之1] PCIE接口详解及应用模式

PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准,它原来的名称为“3GIO”,是由英特尔在2001年提出的,旨在替代旧的PCI,PCI-X和AGP总线标准。一、PCI-E x1/x4/x8/x16插槽模式PCI-E有 x1/…...

Linux设备驱动模型与 sysfs实现分析

RTOS和Linux系统上开发驱动的方式非常的不同,在RTOS系统下,驱动和驱动之间并没有实质性的联系,不同的驱动和BSP之间仅仅通过一层很薄很薄的设备管理框架聚合在一起构成RTOS的设备管理子系统。图形化表示如下: 设备驱动&BSP之间互相独立,互不影响,互不依赖,独立实现,…...

软考高级之制定备考计划

制定备考计划 高项准备时间最好是三个月以上,分为三个阶段来复习。 第一个阶段——熟悉知识点 第二个阶段——刷题 第三个阶段——冲刺复习 具体操作 第一个阶段 这个阶段的复习以教材和视频为主,掌握重要知识点。基础知识要打牢。例如&#xff1…...

[Pytorch] Linear层输出nan

参考链接: https://discuss.pytorch.org/t/well-formed-input-into-a-simple-linear-layer-output-nan/74720/11 总结原因: numpy需要更新 PS. 查看numpy版本号 打开Anaconda Prompt 进入环境 输入命令conda activate envname 然后输入pip show numpy…...

2023-2-19-What is ‘ template<typename E, E V> ‘?

目录C里面template怎么用inline函数模板类模板函数模板特化C里面template怎么用 template是什么? template其实是C的一种语法糖,本意是去简化程序员的工作. void swap(int *a,int *b){int temp *a;*a *b;*b temp; }比如在写一个交换函数的的时候,参数为两个in…...

华为OD机试题 - 字符串加密(JavaScript)

最近更新的博客 华为OD机试题 - 任务总执行时长(JavaScript) 华为OD机试题 - 开放日活动(JavaScript) 华为OD机试 - 最近的点 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试题 - 最小步骤数(JavaScript) 华为OD机试题 - 任务混部(JavaScript) 华为OD机试题 - N 进…...

美团前端一面手写面试题

实现斐波那契数列 // 递归 function fn (n){if(n0) return 0if(n1) return 1return fn(n-2)fn(n-1) } // 优化 function fibonacci2(n) {const arr [1, 1, 2];const arrLen arr.length;if (n < arrLen) {return arr[n];}for (let i arrLen; i < n; i) {arr.push(arr[…...

2D图像处理:缺陷检测--仿照Halcon的Variation Model

文章目录 基于 C++&Opencv 的检测结果(Robust模式-MAD)一、Variation Model1.1 准备和训练模型方法1.2 比较模板方法1.3 过滤(保留符合缺陷特征的区域)二、参考基于 C++&Opencv 的检测结果(Robust模式-MAD) 一、Variation Model Halcon中的Variation Model主要是将待…...

JavaScript 注释

JavaScript 注释可用于提高代码的可读性。JavaScript 注释JavaScript 不会执行注释。我们可以添加注释来对 JavaScript 进行解释&#xff0c;或者提高代码的可读性。单行注释以 // 开头。本例用单行注释来解释代码&#xff1a;实例// 输出标题&#xff1a;document.getElementB…...

浅谈使用CDN加速的OSS

目录引出OSS对象存储服务CDNCDN加速OSS资源总结引出 之前&#xff0c;我在写项目的时候&#xff0c;因为项目中存在音视频的存储&#xff0c;然后我看圈子里面的人都是使用OSS对象存储来处理&#xff0c;然后我也跟风去使用了&#xff0c;然后在之后&#xff0c;我一个朋友问我…...

华为OD机试题 - 服务依赖(JavaScript)

最近更新的博客 华为OD机试题 - 任务总执行时长(JavaScript) 华为OD机试题 - 开放日活动(JavaScript) 华为OD机试 - 最近的点 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试题 - 最小步骤数(JavaScript) 华为OD机试题 - 任务混部(JavaScript) 华为OD机试题 - N 进…...

整合K8s+SpringCloudK8s+SpringBoot+gRpc

本文使用K8s当做服务注册与发现、配置管理&#xff0c;使用gRpc用做服务间的远程通讯一、先准备K8s我在本地有个K8s单机二、准备service-providerpom<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.…...

Django框架之模型视图--HttpResponse对象

HttpResponse对象 视图在接收请求并处理后&#xff0c;必须返回HttpResponse对象或子对象。HttpRequest对象由Django创建&#xff0c;HttpResponse对象由开发人员创建。 1 HttpResponse 可以使用django.http.HttpResponse来构造响应对象。 HttpResponse(content响应体, con…...

Linux下的Jenkins安装教程

当前环境 CentOS 7.8Java 11&#xff08;注意当前jenkins支持的Java版本最低为Java11&#xff09;FinalShell 3.9&#xff08;操作环境&#xff09; 安装Jenkins PS&#xff1a;不建议使用Docker安装Jenkins&#xff0c;因为使用Jenkins的时候一般会调用外部程序&#xff0c;…...

[软件工程导论(第六版)]第5章 总体设计(课后习题详解)

文章目录1. 为每种类型的模块耦合举一个具体例子。2. 为每种类型的模块内聚举一个具体例子。3. 用面向数据流的方法设计下列系统的软件结构。4. 美国某大学共有200名教师&#xff0c;校方与教师工会刚刚签订一项协议。按照协议&#xff0c;所有年工资超过$26000&#xff08;含$…...

力扣62.不同路径

文章目录力扣62.不同路径题目描述方法1&#xff1a;暴力深搜(超时未通过)方法2&#xff1a;动态规划力扣62.不同路径 题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器…...

【验证码的识别】—— 图形验证码的识别

前言 &#xff08;结尾有彩蛋欧&#xff09; 目前&#xff0c;许多网站采取各种各样的措施来反爬虫&#xff0c;其中一个措施便是使用验证码。随着技术的发展&#xff0c;验证码的花样越来越多。验证码最初是几个数字组合的简单的图形验证码&#xff0c;后来加入了英文字母和混…...

RocketMQ云服务器和本地基础安装搭建及可视化控制台安装使用

一起学编程&#xff0c;让生活更随和&#xff01; 如果你觉得是个同道中人&#xff0c;欢迎关注博主gzh&#xff1a;【随和的皮蛋桑】。 专注于Java基础、进阶、面试以及计算机基础知识分享&#x1f433;。偶尔认知思考、日常水文&#x1f40c;。 目录一、RocketMQ 介绍1、Ro…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...