精华内容
下载资源
问答
  • ACL控制策略

    千次阅读 2019-05-03 09:38:23
    1.定义ACL控制策略 问题 1)创建账户:mike、john、kaka 2)创建文件:/data/file1.txt 3)mike对文件有读写权限,john只有读权限。其他用户没有任何权限 4)kaka具有与john相同权限 5)创建lily用户,lily对file1.txt...

    1.定义ACL控制策略

    问题

    1)创建账户:mike、john、kaka
    2)创建文件:/data/file1.txt
    3)mike对文件有读写权限,john只有读权限。其他用户没有任何权限
    4)kaka具有与john相同权限
    5)创建lily用户,lily对file1.txt具有读执行权限,其他用户没有任何权限

    方案

    并不是所有的分区都支持ACL策略设置,后续会学习怎样让一个分区支持ACL。在安装系统时划分的分区默认是支持ACL策略的,而如果该分区是在安装系统之后创建的默认是不支持的。
    ACL策略应用的情况是,当所有者、所属组、其他人三个归属关系,三种身份的权限都不能满足某个用户或组的权限设置。这个时候ACL可以为这个用户或组单独设置权限,使Linux权限划分设置更加灵活。

    步骤

    实现此案例需要按照如下步骤进行。
    步骤一:创建账户:mike、john、kaka
    命令操作如下所示:

    [root@localhost ~]# useradd mike
    [root@localhost ~]# useradd john
    [root@localhost ~]# useradd kaka
    

    步骤二:创建文件:/data/file1.txt
    命令操作如下所示:

    [root@localhost ~]# touch /data/file1.txt
    [root@localhost ~]# ls -l /data/file1.txt
    -rw-r--r--. 1 root root 0 2月  27 15:38 /data/file1.txt
    

    步骤三:mike对文件有读写权限,john只有读权限。其他用户没有任何权限
    分析: 此题涉及到三种不同的权限,我们可以这样来做,让mike来做所有者,让john属于此文件所属组成员,当然其他人就好说了直接设置即可。
    命令操作如下所示:

     [root@localhost ~]# ls -l /data/file1.txt              //查看权限及归属关系
    -rw-r--r--. 1 root root 0 2月  27 15:38 /data/file1.txt
    [root@localhost ~]# chown mike:john /data/file1.txt    //更改所有者与所属组
    [root@localhost ~]# ls -l /data/file1.txt               //查看更改结果
    -rw-r--r--. 1 mike john 0 2月  27 15:38 /data/file1.txt
    [root@localhost ~]# chmod o= /data/file1.txt            //设置权限,其他人无权限
    [root@localhost ~]# ls -l /data/file1.txt               //查看呢设置结果
    -rw-r-----. 1 mike john 0 2月  27 15:38 /data/file1.txt
    [root@localhost ~]#
    

    步骤四:kaka具有与john相同权限
    分析: 我们可以把kaka加入到john组里面
    命令操作如下所示:

    [root@localhost ~]# id kaka                //查询kaka用户信息
    uid=506(kaka) gid=507(kaka) 组=507(kaka)
    [root@localhost ~]# gpasswd -a kaka john  //将kaka用户加入到john组
    Adding user kaka to group john
    [root@localhost ~]# id kaka                //查询kaka用户信息
    uid=506(kaka) gid=507(kaka) 组=507(kaka),506(john)
    [root@localhost ~]#
    

    步骤五:创建lily,lily对file1.txt具有读执行权限,其他用户没有任何权限
    分析: 这个时候就出现基本权限及归属关系不能解决,首先所有者已确定是mike,所属组权限rw所以也不行,最后其他人上面题有要求无任何权限。所以ACL策略就派上用场了。
    命令操作如下所示:

    [root@localhost ~]# echo 123456 > /data/file1.txt  //写入测试文字
    [root@localhost ~]# cat /data/file1.txt             //管理员测试
    123456
    [root@localhost ~]# id lily                          //查询是否存在lily用户
    id: lily:无此用户
    [root@localhost ~]# useradd lily                     //创建lily用户
    [root@localhost ~]# su – lily                        //切换用户身份
    [lily@localhost ~]$ cat /data/file1.txt       //测试在没有设置ACL前lily能否查看
    cat: /data/file1.txt: 权限不够
    [lily@localhost ~]$ exit                              //退到root用户身份
    logout
    [root@localhost ~]# getfacl /data/file1.txt         //查看文件ACL策略
    getfacl: Removing leading '/' from absolute path names
    
    # file: data/file1.txt
    # owner: mike
    # group: john
    user::rw-
    group::r--
    other::---
    
    [root@localhost ~]# setfacl -m u:lily:r /data/file1.txt   //设置ACL策略
    [root@localhost ~]# getfacl /data/file1.txt                //查看ACL策略
    getfacl: Removing leading '/' from absolute path names
    # file: data/file1.txt
    # owner: mike
    # group: john
    user::rw-
    user:lily:r--
    group::r--
    mask::r--
    other::---
    
    [root@localhost ~]# su – lily             //切换用户
    [lily@localhost ~]$ cat /data/file1.txt  //测试是否具有r权限
    123456
    

    2.定义默认ACL控制策略

    问题

    1)为目录 /public/ 设置ACL策略,使用户gelin01具有rwx权限
    2)在 /public/ 下创建子目录gdir1、文件gfile1,分别查看其ACL策略
    3)为目录 /public/ 设置可继承权限为“用户ht02具有rwx权限”
    4)在 /public/ 下创建子目录gdir2、文件gfile2,分别查看其ACL策略
    5)以用户ht02登入,做以下测试:
    6)对/public/目录是否有写入权限
    7)对/public/下的gdir2和gfile2是否有写入权限
    8)对/public/下的gdir1和gfile1是否有写入权限

    方案

    ACL默认策略,是一个可以继承的ACL策略。但需注意的是默认策略对目录本身是没有生效的,对于子目录子文件才开始生效。

    步骤

    实现此案例需要按照如下步骤进行。
    步骤一:为目录 /public/ 设置ACL策略,使用户gelin01具有rwx权限
    命令操作如下所示:

    [root@localhost ~]# id gelin01           //测试是否有gelin01用户
    uid=501(gelin01) gid=501(gelin01) 组=501(gelin01),502(tarena)
    [root@localhost ~]# mkdir /public        //创建目录
    [root@localhost ~]# getfacl /public      //查看ACL策略
    getfacl: Removing leading '/' from absolute path names
    
    # file: public/
    # owner: root
    # group: root
    user::rwx
    group::r-x
    other::r-x
    
    [root@localhost ~]# setfacl -m u:gelin01:rwx /public    //设置ACL策略
    [root@localhost ~]# getfacl /public                       //查看ACL策略
    getfacl: Removing leading '/' from absolute path names
    # file: public/
    
    # owner: root
    # group: root
    user::rwx
    user:gelin01:rwx
    group::r-x
    mask::rwx
    other::r-x
    步骤二:在 /public/ 下创建子目录gdir1、文件gfile1,分别查看其ACL策略
    命令操作如下所示:
    [root@localhost ~]# mkdir /public/gdir1
    [root@localhost ~]# touch /public/gfile1
    [root@localhost ~]# getfacl /public/gdir1/
    getfacl: Removing leading '/' from absolute path names
    # file: public/gdir1/
    
    # owner: root
    # group: root
    user::rwx
    group::r-x
    other::r-x
    
    [root@localhost ~]# getfacl /public/gfile1 
    getfacl: Removing leading '/' from absolute path names
    # file: public/gfile1
    
    # owner: root
    # group: root
    user::rw-
    group::r--
    other::r--
    
    [root@localhost ~]#
    

    步骤三:为目录 /public/ 设置可继承权限为“用户ht02具有rwx权限”
    命令操作如下所示:

    [root@localhost ~]# id ht02        //查看ht02用户是否存在
    id: ht02:无此用户
    [root@localhost ~]# useradd ht02   //创建ht02用户
    [root@localhost ~]# getfacl /public/
    getfacl: Removing leading '/' from absolute path names
    # file: public/
    # owner: root
    # group: root
    user::rwx
    user:gelin01:rwx
    group::r-x
    mask::rwx
    other::r-x
    [root@localhost ~]# setfacl -dm u:ht02:rwx /public    //设置默认可继承ACL权限
    [root@localhost ~]# getfacl /public/
    getfacl: Removing leading '/' from absolute path names
    # file: public/
    # owner: root
    # group: root
    user::rwx
    user:gelin01:rwx
    group::r-x
    mask::rwx
    other::r-x
    default:user::rwx
    default:user:ht02:rwx
    default:group::r-x
    default:mask::rwx
    default:other::r-x
    
    [root@localhost ~]#
    

    步骤四:在 /public/ 下创建子目录gdir2、文件gfile2,分别查看其ACL策略
    命令操作如下所示:

    [root@localhost ~]# mkdir /public/gdir2
    [root@localhost ~]# touch /public/gfile2
    [root@localhost ~]# getfacl /public/gdir2
    getfacl: Removing leading '/' from absolute path names
    # file: public/gdir2
    # owner: root
    # group: root
    user::rwx
    user:ht02:rwx
    group::r-x
    mask::rwx
    other::r-x
    default:user::rwx
    default:user:ht02:rwx
    default:group::r-x
    default:mask::rwx
    default:other::r-x
    
    [root@localhost ~]# getfacl /public/gfile2
    getfacl: Removing leading '/' from absolute path names
    # file: public/gfile2
    # owner: root
    # group: root
    user::rw-
    user:ht02:rwx                   #effective:rw-
    group::r-x                      #effective:r--
    mask::rw-
    other::r--
    

    步骤五:以用户ht02登入,测试
    切换目录身份,命令操作如下所示:

    [root@localhost ~]# su - ht02
    [ht02@localhost ~]$
    

    对/public/目录是否有写入权限,命令操作如下所示:

    [ht02@localhost ~]$ mkdir /public/htdir
    mkdir: 无法创建目录"/public/htdir": 权限不够
    [ht02@localhost ~]$ getfacl /public/
    getfacl: Removing leading '/' from absolute path names
    # file: public/
    # owner: root
    # group: root
    user::rwx
    user:gelin01:rwx
    group::r-x
    mask::rwx
    other::r-x
    default:user::rwx
    default:user:ht02:rwx
    default:group::r-x
    default:mask::rwx
    default:other::r-x
    
    [ht02@localhost ~]$
    

    分析: 从这可以看出默认权限对目录本身没有生效,对子目录才开始继承生效。
    对/public/下的gdir2和gfile2是否有写入权限,命令操作如下所示:

    [ht02@localhost ~]$ mkdir /public/gdir2/htdir
    [ht02@localhost ~]$ getfacl /public/gdir2/
    getfacl: Removing leading '/' from absolute path names
    # file: public/gdir2/
    # owner: root
    # group: root
    user::rwx
    user:ht02:rwx
    group::r-x
    mask::rwx
    other::r-x
    default:user::rwx
    default:user:ht02:rwx
    default:group::r-x
    default:mask::rwx
    default:other::r-x
    
    [ht02@localhost ~]$ ls -ld /public/gdir2/htdir/      //创建成功
    drwxrwxr-x+ 2 ht02 ht02 4096 2月  27 16:53 /public/gdir2/htdir/
    [ht02@localhost ~]$ getfacl /public/gfile2
    getfacl: Removing leading '/' from absolute path names
    # file: public/gfile2
    # owner: root
    # group: root
    user::rw-
    user:ht02:rwx                   #effective:rw-
    group::r-x                      #effective:r--
    mask::rw-
    other::r--
    
    [ht02@localhost ~]$
    [ht02@localhost ~]$ echo 123456 > /public/gfile2     //测试写入
    [ht02@localhost ~]$ cat /public/gfile2                
    123456
    对/public/下的gdir1和gfile1是否有写入权限,命令操作如下所示:
    [ht02@localhost ~]$ getfacl /public/gdir1      //可以看到ht02没有呢ACL权限
    getfacl: Removing leading '/' from absolute path names
    # file: public/gdir1
    # owner: root
    # group: root
    user::rwx
    group::r-x
    other::r-x
    
    [ht02@localhost ~]$ mkdir /public/gdir1/htdir
    mkdir: 无法创建目录"/public/gdir1/htdir": 权限不够
    [ht02@localhost ~]$ getfacl /public/gfile1      //可以看到ht02没有呢ACL权限
    getfacl: Removing leading '/' from absolute path names
    # file: public/gfile1
    # owner: root
    # group: root
    user::rw-
    group::r--
    other::r--
    
    [ht02@localhost ~]$ echo 123456 > /public/gfile1
    -bash: /public/gfile1: 权限不够
    [ht02@localhost ~]$
    
    展开全文
  • 流量控制策略(汇总)

    千次阅读 2017-05-17 10:34:36
    汇总常见的流量控制策略 一:策略名称 :黑白名单策略 解释:在mcc中有一份黑名单和一份白名单,如果黑白名单限流开关打开,那么请求到达后,先判断是否在黑名单中,如果是,那么返回流控结果给业务方; 如果...

                          汇总常见的流量控制策略

     

    一:策略名称 : 黑白名单策略

            解释:在mcc中有一份黑名单和一份白名单,如果黑白名单限流开关打开,那么请求到达后,先判断是否在黑名单中,如果是,那么返回流控结果给业务方;

                       如果否,继续判断此用户是否在白名单中,如果是,那么返回不流控结果给业务方。否则继续进行后续的流控逻辑。

            实现:mcc中存储黑白名单,本地通过callback方式缓存

     

    二:策略名称:用户百分比

           解释:基于用户身份标识+url,对用户的请求做流控。在mcc中存储要放过用户的百分比数值percentValue。请求到达后,取出用户的uuid,

                      并对uuid做哈希,再模100,得到userHashValue,和percentValue对比:

                         1.如果userHashValue>=percentValue,那么,判断此url是否是白名单接口:1.1 是——放过;1.2 否——直接返回流控结果;

     

                         2.如果userHashValue<percentValue,那么,继续进行后续的流控逻辑。

           实现:mcc中存储百分比值,本地通过callback方式缓存

     

    三:策略名称:限时等待策略

           解释:本策略提供一种近似排队的策略,当用户第一次访问本策略的url时,拒绝本次请求,并以此作为时间轴原点,

                      在wait_time时间范围内不允许访问,直到访问时间落在serve_time范围内才允许访问。例:wait_time=5s,

                       serve_time=10s,则在0s~5s这段时间内不得访问,在5s~15s期间允许访问。

           实现:需要借助缓存(Tair/Squirrel)存储key/value,每次请求需要读缓存

     

    四:策略名称:限制频次

            解释本策略限制窗口时间内的访问频率,在window_time时间窗口内限制最多访问次数为frequency_times,

                       超过frequency_times次数的访问将被拒绝。例子:window_time=5s,frequency_times=20,则在5s时间窗内,

                      前20次访问放行,第21次以后的访问拒绝。

            实现:需要借助缓存(Tair/Squirrel)存储key/value,每次请求需要写缓存

     

    五:策略名称:url集群qps限制

            解释限制某一url的总体qps。不分用户,只根据url做限制

           实现:需要借助缓存(Tair/Squirrel)存储key/value,每n次请求需要写缓存(n可配)

             

    六:策略名称:单机限流策略

           解释本策略目前提供了2种本地限制方法:

               1.限制单机接口粒度的访问qps:此策略限制了单台某接口每秒最高的访问次数,超过策略设置的

                  最高的QPS的访问则进行限流,对白名单以外的访问进行限制。 例:限制单机/index接口的qps为100

              2.限制单机的访问qps:此策略限制了单台机器每秒最高的访问次数,超过策略设置的最高的

                QPS的访问则进行限流,对白名单以外的访问进行限制

               例:某服务最高允许qps为10000/s,40台机器,则此策略的限流阈值应为250/s,此数据推算是建立在流量均衡的基础

                      上估算出来的,具体应用时应预留出合理的缓冲区间。

     

           注意:QPS策略存在的意义在于,当整个业务的流量过大时,QPS策略能够保证核心业务的完成。

     

           实现:使用Guava中的RateLimiter

     

     

     

     

    后面会详细对六种策略的实现进一步分析:敬请关注

     

     

    作者:乐杨俊

     

    展开全文
  • 控制策略模型建模规范

    千次阅读 2019-01-19 20:06:42
    控制策略模型建模规范(总则) 1. 导言   1.1. 目的   本建模规范适用于XXXXX控制策略开发阶段,快速原型模型的开发和维护。 本规范主要用于约束XXXXX部XXXX控制策略建模行为。   1.2. 参考文档   ...

    网上收集的资料。

    原文参考:

    http://blog.sina.com.cn/s/blog_859fc6960102waqb.html

     

    控制策略模型建模规范(总则)

    1. 导言

     

    1.1. 目的

     

    本建模规范适用于XXXXX控制策略开发阶段,快速原型模型的开发和维护。
    本规范主要用于约束XXXXX部XXXX控制策略建模行为。

     

    1.2. 参考文档

     

    CONTROL ALGORITHM MODELING GUIDELINES USING MATLAB, Simulink, and Stateflow(Ver. 3.0) 
    CONTROL ALGORITHM MODELING GUIDELINES USING MATLAB, Simulink, and Stateflow(Ver. 4.01)
    Modeling Guidelines for MATLAB/Simulink/Stateflow and TargetLink
    1.3. 缩写及术语

     

    MAAB: MathWorks Automotive Advisory Board
    RCP:Rapid Control Prototyping 快速控制原型
    HILS:Hardware-in-the-Loop Simulation 硬件在回路半实物仿真
    SF:Stateflow

     

    2. 概述

     

    本规范参考Mathwork的汽车咨询委员会发布的《使用Matlab、Simulink和Stateflow进行控制系统建模指南》中关于模型构建风格的部分内容。预期读者对象为:熟悉被控对象结构,具有较强的Simulink/Stateflow 建模能力,并熟悉XXXX控制思想的相关专业人员。

     

    2.1. 名称约定

     

    模块

    Block(s) / Module(s)

    构成Simulink模型的基本功能单元

    模型

    Model

    模块的集合(后缀为.mdl或.slx的文件)

    模式

    Mode

    Exclusive(OR) 和 Parallel(AND)

    SF模块

    SF 模块/型

    Simulink模型中的Chart

    SF状态机

    SF State-Machine

    Simulink模型中所有SF模型的统称

    SF框图

    SF Diagram

    SF模块所包含的内容

    SF状态图

    State Charts

    SF框图中包含State(s)的局部图形

    SF流程图

    Flow Charts

    不包含任何状态仅由连接节点和转移组成的SF框图

     

    2.2. MATLAB版本

     

    本规范在MATLAB 2009b/2010b/2015b/2016a中都应遵循,除非无法实现或遵从。
    模型最终将通过RTW自动生成嵌入式代码,应用于RCP测试。

     

    2.3. 目的

     

    通过对建模行为的约束,可提高或改善模型的以下特性:
    • 可读性:方便图形化模块构架的理解、功能的分析、防止易犯的错误发生;
    • 建模效率:易于修改,维护,较强的重用性,清晰的接口;
    • 仿真与测试:易于分析、监控和测试,可追溯性强,测试方便;
    • 代码效率:改善RTW代码的时间效率和空间效率,增强鲁棒性。

     

    控制策略模型建模规范(命名原则)

    3.1. 命名原则

     

    文件、文件夹、子系统、模块、输入输出模块、参数、信号、总线等命名应遵守以下原则:
    1. 使用有意义的名字:确切的表述变量代表的含义;
    2. 使用编码信息:采用标准缩写/简写或首字母缩写;
    3. 添加数据类型:指定变量的类型;
    4. 添加工程或者系统单位:确切指示变量使用的单位;
    5. 使用变量所属(作用)域:指示变量的出处和存储类型。


    3.2. 命名规范

     

    文件、文件夹、子系统、模块、输入输出模块、参数、信号、总线等通用命名规范:
    1. 使用字符(A~Z,a~z)开头,可以用字符、数字(0~9)以及下划线等组合构成变量的名称,并且对字符的大小写敏感,遵循一般C 语言变量的命名原则;
    2. 首字符不能为数字和下划线,末尾字符不能为下划线;下划线可用于分割字符,但不允许连续使用2个及以上的下划线来分割字符;
    3. 不允许使用中文字符,不允许使用空格;
    4. 命名长度:3 to 31 字符/characters长度 (不包含扩展名及.字符);
    5. 为增强可读性,使用下划线分割大小写字符,变量名中的下划线原则上不超出四个;
    6. (信号和参数名)禁止使用任何MATLAB的关键字/保留字,函数名或者操作符名,比如:'pi','true','false',’break','case','catch','classdef', 'continue','else','elseif','end','for','function','global','if','otherwise','parfor','persistent','return','spmd', 'switch','try','while','eps','Enf','intmax','intmin','NaN','pi','realmax','realmin','true','false','inf'…
    7. 禁止使用任何MATLAB自动生成代码中使用的字符,比如:‘const’,’TRUE’,’FALSE’, ‘infinity’,‘nil’,‘double’, ‘single’,‘or’,‘enum’ …

     

    类别

    特殊要求

    文件

    扩展标识符(扩展名)不能含有空格。

    文件夹/子系统

    不允许使用回车

    模块

    可以使用换行符

    输入输出模块

    不允许使用换行符;

    参数/信号/总线

    不允许使用换行符/ no control characters 

     

    控制策略模型建模规范(模型与模块)

     

    本部分对模型和模块的外观特性进行约定

    4.1. 背景色约定

     

    模块

    背景色

    Simulink设置值

    Atomic Unit/Subsystem

    绿色

    Green

    Inport

    绿色

    Green

    Outport

    红色

    Red

    标定量

    灰色

    Gray

    监控变量

    灰色

    Gray

    Constant

    灰色

    Gray

    引用公共函数

    黄色

    Yellow

     

    4.2. 模型中允许使用的数据类型

    Simulink supports all built-in numeric MATLAB® data types except int64 and uint64.

     

    Name

    Description

    Inherit: Inherit from Parent value

    Use data type of Settings/Parent value.

    Inherit: Inherit via back propagation

    Use data type of the driving block.

    double

    Double-precision floating point

    single

    Single-precision floating point

    int8

    Signed 8-bit integer

    uint8

    Unsigned 8-bit integer

    int16

    Signed 16-bit integer

    uint16

    Unsigned 16-bit integer

    int32

    Signed 32-bit integer

    uint32

    Unsigned 32-bit integer

    boolean

    Boolean (1 = true; 0 = false)

    fixdt(1,16)

    fixed point fixdt(1,16).

    fixdt(1,16,0)

    fixed point fixdt(1,16,0).

    fixdt(1,16,2^0,0))

    fixed point fixdt(1,16,2^0,0).

    Enum:

    enumerated data type

    Bus: 

    bus object

     

    4.3. 模型注释

    在模型中的关键算法必须进行注释,注释必须写在注释区域,注释文字不影响仿真和代码生成,注释需遵循以下原则:
    • 加框
    • 加阴影
    • 英文
    • 字体字号:Arial,常规,10

    本地化的语言应该仅用于具有描述、注释性质的区域,如模块的descriptive fields 。

     

    4.4. 模型组织结构

    对模型进行层级结构划分有利于提高模型的可读性、可维护性。一般在进行逻辑系统建模时,进行层级结构划分时,会用到下面的一些模块:
    • Subsystem
    • Atomic Subsystem
    • Stateflow
    模型中所有的层级应该和控制系统具备的各个功能及其结构保持一一对应的关系,并保证可读性、良好的工作流,可以被测试验证,可以生成代码。
    在建模时推荐按照如下方式进行层级划分:
    • 顶层
    • 触发层(非必须)
    • 结构层
    • 数据层
    顶层是体现模型总体外貌特征最外层,包括模型整体输入和输入输出变量定义和逻辑控制部分。触发层表明了各个子模块的触发时序,如果有必要还要设置其优先级,并用注释方式表达出来。结构层主要显示模型运算逻辑框架,是进一步的功能划分,在其中的各个子系统模块建议设置为原子子系统。数据层由“基本模块”构成,为模型最底层,用于表示数据传递顺序和数据运算过程。
    每个模型以library的方式创建,并使用层级管理,便于后续的版本更新管理。一般由三个层级组成:
    • 第一层级:集成的模块,命名:xxxx_yyyy (模块缩写名_项目代号缩写)
    • 第二层级:功能子系统,命名:xxxx_zzzz(模块缩写名_子系统功能缩写)
    • 第三层级:细分子系统,命名:根据子系统特性和功能命名
    • 第四层级:根据需要增加该层级

     

    控制策略模型建模规范(SIMULINK)

     

    5.1. 绘图行为

     

    1. 所有的Simulink 窗口都应采用白色背景。
    2. 视图的放大率应为100%。如果在100%视图放大率的情况下,模型超出Simulink 窗口,则设置:View->Zoom->Fit to view,即Fit diagram to screen。
    3. 模型中的信号流程是从左到右的;前后相继的模块或子系统从左到右安置,并行的模块或子系统由上向下安置;除延时模型以外的其它模型不允许执行旋转和镜像操作。
    4. 输入端口应位于图表的左侧,输出端口应位于右侧,为防止信号交叉,端口可适当平移调整位置;禁止在顶层对输入端口做复制操作,在子系统层级也应当尽量避免复制操作。
    5. 子系统不能被旋转和镜像。
    6. 一个系统中一定不能出现:未连接的子系统, 未连接的基本模块输入、输出端口,未连接的信号线。
    7. 反馈闭环子系统中防止“代数环”的延时模块必须放置于子系统外部。

     


    5.2. 信号

     

    1. 未连接的输入信号应与接地模块相连,其它未连接的输出信号应与终端模块相连。
    2. 输入输出信号名称必须可见,统一在信号下方显示。
    3. 每一个信号在整个模型中必须是唯一的。
    4. 每个模块的输入信号的信号线上必须注明信号名称。
    5. 信号线尽可能不交叉,转弯处以直角(仅允许以水平和垂直的方式连接)的方式转折或绘制。信号线不能重叠,每个分岔点处不能引出多于两根信号线。
    6. 属于继承的信号,其名称标识符应该添加<>修饰符,以指示继承类型,其它信号则不要求。
    7. 当信号跨越不同层级传输(父系统和子系统)时,传输链上信号的propagation signal属性应设置为ON状态,(信号名称以“<信号名称>”的形式标识)。总线信号如设置有信号名称也应该遵循该原则。
    8. 当信号来自一下模块,即使信号未跨越不同层级传输,信号的propagation signal属性也应该设置为ON:
    • from,goto
    • Bus Creator ,Bus Selector
    • Signal Specification
    • Function Call Split
    9. 触发信号名称可作为被触发的条件子系统名称的组成部分。 
    5.3. 模块模型

     

    1. 模块应采用白底黑框,模块不应增加阴影。
    2. 常见的逻辑模块,如ADD,可不显示名称,若有特殊变量则建议在模块下方标注。
    3. 逻辑操作模块的外形应选择square。
    4. Product 模块:第一个输入应为“*”
    5. Relational Operator关系运算模块:变量与常量比较时,变量作为模块的第一个输入信号,常量作为第二个输入信号。
    6. 查表算法模块的插值算法应该选择终值插入法。
    7. 求和模块(ADD)应使用矩形状。
    8. Trigger和Enable 模块不能在顶层使用。
    9. 模型中的文本元素(模块名称和信号标签)统一字体和字号:Arial/Normal/ 10。
    10. 模型应该适当缩放,确保所有的标识、文本都完整、清晰可见,尽量采用同样尺寸。
    11. 模型的名字必须可见,并放置于模型下方。
    12. 使用Requirements或Summary对模型进行注释说明。
    13. from 和goto 模块:from 模块和goto 模块的标签(Tag)应匹配,一个from 模块只能接受一个来自goto 模块的信号。
    14. 使用goto和from连接信号时:只能在原子子系统外部使用,goto块只能设置local域。
    15. 除用于创建总线、或为了合并模块连接输入信号外,goto和from只能用于对子系统信号的连接。
    16. 被连接的两个系统至少要有一条直连的信号线(即不使用goto和from连接)存在。(Using Goto and From blocks to create buses or connect inputs to merge blocks are exceptions to this rule.)
    17. 以前向和后向反馈闭环方式连接的子系统在每个方向上至少要有一条直连的信号线存在。

     

    18. 触发子系统,使能子系统和条件子系统:
    a. 子系统的类型标识应置于系统最顶部;
    b. 触发信号源端模块名称应与触发或使能该子系统的触发信号名称一致。

     

    19. 模型处理过程必须使用适当的模块来实现逻辑和数字运算。
    20. 模块输入、输出端口的数据类型必须匹配一致。
    21. 输入switch,multiport switch,index vector的各个端口的数据类型必须一致。
    22. 模块的使能端口应只接受逻辑运算结果作为输入。
    23. Multiport switch 模块:第一个输入(控制输入)值必须大于等于1,且不能超过选择输入值。
    24. Switch块使用必须遵循以下原则:
    a. 切换条件,即输入2端口的信号必须是布尔类型的。
    b. 通过条件必须设置为:u2~=0。
    25. 原则上:设计状态判断的使用if-Action模块;设计值选择的使用Switch模块。

     


    5.4. 模块选择与设置

     

    1. 为了保证标定量/常量参数可调,应不含任何表达式、数据转化、行或列的选择。
    2. multiport switch的索引值参数,应配置为“0为基值”的方式。
    3. 信号滞环(即返回上一周期值)模块,优先选择Unit Delay。
    4. 信号集合模块,优先选择Bus 模块;模块输入可以采用Bus 模块集成,简化模型。
    5. 时间积分模块:分连续时间积分模块Integrator和离散时间积分模块Discrete-Time Integrator,优先选择离散时间积分模块Discrete-Time Integrator。
    6. 乘积模块,优先选择Product模块,而不是Gain模块,且多个量相乘时建议拆分为两两相乘。
    7. from/goto 模块建议使用局部变量Local 格式,避免使用全局变量Global格式。
    8. 触发式模块建议优先选择Function-Call Subsystem,然后选Enabled Subsystem,最后选择Triggered Subsystem。
    9. 构建if-then-else 结构的模型,如果then 和else 的响应为两个常量,可以采用switch模块;但如果是两个较复杂的计算,可以考虑使用If/Else 模块,输出变量采用merge 模块进行过滤输出,这样可以提高仿真及代码生成的效率。
    10. 模型中不要使用Fcn 模块,用其他模块代替。
    11. Lookup Table 模块:查表方法选择“Interpolation-Use EndValues”。
    12. 模型中最好不要采用绝对值模块,RTW 代码生成时会导致值的跳变。

     


    5.5. 表达式、逻辑及仿真

     

    定义主表达式:
    一个输入;
    一个常量;
    一个常量参数;
    除0和1以外的包含<,<=,>,>=,~=,==,~符号的带括号的、不包含逻辑运算符号的表达式。

     

    1. 逻辑表达式如果包含两个或更少的主表达式,则应使用if条件模块来实现。
    2. 包含三个或以上的主表达式,且仅含有一种逻辑运算符号的逻辑表达式是允许的;
    3. 复杂表达式(含多个主表达式或(和)多种逻辑运算符)应分解为若干主表达式、并使用if条件模块去实现。
    4. 枚举值、逻辑值仅参与逻辑运算、数字值仅参与数字运算。
    5. 布尔值不能参与关系运算。
    6. 数字值(0,1,~)或逻辑值(true,false)不能与布尔值进行比较。

     

    控制策略模型建模规范(STATEFLOW)

    6.1. 基本行为和状态

     

    1. Stateflow模块中至少有两个状态,且要有默认状态,每个状态不能只有一个子状态。
    2. Stateflow状态图嵌套不能多于3层。
    3. 单一状态视图内的子状态个数控制在6个以内,最高不超过9个。
    4. Stateflow中的逻辑,不使用MATLAB函数、指令、运算符。
    5. 逻辑类型的信号禁止执行比较操作。(使用if(logical type signal))
    6. 逻辑运算不能用于两个布尔值。([true && false])
    7. 布尔类型的信号不能与数字0、1或逻辑值true、false进行比较操作。
    8. 不同类型的数据禁止执行比较操作,如果需要必须首先执行显示类型转换的操作。
    9. 禁止对两个浮点类型的数值执行严格的==或!=判断操作。
    10. 禁止对无符号数执行取负操作[-]。
    11. 如果需要翻转逻辑类型的信号,应使用布尔操作NOT。
    12. 取反符号:~用于位操作按位取反,!用于逻辑取反操作。

     

    6.2. 事件、变量设置

     

    1. 同一个变量在单个Stateflow范围内不应该有多重定义。
    2. 未使用的事件和变量不允许出现在Stateflow图块中。
    3. 并行的图块或状态机中不允许出现同名的局部数据。
    4. Stateflow中除0用于初始化变量,1用于自增自减操作外外,不允许常量和变量直接使用数值。
    5. 事件必须定义在chart或者更低的级别,不允许chart之间进行事件交互。
    6. 除触发调用函数调用子系统外,事件不应该用作状态转移的驱动条件。
    7. 为了便于可读性,事件en:、du:、ex:每个应单独起一行;每个事件具体内容也应单独起一行。

     

    6.3. 标签

     

    Stateflow的输入输出端口名称应与相应信号名称一致。

     

    6.4. 条件与条件动作

     

    1. 条件表达式只能使用返回值为布尔类型的表达式,不允许使用整形数值。
    2. 动作类型(entry(en),during(du),exit(ex),en,du: ,du,ex: ,en,ex: ,en,du,ex:)不能多次重复描述,且合并动作(en,du: ,du,ex: ,en,ex: ,en,du,ex:)的描述只能在动作序列的最顶层或最底层放置。
    3. 如果动作序列能在条件动作(condition action)或转移动作(transition action)以及转移目标状态的Entry动作中实现, 就不要使用状态的Exit动作去实现。
    4. 最好不要使用转移动作,优先使用条件动作。
    5. 用于状态转移判断条件的变量的更新操作不允许放置于during动作中。

     

    6.5. 内部转移和状态转移

     

    1. Stateflow中的转移连接,不允许相互交叉、重叠,禁止穿过任何状态、节点或文本框,可转移到一个内部状态,转移标签连接于相应的转移上。
    2. Stateflow的转移应遵循:条件在水平方向上标出,动作在竖直方向上标出。
    3. Stateflow默认转移链接应置于状态顶部,默认转移的终止状态在同级状态中应处于最高位置。
    4. Stateflow默认转移符号的绘制不应该超出所处状态的边界。
    5. Stateflow状态图:不允许在单一状态内使用多个内部转移分支。
    6. Stateflow内部转移标签必须从状态内部的左侧边界起始。

     

    6.6. 流程图

     

    SF状态图或流程图应合理避免“回溯”现象。
    为便于数据流及代码生成,流程图的返回值只能放置在图表中的某一个位置,不能多次出现。

     


    6.7. 函数块及其它

     

    SF状态图应选用C语言方式构建,及使能C-bit operation
    禁止将含有SF状态图的Simulink模型作为更高层级的SF状态机的子系统。

     

     

    控制策略模型建模规范(其它)

    本规范规定之外的建模行为,原则上应遵循最新版本的MAAB建议的规则。

     

    7.1. Simulink与Stateflow的选择原则

     

    选择使用simulink或stateflow来建立控制算法模型,要根据模型所需要表达的属性来决定,避免使用stateflow描述数学表达式,要采用simulink的形式。如果处理过程主要涉及复杂的逻辑运算,或者模型的本次运算与上次运算的结果有相关联,则应采用Stateflow建模;如果模型的主要功能是数学运算,或处理策略主要涉及固定流程式的数字处理,则应采用Simulink建模。
    如果主要的程序是逻辑运算,但是有小部分是数学运算,则在stateflow中可以使用stateflow中的语言进行编写。
    如果主要的程序是数学运算,但是需要一些简单的逻辑对算法进行支持,可以使用基本的逻辑运算模块。
    如果逻辑运算过程中,遇到较复杂的数学运算,应该采用stateflow进行主要逻辑运算,然后使用fuction-call的调用simulink的模块完成数学运算。

     

    7.2. 模型架构

     

    应根据模块特性以及需求,实现的对模块的分频调度

     

    7.3. 脚本文件

     

    M文件应该包含完善的注释,如作者,修改时间,版本;
     
    不允许存在没有使用的脚本代码;
    变量声明顺序:
    Name = mpt.Signal  Name中应加Sig前缀表明是信号
    Name = mpt.Parameter Name中应加Param前缀表明是参数
    Name = Simulink.NumericType Name中应加Numeric前缀表明是参数

     

    MATLAB 2013以及之后的版本建模应该使用下面的方式声明变量:
    Name = simulink.Signal
    Name = simulink.Parameter
    Name = Simulink.NumericType

     

     

    展开全文
  • 数据流同步控制策略

    千次阅读 2014-03-07 18:12:59
    数据流同步控制策略  数据处理过程实际就是数据流控制过程,在数据流控制过程中,如何确保模块之间的同步显得尤为重要。 数据流同步控制策略主要有以下两种方式,如图1所示。 1)数据同步:如图上...
    数据流同步控制策略

           数据处理过程实际就是数据流控制过程,在数据流控制过程中,如何确保模块之间的同步显得尤为重要。

    数据流同步控制策略主要有以下两种方式,如图1所示。



    1)数据同步:如图上部分所示。多采用FIFO队列实现,一般会使用信号量或者事件来同步,另外还会通过定时辅助

    优点:消耗系统资源较少,属于比较自然的协调方式。
    缺点:如果划分模块耗时不均衡,易造成系统部分模块数据拥塞。导致整体不协调;
    另外还容易造成某些模块抢占线程,其它线程运行得不到保障。

    2)定时同步:如图下部分所示。通过定时的调度器来唤醒指定的模块运行。
    优点:负载均衡,可以有效判断每个模块的当前计算量,可以有效分配计算资源。
    缺点:由于调度器需要频繁的发生中断,线程切换较频繁,会消耗一定资源。
    展开全文
  • 7.1永磁同步电机的矢量控制策略(七) SVPWM是现代交流电机控制最常用的一种逆变方式,其更加方便于数字化的实现,而对于SPWM则更加方便于硬件方面的实现,因此,我觉得SVPWM的更加广泛应用还有一段时间,以便其改进...
  • 算法的封装与切换——策略模式(一)

    万次阅读 多人点赞 2012-08-01 16:14:36
    俗话说:条条大路通罗马。在很多情况下,实现某个目标的途径不止一条,例如我们在外出旅游时可以选择多种不同...如果目的地虽远、但假期长、且需控制旅游成本时可以选择坐火车或汽车;如果从健康和环保的角度考虑,而且
  • 俗话说:条条大路通罗马。在很多情况下,实现某个目标的途径不止一条,例如我们在外出旅游时可以选择多种不同...如果目的地虽远、但假期长、且需控制旅游成本时可以选择坐火车或汽车;如果从健康和环保的角度考虑,而且
  • Android7.1 音频声音控制策略

    千次阅读 2019-03-28 11:43:39
    //完成声卡和路由的切换和打开 select_devices ( adev , out -> usecase ) ; . . . } 关于第二种方式有点曲折,我是这么修改的: hardware\qcom\audio\policy_hal\AudioPolicyManager.cpp ...
  • 需要把旧的推荐服务逐步切换到新的推荐服务上,需要灰度切换,流量比例和灰度策略可以控制。   二. 方案 当前数据请求流程是:外部请求—&gt;易车nginx ---&gt;后端服务 ; 经过跟运维沟通发现,目前...
  • (21)主备一致性与主备切换策略

    千次阅读 2019-05-15 11:09:58
    如图 所示就是基本的主备切换流程,是一个M-S结构(master-slave) 在状态 1 中,客户端的读写都直接访问节点 A ,而节点 B 是 A 的备库,只是将 A 的更新都同步过来,到本地执行。这样可以保持节点 B 和 A 的...
  • 控制切换在项目中应用十分广泛 , 市面上的大部分app都能见到其身影 . 首先我认为 , 多控制器的切换 , 应尽量避免一次性加载所有的控制器页面 , 造成内存飙升 , 应尽量满足用到时加载 , 不用时不加载 . 当然...
  • 本文禁止转载,如有需求,请联系作者。 什么是屏幕刷新率,什么是应用显示帧率。 如何修改LCD的刷新率。 Android的显示刷新率切换策略
  • 本文从设计模式中的策略模式入手,主讲了飞机大战中英雄飞机切换不同的子弹。这里分为三种子弹。第一种:每次发一个子弹,垂直发射;第二种:每次发两个子弹,两个都是垂直发射:第三种;每次发三个子弹,两边的子弹有...
  • Windows xp,打开控制面板,左边的常见任务只有“请参阅”栏目,没有“切换到经典视图”栏目,无法使用经典视图。
  • 控制策略是DAB-IBDC的重要研究方向之一。在这一部分中,我们介绍和分析了控制方法的一个代表性部分,这些方法是DAB-IBDC研究最广泛的方法。事实上,对于改进的拓扑和变体,控制方法可能不同,但所有这些方法都可以从...
  • 现有的策略控制系统已不能满足LTE以及未来发展的需要。下一代策略控制系统必须具备20万TPS的高性能、6个9的高可靠性、快速的策略TTM、开放、固定/移动策略融合,以及NFV支持等关键特性。
  • Git版本控制、分支策略与代码评审

    千次阅读 2018-05-13 22:20:17
    Git版本控制、分支策略与代码评审 Git介绍 Git工具与代码托管网站 在Windows上安装使用Git IDE支持Git 代码托管网站 Git原理 Git工作流 Git 分支 概述 理解如何使用Git分支 Git常用命令 参考文档 Git使用...
  • Windows xp,打开控制面板,左边的常见任务只有“请参阅”栏目,没有“切换到经典视图”栏目,无法使用经典视图。
  • Git版本控制(5) —— 分支管理策略

    千次阅读 2018-05-13 16:29:07
    有时候当我们要切换分支,但是两个分支之间有冲突,这在feature分支版本控制的时候,是经常发生的。比如说,当我从一个分支切回master分支时,如果你的修改还保留在工作区和暂存区(只add,但是没有commit),冲突...
  • 策略(Group Policy)是基于Active Directory的一种系统管理技术,用来定义自动应用到网络中特定用户和计算机的默认设置,这些设置包括安全选项、软件安装、脚本文件设置、桌面外观和用户文件管理等。...
  • Qt 之 Tab 键切换焦点顺序

    万次阅读 多人点赞 2015-12-18 23:03:43
    习惯性的,我们经常会使用Tab键来控制焦点顺序,比如:用户注册时,个人信息输入框焦点的切换、执行按钮焦点的切换等。在添加部件之后,默认情况下,Tab键也是可以切换焦点的,只不过顺序往往和我们预期不一致,所以...
  • MVC控制器(Controller)与策略模式(Strategy) 转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd作者联系方式:Li XianJing 更新时间:2006-1-11 MVC模式已经称得上是家喻户晓了,MVC是模型(Model)、...
  • Java策略模式(Strategy)

    千次阅读 2019-03-06 10:40:50
    文章目录策略模式(Strategy)一.不使用策略模式二.使用策略模式1.案例类图2.案例实现3.总结4.开发中的使用场景 策略模式(Strategy) 一.不使用策略模式 使用场景: 某个市场人员接到单后的报价策略(CRM系统中常见问题)...
  • 行业轮动策略(附策略源码)

    千次阅读 2019-06-25 13:31:43
    ​ 行业轮动是利用市场趋势获利的一种主动交易策略,其本质是利用不同投资品种强势时间的错位对行业品种进行切换以达到投资收益最大化的目的。通俗点讲就是根据不同行业的区间表现差异性进行轮动配置,力求能够抓住...
  • 一文读懂PID控制算法(抛弃公式,从原理上真正理解PID控制) PID控制应该算是应用非常广泛的控制算法了。小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制。这里我们从原来上来...
  • Java多线程的调度策略

    万次阅读 2014-11-14 20:22:51
    在Java多线程环境中,为保证所有线程的执行能按照一定的规则执行,JVM实现了一个线程调度器,它定义了线程调度的策略,对于CPU运算的分配都进行了规定,按照这些特定的机制为多个线程分配CPU的使用权。这小节关注...
  • 实现进程的切换

    千次阅读 2018-03-17 21:38:26
    1.直接执行的下一个问题是在进程之间实现切换 直接执行的下一个问题是在进程之间实现切换。在进程之间切换应该很简单,对吗?操作系统应该决定停止一个进程,启动另一个进程。有什么大不了的?但是它实际上有点棘手:...
  • 上一篇文章Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法介绍到了怎么样在Sping、MyBatis、Hibernate整合的应用中动态切换DataSource数据源的方法,但最终遗留下一个问题:不能切换...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 141,039
精华内容 56,415
关键字:

切换控制策略