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

输出自定义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

相关推荐

  1. 音视频实战--定义输入输出IO

    2024-02-17 10:16:01       18 阅读
  2. Linux输出输入定向

    2024-02-17 10:16:01       14 阅读
  3. Shell 输入/输出定向

    2024-02-17 10:16:01       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-17 10:16:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-17 10:16:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-17 10:16:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-17 10:16:01       18 阅读

热门阅读

  1. Redis如何找出大量以某一个前缀开头的key

    2024-02-17 10:16:01       27 阅读
  2. 数据转换成json格式

    2024-02-17 10:16:01       28 阅读
  3. c入门第十七篇——数据持久化,读写文件

    2024-02-17 10:16:01       32 阅读
  4. [ 2024春节 Flink打卡 ] -- 理论基础

    2024-02-17 10:16:01       22 阅读
  5. SparkUI任务启动参数介绍(148个参数)

    2024-02-17 10:16:01       25 阅读
  6. Day36 贪心算法 part05

    2024-02-17 10:16:01       26 阅读
  7. python基本语法

    2024-02-17 10:16:01       26 阅读
  8. C#系列-C#Entity Framework Core for MongoDB应用实例(33)

    2024-02-17 10:16:01       21 阅读