精华内容
下载资源
问答
  • 客户关系管理的理论框架概述.pptx
  • 客户关系管理的理论框架与系统实施.pptx
  • 理论知识. 客户关系管理基础理论体系框架探讨.
  • 在对比制造集群网络协作关系治理与传统企业治理差异的基础上,以网络组织理论、治理机制为基础,结合协作关系的治理逻辑,构建了集群网络协作关系的多维治理框架
  • 我们通过查询理论解释了这种相互作用,并表明属性框架可以改变支持一个或另一个选项的内部查询的顺序。 结果表明,属性标签对查询顺序的影响取决于具有不同政治派别的人所持有的税收或抵消额的表示形式。
  • 以研究农产品期货基差动态调整过程为目的,根据在预期理论框架下期货价格等于未来现货价格无偏估计值的理论前提,基差与现货价格的关系可以由状态空间模型来识别....
  • 提出了面向对象的城市空间信息遥感分析的理论框架。对图像对象、地理空间对象和城市空间对象做出了明确界定,详细说明了三者间的区别和联系;总结了地理空间对象识别的三准则:边界、属性和尺度;提出地理空间对象和...
  • 论文研究-建立系统科学基础理论框架的一种可能途径与若干具体思路(之二)——客观世界物质结构演化过程的统一图景与一种可补的系统科学基础理论框架思路.pdf, 本文是...
  • 2020_12-电路理论框架复习思考-基础篇 电路理论究竟在学些什么?我认为本质上,是线性拓扑结构,KCL,KVL和V-I关系,于是,在电阻电路部分,有它的拓扑结构带来的各种性质和运算方式,包括结点方程,网孔方程等,...

    2020_12-电路理论框架复习思考-基础篇

    电路理论究竟在学些什么?我认为本质上,是线性拓扑结构,KCL,KVL和V-I关系,于是,在电阻电路部分,有它的拓扑结构带来的各种性质和运算方式,包括结点方程,网孔方程等,包括叠加定理,戴维南诺顿,特勒根,互易等等等等,都是线性性带来的解方程的手段。好,那么通过这些手段,我们就得到了一堆线性方程,那么解这些方程,可以使用线性代数的手法来解。

    可是很多元件不是线性的,或者说大部分元件不是线性的,怎么办?这就是电路理论要解决的东西。

    比如面对LC,那我们的电路定理就不再适用了,只能用电路分析方程(本质上来源于KCLKVL)来列出含导数,含积分的方程,于是可以直接用微分方程求解,这运用了微积分的知识。我们人为的把这种情况分成了一阶电路暂态分析和二阶电路暂态分析,也就是说,我们只管其中简单的情况,一阶和二阶,如果是直流激励,那么最终稳定下来。看,我们把问题又简化到了直流激励。在这种情况下,我们就有了三要素法(对于一阶直流激励尤其好用,我觉得对二阶的不太好用,二阶的得到微分方程后用Laplace更舒服),用来简化电路运算

    当不是直流激励的时候,三要素法又不能再用了。但是,LC的V-I关系刚好是微分积分关系,当面对的是一个正弦函数的时候,微积分关系就变成了相位关系,而原来的电压电流振幅比是不变的,又考虑到可以用复数来表示正弦函数,于是乎产生了一个新的方法——向量法,而对应的电阻电容电感都可以写成复数的形式,但是这些元件的复数形式是没有对应的相关正余弦函数的,它们,是这些正余弦函数的比值形式。这时候就产生了正弦稳态分析,人们就发明了一种方法来对付正弦稳态电路。为了扩展它,我们考虑叠加定理,就可以叠加多个分别运算了。而位形相量图的产生,本身就是向量法对于结点/网孔方程分析的一项另类应用罢了。

    在没用向量法的时候,功率一般都是靠电压直接乘电流计算得到的,很轻松,但是,在向量法里面功率怎么求呢?用U对应的向量*I对应的向量吗?显然不对,我们可以设想到,功率其实应该是U对应的向量点乘I对应的向量,得到UIcos∠φu-φi,那么又想,UIsin∠φu-φi是什么呢?发现是波动着的平均虚功功率Q,是L/C上的一种表征其储能功率,于是乎,用UI∠φu-φi来表示复功率,UI表示视载功率。视载功率是电路/器件能够承载的最大功率,所以我们希望P=S,这样能全部压榨这个电路/器件

    好,接下来引入新元件?现象?反正叫磁耦合的东西,它本质上就是磁场叠加,从同名端流进的电流会引起另外一边磁场增加,明白这一点后就不怕分析同名端等问题了,而磁耦合中的等效,本质上来说就是将方程进行变形而同化得到,只要明白推导原理,记忆也十分容易了。

    现在来说说刚刚没说的三相正弦稳态电路,为何现在来说?因为它是实际运用的一些思考,放在最后。三相正弦稳态电路其实可以视为普通电路,单纯求解就好,但是我们考虑到它对称性,单取一路即可求解,三相正弦稳态电路本质不难,运算量也小,只是处于考核的目的会有两种,三相四线制/三相三相制对称和三相三线不对称,前者取单路,用对称Y-Δ就行,后者用结点法直接计算就行。总之不建议用不对称Y-Δ变换,难算,不如结点法好用。注意线量和相量之间关系就行。

    电路理论基础篇就写完了,是不是其实本质上来说内容不多^^ Ganbadei!

    展开全文
  • 根据计划行为理论设计了针对都市圈内城际间普通列车、动车组、高铁和长途汽车4种出行方式选择的心理影响因素的调查方案,在样本通过信度和效度检验的前提下分析了行为态度、主观规范、感知行为控制和行为意向的相关...
  • 利用这些结果,我们为社交媒体目标开发了可测试的理论框架,该框架由两个更高阶的维度定义,这些维度将在线互动的主要重点与在线互动的主要方向进行了对比。 该框架可能有助于进一步了解用户的社交媒体行为与他们的...
  • 论文研究-建立系统科学基础理论框架的一种可能途径与若干具体思路(之四)——从韦达定理与控制论到突变论、分歧、混沌、分形、耗散结构论、协同论以及与统计物理学的关系.pdf, ...
  • 文章梳理国外研究脉络,在厘清关键概念基础上,构建由核心议题和有关基础理论相结合的理论框架。核心议题围绕主体构成及其功能、主体间存在的关系、如何开展关系治理三个方面展开,进而细分成九个二级议题,并交叉对应六...
  • 由于加权框架具有良好的冗余性,从而为信号重构和图像处理提供了非常有用的信息。文章 首先给出了加权框架的定义并证明了它满足的一些基本...从而为 加权框架和算子搭起了桥梁,为以后的进一步研究奠定了一些理论基础。
  • 论文研究-建立系统科学基础理论框架的一种可能途径与若干具体思路(之九)——博弈的演化分析.pdf, 这是总标题下的第九篇.全文的总目的是试图从现代物理、分子生物学与脑...
  • 论文研究-建立系统科学基础理论框架的一种可能途径与若干具体思路(之八)——固定环境中的稳态涌现.pdf, 该文是总标题下的第八篇。全文的总目的是试图从现代物理、分子...
  • iBATIS框架学习[20070409] 作者:kimsoft自己整理的对iBATIS框架的一些简单理论知识,有助于进一步了解和深入学习iBATIS框架,错误或不当之处,在所难免。1、什么是iBATIS1.1作者 Clinton Begin,很牛X的名字1.2...
    iBATIS框架学习[20070409] 作者:kimsoft
    自己整理的对iBATIS框架的一些简单理论知识,有助于进一步了解和深入学习iBATIS框架,错误或不当之处,在所难免。
    1、什么是iBATIS
    1.1作者
           Clinton Begin,很牛X的名字
    1.2背景故事
        Clinton Begin于2001年启动iBATIS项目,最先的焦点是发展密码软件解决方案。第一个iBATIS产品是Secrets,是一个象PGP的个人数据加密器和签名工具。Secrets完全用Java编写并在一个开源许可下发布。
        在发布Secrets Java版后不久,iBATIS项目陷入困境转而关注Web和其它internet相关的技术,在接下来的一年中,两个有趣的软件开发完成,包括Axle web 框架,一个JSP可选工具。Lookout邮件客户端差不多完成90%在 being set on the back burner之前,同时更多有趣的挑战接踵而来…
    1.3加入Pet Store“基准”
        在2002年早些时候,Microsoft发布一个纸面文档声称.NET有10倍于J2EE的速度和4倍多的生产效率。事实是这只是简单的而不是典型的。iBATIS项目在2002年7月1日快速回应,JPetStore 1.0发布了。基于相同的Pet Store需求, JPetStore 证明了Java 不仅比.NET 更有生产效率,同时比Microsoft 的实现拥有更好的架构
        JPetStore利用有趣的持久层迅速地引起了开源社区的关注。在JPetStore发布不久,对SQL Maps和DAO框架的问题和要求使大家知道的iBATIS Database Layer产生了。iBATIS Database Layer包含两个被打包在一起的框架:SQL Maps和DAO。
           如今iBATIS项目重点关注持久层框架并以SQL Maps 和 Data Access Objects (DAO)著称。JPetStore继续作为这些框架典型应用的官方示例程序。
    1. 4“iBATIS”是什么意思
        现在, 单词“ ibatis ”和SQL Maps 与 DAO 框架同义――就象“xerox”『施乐复印机(商标名称),译者著』和“photocopy” 『影印,译者著』同义。
        回想起iBATIS来源于密码系统软件。iBATIS实际上用两个单词的组合来命名:“internet” 和 “abatis”。
    Reference.com 如此定义 abatis:
    ab-a-tis
    n. pl. ab-a-tis (-tz) or ab-a-tis-es (-t-sz)
    将伐倒的树木树枝相互交叉,放置,有时削尖,面对敌人一种防御障碍物。
    将“Internet”中象征性的“i”和abatis中的“batis”组合所以暗示了抵御Internet的意思。-in the case of iBATIS它是Secrets提供的关于密码防御的东西。
    所以iBATIS 正确的写法应该是:iBATIS
    1.5 iBATIS怎么念?
        因为我们发明了这个单词,我们以自己喜欢的读音念它
        我们这样读:eye-BAT-iss
    但是按照传统,它可能应该被读作:eye-BATE-iss,但就象我们说的,我们创造了它。
    1.6许可(License)
    iBATIS的源码和文档在Apache License 2.0许可下发布。
     
    以上部分文字翻译自http://ibatis.apache.org ,不妥之处,请指正。
    1.7版本情况
    iBATIS有for Java,for .NET,for Ruby三个语言的版本,以下主要讨论for Java版,也是最重要的版本。
          
           关于版本,看下面一段英文:
     
    iBATIS 3.0 Whiteboard
     
    January 11th, 2007 marks the 3rd Anniversary (周年纪念) of the iBATIS 2.0. It has served the community well for three years, but times change. The year 2006 was full of innovation(改革、创新) and shifts in technology and mindset. The impact(冲击,碰撞) of frameworks like Ruby on Rails cannot be ignored. The industry has noticed and finally invested in lightweight frameworks, agile principles and simple solutions first.
     
    最新版本:iBATIS2.3.0 build667,非常稳定。
     
    1.8 典型用户
           MySpace.com - A place for friends
           …
     
    2、当前Java平台下的一些DAO框架
    2.1Hibernate
           应该是最好的ORM框架,ORM:Object Relation Mapping,即对象关系映射。
    了解不是很多,不多作评价。不过应该是很好的框架,EJB3里的JPA所说差不多就是简化版的Hibernate,侧重于对象模型设计,系统设计中数据库设计让位于对象模型设计。
    2.2 Apache JDO
           Apache组织的一个比较早的开源框架,影响力不大。
    2.3 Spring DAO(Template)
           Spring DAO对JDBC进行了封装
           用得最多的还是各种Template:
    JdbcTemplate
           HibernateTemplate
           SqlMapTemplate
           JdoTemplate
           JpaTemplate
    2.4 JDBC
           对数据库操作最原始的办法,也是根本,无所不能的。
    2.5 iBATIS
           又称为SQL Map或 Data Map(2.0以后)
           SQL Mapping framework 更准确地说是 SQL Mapping tool,是一个SQL语句映射的框架(工具)
    2.5.1介绍(Introduction)
    The iBATIS Data Mapper framework will help you to significantly(意味深长地,值得注目地) reduce the amount of Java code that you normally need to access a relational database. iBATIS simply maps(此处应译作映射) JavaBeans to SQL statements using a very simple XML descriptor. Simplicity(简单) is the key advantage(优势,有利条件) of iBATIS over other frameworks and object relational mapping tools. To use the iBATIS Data Mapper you need only be familiar with JavaBeans, XML and SQL. There is very little else to learn. There is no complex scheme required to join tables or execute complex queries. Using Data Mapper you have the full power of real SQL at your fingertips.
    2.5.2 概念(Concept)
    The iBATIS Data Mapper API allows programmers to easily map JavaBeans objects to PreparedStatement parameters and ResultSets. The philosophy behind Data Mapper is simple:  provide a simple framework to provide 80% of JDBC functionality using only 20% of the code.
     
    3、学习iBATIS
    3.1 一个简单的iBATIS原型
           SELECT COUNT(*) FORM USER
           讨论:
    一、用JDBC直接在页面中如何写程序
    二、多个JSP文件同时出现此功能时
    三、出现不同的版本,SELECT COUNT(*) FORM USER WHERE USER_TYPE=1 AND IS_DEL=0…
    四、讨论各个版本的输入输出参数
    3.2 iBATIS 藏宝图
    讨论:iBATIS各种输入输出参数
    3.3 iBATIS API(Spring SqlMapClientTemplate API)
    第一个参数statementName都是必须的,其它参数都是可选的
    增、删、改
    public Object insert(String statementName, Object parameterObject)
    public int update(String statementName, Object parameterObject)
    public int delete(String statementName, Object parameterObject)
     
    查询
    public Object queryForObject(String statementName, Object parameterObject)
    public List queryForList(String statementName, Object parameterObject)
    void queryWithRowHandler (String statementName, Object parameterObject, RowHandler rowHandler) 不常用
    public PaginatedList queryForPaginatedList(String statementName, Object parameterObject, int pageSize) 性能问题,已经被废弃(deprecated)
    public Map queryForMap (String statementName, Object parameterObject, String keyProperty, String valueProperty)
    没有了…
     
    4.使用iBATIS的好处
           4.1简单,学习曲线低
           4.2使用公司投资回报率提高,一般是5到8倍
           4.3喝着Java(咖啡)写Java代码,节省大量编码维护时间
           4.4提高员工土气
           4.5性能好,灵活性强
           4.6集中管理后,DAO的实现简单,使用开发人员更专心于业务逻辑的处理。修改时不用修改Java代码。
           4.7使用preparedStatement,性能,安全性提高,代码简洁。
           4.8配置log4j在调试时输出SQL语句和返回记录集,漫天飞舞的System.out.print不见了。
           4.9不用担心,连接、记录集的关闭
           4.10缓存,讨论:很小变动的基础数据。
           4.11写程序时很自然地优化SQL,减少数据库的连接次数和操作次数
           讨论:
           一级分类1
                  二级分类1.1 二级分类1.2
           一级分类2
                  二级分类2.1 二级分类2.2
           一级分类3
                  二级分类3.1 二级分类3.2
           讨论遗漏的好处。
           讨论缺点
    5.iBATIS的配置文件
    有两种:
    5.1 sqlMapConfig文件
           只有一个,集中管理配置文件的“中央文件”
    <? xml version = "1.0" encoding = "UTF-8" ?>
    <! DOCTYPE sqlMapConfig
           PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
           "http://ibatis.apache.org/dtd/sql-map-config-2.dtd" >
     
    < sqlMapConfig >
        < settings cacheModelsEnabled = "true"
                  enhancementEnabled = "true"
                  lazyLoadingEnabled = "true"
    useStatementNamespaces = "false"
    statementCachingEnabled = "true"
                 classInfoCacheEnabled = "true" />
        < sqlMap resource = "com/ahtec/ssi/dao/ibatis/maps/SysModule.xml" />
        < sqlMap resource = "com/ahtec/ssi/dao/ibatis/maps/EudProject.xml" />
    </ sqlMapConfig >
     
    5.1 各个SQL Map 文件
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
     
    <sqlMap namespace="dv_bbslink">
    <typeAlias alias="link" type="com.ahtec.ssi.domain.Link" />
     
    <cacheModel id="oneDayCache" type="OSCACHE">
    <flushInterval hours="24" />
    <flushOnExecute statement="insertLink" />
    <flushOnExecute statement="updateLinkByPrimaryKey" />
    <flushOnExecute statement="updateLinkByPrimaryKeySelective" />
    <flushOnExecute statement="deleteLinkByPrimaryKey" />
    <flushOnExecute statement="deleteLink" />
    </cacheModel>
     
    <resultMap class="com.ahtec.ssi.domain.Link" id="LinkResult">
    <result column="id" jdbcType="INTEGER" property="id" />
    <result column="boardname" jdbcType="VARCHAR" property="boardname" />
    <result column="readme" jdbcType="VARCHAR" property="readme" />
    <result column="url" jdbcType="VARCHAR" property="url" />
    <result column="logo" jdbcType="VARCHAR" property="logo" />
    <result column="islogo" jdbcType="INTEGER" property="islogo" />
    </resultMap>
     
    <sql id="whereClause">
    <isNotNull property="map.boardname"> and boardname like #map.boardname#</isNotNull>
    <isNotNull property="islogo"> and islogo=#islogo#</isNotNull>
    </sql>
     
    <select id="selectLinkByPrimaryKey" parameterClass="link" resultMap="LinkResult" cacheModel="oneDayCache">
    select id, boardname, readme, url, logo, islogo from dv_bbslink where id = #id:INTEGER#
    </select>
     
    <select id="selectLinkList" parameterClass="link" resultMap="LinkResult">
    select id, boardname, readme, url, logo, islogo from dv_bbslink where 1=1
    <isParameterPresent>
    <include refid="whereClause" />
    </isParameterPresent>
    <isNotNull property="row.count">limit 0, #row.count#</isNotNull>
    </select>
     
    <select id="selectLinkCount" parameterClass="link" resultClass="int">
    select count(*) from dv_bbslink where 1=1
    <isParameterPresent>
    <include refid="whereClause" />
    </isParameterPresent>
    </select>
     
    <select id="selectLinkPaginatedList" parameterClass="link" resultMap="LinkResult">
    select id, boardname, readme, url, logo, islogo from dv_bbslink where 1=1
    <isParameterPresent>
    <include refid="whereClause" />
    </isParameterPresent>
    <isNotNull property="row.count">limit #row.first#, #row.count#</isNotNull>
    </select>
     
    <insert id="insertLink" parameterClass="link">
    insert into dv_bbslink (boardname, readme, url, logo, islogo) values (
    #boardname#,
    #readme#,
    #url#,
    #logo#,
    #islogo#)
    <selectKey keyProperty="id" resultClass="java.lang.Integer">
    SELECT LAST_INSERT_ID()
    </selectKey>
    </insert>
     
    <update id="updateLinkByPrimaryKey" parameterClass="link">
    update dv_bbslink set
    boardname = #boardname#,
    readme = #readme#,
    url = #url#,
    logo =#logo#,
    islogo = #islogo#
    where id = #id:INTEGER#
    </update>
     
    <update id="updateLinkByPrimaryKeySelective" parameterClass="link">
    </update>
     
    <delete id="deleteLinkByPrimaryKey" parameterClass="link">
    delete from dv_bbslink where id = #id#
    </delete>
     
    <delete id="deleteLink" parameterClass="link">
    delete from dv_bbslink
    <include refid="whereClause" />
    </delete>
     
    </sqlMap>
     
    6、实例(MySQL)
    一个论坛链接的表,分为LOGO链接,文字链接,有如下字段
    6.1 数据库表(dv_bbslink
    Id                   自增ID( INTEGER
    Boardname      论坛名称( VARCHAR
    Readme           说明( VARCHAR
    url                  链接地址( VARCHAR
    logo                LOGO图片地址( VARCHAR
    islogo              是否是LOGO链接( INTEGER
     
    6.2 写一个Domain(POJO,Model)
    Link.java
        private Integer id ;
        private String boardname ;
        private String readme ;
        private String url ;
        private String logo ;
        private Integer islogo ;
       //getters and setters
     
    6.3 写接口(LinkDao)
           常用接口
           根据业务逻辑生成特定的接口
     
    LinkDao.java
    public interface LinkDao {
        Integer insertLink(Link link);
        int updateLinkByPrimaryKey(Link link);
        int updateLinkByPrimaryKeySelective(Link link);
        int deleteLink(Link link);
        int deleteLinkByPrimaryKey(Integer id);
        List selectLinkList(Link link);
        List selectLinkPaginatedList(Link link);
        Link selectLinkByPrimaryKey(Integer id);
        Integer selectLinkCount(Link link);
    }
    6.4 写实现(LinkDaoSqlMapImpl)
    public class LinkDaoSqlMapImpl extends SqlMapClientDaoSupport implements LinkDao {
     
    public int deleteLink(Link link) {
    int rows = super.getSqlMapClientTemplate().delete("deleteLink", link);
    return rows;
    }
     
    public Integer insertLink(Link link) {
    Object newKey = super.getSqlMapClientTemplate().insert("insertLink", link);
    return (Integer) newKey;
    }
     
    public Link selectLinkByPrimaryKey(Integer id) {
    Link key = new Link();
    key.setId(id);
    Link record = (Link) super.getSqlMapClientTemplate().queryForObject("selectLinkByPrimaryKey", key);
    return record;
    }
     
    public Integer selectLinkCount(Link link) {
    return (Integer) super.getSqlMapClientTemplate().queryForObject("selectLinkCount", link);
    }
     
    public List selectLinkList(Link link) {
    return (List) super.getSqlMapClientTemplate().queryForList("selectLinkList", link);
    }
     
    public List selectLinkPaginatedList(Link link) {
    return (List) super.getSqlMapClientTemplate().queryForList("selectLinkPaginatedList", link);
    }
     
    public int updateLinkByPrimaryKey(Link link) {
    int rows = getSqlMapClientTemplate().update("updateLinkByPrimaryKey", link);
    return rows;
    }
     
    public int updateLinkByPrimaryKeySelective(Link link) {
    int rows = getSqlMapClientTemplate().update("updateLinkByPrimaryKeySelective", link);
    return rows;
    }
     
    public int deleteLinkByPrimaryKey(Integer id) {
    int rows = super.getSqlMapClientTemplate().delete("deleteLinkByPrimaryKey", id);
    return rows;
    }
    }
     
    6.5配置SQL Map
           分析SQL Map 文件
    6.7 配置 Spring Struts,写Action, View,OK。
           此讨论在本文范围外
     
    7.其它
    7.1 学习资源
           wiki
           faq
           maillist
           jpetstore 5.0
           Spring包里也有个JPetStore 建议学习
     
    7.2 自动化工具
           Abator( http://ibatis.apache.org
           容易使用,三步:
           一、下载eclipse plug in
           二、新建并配置一个abatorConfig.xml
           三、生成model,sqlmap, dao和daoImpl
           最后一步,加工它生成的代码。
           再一步,喝咖啡
     
    8 名人名言
    if you are starting a new project and you're in full control of your object model and database design, Hibernate is a good choice of O/R tool.
    Clinton Begin
     
    if you are accessing any 3rd party databases (e.g. vendor supplied), or you're working with a legacy database, or even just a really poorly designed database, then an O/R mapper might not be capable of handling the situation. That's were  an SQL Mapper comes in handy
    Clinton Begin
     
    In the end the choice is yours and nobody can tell you what the right one is, Trust only yourself, draw your own conclusions and do lots of testing!
    Clinton Begin

     

    展开全文
  • 目的——本文通过提出一个建立在四个既定经济理论(委托代理理论、交易成本分析、基于资源的观点、... 原创性/价值——据我们所知,没有学术论文发表在研究 SCM 之间关系的领先学术期刊上从基于理论的角度来看区块链。
  • shiro权限框架详解01-权限理论介绍

    千次阅读 2017-02-06 14:37:58
    介绍权限管理理论知识,方面后面学习shiro框架

    权限管理

    本文介绍权限管理的理论和权限管理的一些名词。

    • 介绍权限管理
    • 理解身份认证和授权
    • 掌握权限管理的数据模型

    什么是权限管理

    基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源
    权限包括用户认证和授权两部分。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。

    用户身份认证

    概念

    身份认证,就是判断一个用户是否是合法用户的一个过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看是否与系统中存储的该用户的用户名和口令一致,来判断用户是否正确。还有其他的身份认证方式,例如指纹、刷卡等。

    用户密码身份认证流程

    这里写图片描述

    流程图关键对象

    上面的流程图中需要理解以下关键对象:
    - Subject:主体
    访问系统的用户,主体可以是用户、程序等,进行认证的都称为主体。

    -Principal:身份信息
    是主体(subject)进行身份认证的标识,标识具有唯一性,如用户名、手机号、邮箱地址等,一个主体可以有多个身份,但必须有一个主身份(Primary Principal)

    -credential:凭证信息
    是只有主体自己知道的安全信息,如密码、证书等。

    授权

    概念

    授权,即访问控制,控制谁能访问那些资源。主体进行身份认证后需要分配权限后方可访问系统资源,对于某些资源没有权限是无法访问的。

    授权流程

    Created with Raphaël 2.1.0 开始 访问系统资源 身份认证 是否认证通过 分配权限 权限控制 是否拥有访问权限 继续访问 访问拒绝 结束 yes no yes no

    下面是截图:
    这里写图片描述

    流程图关键对象

    授权可简单理解为who对what(which)进行how操作:
    - Who,即主体(Subject),主体需要访问系统中的资源。
    - What,即资源(Resource),如系统菜单、页面、按钮、类方法、系统商品信息等。
    -How,权限/许可(Permission),规定了主体对资源操作的许可,权限离开资源没有意义,如用户查询权限、用户添加权限、某个类方法的调用权限、编号001的用户修改权限,通过权限可知主体对那些资源都有哪些操作。
    权限分为粗粒度和细粒度,粗粒度权限是指对资源类型的权限,细粒度权限是对资源实例的权限。
    主体、资源、权限关系如下图:
    主体、资源、权限关系图

    权限模型

    对上面的主体、资源、权限通过数据模型表示。
    主体(账号、密码等)
    资源(资源名称、资源地址等)
    权限(权限名称、资源id)
    角色(角色名称)
    角色和权限(角色id、权限id)
    主体和角色(主体id、角色id)
    可以通过下图表示:
    权限模型图

    通常企业开发一般会将资源表和权限表合并。如下:
    资源(资源名称、资源访问地址)
    权限(权限名称、资源id)
    合并为:
    权限(权限名称、资源名称、资源访问地址)
    模型图如下:
    这里写图片描述

    权限分配

    对主体进行权限分配,主体只允许对分配的权限范围内的资源进行操作。权限分配的数据通常都需要进行持久化。

    权限控制

    权限控制有两种方法实现,一种是基于角色的访问控制还一种是基于资源的访问控制。

    基于角色的访问控制

    RBAC基于角色的访问控制(Role-Based Access Control)是以角色为中心进行访问控制,比如:主体的角色为总经理可以查询企业运营报表,查询员工工资信息等,访问流程如下:

    Created with Raphaël 2.1.0 开始 查询工资信息 判断主体是否具有总经理角色 无权访问 结束 yes no

    上图中的判断逻辑可以理解为:

    if(主体.hasRole("总经理")){
        查询工资
    }

    缺点:以角色进行访问 控制粒度较粗。系统扩展性较差。比如上图查询工资的逻辑变为总经理或部门经理,就必须要修改代码。

    if(主体.hsRole("总经理") || 主体.hasRole("部门经理")){
        查询工资
    }
    基于资源的访问控制

    RBAC基于资源的访问控制(Resouce-Based Access Control)是以资源为中心进行访问控制,比如:主体必须具有查询工资权限才可以查询员工的工资信息等,访问控制流程如下:

    Created with Raphaël 2.1.0 开始 查询工资信息 是否有查询工资权限 无权访问 结束 yes no

    上图中的判断逻辑可以理解如下:

    if(主体.hasPermission('查询工资权限标识')){
        查询工资
    }

    优点:系统设计时定义好查询工资的权限标识。即使查询工资所需要的角色变为部门经理也只需要将“查询工资权限的标识”添加到“部门经理角色”的权限列表中,判断逻辑不用修改,系统可扩展性强。

    展开全文
  • Pixhawk之UAV控制理论、ardupilot源码框架介绍

    万次阅读 多人点赞 2016-03-06 22:41:36
     昨天开会开到接近下午一点钟,收获相当大,原本不太清楚的ardupilot框架现在也大致熟悉了,接下来主要就是结合源码了解其控制过程了,整体控制台过于复杂,还需要慢慢的研究。  但是,本篇博客还是不会太涉及那么...

    一、开篇

            “您有无人机么?

            没有。

            那赶紧去某宝买一套。”

            昨天开会开到接近下午一点钟,收获相当大,原本不太清楚的ardupilot框架现在也大致熟悉了,接下来主要就是结合源码了解其控制过程了,整体控制台过于复杂,还需要慢慢的研究。

            但是,本篇博客还是不会太涉及那么多关于源代码的东西的,特别是关于通过代码实现控制理论的(其实我现在也不太懂~~~),下面还有很多的基本知识需要阐述,在阐述以后会先给出一部分的关于代码框架的东西,不是很深入,请结合源码再看后面的东西。

            如果看到这里还对UAV、pixhawk不太了解的,请先阅读前一篇关于pixhawk的博客(地址:Pixhawk之前期准备)以及结合这个介绍的相当详细的网站:Pixhawk飞行控制器概览 。

            下面会给出几个比较重要的框架图,希望各位看客熟记!!!


    三、实验平台

    Software Version:ArduCopter(Ver_3.3)

    Hardware Version:pixhawk

    IDE:eclipse Juno (Windows)

    四、基本知识介绍

            下面的5个部分您都了解么?

    1)名词解释

    惯性测量单元IMU(InertialMeasurementUnit)

    姿态航向参考系统AHRS(Attitudeand Heading Reference System)

    地磁角速度重力MARG(Magnetic,Angular Rate, and Gravity)

    微机电系统MEMS(MicroElectrical Mechanical Systems)

    自由度维数DOF(Dimension OfFreedom)

    无人驾驶飞行器UAV(UnmannedAerial Vehicle)

    扩展卡尔曼滤波EKF(ExtendedKalman Filter)

    无损卡尔曼滤波UKF(UnscentedKalman Filter)

    惯性导航系统INS(InertialNavigation System)

    全球导航卫星系统GNSS(GlobalNavigation Satellite System)

    天文导航系统CNS(CelestialNavigation System)

    可垂直起降VTOL(VerticalTake-off and Landing)

    2)坐标系介绍

            有两个基本坐标系:“地理”坐标系(Earth Frame)和“载体”坐标系(Body Frame)。”地理”坐标系指的就是地球上的“东北天(ENU)”坐标系,而“载体”坐标系值的就是四轴自己的坐标系。当我们在实际控制当中,我们关心的显然是载体坐标系相对于地理坐标系之间的变化,所以我们通常使用的旋转矩阵是把“地理”坐标系转到“载体”坐标系的矩阵,两者之间的转换关系自行百度吧,讲的很详细。转化的方法就是坐标系的转换,目前有三种方式:四元数(q0123)、欧拉角(yaw(Z轴)、pitch(Y轴)、roll(X轴)属于其中一种旋转顺序Z-Y-Xà航空次序欧拉角)、方向余弦矩阵(9个系数)。其中使用四元数运算比较快,但是它没有实际的物理含义,纯数学推到。

    3)姿态数据

            姿态的数据来源有5个:重力、地磁、陀螺仪、加速度计、电子罗盘。其中前两个来自“地理”坐标系,后三个来自“载体”坐标系。。在“地理”坐标系中,重力的值始终是(0,0,1g),地磁的值始终是(0,1,x)。这些值就是由放置在四轴上的传感器测量出来的。在单位时间内的位移被定义为速度,速度有线速度和角速度之分,分别对应两种传感器测量这两种不同的速度:线速度传感器(加速度计)、角速度传感器(陀螺仪)。

    4)导航的基本原则

            导航的基本原则就是保证两个基本坐标系的正确转化,没有误差。只有实现了这个原则,载体才可以在自己的坐标系中完成一系列动作而被转换到地理坐标系中看起来是正确的。为了达到这个目标,需要对两个坐标系进行实时的标定和修正。因为坐标系有三个轴,偏航yaw修正由电子罗盘(基于载体)、地磁(基于地理)对比修正误差补偿得到。俯仰pitch和横滚roll上的修正由加速度计(基于载体)、重力(基于地理)对比修正误差得到。在完成了基本原则的基础之后,即保证两个坐标系的正确转化后,利用基于载体上的陀螺仪进行积分运算,得到基于载体坐标系的姿态数据,经过一系列PID控制,给出控制量,完成基于载体坐标系上的稳定控制后,反应到地理坐标系上的稳定控制,从而达到我们观察到的定高、偏航、翻滚、倾仰等动作。下一篇博客会给出具体的PID回路控制框图,这篇博客就不添加了。

            加速度计在地球上测量的是重力加速度,如果载体沿着z轴旋转,加速度计是无法感知他的运动的;类似的,电子罗盘测量的是地球上的磁场方向,如果载体沿着y轴旋转,电子罗盘同样也是无法感知他的运动的。综上所述,加速度计和电子罗盘只能得到2维的角度关系,通过某种方式的融合,可以得到正确的三维姿态信息。

            对于上述论述可以看出,导航姿态从理论上讲只用陀螺仪是可以完成任务的。但是由于陀螺仪在积分过程中会产生误差累计,加上白噪声、温度偏差等会造成导航姿态的解算随着时间的流逝而逐渐增加。所以就需要用加速度计在水平面对重力进行比对和补偿,用来修正陀螺仪的误差。但是对于竖直轴上的旋转,加速度计是无能为力的,此时用的是电子罗盘。也可以测量出水平面内的地磁方向用来修正陀螺仪的水平误差。通过这两个器件的修正补偿,使得陀螺仪更加稳定、可靠的工作。

    5)AHRS和IMU的差异

            AHRS由加速度计、磁场计、陀螺仪构成,AHRS的真正参考来自于地球的重力场和地球的磁场,它的静态精度取决于对磁场的测量精度和对重力的测量精度,而陀螺仪决定了他的动态性能。在这种前提下,说明AHRS离开了地球这种有重力和磁场环境的时候是没法正常工作的。而且特别注意,磁场和重力场越正交,航姿测量效果越好;也就是说如果磁场和重力场平行了,比如在地磁南北极。这里的磁场是向下的,即和重量场方向相同了。这个时候航线交是没法测出的,这是航姿系统的缺陷所在;在高纬度的地方航线角误差会越来越大。

            IMU(Inertial measurement unit)学名惯性测量单元,大学的理论力学告诉我们,所有的运动都可以分解为一个直线运动和一个旋转运动,故这个惯性测量单元就是测量这两种运动,直线运动通过加速度计可以测量,旋转运动则通过陀螺。假设IMU的陀螺和加速度计的测量是没有任何误差的,那么通过陀螺则可以精确的测量物体的姿态。通过加速度计可以二次积分得出位移,实现完整的6DOF,也就是说你带着一台这种理论型的IMU在宇宙任何位置运动。我们都可以知道它当前的姿态和相对位移,这将不局限于任何场。

      从上面的描述何以看出。实际上AHRS比IMU还多一个磁场传感器,而为什么AHRS的级别却低于IMU而需要依赖于重力场和磁场呢?这是由传感器器件架构所决定的。AHRS的传感器通常是成本低廉的mems传感器。这种传感器的陀螺仪和加速度计的噪声相对来说很大。以平面陀螺为例:用ADI的陀螺仪进行积分一分钟会漂移2度左右,这种前提下如果没有磁场和重力场来修正三轴陀螺的话。那么基本上3分钟以后物体的实际姿态和测量输出姿态就完全变样了,所以在这种低价陀螺仪和加速度计的架构下必须运用场向量来进行修正,而IMU实际上也是这样的。因为我们知道没有绝对精确的传感器,只有相对精确的传感器,IMU的陀螺仪用的是光纤陀螺或者机械陀螺,这种陀螺的成本很高。精度相对mems陀螺也很高,精度高不代表准确,IMU的姿态精度参数通常是一小时飘多少度。

      而用加速度计积分做位置的话。AHRS是不现实的(1分钟就能飘出几十米,而且是成二次方的速度递增)。AHRS通常要结合GPS和气压计做位置,IMU积分做位置的是一天多少海里。这样的一个参数数量级。也许在海上还能用的到,这就是AHRS和IMU在我的理解里的一个差异。

    五、源码框架介绍

            先来一发高清好图,一直再找它,终于找到了,正所谓“众里寻它千百度,蓦然回首那图却在灯火阑珊处”。希望大家能从该图大致的理解这个该死的pixhawk代码框架,下图就不做解释了,肯定都能看的懂。


            上面的图记下了么?记下了接着往下看~~~

    1)阅读下面内容时请结合源码阅读,便于理解。

            The basic structure of ArduPilot is broken up into 5 main parts:
    (1)vehicle directories
    (2) AP_HAL
    (3) libraries
    (4) tools directories
    (5) external support code

    (1)Vehicle Directories
            The vehicle directories are the top level directories that define the firmware for each vehicle type. Currently there are 4 vehicle types – Plane、 Copter、APMrover2 and AntennaTracker。
            Along with the *.cpp files, each vehicle directory contains a make.inc file which lists library dependencies. The Makefiles read this to create the -I and -L flags for the build.
    (2) AP_HAL
            The AP_HAL layer (Hardware Abstraction Layer) is how we make ArduPilot portable to lots of different platforms。 There is a top level AP_HAL in libraries/AP_HAL that defines the interface that the rest of the code has to specific board features, then there is a AP_HAL_XXX subdirectory for each board type, for example AP_HAL_AVR for AVR based boards, AP_HAL_PX4 for PX4 boards and AP_HAL_Linux for Linux based boards。
    (3) libraries
    (4) Tools directories
            The tools directories are miscellaneous support directories. For examples, tools/autotest provides the autotest infrastructure behind the autotest.diydrones.com site and tools/Replay provides our log replay utility.
    (5) External support code

            On some platforms we need external support code to provide additional features or board support. Currently the external trees are:
    PX4NuttX – the core NuttX RTOS used on PX4 boards
    PX4Firmware – the base PX4 middleware and drivers used on PX4 boards
    uavcan – the uavcan CANBUS implementation used in ArduPilot
    mavlink – the mavlink protocol and code generator

    2)Libraries介绍

    (1)核心库
    AP_AHRS:采用DCM(方向余弦矩阵方法)或EKF(扩展卡尔曼滤波方法)预估飞行器姿态。
    AP_Common:所有执行文件(sketch格式,arduino IDE的文件)和其他库都需要的基础核心库。
    AP_Math:包含了许多数学函数,特别对于矢量运算。
    AC_PID:PID控制器库。
    AP_InertialNav:扩展带有gps和气压计数据的惯性导航库。
    AC_AttitudeControl:姿态控制相关库。
    AP_WPNav:航点相关的导航库。
    AP_Motors:多旋翼和传统直升机混合的电机库。
    RC_Channel:更多的关于从APM_RC的PWM输入/输出数据转换到内部通用单位的库,比如角度。
    AP_HAL,AP_HAL_AVR,AP_HAL_PX4:硬件抽象层库,提供给其他高级控制代码一致的接口,而不必担心底层不同的硬件。AP_HAL_PX4:GPIO、I2C、UART、RCinput/output、scheduler、semaphores、storage。
    (2)传感器相关库
    AP_InertialSensor:读取陀螺仪和加速度计数据,并向主程序执行标准程序和提供标准单位数据(deg/s,m/s)。
    AP_RangerFinder:声呐和红外测距传感器的交互库
    AP_Baro:气压计相关库
    AP_GPS:GPS相关库
    AP_Compass:三轴罗盘相关库
    AP_OpticalFlow:光流传感器相关库
    (3)其他库
    AP_Mount,AP_Camera, AP_Relay:相机安装控制库,相机快门控制库
    AP_Mission: 从eeprom(电可擦只读存储器)存储/读取飞行指令相关库
    AP_Buffer:惯性导航时所用到的一个简单的堆栈(FIFO,先进先出)缓冲区
    AP_AccelCal、AP_Declination、AP_RCMapper、AP_RPM、AP_RSSI
    AP_ADC:Analog to Digital
    APM_Control: pitch/roll/yaw controller
    DataFlash:flash memory
    GCS_Console/GCS_MAVLink:地面站通信、飞行日志

    3)关于主控MCU STM32F4的选择和协处理器STM32F1

            在源代码中,大部分代码都是运行在主控MCU STM32F4芯片上,并且是通过直接配置寄存器来实现相应的功能,代码位于“/ardupilot/modules/PX4Firmware/Build/px4fmu-v2_APM.build/nuttx-export/arch/chip”中。

    4)关于pixhawk使用的OS:NuttX

            在modules /PX4NuttX/nuttx/sched文件中有os_start.c定义文件,内部进行了一系列的关于操作系统的初始化。在os_start()函数里面进行了如下初始化。


            以上并非必须初始化,可以有选择性的初始化。Ifdef/ifndef….

            重点了解一下关于nuttx中的modules /PX4NuttX/nuttx/mm。

    5)姿态控制的软件流程

            简单的软件流程官方给出了大致的介绍,该部分详见官方介绍:Code Overview

    六、再深入一点

            如下顺序不分先后,都是平时自己整理的,等以后对ardupilot的整体框架了解的比较透彻以后再回头修改吧。

    1)关于飞行模式


    2)关于参数的使用



    3)关于一些报警和灯显、日志


    4)关于校准和失控保护


    5)关于RC输入和输出(接收机)


    6)关于机型选择和电机控制


            代码赏析:如下事例摘自motors.cpp中的一段关于电机解锁和上锁的源码,这段代码试飞过无人机的肯定一看就懂~~~但是,如果没有感性的是飞过无人机,那么。。。。。。。您自己理解吧

    // arm_motors_check - checks for pilot input to arm or disarm the copter
    // called at 10hz
    void Copter::arm_motors_check()
    {
        static int16_t arming_counter;
        // ensure throttle is down首先判断油门是否为最小
    if (channel_throttle->control_in > 0)
    {
            arming_counter = 0;
            return;
    }
    //油门最小则检测yaw的行程量
    int16_t tmp = channel_yaw->control_in;
    
        // full right  解锁
    if (tmp > 4000) 
    {
            // increase the arming counter to a maximum of 1 beyond the auto trim counter
            if( arming_counter <= AUTO_TRIM_DELAY )
     {
                arming_counter++;
            }
            // arm the motors and configure for flight
            if (arming_counter == ARM_DELAY && !motors.armed()) 
    {
                // reset arming counter if arming fail
                if (!init_arm_motors(false)) 
    {
                    arming_counter = 0;
                }
            }
            // arm the motors and configure for flight
            if (arming_counter == AUTO_TRIM_DELAY && motors.armed() && control_mode == STABILIZE)
     {
                auto_trim_counter = 250;
                // ensure auto-disarm doesn't trigger immediately
                auto_disarm_begin = millis();
             }
        // full left 上锁
    }
    else if (tmp < -4000)
    {
            if (!mode_has_manual_throttle(control_mode) && !ap.land_complete) {
                arming_counter = 0;
                return;
            }
            // increase the counter to a maximum of 1 beyond the disarm delay
            if( arming_counter <= DISARM_DELAY ) 
    {
                arming_counter++;
            }
            // disarm the motors
            if (arming_counter == DISARM_DELAY && motors.armed()) 
    {
                init_disarm_motors();
            }
        // Yaw is centered so reset arming counter
    }
    Else
    {
                 arming_counter = 0;
               }
    }
    

    七、总结

            阅读源码是在eclipse中直接看的,没有用SI(据说很高级,但是用不习惯)。通过上述介绍,对ardupilot这套代码有了初步的理解,初期接触这套代码的第一感觉就是“What's the fucking code!”,经过一段时间的不懈努力,终于有了些头绪,苍天不负有心人。

            接下来的博客内容是关于这套ardupilot代码如何使用操作系统的、Where is the fucking function main?、进程问题,还有就是验证控制回路,PID的使用,EKF等等,应该会分开写吧,这么多东西~~~

            整整写了一晚上啊,写博客真不是一件容易的事情,写的有点乱,没头没尾的,希望各位看客喜欢。有错误的请帮忙指出来,大家一起进步~~~~

    展开全文
  • 架构和框架关系

    千次阅读 2004-09-12 22:05:00
    架构、框架、模式是一种从大到小的关系,也是一种组合关系。架构一般针对一个行业或一类应用,是技术和应用完美的结合。框架因为比较小,很多表现为中间件,框架一般是从技术角度解决同类问题,例如J道数据增删改查...
  • 论文研究-建立系统科学基础理论框架的一种可能途径与若干具体思路(之七)——离散动力系统的密度演化与序列的信息结构.pdf, 本文是总题目下的第七篇。全文的总目的是试图...
  • 论文研究-建立系统科学基础理论框架的一种可能途径与若干具体思路(之一)——系统概念的历史发展与系统科学的产生.pdf, 本文是总题目下的第一篇 .全文总的目的是试图从...
  • 论文研究-建立系统科学基础理论框架的一种可能途径与若干具体思路(之五)——物理学的理性原则与一般系统拉格朗日函数结构形式的推导.pdf, 本文是主标题下的第 5篇 ,主要...
  • 激光SLAM基础(1) —— 激光SLAM框架和基本数学理论

    千次阅读 多人点赞 2019-10-25 20:45:45
    激光SLAM笔记(1)——激光SLAM框架和基本数学理论1、SLAM分类1.1、基于传感器的分类1.2、基于后端的分类2、激光SLAM算法(基于优化的算法)2.1、激光SLAM算法的流程2.2、激光SLAM常用算法2.3、激光SLAM在实际环境中...
  • 首选框架是黑洞的自由落体框架。 所采用的色散关系在低能量时与相对论一致,但在普朗克质量mp附近被修改。 计算针对Omp-2的块状和带电粒子以及所有阶数均为λ= 0的中性和无质量粒子的霍金温度校正值。 辐射的霍金...
  • 游戏UI框架设计(一) ---架构设计理论篇    前几天(2017年2月)看到一篇文章,国内王健林、马云等大咖们看好的未来十大最有“钱途”产业中,排名第一的就是“泛娱乐”。 所以我们发现最近几年无论是BAT企业...
  • 【SSH2框架理论篇)】--SSH2 Vs 经典三层

    万次阅读 热门讨论 2014-04-21 09:35:44
    这几天一直在学习使用SSH框架,对于框架本身的使用并不是很困难,相信...就在某次查看代码的时候突然闪现了一个想法,SSH框架和经典三层很相似,当然经过翻阅资料发现我的想法还是有理论依据的,接下来将会证实该猜想。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 136,083
精华内容 54,433
关键字:

关系理论框架