news 2026/1/19 15:39:59

码垛搬运的PLC程序里藏着一颗骰子你发现没?咱们这个功能块最骚的操作就是通过SCL搞了个随机数发生器,直接把模拟量调试玩成了抽卡游戏。来看这段核心代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
码垛搬运的PLC程序里藏着一颗骰子你发现没?咱们这个功能块最骚的操作就是通过SCL搞了个随机数发生器,直接把模拟量调试玩成了抽卡游戏。来看这段核心代码

如何短时间内成为西门子PLC编程高手 看这里:码垛搬运模型 【功能块】码垛搬运功能块 【品牌】西门子 【PLC】1200 【编程软件】博图v16 【编程语言】scl 【特色】以设定的上限和下限为范围,生成随机数。 可以用作模拟量仿真,方便调试程序; 学习用SCL语言编程; 作为数据源演示给领导或客户看; 可无限复制使用。 【说明】:程序不要把时间用来造轮子,这里有的你拿走,保留精力用来创造优质的功能快让你在工作中事半功倍factory Io和博途软件进行联合仿真,码垛搬运层数可以自定义设置,最大层数3,有报警显示功能,位置监视,复位,停止功能。 程序通俗易懂,规范模块化,可以随意增加新功能。 物品有,Factory IO仿真模型+博途v16安装包+博途码垛程序+HMI程序+factory IO安装包2.50版本。

FUNCTIONBLOCK PalletizerRandom

VAR_INPUT

MinValue : Real := 0.0; //下限值

MaxValue : Real := 100.0; //上限值

END_VAR

VAR_OUTPUT

RandomOutput : Real; //随机输出

END_VAR

VAR

Seed : DInt := 0; //随机种子

END_VAR

// 生成新种子时带点"玄学"

Seed := (Seed * 214013 + 2531011) MOD 2147483648;

RandomOutput := MinValue + (MaxValue - MinValue) * (DINTTOREAL(Seed)/2147483648.0);

这段代码的精髓在于用线性同余算法搞伪随机——每次扫描周期都像摇骰子一样生成新数值。调试时把MinValue设成50.0,MaxValue设成80.0,直接让传感器数值在安全范围内蹦迪,比用固定数值装样子真实多了。

配合Factory IO的场景,码垛层数控制才是重头戏。在HMI上拖个Spin控件绑定到程序里的LayerCount变量,再套个条件判断:

IF LayerCount > 3 THEN

Alarm_01 := TRUE; //触发层数超限报警

EXIT; //直接跳出当前循环

END_IF;

// 坐标计算才是码垛的灵魂

X_Position := BaseX + (CurrentLayer MOD 2) * PalletWidth;

Y_Position := BaseY + (CurrentLayer / 2) * PalletLength;

这算法妙在通过取余和整除自动生成交错堆叠的路径,比写死坐标灵活得多。当领导视察时,改个LayerCount参数就能实时演示不同层数的搬运效果,比PPT吹牛实在。

联合仿真的坑我帮你们踩过了:Factory IO 2.5和博途V16的联动需要特别注意变量命名格式。建议直接用DB块做数据交换,比如:

// 博途DB块

"DBIOExchange".ConveyorSpeed := "FactoryIO".ConveyorActualSpeed;

// Factory IO脚本

function onScanInterval()

Tags.SetTagValue("RobotStatus", DBIOExchange.RobotBusy)

end

调试时开个Watch Table同时监控两边变量,比看足球比赛还刺激。突然卡顿时八成是两边扫描周期没对齐,把博途的循环中断时间改成50ms保平安。

模块化设计的精髓在于像乐高一样拼装,比如搬运急停功能单独封装成EmergencyStop功能块,支持热插拔:

FUNCTION_BLOCK EmergencyStop

VAR_INPUT

Estop_Signal : Bool; //急停按钮信号

CurrentPosition : Real; //当前位置

END_VAR

VAR_OUTPUT

SafePosition : Real := 200.0; //安全位置

StatusWord : Word; //状态字

END_VAR

IF Estop_Signal THEN

Axis_MoveAbsolute(SafePosition); //回安全位

StatusWord.0 := TRUE; //报警标志位

// 还能扩展写入报警日志...

END_IF;

下次要加个复位功能?直接把这个块复制粘贴,改个输出目标位置就行。记住好程序员的标志不是写代码多快,而是能多懒就多懒——把重复劳动都封装成块,剩下的时间才能用来摸鱼(划掉)搞创新。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/17 0:59:54

Linux系统中NVMe磁盘IO超时参数配置不当导致NVMe磁盘不可用

现象在使用 NVMe 磁盘的 Linux 系统中出现非预期的慢IO读写,导致系统或者应用程序对于 NVMe 磁盘的 IO 操作失败,并且可能导致 NVMe 磁盘上的文件系统从原来挂载为可读可写的状态切换为只读不可写的状态,使得后续的写操作均失败,导…

作者头像 李华
网站建设 2025/12/24 19:00:42

如何设计一个数据驱动的故事

原文:towardsdatascience.com/how-to-design-a-data-driven-story-c46400afcbb9 https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/042dba457ebcfca4580cfb96647e0f5a.png 来源:作者在 ChatGPT 中生成的图片。 这篇…

作者头像 李华
网站建设 2026/1/16 6:27:42

购买服务器,选择按流量计费的含义,优缺点分析~

在阿里云、腾讯云等平台购买云服务器时, 带宽计费方式通常有两个选项: 按固定带宽 或 按使用流量计费。 很多人被“按流量计费”吸引—— “带宽可任选高达1-200Mbps,用多少付多少”,听起来很灵活。 但背后的风险,你真…

作者头像 李华
网站建设 2026/1/16 22:18:31

[Linux外设驱动详解]PWM Backlight 驱动详解

PWM Backlight 驱动详解 1. 概述 pwm_bl.c 是 Linux 内核中基于 PWM 的背光控制驱动程序。该驱动通过 PWM(脉冲宽度调制)信号来控制 LCD 屏幕的背光亮度,是嵌入式系统中常用的背光控制方案。 文件位置: linux-4.19.125/drivers/video/backlight/pwm_bl.c 主要功能: 通过…

作者头像 李华