news 2026/4/16 6:00:28

码垛搬运的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/4/11 20:07:04

【Web安全】kali渗透工具MSF以及msfconsole命令详解,看这一篇就够了!

首先我们可以通过在终端里面输入sudo su密码默认kali直接回车 让kali从普通用户变成root超级管理员用户避免权限不足 1.msfconsole介绍 msfconsole简称msf是一款常见的渗透测试工具,包含了常见的漏洞利用模块和生成各种木马,方便于安全人员的使用。 2.…

作者头像 李华
网站建设 2026/4/11 17:53:19

抽水蓄能电站像电网的巨型充电宝,白天用电高峰时放电,晚上低谷时抽水蓄能。但怎么让这玩意儿既帮电网省钱又高效运行?这事儿得靠数学建模和智能算法来掰扯清楚

抽水蓄能电站的最佳调度方案研究 参考文献:抽水蓄能电站的最佳调度方案研究 非完全复献 matlab?粒子群算法 主要内容:研究抽水蓄能机组调峰填谷的功能,目标是从电网的利益出发,结合抽水蓄能电站的运行环境及各类电源现有的调峰电价机制&…

作者头像 李华
网站建设 2026/4/12 3:49:41

10款主流CRM软件深度拆解,快速锁定合适的CRM软件

2026年将至,中国企业上CRM软件不再是一个新话题。但面对市场上众多CRM产品,如何选对?一份涵盖国内外主流CRM软件的深度拆解报告,旨在从全球视野和中国本土化需求两个维度,帮助您锁定最合适的CRM软件。核心导读&#xf…

作者头像 李华
网站建设 2026/4/13 20:21:27

方法调用时,Java 的及早求值(eager evaluation)策略

问题发现&#xff1a; 在写力扣的 70. 爬楼梯 时&#xff0c;写了如下代码&#xff1a; class Solution {Map<Integer, Integer> map new HashMap<>();public int climbStairs(int n) {if (n < 1) { // 边界条件&#xff1a;n 1或者n 0return 1;}int ans…

作者头像 李华
网站建设 2026/4/13 21:03:24

2026年AI Agent落地全景:57%企业已投产,质量超越成本成最大障碍

LangChain调研显示&#xff0c;57%企业已将AI Agent投入生产&#xff0c;大企业落地速度更快。客户服务(26.5%)和研究数据分析(24.4%)是主要应用场景。质量问题(33%)仍是最大障碍&#xff0c;而非成本。89%企业已实施可观测性&#xff0c;但Agent评估仍不成熟。编程类Agent使用…

作者头像 李华