求一个关于快递分拣的plc程序 点击:359 | 回复:6



Dcijan

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 0回
  • 年度积分:233
  • 历史总积分:233
  • 注册:2026年2月25日
发表于:2026-02-27 09:48:49
楼主
求助帖188分-未结帖
写一个关于快递扫码分类的西门子plc1200模拟仿真。内容就是有3种快递码,扫到1号码快递皮带传到一号口,1灯亮,气缸推入一号口;扫到2号码快递皮带传到二号口,2灯亮,气缸推入二号口;扫到3号码快递皮带传到三号口,3灯亮,气缸推入三号口;快递码三种随机。求大佬帮帮忙
此帖发自小程序


Allen010

  • 精华:0帖
  • 求助:0帖
  • 帖子:31帖 | 659回
  • 年度积分:20
  • 历史总积分:20400
  • 注册:2010年8月04日
发表于:2026-02-27 14:03:11
1楼

可以尝试 借助下 AI,来生成下,作为参考。这样会 提高效率。

回复本条

    

梦雨天涯

  • 精华:1帖
  • 求助:1帖
  • 帖子:229帖 | 414回
  • 年度积分:48
  • 历史总积分:15836
  • 注册:2016年10月25日
发表于:2026-02-27 17:22:33
2楼

你就是扫码出来,然后先入先出位置就行啦

回复本条

    

-007

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2016年9月18日
发表于:2026-02-28 17:31:00
3楼
兄弟,看下好使不,豆包的力量

// 变量声明(在DB1数据块中定义) VAR_GLOBAL    // 输入信号    ScanCode1: BOOL := FALSE;   // I0.0 - 扫码器识别1号快递码    ScanCode2: BOOL := FALSE;   // I0.1 - 扫码器识别2号快递码    ScanCode3: BOOL := FALSE;   // I0.2 - 扫码器识别3号快递码    Pos1_Detect: BOOL := FALSE; // I1.0 - 1号道口到位检测    Pos2_Detect: BOOL := FALSE; // I1.1 - 2号道口到位检测    Pos3_Detect: BOOL := FALSE; // I1.2 - 3号道口到位检测        // 输出信号    Belt_Run: BOOL := FALSE;    // Q0.0 - 皮带运行    Light1: BOOL := FALSE;      // Q0.1 - 1号指示灯    Light2: BOOL := FALSE;      // Q0.2 - 2号指示灯    Light3: BOOL := FALSE;      // Q0.3 - 3号指示灯    Cylinder1: BOOL := FALSE;   // Q0.4 - 1号气缸    Cylinder2: BOOL := FALSE;   // Q0.5 - 2号气缸    Cylinder3: BOOL := FALSE;   // Q0.6 - 3号气缸        // 内部变量    RandomCode: INT := 1;       // 随机快递码(1-3)    Timer_Belt: TON := (PT := T#5S);  // 皮带运行定时器(5秒输送到位)    Timer_Cylinder: TON := (PT := T#2S); // 气缸动作定时器(2秒推出复位)    Work_State: INT := 0;       // 工作状态:0-待机,1-输送中,2-推出中 END_VAR // 主程序逻辑 NETWORK TITLE = 随机生成快递码(模拟扫码) // 待机状态下,每10秒随机生成1-3号快递码 IF Work_State = 0 THEN    // 随机数生成(简化版,实际可通过系统时钟优化)    IF NOT Timer_Belt.Q THEN        RandomCode := MOD(INT_TO_DINT(TOD_TO_INT(CLOCK_UTC())), 3) + 1;        // 根据随机码触发对应扫码信号        ScanCode1 := (RandomCode = 1);        ScanCode2 := (RandomCode = 2);        ScanCode3 := (RandomCode = 3);        Work_State := 1; // 进入输送状态        Timer_Belt.IN := TRUE; // 启动皮带定时器    END_IF; END_IF; NETWORK TITLE = 皮带输送控制 // 输送状态:启动皮带,5秒后到位 IF Work_State = 1 THEN    Belt_Run := TRUE; // 皮带运行    Timer_Belt.IN := TRUE;        // 定时器到,皮带停止,进入推出状态    IF Timer_Belt.Q THEN        Belt_Run := FALSE;        Work_State := 2;        Timer_Cylinder.IN := TRUE; // 启动气缸定时器                // 根据快递码点亮对应指示灯        Light1 := ScanCode1;        Light2 := ScanCode2;        Light3 := ScanCode3;                // 驱动对应气缸        Cylinder1 := ScanCode1;        Cylinder2 := ScanCode2;        Cylinder3 := ScanCode3;    END_IF; END_IF; NETWORK TITLE = 气缸推出复位控制 // 推出状态:气缸动作2秒后复位 IF Work_State = 2 THEN    Timer_Cylinder.IN := TRUE;        // 定时器到,气缸复位,回到待机状态    IF Timer_Cylinder.Q THEN        // 复位所有输出        Light1 := FALSE;        Light2 := FALSE;        Light3 := FALSE;        Cylinder1 := FALSE;        Cylinder2 := FALSE;        Cylinder3 := FALSE;                // 复位扫码信号和定时器        ScanCode1 := FALSE;        ScanCode2 := FALSE;        ScanCode3 := FALSE;        Timer_Belt.IN := FALSE;        Timer_Belt.Q := FALSE;        Timer_Cylinder.IN := FALSE;        Timer_Cylinder.Q := FALSE;                Work_State := 0; // 回到待机状态    END_IF; END_IF; // 仿真优化:到位检测信号模拟(可选) NETWORK TITLE = 到位检测模拟 Pos1_Detect := (RandomCode = 1) AND Timer_Belt.Q; Pos2_Detect := (RandomCode = 2) AND Timer_Belt.Q; Pos3_Detect := (RandomCode = 3) AND Timer_Belt.Q;

回复本条

    

121111115

  • [版主]
  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 616回
  • 年度积分:561
  • 历史总积分:37339
  • 注册:2016年1月20日
发表于:2026-03-02 09:59:13
4楼

这看起来就是个毕业设计的课题,这要是个正常的项目,要是个正常干活的工程师,这还用求一个程序吗?连模拟量都没有,全是开关量,按照要求写逻辑就好了呀。

回复本条

    

郭远林

  • [版主]
  • 精华:3帖
  • 求助:11帖
  • 帖子:118帖 | 2356回
  • 年度积分:67
  • 历史总积分:46667
  • 注册:2011年10月21日
发表于:2026-03-02 17:03:47
5楼

是不是快递的那咋带分拣机是吧,

回复本条

    

刹那风逝

  • 精华:0帖
  • 求助:1帖
  • 帖子:4帖 | 236回
  • 年度积分:1
  • 历史总积分:1874
  • 注册:2020年6月23日
发表于:2026-03-18 16:24:07
6楼

简单的判断输出逻辑,都是开关量

回复本条

    

热门招聘
相关主题

官方公众号

智造工程师