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

倍福 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.dtcms.com/a/232120.html

相关文章:

  • Linux服务器如何安装wps?
  • 可编辑PPT | 基于大数据中台新能源智能汽车应用解决方案汽车大数据分析与应用解决方案
  • 新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
  • 人工智能的社交课:从博弈游戏到健康关怀
  • elasticsearch-8.17.4
  • Windows 10 IoT 系统深度定制指南:从环境搭建到工业部署
  • 【物联网-S7Comm协议】
  • 桂花网蓝牙网关物联网医院动态血糖管理应用案例
  • 【学习记录】Linux 密码破解实战
  • Seata 分布式事务 XA 模式
  • 什么是分布式锁?几种分布式锁分别是怎么实现的?
  • Python-多线程
  • 渗透测试服务如何全方位评估企业安全状况并揭示潜在缺陷?
  • 哈希表入门:用 C 语言实现简单哈希表(开放寻址法解决冲突)
  • Oj系统测试报告
  • 湖北理元理律师事务所:债务化解中的心理重建与法律护航
  • C++——智能指针 shared_ptr
  • SSH登陆Linux常见问题大全
  • 【unity游戏开发入门到精通——通用篇】AssetBundle(AB包)和AssetBundleBrowser的使用介绍
  • 【Unity】R3 CSharp 响应式编程 - 使用篇(二)
  • 树莓派上遇到插入耳机后显示“无输入设备”问题
  • Java异常信息
  • “详规一张图”——香港土地利用数据
  • 6. MySQL基本查询
  • 如何安装并使用RustDesk
  • 【BUG解决】关于BigDecimal与0的比较问题
  • MySQL 表的内连和外连
  • RAG-Gym:一个用于优化带过程监督的代理型RAG的统一框架
  • 关于Dify聊天对话名称无法自动生成的原因和解决方法
  • java的纪录类--Record类