输入输出自定义映射矩阵(数据结构树)

输出自定义FC其它算法实现,可以参考下面文章:

https://rxxw-control.blog.csdn.net/article/details/125994252icon-default.png?t=N7T8https://rxxw-control.blog.csdn.net/article/details/125994252下面我们看下我们的控制要求。在学习本篇博客之前大家可以熟悉下数据结构图的概念和存储知识,链接如下:

https://rxxw-control.blog.csdn.net/article/details/131797993icon-default.png?t=N7T8https://rxxw-control.blog.csdn.net/article/details/131797993

1、映射矩阵

下面我们一步步分析代码如何编写,

2、实现不了

上面的代码看着简单清爽,不过没什么用实现不了我们需要的功能。

下面利用数据结构里的树来分析我们的问题

3、数据结构-树

分析其中的根节点"OUT0。

4、根节点"OUT0"

根节点的输出条件我们知道了,8个AND 和7个OR完成,边的存储我们借助博途里的2维矩阵实现。

5、自定义映射FB

下面我们给出完整SCL代码,大家可以尝试进一步优化此代码,以并适应不同的矩阵大小。

6、完整SCL代码

FUNCTION_BLOCK "FB_DO_MapMartiex"
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
   VAR_INPUT 
      Input : Array[0..7] of Bool;   // 输入信号
   END_VAR

   VAR_OUTPUT 
      Out : Byte;   // 输出信号
   END_VAR

   VAR 
      MapMartiex : Array[0..7, 0..7] of Bool;   // 输出设置映射矩阵 关系矩阵
   END_VAR


BEGIN
	//输出自定义映射矩阵
	//RXXW_Dor
	//2024-02-16
	//DO0
	#Out.%X0 :=(#Input[0] AND #MapMartiex[0, 0])
	        OR (#Input[1] AND #MapMartiex[1, 0])
	        OR (#Input[2] AND #MapMartiex[2, 0])
	        OR (#Input[3] AND #MapMartiex[3, 0])
	        OR (#Input[4] AND #MapMartiex[4, 0])
	        OR (#Input[5] AND #MapMartiex[5, 0])
	        OR (#Input[6] AND #MapMartiex[6, 0])
	        OR (#Input[7] AND #MapMartiex[7, 0]);
	//DO1       
	#Out.%X1 :=(#Input[0] AND #MapMartiex[0, 1])
	        OR (#Input[1] AND #MapMartiex[1, 1])
	        OR (#Input[2] AND #MapMartiex[2, 1])
	        OR (#Input[3] AND #MapMartiex[3, 1])
	        OR (#Input[4] AND #MapMartiex[4, 1])
	        OR (#Input[5] AND #MapMartiex[5, 1])
	        OR (#Input[6] AND #MapMartiex[6, 1])
	        OR (#Input[7] AND #MapMartiex[7, 1]);
	//DO2        
	#Out.%X2 :=(#Input[0] AND #MapMartiex[0, 2])
	        OR (#Input[1] AND #MapMartiex[1, 2])
	        OR (#Input[2] AND #MapMartiex[2, 2])
	        OR (#Input[3] AND #MapMartiex[3, 2])
	        OR (#Input[4] AND #MapMartiex[4, 2])
	        OR (#Input[5] AND #MapMartiex[5, 2])
	        OR (#Input[6] AND #MapMartiex[6, 2])
	        OR (#Input[7] AND #MapMartiex[7, 2]);
	//DO3
	#Out.%X3 :=(#Input[0] AND #MapMartiex[0, 3])
	        OR (#Input[1] AND #MapMartiex[1, 3])
	        OR (#Input[2] AND #MapMartiex[2, 3])
	        OR (#Input[3] AND #MapMartiex[3, 3])
	        OR (#Input[4] AND #MapMartiex[4, 3])
	        OR (#Input[5] AND #MapMartiex[5, 3])
	        OR (#Input[6] AND #MapMartiex[6, 3])
	        OR (#Input[7] AND #MapMartiex[7, 3]);
	//DO4
	#Out.%X4 :=(#Input[0] AND #MapMartiex[0, 4])
	        OR (#Input[1] AND #MapMartiex[1, 4])
	        OR (#Input[2] AND #MapMartiex[2, 4])
	        OR (#Input[3] AND #MapMartiex[3, 4])
	        OR (#Input[4] AND #MapMartiex[4, 4])
	        OR (#Input[5] AND #MapMartiex[5, 4])
	        OR (#Input[6] AND #MapMartiex[6, 4])
	        OR (#Input[7] AND #MapMartiex[7, 4]);
	//DO5
	#Out.%X5 :=(#Input[0] AND #MapMartiex[0, 5])
	        OR (#Input[1] AND #MapMartiex[1, 5])
	        OR (#Input[2] AND #MapMartiex[2, 5])
	        OR (#Input[3] AND #MapMartiex[3, 5])
	        OR (#Input[4] AND #MapMartiex[4, 5])
	        OR (#Input[5] AND #MapMartiex[5, 5])
	        OR (#Input[6] AND #MapMartiex[6, 5])
	        OR (#Input[7] AND #MapMartiex[7, 5]);
	//DO6
	#Out.%X6 :=(#Input[0] AND #MapMartiex[0, 6])
	        OR (#Input[1] AND #MapMartiex[1, 6])
	        OR (#Input[2] AND #MapMartiex[2, 6])
	        OR (#Input[3] AND #MapMartiex[3, 6])
	        OR (#Input[4] AND #MapMartiex[4, 6])
	        OR (#Input[5] AND #MapMartiex[5, 6])
	        OR (#Input[6] AND #MapMartiex[6, 6])
	        OR (#Input[7] AND #MapMartiex[7, 6]);
	        
	//DO7
	#Out.%X7 :=(#Input[0] AND #MapMartiex[0, 7])
	        OR (#Input[1] AND #MapMartiex[1, 7])
	        OR (#Input[2] AND #MapMartiex[2, 7])
	        OR (#Input[3] AND #MapMartiex[3, 7])
	        OR (#Input[4] AND #MapMartiex[4, 7])
	        OR (#Input[5] AND #MapMartiex[5, 7])
	        OR (#Input[6] AND #MapMartiex[6, 7])
	        OR (#Input[7] AND #MapMartiex[7, 7]);
	        
	        
	        
	    
END_FUNCTION_BLOCK

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/389805.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

内网横向渗透-1

目录 内网横向渗透 流量监听工具的使用 ARP欺骗 工具使用 服务密码攻击 hydra medusa ncrack hashcat 内网横向渗透 流量监听工具的使用 ARP欺骗 工具使用 ettercap 工具 可以进行arp欺骗、DNS欺骗,网络钓鱼等等! driftnet -i eth0 可以用来…

GiantPandaCV | 视觉类表面缺陷检测项目相关技术总结

本文来源公众号“GiantPandaCV”,仅用于学术分享,侵权删,干货满满。 原文链接:视觉类表面缺陷检测项目相关技术总结 本文由海滨撰写,首发于GaintPandaCV。 零、前言 做这个方向的项目也有一段时间了,作为…

在Postgresql 下安装QGIS

一.打开 Application Stack Builder 二.选择默认端口和安装目标 三.选择【Spatial Extensions】 四.选择安装位置 五.选择安装组件 六.选择数据库和输入对应账号密码 七.安装完成

【Linux】进程的初步认识

进程的初步认识 基本概念描述进程task_struct-PCB的一种task_stuct内容分类 查看进程通过系统调用获取进程标识符 基本概念 要了解进程,首先我们要知道两点 我们可以同时启动多个程序,也就意味着我们可以将多个.exe文件加载到内存操作系统如何去管理这些…

C# CAD SelectionFilter下TypedValue数组

SelectionFilter是用于过滤AutoCAD实体的类,在AutoCAD中,可以使用它来选择具有特定属性的实体。构造SelectionFilter对象时,需要传入一个TypedValue数组,它用于定义选择规则。 在TypedValue数组中,每个元素表示一个选…

如何将视频转换为音频?10 个最佳视频音频文件转换器!

生活中最令人愉快的乐趣之一就是拍摄、编辑和分享视频。由于有如此多的设备能够捕捉视频,并且有如此多的分享视频的方式,有时音频旁白可能比图片更重要、更有启发性。更糟糕的是,您选择的视频可能无法在您的设备上播放。 在这种情况下&#…

中科大计网学习记录笔记(十一):CDN

前言: 学习视频:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程 该视频是B站非常著名的计网学习视频,但相信很多朋友和我一样在听完前面的部分发现信…

多线程 --- 线程互斥

目录 1. 线程互斥 1.1. 相关背景概念 1.2. 互斥锁 1.2.1. 初始化互斥量 1.2.2. 销毁互斥量 1.2.3. 互斥量加锁 && 解锁 1.3. 互斥量 (锁) 的原理 1.3.2. 相关问题和解释 1.3.2. 锁的实现原理 1.3.3. 可重入 && 线程安全问题 1.3.4. 常见的线程不安全…

【c++】vector的增删查改

1.先定义一个类对象vector 为了防止和库里面发生冲突&#xff0c;定义一个命名空间&#xff0c;将类对象放在命名空间 里面 #include<iostream> using namespace std; namespace zjw {class vector {public:private:}; }2.定义变量&#xff0c;需要一个迭代器&#xff…

【实战】二、Jest难点进阶(一) —— 前端要学的测试课 从Jest入门到TDD BDD双实战(五)

文章目录 一、Jest 前端自动化测试框架基础入门二、Jest难点进阶1.snapshot 快照测试 学习内容来源&#xff1a;Jest入门到TDD/BDD双实战_前端要学的测试课 相对原教程&#xff0c;我在学习开始时&#xff08;2023.08&#xff09;采用的是当前最新版本&#xff1a; 项版本babe…

optee UTA加载

流程 动态TA按照存储位置的不同分为REE filesystem TA&#xff1a;存放在REE侧文件系统里的TA&#xff1b; Early TA&#xff1a;被嵌入到optee os里的在supplicant启动之前就可用了。 这里我们讲的是常规的存放在REE侧文件系统里的TA。 通过GP标准调用的与TA通信的命令(opens…

【Git】.gitignore 的匹配规则

每行一个规则&#xff1a;每行只能包含一个规则&#xff0c;多个规则需要分别写在不同的行上。 示例&#xff1a; # 忽略日志文件 logs/ # 忽略临时文件 temp.txt种类匹配&#xff1a; 文件&#xff1a;在规则的开头指定文件名或路径&#xff0c;如 file.txt。 示例&#xff1a…

openGauss学习笔记-220 openGauss性能调优-确定性能调优范围-查询最耗性能的SQL

文章目录 openGauss学习笔记-220 openGauss性能调优-确定性能调优范围-查询最耗性能的SQL220.1 操作步骤 openGauss学习笔记-220 openGauss性能调优-确定性能调优范围-查询最耗性能的SQL 系统中有些SQL语句运行了很长时间还没有结束&#xff0c;这些语句会消耗很多的系统性能&…

http“超级应用与理解”

本篇文章来介绍一下http协议和其应用 1.http协议是在OSI模型的哪一层 HTTP&#xff08;超文本传输协议&#xff09;是应用层协议&#xff0c;它是在 OSI 模型的最高层&#xff0c;即第七层——应用层。HTTP 通过互联网来传输数据和信息&#xff0c;主要用于 Web 浏览器和 Web …

CF1845 D. Rating System [思维题+数形结合]

传送门:CF [前题提要]:自己在做这道题的时候思路完全想错方向,导致怎么做都做不出来,看了题解之后感觉数形结合的思考方式挺好的(或者这种做法挺典的),故写篇题解记录一下 题目很简单,不再解释.先不考虑 k k k,想想是一种什么情况?很显然应该是跟下图一样是一个折线图的变化.…

计算机设计大赛 深度学习YOLO安检管制物品识别与检测 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络4 Yolov55 模型训练6 实现效果7 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习YOLO安检管制误判识别与检测 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&…

计算机组成原理(2)-----存储芯片与CPU的连接

目录 一.单块存储芯片与CPU的连接 二.多块存储芯片与CPU的连接 1.位扩展 2.字扩展 &#xff08;1&#xff09;线选法 &#xff08;2&#xff09;译码器片选法 3.字位同时扩展 三.译码器相关 一.单块存储芯片与CPU的连接 如图所示是8*8位的芯片&#xff0c;总共8个存储…

C++ 双向广度搜索,嚯嚯!不就是双指针理念吗

1. 前言 在线性数据结构中搜索时&#xff0c;常使用线性搜索算法&#xff0c;但其性能偏低下&#xff0c;其性能改善方案常有二分搜索和双指针或多指针搜索算法。在复杂的数据结构如树和图中&#xff0c;常规搜索算法是深度和广度搜索。在深度搜索算法过程中常借助剪枝或记忆化…

分布式文件系统 SpringBoot+FastDFS+Vue.js【二】

分布式文件系统 SpringBootFastDFSVue.js【二】 六、实现上传功能并展示数据6.1.创建数据库6.2.创建spring boot项目fastDFS-java6.3.引入依赖6.3.fastdfs-client配置文件6.4.跨域配置GlobalCrosConfig.java6.5.创建模型--实体类6.5.1.FastDfsFile.java6.5.2.FastDfsFileType.j…

Mac M2芯片配置PHP环境

Mac M2芯片配置PHP环境 1. XAMPP 1. XAMPP 官网地址 https://www.apachefriends.org/ 安装 安装完成 web server打开后&#xff0c;在打开localhost 成功&#xff01;