当前位置: 首页 > 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.lqws.cn/news/160183.html

相关文章:

  • NLP驱动网页数据分类与抽取实战
  • Linux(12)——基础IO(下)
  • YOLO在QT中的完整训练、验证与部署方案
  • TIA博途中的程序导出为PDF格式的具体方法示例
  • 系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
  • tcp/udp
  • 网页前端开发(基础进阶4--axios)
  • Neo4j 完全指南:从入门到精通
  • js 比较两个对象的值,不相等就push对象的key
  • 平台升级:新功能与新模型震撼登场!
  • 华硕电脑,全新的超频方式,无需进入BIOS
  • uniapp实现的简约美观的星级评分组件
  • rust或tauri项目执行命令的时候,cmd窗口也会弹出显示解决方法
  • OpenCV 图像通道的分离与合并
  • Windows+Cmake编译Opencv-python
  • 【数据结构】树形结构--二叉树(二)
  • docker 搭建php 开发环境 添加扩展redis、swoole、xdebug(2)
  • Palo Alto Networks Expedition存在命令注入漏洞(CVE-2025-0107)
  • nodejs里面的http模块介绍和使用
  • Ubuntu系统配置C++的boost库(含filesystem模块)的方法
  • ASP.NET Core使用Quartz部署到IIS资源自动被回收解决方案
  • 【.net core】.KMZ文件解压为.KML文件并解析为GEOJSON坐标数据集。附KML处理多线(LineString)闭环问题
  • 37.第二阶段x64游戏实战-封包-寻找Socket套接字
  • 最新研究揭示云端大语言模型防护机制的成效与缺陷
  • 【.net core】天地图坐标转换为高德地图坐标(WGS84 坐标转 GCJ02 坐标)
  • SpringBoot项目移动之后无法运行
  • vue-18(使用 Vuex 插件实现高级功能)
  • 03.01、三合一
  • MyBatis-Plus深度全解:从入门到企业级实战
  • 【Elasticsearch】Elasticsearch 核心技术(二):映射