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

倍福 PLC程序解读

一、倍福PLC与 ITAC(工业通信协议或设备)交互的逻辑控制

IF stINOUT_Adjust.stMachineData.bDeactivateITAC THENstvar_seq.bTOK := stvar_seq.bRelease;RETURN;
END_IF
stProcessData.sStrData:=stGV_SYS_ELEMENTS.arstELEMENT[idxScanner].stText.str[1];IF PRG_Cell2.st_RECIPE.stLoadedRecipe.uiPartTypeID = 1 THENtSerialNumber := stProcessData.sStrData;	ELSEtSerialNumber := MID(STR:= stProcessData.sStrData, LEN:=16 ,POS:=42);	END_IF(*fbiSEQ_iTAC_SET_ASN.sSerialNumber:=tSerialNumber;
fbiSEQ_iTAC_SET_ASN.bIn_SendCMD:= TRUE;*)
fbiSEQ_iTAC_GET_SNC.sIN_SerialNumber:=tSerialNumber;
fbiSEQ_iTAC_GET_SNC.bIn_SendCMD:= TRUE;IF (*fbiSEQ_iTAC_SET_ASN.bOUT_ACK *)fbiSEQ_iTAC_GET_SNC.bOUT_ACK THENstProcessData.uiResult:=101;		 // Assign End	stVar_SEQ.stStep.enNextTransition	:= labelA;		stvar_seq.bTOK := TRUE;END_IFIF fbiSEQ_iTAC_GET_SNC.bOUT_NAK THENstVar_SEQ.stStep.enNextTransition	:= labelB;		stvar_seq.bTOK := TRUE;END_IFIF (stvar_seq.stXTimes.tTimeInStep > T#10S)AND NOT fbiSEQ_iTAC_GET_SNC.bOUT_NAK AND NOT fbiSEQ_iTAC_GET_SNC.bOUT_ACK THENwINOUT_DIAGNOSE_Seq.11 := TRUE;fbiSEQ_iTAC_SET_ASN.bIn_SendCMD	:= FALSE;IF stINOUT_SYS_CELL.stMODE.bQUITT_ERRORS THENstvar_seq.stXTimes.tTimeInStep := t#0s;END_IFEND_IF

二、程序解读

1. 激活状态检查与初步处理
IF stINOUT_Adjust.stMachineData.bDeactivateITAC THENstvar_seq.bTOK := stvar_seq.bRelease;RETURN;
END_IF
stProcessData.sStrData:=stGV_SYS_ELEMENTS.arstELEMENT[idxScanner].stText.str[1];
  • 如果设备处于停用 ITAC 状态(bDeactivateITAC为真),则将bTOK设为bRelease的值并直接返回,终止当前程序执行。
  • 否则,从系统元素数组中获取扫描器的文本数据,存入stProcessData.sStrData
2. 序列号处理逻辑
IF PRG_Cell2.st_RECIPE.stLoadedRecipe.uiPartTypeID = 1 THENtSerialNumber := stProcessData.sStrData;    ELSEtSerialNumber := MID(STR:= stProcessData.sStrData, LEN:=16 ,POS:=42);    
END_IF

  • 根据加载的配方类型(uiPartTypeID)决定如何处理序列号:
    • 若类型为 1,则直接使用完整的扫描数据作为序列号。
    • 否则,从扫描数据的第 42 位开始截取 16 个字符作为序列号。
3. ITAC 通信请求
fbiSEQ_iTAC_GET_SNC.sIN_SerialNumber:=tSerialNumber;
fbiSEQ_iTAC_GET_SNC.bIn_SendCMD:= TRUE;

  • 将处理好的序列号赋值给 ITAC 通信功能块fbiSEQ_iTAC_GET_SNC的输入参数。
  • 发送命令请求,触发 ITAC 系统获取序列号状态。
4. 响应处理
IF fbiSEQ_iTAC_GET_SNC.bOUT_ACK THENstProcessData.uiResult:=101;         // Assign End    stVar_SEQ.stStep.enNextTransition    := labelA;        stvar_seq.bTOK := TRUE;
END_IFIF fbiSEQ_iTAC_GET_SNC.bOUT_NAK THENstVar_SEQ.stStep.enNextTransition    := labelB;        stvar_seq.bTOK := TRUE;
END_IF

  • 成功响应(ACK):设置处理结果为 101(可能表示成功),将下一步转换设置为labelA,并将bTOK置为真。
  • 失败响应(NAK):将下一步转换设置为labelB,并将bTOK置为真。
5. 超时处理
IF (stvar_seq.stXTimes.tTimeInStep > T#10S) AND NOT fbiSEQ_iTAC_GET_SNC.bOUT_NAK AND NOT fbiSEQ_iTAC_GET_SNC.bOUT_ACK THENwINOUT_DIAGNOSE_Seq.11 := TRUE;fbiSEQ_iTAC_SET_ASN.bIn_SendCMD    := FALSE;IF stINOUT_SYS_CELL.stMODE.bQUITT_ERRORS THENstvar_seq.stXTimes.tTimeInStep := t#0s;END_IF
END_IF
  • 如果在步骤中停留时间超过 10 秒,且未收到成功或失败响应:
    • 设置诊断位 11(可能表示超时错误)。
    • 停止发送 ITAC 命令。
    • 如果系统处于允许退出错误状态,则重置步骤计时器。

总结

这段代码实现了一个与 ITAC 系统通信的完整流程,包括条件判断、数据处理、通信控制、响应处理和超时处理。通过状态机模式(labelAlabelB)控制流程走向,确保系统在各种情况下都能正确响应。

http://www.xdnf.cn/news/12251.html

相关文章:

  • kubectl 命令
  • docker 搭建php 开发环境 添加扩展redis、swoole、xdebug(2)
  • 游戏设计模式 - 子类沙箱
  • 计算机网络备忘录
  • SDC命令详解:使用set_fanout_load命令进行约束
  • AI Agent 项目 SUNA 部署环境搭建 - 基于 MSYS2 的 Poetry+Python3.11 虚拟环境
  • 鸿蒙jsonToArkTS_工具exe版本来了
  • 上门服务小程序会员系统框架设计
  • 鸿蒙UI(ArkUI-方舟UI框架)- 使用弹框
  • 【react+antd+vite】优雅的引入svg和阿里巴巴图标
  • 八、Python模块、包
  • 华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
  • linux systemd 服务配置
  • 基础线性代数
  • Android协程学习
  • GPU加速与非加速的深度学习张量计算对比Demo,使用PyTorch展示关键差异
  • 面试总结一
  • 微服务架构下的服务注册与发现:Eureka 深度解析
  • Dify源码教程:账户和密码传递分析
  • 十六进制数字接收的方式
  • Linux程序运行日志总结
  • 面试题:SQL 中如何将 多行合并为一行(合并行数据为列)?
  • 第46节:多模态分类(图像+文本)
  • 学习路之PHP--webman安装及使用
  • 11.MySQL事务管理详解
  • 十八、【用户认证篇】安全第一步:基于 JWT 的前后端分离认证方案
  • 物流瘫痪预警:亚马逊多仓爆仓,卖家如何抢占夏季性价比市场?
  • 【Android基础回顾】五:AMS(Activity Manager Service)
  • 【Java Web】9.Maven高级
  • AI编程助手入门指南:GitHub Copilot、Cursor与Claude的安装与基础使用