[Codesys]常用功能块应用分享-BMOV功能块功能介绍及其使用实例说明
官方说明
功能说明
参数 | 类型 | 功能 |
pbyDataSrc | POINTER TO BYTE | 指向源数组指针 |
uiSize | UINT | 要移动数据的BYTE数 |
pbyDataDes | POINTER TO BYTE | 指向目标数组指针 |
实例应用-ST
IF SYSTEM_CLOCK.AlwaysTrue THENCASE iAutoState OF0: //读写完成信号在下次读写信号的上升沿或复位信号的下降沿清除ClearRtrig(CLK:=(ReadCmd OR WriteCmd)AND OPMODE.User_Interface_OUT.Reset=FALSE,Q=>TrigClearQ);IF TrigClearQ THENRW_Done:=FALSE;RFID_ReadCmd_Mid:=FALSE;RFID_WriteCmd_Mid:=FALSE;iStartAddrChangebale:=0;RfidBaseReset:=TRUE;END_IFIF RW_Done=FALSE AND iRfidBaseState=10 AND iStartAddrChangebale=0 THENRfidBaseReset:=FALSE;iAutoState:=5;END_IF 5:IF ReadCmd=TRUE AND WriteCmd=FALSE AND TagPresent=TRUE AND RWHeadNotConnected=FALSE AND RfidErr=FALSE THENRFID_ReadCmd_Mid:=TRUE;RFID_WriteCmd_Mid:=FALSE;iAutoState:=10;ELSIF ReadCmd=FALSE AND WriteCmd=TRUE AND TagPresent=TRUE AND RWHeadNotConnected=FALSE AND RfidErr=FALSE THENiAutoState:=100;ELSIF (ReadCmd=TRUE OR WriteCmd=TRUE) AND TagPresent=FALSE THENRFID_ReadCmd_Mid:=FALSE;RFID_WriteCmd_Mid:=FALSE;TagNotExitAlarm:=TRUE;iAutoState:=200;ELSIF (ReadCmd=TRUE OR WriteCmd=TRUE) AND RWHeadNotConnected=TRUE THENRFID_ReadCmd_Mid:=FALSE;RFID_WriteCmd_Mid:=FALSE;RfidNotHeaderAlarm:=TRUE;iAutoState:=200;END_IF10://RFID DATA READ CONTROLIF Done=TRUE AND RfidErr=FALSE THENiStartAddrChangebale:=iStartAddr;BMOV(pbyDataSrc:=pRdSrcMid , uiSize:=128 , pbyDataDes:=pRdOne);ELSIF RfidErr THENGeneralAlarm:=TRUE;END_IFIF Done=TRUE AND GeneralAlarm =FALSE THENiAutoState:=20;ELSIF GeneralAlarm=TRUE THEN iAutoState:=200;END_IF20:IF GeneralAlarm=FALSE AND RFID_ReadCmd_Mid=TRUE AND RFID_WriteCmd_Mid=FALSE THENRFID_ReadCmd_Mid :=FALSE;RFID_WriteCmd_Mid:=FALSE;ELSIF GeneralAlarm=FALSE AND RFID_ReadCmd_Mid=FALSE AND RFID_WriteCmd_Mid=FALSE THEN iAutoState:=30;END_IF30:IF AutoRdCmd=TRUE AND AutoWrCmd=FALSE AND TagPresent=TRUE AND RfidErr=FALSE THENRFID_ReadCmd_Mid:=TRUE;RFID_WriteCmd_Mid:=FALSE;iAutoState:=40;END_IF40:IF Done=TRUE AND RfidErr=FALSE THENiStartAddrChangebale:=iStartAddr+128;BMOV(pbyDataSrc:=pRdSrcMid , uiSize:=128 , pbyDataDes:=pRdTwo);ELSIF RfidErr THENGeneralAlarm:=TRUE;END_IFIF Done=TRUE AND GeneralAlarm =FALSE THENiAutoState:=50;ELSIF GeneralAlarm=TRUE THEN iAutoState:=200;END_IF50:IF GeneralAlarm=FALSE AND RFID_ReadCmd_Mid=TRUE AND RFID_WriteCmd_Mid=FALSE THENRFID_ReadCmd_Mid :=FALSE;RFID_WriteCmd_Mid:=FALSE;ELSIF GeneralAlarm=FALSE AND RFID_ReadCmd_Mid=FALSE AND RFID_WriteCmd_Mid=FALSE THEN iAutoState:=60;END_IF60:IF AutoRdCmd=TRUE AND AutoWrCmd=FALSE AND TagPresent=TRUE AND RfidErr=FALSE THENRFID_ReadCmd_Mid:=TRUE;RFID_WriteCmd_Mid:=FALSE;iAutoState:=70;END_IF 70:IF Done=TRUE AND RfidErr=FALSE THENiStartAddrChangebale:=iStartAddr+256;BMOV(pbyDataSrc:=pRdSrcMid , uiSize:=128 , pbyDataDes:=pRdThree);ELSIF RfidErr THENGeneralAlarm:=TRUE;END_IFIF Done=TRUE AND GeneralAlarm =FALSE THENiAutoState:=80;ELSIF GeneralAlarm=TRUE THEN iAutoState:=200;END_IF80://RFID DATA READ FINISHE RETURNIF GeneralAlarm=FALSE THENRW_Done:=TRUE;RFID_ReadCmd_Mid :=FALSE;RFID_WriteCmd_Mid:=FALSE;iStartAddrChangebale:=0;iAutoState:=0;END_IF100://RFID DATA WRITE CONTROLIF AutoRdCmd=FALSE AND AutoWrCmd=TRUE THENiStartAddrChangebale:=iStartAddr;BMOV(pbyDataSrc:=pWrOne , uiSize:=128 , pbyDataDes:=pWrSrcMid);RFID_ReadCmd_Mid :=FALSE;RFID_WriteCmd_Mid:=TRUE;iAutoState:=105;END_IF105:IF Done=TRUE AND RfidErr=FALSE THENGeneralAlarm:=FALSE;ELSIF RfidErr THENGeneralAlarm:=TRUE;END_IFIF Done=TRUE AND GeneralAlarm =FALSE THENRFID_ReadCmd_Mid :=FALSE;RFID_WriteCmd_Mid:=FALSE;iAutoState:=110;ELSIF GeneralAlarm=TRUE THEN iAutoState:=200;END_IF110:IF AutoRdCmd=FALSE AND AutoWrCmd=TRUE THENiStartAddrChangebale:=iStartAddr+128;BMOV(pbyDataSrc:=pWrTwo , uiSize:=128 , pbyDataDes:=pWrSrcMid);RFID_ReadCmd_Mid :=FALSE;RFID_WriteCmd_Mid:=TRUE;iAutoState:=115;END_IF115:IF Done=TRUE AND RfidErr=FALSE THENGeneralAlarm:=FALSE;ELSIF RfidErr THENGeneralAlarm:=TRUE;END_IFIF Done=TRUE AND GeneralAlarm =FALSE THENRFID_ReadCmd_Mid :=FALSE;RFID_WriteCmd_Mid:=FALSE;iAutoState:=120;ELSIF GeneralAlarm=TRUE THEN iAutoState:=200;END_IF120:IF AutoRdCmd=FALSE AND AutoWrCmd=TRUE THENiStartAddrChangebale:=iStartAddr+256;BMOV(pbyDataSrc:=pWrThree , uiSize:=128 , pbyDataDes:=pWrSrcMid);RFID_ReadCmd_Mid :=FALSE;RFID_WriteCmd_Mid:=TRUE;iAutoState:=125;END_IF125:IF Done=TRUE AND RfidErr=FALSE THENGeneralAlarm:=FALSE;ELSIF RfidErr THENGeneralAlarm:=TRUE;END_IFIF Done=TRUE AND GeneralAlarm =FALSE THENRFID_ReadCmd_Mid :=FALSE;RFID_WriteCmd_Mid:=FALSE;iAutoState:=130;ELSIF GeneralAlarm=TRUE THEN iAutoState:=200;END_IF130://RFID DATA WRITE FINISHE RETURNIF GeneralAlarm=FALSE THENRW_Done:=TRUE;RFID_ReadCmd_Mid :=FALSE;RFID_WriteCmd_Mid:=FALSE;iStartAddrChangebale:=0;iAutoState:=0;END_IF200://RFID DATA WRITE OR READ ALARMIF OPMODE.User_Interface_OUT.Reset THENGeneralAlarm:=FALSE;TagNotExitAlarm:=FALSE;RfidNotHeaderAlarm:=FALSE;RFID_ReadCmd_Mid:=FALSE;RFID_WriteCmd_Mid:=FALSE;RW_Done:=FALSE;iStartAddrChangebale:=0;iAutoState:=0;END_IFEND_CASE
END_IF
实例应用-LD
数据操作功能块封装
功能块封装功能类似数据库读写操作,自动读写数据和手动读写数据,访问二维数组中的数据操作。可通过二维数组的行列访问目标数据或通过指针访问目标数组。
以后有时间会抽时间分享一些TIA和Codesys的常用功能块使用方法。
相关文章:

[Codesys]常用功能块应用分享-BMOV功能块功能介绍及其使用实例说明
官方说明 功能说明 参数 类型 功能 pbyDataSrcPOINTER TO BYTE指向源数组指针uiSizeUINT要移动数据的BYTE数pbyDataDesPOINTER TO BYTE指向目标数组指针 实例应用-ST IF SYSTEM_CLOCK.AlwaysTrue THENCASE iAutoState OF0: //读写完成信号在下次读写信号的上升沿或复位信号…...
大语言模型通用能力排行榜(2024年11月8日更新)
数据来源SuperCLUE 榜单数据为通用能力排行榜 排名 模型名称 机构 总分 理科 文科 Hard 使用方式 发布日期 - o1-preview OpenAI 75.85 86.07 76.6 64.89 API 2024年11月8日 - Claude 3.5 Sonnet(20241022) Anthropic 70.88 82.4…...
信息技术引领未来:大数据治理的实践与挑战
信息技术引领未来:大数据治理的实践与挑战 在信息技术日新月异的今天,大数据已成为企业和社会发展的重要驱动力。大数据治理,作为确保数据质量、安全性和合规性的关键环节,正面临着前所未有的实践挑战与机遇。本文将探讨信息技术…...

Git 分⽀规范 Git Flow 模型
前言 GitFlow 是一种流行的 Git 分支管理策略,由 Vincent Driessen 在 2010 年提出。它提供了一种结构化的方法来管理项目的开发、发布和维护,特别适合大型和复杂的项目。GitFlow 定义了一套明确的分支模型和工作流程,使得团队成员可以更有效…...

基于YOLOv8深度学习的公共卫生防护口罩佩戴检测系统(PyQt5界面+数据集+训练代码)
在全球公共卫生事件频发的背景下,防护口罩佩戴检测成为保障公众健康和控制病毒传播的重要手段之一。特别是在人员密集的公共场所,例如医院、学校、公共交通工具等地,口罩的正确佩戴对降低病毒传播风险、保护易感人群、遏制疫情扩散有着至关重…...

Nature Communications 基于触觉手套的深度学习驱动视触觉动态重建方案
在人形机器人操作领域,有一个极具价值的问题:鉴于操作数据在人形操作技能学习中的重要性,如何有效地从现实世界中获取操作数据的完整状态?如果可以,那考虑到人类庞大规模的人口和进行复杂操作的简单直观性与可扩展性&a…...

构建SSH僵尸网络
import argparse import paramiko# 定义一个名为Client的类,用于表示SSH客户端相关操作 class Client:# 类的初始化方法,接收主机地址、用户名和密码作为参数def __init__(self, host, user, password):self.host hostself.user userself.password pa…...
WPF中MVVM工具包 CommunityToolkit.Mvvm
CommunityToolkit.Mvvm,也称为MVVM工具包,是Microsoft Community Toolkit的一部分。它是一个轻量级但功能强大的MVVM(Model-View-ViewModel)库,旨在帮助开发者更容易地实现MVVM设计模式。 特点 独立于平台和运行时&a…...

学习空闲任务函数
一、user_StopEnterTask 停止 进入任务 /* Private includes -----------------------------------------------------------*/ //includes #include "user_TasksInit.h" #include "user_MPUCheckTask.h"#include "ui.h" #include "ui_Hom…...

Hyper-v中ubuntu与windows文件共享
Hyper-v中ubuntu与windows文件共享 前言相关链接第一步--第一个链接第二步--第二个链接测试与验证 前言 关于Hyper-V的共享我搞了好久,网上的很多教程太过冗余,我直接采用最简单的办法吧 相关链接 Hyper-V中Ubuntu 同windows系统共享文件夹-百度经验 …...

【软件工程】一篇入门UML建模图(类图)
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀软件开发必练内功_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…...

Windows 安装Docker For Desktop概要
Windows 安装docker 下载部分的工作需要使用科学技术。如果没有可以联系博主发送已下载好的文件。 本文档不涉及技术的讲解,仅有安装的步骤。 准备工作 包含下载与环境准备,下载的文件仅下载,在后续步骤进行安装。 微软关于wsl的文档&…...
解决循环依赖报错问题
Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name ‘asyncTaskServiceImpl’: Bean with name ‘asyncTaskServiceImpl’ has been injected into other beans [resignServiceImpl] in its raw version as part…...

代码随想录第46期 单调栈
这道题主要是单调栈的简单应用 class Solution { public:vector<int> dailyTemperatures(vector<int>& T) {vector<int> result(T.size(),0);stack<int> st;st.push(0);for(int i1;i<T.size();i){if(T[i]<T[st.top()]){st.push(i);}else{wh…...

中仕公考怎么样?事业编面试不去有影响吗?
事业编考试笔试已经通过,但是面试不去参加会有影响吗? 1. 自动放弃面试资格:未能按时出席事业单位的面试将被视为主动放弃该岗位的竞争机会。 2. 个人信誉问题:面试作为招聘流程的关键步骤,无故缺席可能被解释为诚信…...

OMV7 树莓派 tf卡安装
升级7之后,问题多多,不是docker不行了,就是代理不好使 今天又重装了一遍,用官方的链接,重新再折腾一遍…… 使用raspberry pi imager安装最新版lite OS。 注意是无桌面 Lite版 配置好树莓派初始化设置࿰…...
Go语言24小时极速学习教程(五)Go语言中的SpringMVC框架——Gin
作为一个真正能用的企业级应用,怎么能缺少RESTful接口呢?所以我们需要尝试在Go语言环境中写出我们的对外接口,这样前端就可以借由Gin框架访问我们数据库中的数据了。 一、Gin框架的使用 1. 安装 Gin 首先,你需要在你的 Go 项目…...
【汇编】c++游戏开发
由一起学编程创作的‘C/C项目实战:2D射击游戏开发(简易版), 440 行源码分享来啦~’: C/C项目实战:2D射击游戏开发(简易版), 440 行源码分享来啦~_射击c-CSDN博客文章浏览…...

Android Studio | 修改镜像地址为阿里云镜像地址,启动App
在项目文件的目录下的 settings.gradle.kts 中修改配置,配置中包含插件和依赖项 pluginManagement {repositories {maven { urluri ("https://www.jitpack.io")}maven { urluri ("https://maven.aliyun.com/repository/releases")}maven { urlu…...

Rocky linux8 安装php8.0
Rocky linux8 安装php8.0 1.安装remi源2.列出php版本3.变更php版本,Rocky8有提供php8版本,所以切换Rocky8提供的版本,而不是remi提供的版本,不过remi有提供php8.1和php8.2版本。4.切换成remi提供的8.0版本5.安装phpendl 1.安装rem…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...

DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...