`
hqman
  • 浏览: 367373 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

amf是什么东东

阅读更多
今天我们开发的 J2EE 网络应用程序,在表现层常用的就是Struts, Tapestry, WebWork, or Spring。这些工具一般使用MVC体系结构,输出HTML到浏览器。典型的程序网络开发模型就是要求 用户对程序的每一个动作都要发送请求到服务器上。对于程序的每个用户请求,服务器生成一个回复允许用户提交一个新请求用以获得更多信息。一个浏览器通常用来为用户渲染界面。但是浏览器是一个有太多限制的客户端,同时缺乏开发和用户体验。

富网络应用程序(RIA)技术用来处理表现层的缺陷。这篇文章将以注重实践的态度来理解什么是RIA,怎样把它融入你的应用体系中。文章也将提出一种是跟几个流行的 开源框架组合潜在的挑战。

浏览器的局限

当前已有的解决方案的问题是什么呢?当程序行为正确时也许并没有什么问题,可是曾经大多数的网络开发者都抱怨在使用浏览器作为客户端的能力限制。这里有几个当网络应用程序使用浏览器产生的问题:

l 各种浏览器以一些不协调的方式解释象javascript这样的脚本语言,这迫使开发者花费出几倍的时间写相同的代码来适应不同的浏览器。

l 一些象标签,向导表单,大型数据列表处理 等普通的功能却困扰着开发人员并需要付出额外的实践来为浏览器写代码。

l HTML本身就有局限性,静态的标签无法扩展。

l 用户界面上的事件处理有着巨大的挑战,因为渲染HTML页面只能同时显示一个,事件无法不通过服务器更新其它页面上的数据。

l 存储程序状态只能通过无法是用对象的cookies,

l 使用浏览器几乎无法开发需要脱机工作的程序



这些例子反复说明了大部分开发者都已知道的:当前的工具是由局限性的。开发者使用浏览器时经常会因为这些问题要去找到解决方案。开发者和用户都已经对这种瘦客户端的能力失去信心。



富网络应用程序

有一种克服以上一些局限性的办法,我们称之为RIA,一个RIA 提供用户一个扩展了浏览器无法实现的能力的胖客户端。大多数普通的J2EE RIA客户端是java和Flash。当需要开发一个以数据为中心的大型应用程序时,RIA通常比较适合。一些可用的开发RIA解决方案有 JDNC (JDesktop Network Components), Laszlo, Thinlet, Java Web Start, and Macromedia Flex。

RIA能解决上面所说的问题,以下是一些RIA能提供的功能列表:

l RIA 提供类似于浏览器的 UI组件,增加了新本地化,更多组件。例如:包含数字递进器,滑动控制,在线数据表格逐渐,和 菜单栏。

l RIA允许使用布局管理组件,象标签向导,折叠栏,树型,还有一些其它的布局,已经接近AWT和SWING开发。

l RIA提供拖动-释放 能力

l RIA中的语言风格对所有客户端都是一致的,所以无需为不同应用重写

l 请求/回复 模型不是所有用户界面动作说必须的。使用RIA,用户与界面交互只需要处理所需要的部分。RIA 可以使用HTTP协议方法上传数据到应用程序服务器。通常,无论如何,首选的机制是remoting,它支持不同的方式使用RIA。RIA 特别的使用一些扩展协议来在HTTP之上交流。

l 多组件事件处理可使用。

l RIA允许你存储更多信息在客户端代替httpsession,这减少了服务器的内存消耗。

l 持久化状态,大多是在form对象,提供脱机时的能力



RIA是一个比较新的技术,引进了新的观念来发展这些类型的应用。它不是所有应用程序的银弹,根据实现,提供试验。但是,假如你的应用能够受益于富UI设计,那么RIA也许适合你。这篇文章现在将介绍一个RIA解决方案- Macromedia Flex,我们还将讨论整合问题。



Macromedia Flex

Macromedia Flex 是 一种提供RIA的商业表现层服务器。Flash插件是flex程序运行时环境所不可缺少的。大多数浏览器已经预装了Flash插件,这将有助于你 立刻使用flex。我们将讨论是用Flash插件代替java插件与J2EE应用服务器交互的一些问题。

开发者使用两种核心的语言来创建flex程序,第一个是MXML,Macromedia Flex标记语言,它包含了大量的XML标签,允许开发者布局他们的界面。 MXML能引用到XUL,或者XML UI语言,这些标记可以被扩展,有程序需要的额外能力,不象HTML。其它MXML结构允许你拥有自己的 look and feel MXML组件。

第二个语言是 ActionScript 2.0,它是一种ECMA-compliant 语言很像 JavaScript。ActionScript元素编码在MXML页面中。这是一种强类型的面向对象的语言,很容易被熟悉 java的开发上手。ActionScript 还有丰富的事件处理能力允许应用程序响应动态的用户交互。因为ActionScript 在Flash插件中运行,所以无需为不同的浏览器编写相似的代码。



MXML跟ActionScript 都是基于文本的语言,能够在普通的文本编辑器,一个象eclipse 的IDE,或者其它成熟的工具象flex builder。假如你有java,XML经验,或一些脚本语言象 javascript,你就只有很小的学习曲线学习flex开发。

Flex 服务器 是为了将MXML和ActionScript 编译转化成Flash 字节码.swf文件。这个过程就像java web服务器容器编译JSP文件成servlet。Swf文件在客户端的Flash运行时环境中运行。Flex 服务器提供其它类似缓存,并发,处理远程对象的功能。



为你的遗留体系引入一个RIA框架

现在你已经有一些RIA方面的理解了,让我们来看看怎样为你已经存在的应用程序引入一个RIA框架。这将包括一些关于RIA应该在少耦合的程序中处于什么层的外置的讨论。此外,讨论将会在特别强调一些可能存在在开发flex与一些流行的开源框架结合的缺陷。这个例子会帮助你确定在引入RIA时潜在的问题。

让我们开始标识一个分层的体系结构。一个这样的体系一般包括 表现层,业务委托层,业务综合/服务层,和持久层。这是一个可能的个层实现关系:

Flex + Business Delegates + Spring Framework + Hibernate



接下来的讨论将集中在 综合各个层。



关于我这个已经存在的MVC表现层

表现层是一个web应用程序展现给用户的界面,把请求转发到服务器,存储数据信息模型。刚开始的RIA开发者总是希望能重用已经存在的struts组件。但是象flex这样的产品提供了他自己的MVC架构。你会真的需要去维持并存两个表现层框架在你的应用中吗?



让我们看看一个实际的例子中flex客户端发出一个通过struts组件的请求到应用程序服务器上。一个来自flex的请求发送到struts表现框架之后被高层的程序接收。图1显示了一个这样的例子




图1 :怎么样用其它java组件组合 flex 和 struts



象struts这样的表现成框架在HTTP上传送HTML请求,虽然我们可以使用HTTP协议,但更鼓励开发者使用 remote object 调用,因此,使用这两个表现层框架会逐渐产生协议不搭配,除非我们有一个特殊的需求直接用RIA组合struts。,避免他们。图2 显示一个更好的组合flex 和struts的方案:




图2 ,介绍flex struts 平行存在于 java 组件中



图2 提出了怎样去隔离 struts 组件和flex 组件使他们共存。这满足了应用程序需要平行的RIA组建和 轻量级 类struts组件。



开发者必须明白他们使用RIA客户端是要做什么。这要求我们明确的转换我们熟悉的传统的请求/应答这种编程思想。象flex这样的RIA产品不像struts这样是 请求或者应答 驱动的。RIA 客户端更新UI而无需全部的实例都返回服务器进行交互。



Struts 并不是你在使用RIA时需要唯一考虑的问题。我们只需花费一点时间就可以熟悉这些类型的技术。在这个学习路途中,最大的问题是组合java服务器端的组件。底线是不背离RIA观念。



在业务层集成flex

现在我们了解了一些表现层技术,让我们来讨论一下对程序结构的其它层的影响。我们要重新配置我们的表现成组件,怎样跟业务层组合在一起呢?

Flex 是一个可扩展的RIA框架,提供了很多方法来与你的J2EE组件进行通信。Flex提供 HTTP 通信,web service通信,和 macromedia公司所特有的AMF(ActionScript Messaging Format)网关。AMF网关是一个高性能的二进制协议,就像Flash里面的 remoting协议。Remote对象使用HTTP协议通过AMF网关传递信息。Flex为所有这些通信协议提供MXML标记,极大地减少了编码复杂度。此外,flex允许你使用同步的或者异步的方式去调用远程的业务层。当使用异步远程调用时,用户可以执行一些客户端行为,而不会有传统web应用程序的阻塞现象。当然,你可以在适当的地方使用同步方法来阻塞用户操作。

现在让我们来考虑 怎样在业务/综合层中集成flex。讨论中我们将使用spring框架作为我们的综合层,当然这并不限制你使用任何你自己选择的其它实现方式。让我们假设你有一些服务操作在你的spring微容器中,而你需要在flex中调用这些远程对象。

既然flex 无法直接知道任何关于spring的东西,所以你用一个担当代理服务器组件的小层来分离他们。另外,既然spring在java接口中有不俗的表现,它也一定适合去构建一些实现了一些spring服务接口的代理对象。这些代理对象将会提供一个在 flex跟综合层之间的分隔网关。唯一你需要去做的就是在flex配置文件中配置这些对象,然后你就可以通过AMF网关调用了。这里有一个关于在服务器端 flex-config.xml文件中怎样配制代理对象的例子:

<object name="OrderBusinessDelegate">

<source>

com.meagle.flexro.FlexBusinessDelegate

</source>

<type>stateless-class</type>

<use-custom-authentication>

true

</use-custom-authentication>

<allow-unnamed-Access>

false

</allow-unnamed-Access>

<roles>

<role>OrderUser</role>

<role>Admin</role>

</roles>

</object>

第一眼你就可以看出来flex一些特别的能力,如配置安全选项,和确定代理对象是有状态的还是无状态的。当一个远程对象调用一个综合层对象时,调用会被 flex代理java对象截获。代理将会产生一个对综合层或服务层的调用。结果对象将会被通过AMF网关发送回flex客户端,在那里被解释成 actionscript对象。这里有一个MXML代码使用远程调用和存储结果在数据模型中的例子:

<mx:RemoteObject id="soapro"

named="OrderBusinessDelegate"

protocol="https"

showBusyCursor="true">

<mx:method name="saveNeWorder"

result="saveNeWorder_result(event)"

fault="faultHandler(event.fault)"/>

<mx:method name="findOrderById"

result="findOrderById_result(event)"

fault="faultHandler(event.fault)"/>

<mx:method name="updateOrder"

result="updateOrder_result(event)"

fault="faultHandler(event.fault)"/>

</mx:RemoteObject>



<mx:Model id="roModel" >

<!-- The object graph for the Order object

will be stored here -->

<Order/>

</mx:Model>



域对象是用就类似于actionscritp 的java写成,它来回于AMF网关。这个过程开始于一个来自于flex客户端的请求,通过AMF网关到应用程序的其它层。结果对象图表将会通过其他 java层被发送回,最终通过AMF网关回到客户端。当一个对象通过网关他会被转换回actionscript等价物。图3 显示了这个过程




图3 AMF 网关的 轮廓图



其它的一些关于返回对象 通过flex和你的java层: 因为actionscript 2.0是一个面向对象的语言,它可以创建actionscript的java等价物对象。这样就使得在对象来回穿越于AMF网关变得容易多了。Actionscript 对象被发送回Flash插件类似于 数据转换对象DTO,这是必须的,因为Flash插件没有任何java运行时组件。这里有一个熟悉的例子,一个java的命令 域对象:

package com.meagle.bo;



import java.util.ArrayList;

import java.util.Collections;

import java.util.List;



/**

* This object represents an order.

* @hibernate.class table="TestOrder"

* @author meagle

*/

public class Order {

private int id;

private double total;

private int version;

private String userName;

private List orderLineItems = new ArrayList();



// other fields and getter/setter methods not

// shown to save space

}



下面是一个 actionscript 等价物:

/**

* Generated Action Script Object

* for com.meagle.bo.Order. Do not edit!

*/

class com.meagle.bo.Order extends Object {



public function Order(){}



public static var regClass =

Object.registerClass("com.meagle.bo.Order",

com.meagle.bo.Order);



var id : Number;

var orderLineItems : Array = new Array();

var total : Number;

var userName : String;

var version : Number;



// other fields and getter/setter methods not

//shown to save space

}



你已经注意到了在actionscript Order对象中有一个特殊的方法Object.registerClass()。这个Object.registerClass()方法是用来使AMF 网关知道如何去耦合和解耦 java和actionscript 对象。这个方法注册了 对应于 服务器端 java类的 客户端actionscript 类。因为这些对象如此的相似,你无需去重写你的域对象,只需要一些细微的格式化。一些象Xdoclet 和ant 这样的工具允许你自动生成 这些 actionscript 对象。现在你可以在flex 客户端操纵你的java对象就像 actionscript一样。



在持久成集成你的flex

在一个结构良好的的网络应用程序中,我们一般不直接跟持久层通信。使用flex不会改变这个架构。大多数情况下综合层会与你的持久层通讯。一般我们使用 DAO 来访问在一个象数据库一样的存储地的数据。Flex 客户端也不会直接与持久层通信,即使知道这些层的存在,因为这样会产生强耦合。让我们使用hibernate 来做持久成做一个范例吧。

使用hibernate和Macromedia的 AMF网关的远程对象有两个缺点。Hibernate用户知道你不能访问一个懒加载的集合collection,因为你还没有在 session中初始化他们。访问一个没有被初始化的动态代理对象集合会导致运行时异常。AMF网关不知道如何去寻找hibernate动态代理对象。一种可能的解决方案是面向方面的编程(AOP)拦截器,它能放置一个将要通过AMF网关的对象在一个委托对象中,然后移除动态代理。这个过程包括发送结果对象穿过一个递归查询那些使用反射和没有被初始化的代理对象的拦截器类。假如一些懒代理对象或者集合被发现了,他就会把他们的值设置为null。这是一个面向方面的一个截面,我们可以使用一些象 JBoss AOP, AspectJ, Spring AOP等等 AOP语言来实现。AOP 拦截器将在业务代理层中应用。图4 显示了这样的程序架构的框架:




图4 在通过AMF网关之前引入AOP拦截器和advice来代理对象. 跟进一步说,它会在一些像综合层,持久层等地方减少耦合。

好消息是AMF 网关不知道如何你缓存双向对象,所以无止境的递归操作也不会在转换对象过程中产生。因此你可以在传送它们往返于AMF网关时保持这些完整的关系。还有,因为对象是无连接和拷贝过来的,你必须使用Session.saveOrUpdateCopy(Object object) 方法持久化你的结构到数据库当中。这个方法必须被使用,因为对象在穿越AMF网关的过程中丢失了一些hibernate可以使用的特殊的字节码信息。



认证

典型的 J2EE 应用程序有一些相同的认证设计。也许是 基于容器的认证模式或者是自定义的用户认证代码。像flex这样的RIA服务器允许你在Flash客户端使用自定义认证表单,或者 在大多数应用程序服务器上基于容器的认证。此外,假如你要再上面的这个例子中查找业务委托配置,你就会注意到你能够安全的为这些对象配置角色。经常做的是在AMF网关中允许开发者获取HttpRequest,HttpResponse和ServletConfig对象再你的代理对象方法中使用来增强安全性。



总结

这篇文章有目的的介绍了一些在使用象flex这样的RIA时进行的权衡和可能的缺陷。不管你是否使用flex或者其他RIA实现,这里有些在使用这些技术主要的考虑的事情。当评价一个RIA框架,确定它在遇到一些问题时是否有足够的可扩展性。另外,在RIA和java之间传送数据需要注意小心评价综合的问题。

AMF协议是基于Http协议的.
它的内容处理过程大致是这样:
1.从客户端获取Http请求(Request)流.
2.对流进行解串行化(Deserialize),得到服务器端程序能够识别的数据,并建立一个响应(Response)消息
3.Debug开始
4. 对流进行各种处理(记录、许可、服务)得到返回值
5.对响应流进行串行化
6.发送Http响应给客户端

Flash ActionScript 数据类型在AMF协议中对应的值是:
Number     0x00;
Boolean     0x01;
String     0x02;
Object     0x03;
MovieClip     0x04;
Null      0x05;
Undefined     0x06;
Reference     0x07;
ECMAArray     0x08;
ObjectEnd     0x09;
StrictArray    0x0a;
Date      0x0b;
LongString    0x0c; 
Unsupported    0x0d; 
Recordset     0x0e; 
XMLObject     0x0f; 
TypedObject(Class) 0x10;

资源

Macromedia Flex home page
Open XUL Alliance
Mark Eagle is a Senior Software Engineer at MATRIX Resources, Inc. in Atlanta, GA.
分享到:
评论
3 楼 damoqiongqiu 2011-09-06  
可惜图片一个都没有了。
2 楼 eoeac 2008-10-16  
希望能把图补上,谢谢
1 楼 steven186 2008-10-14  
是楼主自己原创的吗?写的挺好,可惜中间有几个图片没有了,希望能修改下。

相关推荐

    基于NSGA2与熵权TOPSIS的电力系统储能选址定容优化及Matpower潮流计算研究

    内容概要:本文详细探讨了利用NSGA2算法进行电力系统中储能系统的选址和定容优化,并结合熵权TOPSIS方法选择最优解。首先介绍了使用Matpower工具包进行潮流计算的基础步骤,随后深入讨论了储能系统引入后的复杂性和优化目标设定。文中展示了如何构建目标函数,包括储能的投资成本和系统电压偏差,并详细解释了NSGA2算法的具体实现,如种群初始化、交叉变异操作以及约束条件处理。最后,通过熵权法确定权重并应用TOPSIS方法对多个优化结果进行评估,选出综合性能最佳的储能配置方案。 适合人群:从事电力系统规划、优化算法研究的专业人士,尤其是对储能系统优化感兴趣的科研人员和技术开发者。 使用场景及目标:适用于需要解决电力系统中储能系统选址和定容问题的实际工程项目。主要目标是在满足系统稳定性要求的前提下,最小化储能系统的投资成本,提高系统的经济性和可靠性。 其他说明:文章提供了详细的代码片段和理论推导,帮助读者更好地理解和实施所提出的优化方法。此外,还提到了一些实际应用中的注意事项,如SOC约束处理、参数选择等,为后续的研究和应用提供了宝贵的实践经验。

    基于python+pyqt5实现视频自动化下载、剪辑和上传系统源码+项目说明.zip

    基于python+pyqt5实现视频自动化下载、剪辑和上传系统源码+项目说明.zip 该项目是用脚本实现部分视频网站视频内容的自动化下载、剪辑以及上传,其中界面是用PyQT做的。 使用的浏览器驱动是undetected_chromedriver,可以跳过tiktok的机器人检查 使用的浏览器是91,版本:Google_Chrome_(64bit)_v91.0.4472.77 【功能】 自动从各种视频网站下载视频 支持视频剪辑和合集制作 支持自动上传视频到视频网站 技术栈 Python PyQT undetected_chromedriver

    西门子S7-1200双套三坐标6轴联动控制系统的设计与实现

    内容概要:本文详细介绍了西门子S7-1200双套三坐标6轴联动控制系统的开发与调试经验。主要内容涵盖双PLC通信机制、轴控制逻辑、安全联锁设计以及触摸屏程序绑定等方面。文中通过具体代码示例展示了如何利用SCL语言实现高效稳定的多轴联动控制,并分享了实际项目中的最佳实践和技术难点解决方案。此外,还讨论了程序结构优化、报警代码设计、数据块管理等关键环节,强调了模块化设计思想的应用及其带来的效率提升。 适合人群:从事工业自动化领域的工程师,尤其是熟悉西门子PLC编程的专业人士。 使用场景及目标:适用于需要进行复杂运动控制的自动化生产线,如汽车制造、电子装配等行业。主要目标是提高生产效率,确保设备运行的安全性和稳定性。 其他说明:文中提到的许多技术和方法不仅限于特定型号的PLC,对于其他品牌的控制器也有一定的借鉴意义。同时,提供的代码片段可以直接应用于类似项目中,帮助开发者快速搭建可靠的控制系统。

    NFC Tools Pro

    NFC Tools是一个应用程序,允许你在你的 NFC 标签和其他 RFID 兼容芯片上读取或写入或编程代码任务。NFC Tools PRO版本包括很多其他的附加功能,比如配置文件管理等。保存你的NFC标签或任务的配置文件,以便你以后重新使用它们。导出和导入很容易。NFC Tools PRO官方版允许你直接从现有的 NFC 标签导入你的记录或任务。 你可以很快编辑你的标签。此外还可以直接运行你的任务配置文件,不需要NFC 标签。

    protobuf-6.30.1-py3-none-any.whl

    该资源为protobuf-6.30.1-py3-none-any.whl,欢迎下载使用哦!

    FLAC3D中壳单元与衬砌单元内力提取及处理技巧

    内容概要:本文详细介绍了如何在FLAC3D中提取壳单元和衬砌单元的关键内力数据,如弯矩、轴力和剪力。针对壳单元,文中提供了具体的FISH命令和函数,展示了如何利用gp.extra属性提取弯矩,并强调了局部坐标系方向的重要性。对于衬砌单元,则介绍了专门的命令和注意事项,如使用liner组件提取轴力和剪力,以及如何处理弯矩数据。此外,还分享了一些实用的经验和技巧,如批量数据处理、单位换算、内力符号规则等。最后,提到了使用Python进行后处理的方法,将提取的数据转化为更直观的形式,便于进一步分析。 适合人群:从事岩土工程、隧道工程及相关领域的工程师和技术人员,尤其是对FLAC3D有一定基础的用户。 使用场景及目标:帮助用户掌握FLAC3D中壳单元和衬砌单元内力提取的具体方法,提高工作效率,确保数据分析的准确性。适用于需要进行结构内力分析、支护设计优化等项目的工程师。 其他说明:文章不仅提供了详细的命令和函数示例,还分享了许多实战经验和常见错误的规避方法,有助于初学者少走弯路。同时,强调了内力符号规则和单位换算的重要性,避免因疏忽导致的重大失误。

    ST PMSM FOC电机控制资料包2.0:全面解析STM32电机控制核心技术与实战技巧

    内容概要:本文详细介绍了ST公司发布的HL07:ST PMSM FOC电机控制资料包2.0的内容及其应用。资料包涵盖了ST芯片电机控制的全源代码、详细文档、多个工程源码、stm32库培训资料及例程源码。文中通过具体的代码示例,如GPIO初始化、PWM配置、ADC采样、Clarke变换、PID调节器、SVPWM生成等,深入剖析了电机控制的关键技术和优化技巧。此外,还揭示了一些隐藏的技术细节和调试技巧,如硬件同步、动态调整PID参数、电机参数自识别等。 适合人群:电机控制工程师、嵌入式开发人员、尤其是对STM32和FOC算法感兴趣的开发者。 使用场景及目标:帮助读者深入了解ST芯片电机控制的具体实现,掌握从硬件配置到算法优化的全过程,提高实际项目的开发效率和质量。适用于需要进行电机控制系统设计、调试和优化的工程项目。 其他说明:资料包中的代码和文档非常实用,提供了丰富的实战经验和优化建议,尤其适合初学者和有一定基础的研发人员。同时,文中提到的一些特殊技巧和注意事项有助于避免常见的开发陷阱,提升系统的稳定性和性能。

    人工智能2025年AI领袖与技术发展趋势:多模态AI、量子计算及行业应用展望

    内容概要:文章探讨了2025年AI技术发展趋势及潜在的GPT级技术突破。首先回顾了GPT系列模型的发展历程及其对自然语言处理领域的深远影响。接着,通过介绍Geoffrey Hinton、李飞飞和张晨等AI领袖的观点,阐述了AI技术在实际应用场景中的挑战与机遇。文中详细描述了AI大模型的演进,包括多模态技术的发展、轻量化趋势以及可控性和可解释性的提升。此外,还介绍了AI计算力的革命性升级,如量子计算、云计算+AI和边缘AI的发展。最后,文章分析了AI在医疗、金融、教育、自动驾驶等行业的落地应用,并指出了面临的挑战与机遇,展望了未来的技术和社会影响。 适合人群:对AI技术感兴趣的从业者、研究人员、企业家及政策制定者。 使用场景及目标:①了解AI技术的最新进展和未来趋势;②探索AI技术在各行业的应用前景;③评估AI技术带来的挑战与机遇,为相关决策提供参考。 阅读建议:本文内容涵盖广泛,既有技术细节又有宏观展望,建议读者结合自身背景选择感兴趣的部分深入阅读,重点关注与自身行业或研究方向相关的章节。

    基于樽海鞘算法优化的极限学习机回归预测及其与BP、GRNN、ELM的性能对比研究

    内容概要:本文详细探讨了基于樽海鞘算法(SSA)优化的极限学习机(ELM)在回归预测任务中的应用,并与传统的BP神经网络、广义回归神经网络(GRNN)以及未优化的ELM进行了性能对比。首先介绍了ELM的基本原理,即通过随机生成输入层与隐藏层之间的连接权重及阈值,仅需计算输出权重即可快速完成训练。接着阐述了SSA的工作机制,利用樽海鞘群体觅食行为优化ELM的输入权重和隐藏层阈值,从而提高模型性能。随后分别给出了BP、GRNN、ELM和SSA-ELM的具体实现代码,并通过波士顿房价数据集和其他工业数据集验证了各模型的表现。结果显示,SSA-ELM在预测精度方面显著优于其他三种方法,尽管其训练时间较长,但在实际应用中仍具有明显优势。 适合人群:对机器学习尤其是回归预测感兴趣的科研人员和技术开发者,特别是那些希望深入了解ELM及其优化方法的人。 使用场景及目标:适用于需要高效、高精度回归预测的应用场景,如金融建模、工业数据分析等。主要目标是提供一种更为有效的回归预测解决方案,尤其是在处理大规模数据集时能够保持较高的预测精度。 其他说明:文中提供了详细的代码示例和性能对比图表,帮助读者更好地理解和复现实验结果。同时提醒使用者注意SSA参数的选择对模型性能的影响,建议进行参数敏感性分析以获得最佳效果。

    工业自动化中汇川PLC与基恩士PLC基于EIP通讯的联机实现及应用

    内容概要:本文详细介绍了汇川PLC与基恩士PLC通过Ethernet/IP (EIP) 协议实现联机的方法及其应用场景。首先,文章解释了硬件配置,包括基恩士KV-7300 CPU搭配KV-EP21v以太网通信模块以及汇川AM-400系列PLC的网口连接。接下来,分别阐述了基恩士和汇川PLC的程序框架,涵盖初始化EIP通讯模块、设置IP地址、建立连接、数据映射及心跳检测机制等关键技术点。此外,文中提供了具体的代码示例和调试建议,如使用Wireshark抓包工具排查问题,并强调了数据同步、字节序转换、超时处理等方面需要注意的地方。最后,分享了一些实践经验,例如确保正确的IP地址分配、合理的缓冲区大小规划、良好的接地措施等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程有一定基础并希望深入了解不同品牌PLC间通讯机制的专业人士。 使用场景及目标:适用于需要将不同品牌PLC集成到同一个控制系统中的工业项目,旨在提高系统的灵活性和互操作性。通过掌握本文介绍的技术要点,可以有效减少因PLC品牌差异带来的兼容性和稳定性问题。 其他说明:文中不仅提供了理论指导,还结合实际案例进行了深入浅出的讲解,帮助读者更好地理解和应用相关技术。同时,针对可能出现的问题给出了预防和解决方案,使读者能够在实践中少走弯路。

    基于STM32F4的VESC非线性磁链观测器移植与优化

    内容概要:本文详细记录了作者将VESC项目的非线性磁链观测器移植到STM32F4开发板的过程。首先介绍了FOC技术和VESC源码的重要性和特点,然后重点阐述了非线性磁链观测器的实现方法及其核心代码。接着讨论了移植过程中遇到的技术难题,如实时性、稳定性、中断处理、电流采样等问题,并分享了解决这些问题的具体措施。最后展示了测试结果,证明了移植的成功以及观测器的良好性能。 适合人群:具有一定嵌入式开发经验的研发人员,特别是从事电机控制领域的工程师和技术爱好者。 使用场景及目标:适用于希望深入理解VESC源码和非线性磁链观测器的工作机制,掌握STM32F4平台上FOC算法实现的人群。目标是在实际项目中应用这些技术,提高电机控制系统的性能。 其他说明:文中提供了大量实用的代码片段和调试技巧,帮助读者更好地理解和解决问题。此外,作者还分享了一些个人经验和心得,增加了文章的趣味性和实用性。

    Quectel-LTE&5G-Windows-USB-Driver-V2.2.6-beta-20201230

    移远EC20 Windows驱动 操作系统 - 桌面系统 - 移远EC20 Windows驱动

    检证资料jianzhen.ppt

    检证资料jianzhen.ppt

    ### 【嵌入式开发】基于Qt的ATK-DLRK3568实战指南:从入门到项目实战题:嵌

    内容概要:本文档《ATK-DLRK3568嵌入式Qt开发实战V1.2》是正点原子出品的一份面向初学者的嵌入式Qt开发指南,主要内容涵盖嵌入式Linux环境下Qt的安装配置、C++基础、Qt基础、多线程编程、网络编程、多媒体开发、数据库操作以及项目实战案例。文档从最简单的“Hello World”程序开始,逐步引导读者熟悉Qt开发环境的搭建、常用控件的使用、信号与槽机制、UI设计、数据处理等关键技术点。此外,文档还提供了详细的项目实战案例,如车牌识别系统的开发,帮助读者将理论知识应用于实际项目中。 适合人群:具备一定Linux和C++基础,希望快速入门嵌入式Qt开发的初学者或有一定开发经验的研发人员。 使用场景及目标: 1. **环境搭建**:学习如何在Ubuntu环境下搭建Qt开发环境,包括安装必要的工具和库。 2. **基础知识**:掌握C++面向对象编程、Qt基础控件的使用、信号与槽机制等核心概念。 3. **高级功能**:理解多线程编程、网络通信、多媒体处理、数据库操作等高级功能的实现方法。 4. **项目实战**:通过具体的项目案例(如车牌识别系统),巩固

    tcl-tclxml-devel-3.2-26.el8.x64-86.rpm.tar.gz

    1、文件说明: Centos8操作系统tcl-tclxml-devel-3.2-26.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf tcl-tclxml-devel-3.2-26.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm

    C盘清理bat脚本自动清理C盘垃圾文件

    C盘清理bat脚本自动清理C盘垃圾文件

    桶排.txt

    桶排

    基于混沌系统的图像加密算法:循环移位扰乱与水平垂直扩散的应用及性能评估

    内容概要:本文详细介绍了利用混沌系统进行图像加密的方法,重点探讨了Logistic映射生成混沌序列用于图像加密的具体实现。首先,通过生成混沌序列并对其进行预热处理,确保序列的随机性和稳定性。然后,采用循环移位扰乱方法对图像像素进行重新排列,使图像像素位置发生改变。接着,通过水平和垂直扩散步骤进一步打乱像素之间的关联性,增强了加密效果。文中还展示了如何通过直方图、信息熵和相关系数等指标评估加密效果,验证了该方法的有效性。 适合人群:对图像加密技术和混沌系统感兴趣的科研人员、信息安全领域的开发者和技术爱好者。 使用场景及目标:适用于研究和开发高效的图像加密算法,特别是在需要高安全性的应用场景中,如军事通信、隐私保护等领域。目标是提供一种基于混沌系统的高效、安全的图像加密解决方案。 其他说明:文中提供了详细的Python代码实现,帮助读者更好地理解和实践该加密方法。同时,强调了在实际应用中需要注意的一些关键点,如参数选择和优化,以确保最佳的加密效果。

    基于EEMD奇异值熵的滚动轴承故障诊断方法研究

    基于EEMD奇异值熵的滚动轴承故障诊断方法研究

    【数据结构与算法】分块查找算法实现:有序分块数据快速检索方法研究

    内容概要:本文档介绍了分块查找的基本思想及其具体实现方法。分块查找的核心在于将一个数据集划分为若干个块,块内部元素可以无序排列,但块间元素必须保持有序(对于非递减序列,后一块的所有元素均大于前一块)。文档通过C#语言实现了分块查找算法,定义了IndexBlock结构体用于存储每个块的最大值、起始位置和结束位置,并展示了如何初始化分块以及执行具体的查找操作。最后通过一个简单的例子演示了分块查找的应用,当查找成功时返回元素在数组中的索引,否则返回-1表示查找失败。; 适合人群:计算机科学专业学生或有一定编程基础的技术人员。; 使用场景及目标:①理解分块查找算法的工作原理;②掌握利用C#实现分块查找的具体步骤;③学习如何根据实际需求选择合适的查找算法以提高效率。; 其他说明:此文档不仅提供了理论性的概念解释,还结合了实际代码示例帮助读者更好地理解分块查找算法,建议读者在阅读过程中尝试运行代码并理解每一部分的功能。

Global site tag (gtag.js) - Google Analytics