- 浏览: 495693 次
- 性别:
- 来自: xiamen
-
文章分类
最新评论
-
陈乐鹏:
你这个下载要怎么玩?我这里老提示未安装!
[转]使用ScriptX控件进行Web打印总结 -
zqb666kkk:
博主有示例代码吗
cxf ws-security 加密和签名的实现 -
mclin0704:
你好,请问WSDL2Java 可以用java实现吗?
Java2WSDL之java实现 -
hubiao0629:
楼主,这个文件会有不兼容的问题把。
mysql5忘记密码后的处理方法 -
zhaoyubetter:
OK,可以试试!多谢楼主
后台管理界面收集
问题凸现
年关到了,商家忙着促销,网站忙着推广,阿里软件的服务集成平台也面临第一次多方大规模的压力考验。根据该平台5.3版本的压力测试结果,我们估算了一下现有的推广会带来的压力,基本上确定了服务集成平台年底不需要扩容。SA(System Administrator,系统管理员)为了保险起见还是通过请求方式来做定时的心跳检测,保证服务集成平台的可靠性。结果阿里旺旺推广开始的第一天,SA的报警短信就在几个忙时段不停地发告警,但是查看生产环境的服务器状况以及应用状况后看不出有什么问题,于是开始怀疑是否告警机制不是很合理。几日的访问记录统计报告看过以后,发现了几个问题,首先由于推广是在IM登录时段集中式的推广,因此高峰期比较集中,压力也很大,而告警发生的时刻也是那些时候;另外发现那些推广使用的API的处理时间比较长,同时还有些出现了问题,这几天除了服务集成平台告警以外,那些API服务器也在告警;因此可以看出问题应该是由于API提供商响应速度慢而拖累了服务集成平台的处理能力,监控机制在高峰情况下没有得到及时的响应,就认为是服务器已经处于无效状态。
其实这类问题在我们现在的应用体系架构中常常出现,原因是现在很少再有纯粹“封闭式”应用,对数据库的依赖,对存储的依赖,对第三方系统的依赖等等。这也 让我回忆到在前一阵子参加的安全会议中,腾迅的安全技术团队的负责人说安全现在最大的问题就在于合作的第三方的安全不受控而引发的安全潜在影响。Web应 用未尝不是,从最基本的事务处理要小粒度,不要在事务中包含第三方依赖,到心跳检测,容错方案的制定等,都已经让我们对这方面的问题有所注意。但是往往这 类问题不是局部设计可以看到的,如果没有一个总体架构设计者对于全局的把握、协调和防范,那么问题出现并且带来的影响将会很大。
从前对于服务集成平台的压力测试主要是在ISP服务“基本正常”的情况下做的,但是这次问题的暴露就要求我们在第三方依赖出现边界问题时,及时做出一些措施或者改进设计。
问题分析以及解决方案
问题原因:
- Http请求处理的阻塞方式。
- 后端服务处理时间过长,服务质量不稳定。
- Web Container接受请求线程资源有限。
解决方案:
- 改阻塞方式为非阻塞方式来处理请求。
- 设置后端超时时间,主动断开连接,回收资源。
- 修改容器配置,增加线程池大小以及等待队列长度。
解决方案一是最难做到的,后面的篇幅将描述对于这方面技术的探索。
解决方案二比较容易,允许各个ISP设置自己API容许的最大超时时间。
解决方案三Tomcat和JBoss在Connector中有两个参数配置(maxThreads和acceptCount)可以做调整。
第一个方案其实和JDK 1.5支持的NIO是一种想法,只是我们在Socket中都已经采用过了,而在Http请求处理中因为要依赖于Web Container开发商的实现,所以至今还没有被广泛应用,不过在开源社区已经有用Mina实现的Http协议处理的框架。需要注意的是,现在Web应 用对于Web请求高效处理的需求仅仅是很小的一方面,其实还有很多类似于安全、缓存、监控等等附加功能也占据着很重要的地位。
Servlet 3规范经过快一年的推广,已经被各大Web Container厂商所接受,Tomcat 6、JBoss 5、Jetty 7都宣称自己对Servlet 3作了较好的支持,而在Servlet 3中最广为关注的一个特性就是异步服务处理Servlet(Async Servlet),这点也是解决我目前面临问题的最好手段。
Servlet 3 与服务异步处理
Servlet 3主要的新特性分成四部分:内嵌式的使用模式、Annotation的支持、Async Servlet的支持和安全提升。内嵌式的使用很早就在Jetty中被实现,也成为Jetty的优势之一,Annotation也只能说是锦上添花的部 分,而安全暂时没有怎么用到,所以最关心的还是Async Servlet部分。Async Servlet到底是什么样的概念,这里就大致描述一下在Servlet 3规范中对它的介绍:
- 支持 Comet(彗星)。最早期的Http请求就是无状态的请求和响应,所有的数据一次性在请求后返回给客户端由客户端渲染。后来发展到AJAX,页面的请求 和渲染由全局变成了局部。而Comet适合事件驱动的Web应用和对交互性和实时性要求很强的应用,通过建立客户端和服务端的长连接通道,在一次请求后可 以主动推送服务端数据的变更情况到客户端。长连接建立的策略有两种:Http Streaming和Http Long Polling。前者客户端打开一个单一的与服务器端的 HTTP 持久连接。服务器通过此连接把数据发送过来,客户端对它们进行增量处理。后者由客户端向服务器端发出请求并打开一个连接。这个连接只有在收到服务器端的数 据之后才会关闭。服务器端发送完数据之后,就立即关闭连接。客户端则马上再打开一个新的连接,等待下一次的数据。
- 支持 Suspending a request。通过在ServletRequest中增加suspend,resume,complete等,其将Http请求处理的block模式转 变成为not block模式,同时支持对于状态的查询(suspend,resume,timeout)。
- 请求处理过程中支持事件机制。响应也支持状态查询。
图 异步服务请求基本流程
现实中的异步服务处理
Tomcat 的异步服务处理
这里使用的是Tomcat 6.0.14版本。在Tomcat中对于异步处理描述在Advanced IO中作了说明,主要分成两部分:Comet的支持和异步输出。
Comet的支持作用分成两部分:请求读数据的非阻塞,响应处理的异步执行。前者可以防止在大流量数据上传过程中,信道空闲等待的资源浪费,后者用 于在处理请求时,依赖于第三方或者本身处理比较耗时的情况下,悬挂起请求处理线程,提高请求处理能力,完成处理后异步输出结果。
Servlet不再是原来对于几个标准的Http请求类型的方法实现,而是对于事件响应的处理。Comet定义了4个基础的事件:
- EventType.BEGIN:客户端建立起连接时激发的事件,可以用于资源初始化。
- EventType.READ:有数据可以被读入的事件。(熟悉NIO的事件模式应该可以了解)
- EventType.END:请求处理结束时激发的事件,可以用于资源清理。
- EventType.ERROR:当请求处理出现问题时激发的事件。(IO异常,超时等)
还有一些子事件类型,例如超时就属于ERROR的子事件类型,可以在事件处理中更加精确地定位事件类型。
必需的配置:在server.xml中配置如下(红色部分):
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
实际代码范例如下:
//CometProcessor接口必需被实现,一旦实现以后,则该Servlet在配置好以后不会再调用service,get,post //等方法的实现。 public class SIPCometTomcatServlet extends HttpServlet implements CometProcessor { @Override //事件处理响应方法实现 public void event(CometEvent event) throws IOException, ServletException { if (event.getEventType() == CometEvent.EventType.BEGIN) { //设置事件超时时间 event.setTimeout(10 * 1000); //另起线程处理后台工作,异步返回结果,事件响应将不等待后台处理直接返回 new Handler(event.getHttpServletRequest(),event.getHttpServletResponse()).start(); } else if (event.getEventType() == CometEvent.EventType.ERROR) { //结束事件,回收request,response资源 event.close(); } else if (event.getEventType() == CometEvent.EventType.END) { event.close(); } } //另起一个线程异步处理请求。 class Handler extends java.lang.Thread { private HttpServletResponse response; private HttpServletRequest request; public Handler(HttpServletRequest request,HttpServletResponse response) { this.response = response; this.request = request; } @Override public void run() { try { String id; id = request.getParameter("id"); if (id == null) id = "no id"; Thread.sleep(5000); PrintWriter pw = response.getWriter(); pw.write(id); pw.flush(); } catch (Exception e) { e.printStackTrace(); } } } }
使用过程中的一些总结:
- 事件响应框架将服务的请求由完整的一次服务处理切割成为细粒度的多事件处理,为请求多阶段并行处理提供了框架基础。
- Event对象在事件处理方法结束后就被回收了,但是request和response在事件处理完以后还可以继续使用,因此可以看出原来的阻塞式的方式已经可以通过事件的切分成为非阻塞的方式。
- 没 有提供Servlet 3中描述的suspend,resume,complete方法,无法主动控制request的异步处理。上面的代码可以看出我只使用了Begin方法启 动了一个线程,但是由于无法主动地结束请求,因此在向客户端返回数据以后还要等到超时才会结束这次会话。(看了Tomcat的代码,也想模仿close的 动作但是由于它使用了protected无法获取封装的request对象,因此无法释放资源)。当然也可以通过客户端配合,由客户端主动发起再次的数据 传输激发READ事件来结束会话。这么做对客户端的依赖比较强,同时也增加了客户端的处理复杂度。
- Tomcat支持异步输出:在APR或者NIO的模式下,Tomcat支持在系统压力增大的时候,支持异步回写大文件数据。
总体上来说实现了部分对于Comet的支持,但是没有对异步服务流程作很好的支持,无法在开发中使用(简单顺畅的使用)。
JBoss的异步服务处理
JBoss 4.2.3版本配置和使用与Tomcat 6类似,没有什么差异。
JBoss 5刚刚发布了RC版本,对于异步服务处理作了很大的改动,与Tomcat配置很不同,这里具体的说一下JBoss5中的异步服务使用。
JBoss 5已经将Tomcat中的Http11NioProtocol给删除了,取而代之的是JBoss自己servlet包内增加的一个HttpEventServlet接口,这个接口和Tomcat的CometProcessor类似。
首先,必须配置JBoss内置的Web容器为APR模式,也就是配置jbossweb.sar下面的server.xml中Connector 如下:
<Connector protocol="org.apache.coyote.http11.Http11AprProtocol" port="8080" address="${jboss.bind.address}" connectionTimeout="2000" redirectPort="8443" />
其次异步服务处理的Servlet必须实现HttpEventServlet接口,接口只有一个方法,就是事件处理方法:public void event(HttpEvent event)
。事件定义与Tomcat稍有不同,在BEGIN,ERROR,READ,END基础上增加了TIMEOUT,EOF,EVENT,WRITE四个事件,同时去掉了SubType。
- TIMEOUT其实是从原来的Error的SubType分离出来的,这个方法是在最后一次处理事件到当前时间超过设定的超时时间而被激发的,同时TIMEOUT被激发并不会关闭请求处理流程,必须显示调用事件的close方法才会结束会话。
- EOF事件将会在客户端主动断连的情况下被触发,就好比IE窗口在请求过程中被关闭就会被触发。
- EVENT事件在事件对象被调用resume的时候被激发,按照原意应该最好可以附带上一些自定义信息来做一些工作,但是我自己使用过程中还没有发现有什么好的办法可以在事件中附带信息到事件处理中。
- WRITE方法在调用isWriteReady方法时被激发,可以在网络出现问题或者繁忙的时候异步等待输出。
再则,JBoss的事件对象还支持几个方法来实现异步处理以及Comet机制,方法如下:
- close方法:表示一次请求处理的结束,会告知客户端没有数据返回了,同时也会激发END事件。
- setTimeout方法:设置连接超时时间(单位毫秒),计算超时是从最近的事件处理时间开始记录的,如果发生超时,则会激发TIMEOUT事件。
- isReadReady方法:如果连接有数据可以读取则返回true,如果这个方法返回false,servlet还试图去读去数据,则会阻塞。
- isWriteReady方法:如果返回true,则连接可以无阻塞的写出数据,如果返回false,servlet必须停止写数据,如果强制写出,则可能会发生IO错误或者会采用异步输出。当客户端的输出通道可用以后,则会激发write事件。
- suspend方法:suspend连接处理线程直到timeout发生或者resume被调用,实际上意味着servlet在suspend以后不再收到READ事件,READ事件将会在后台被不断的激发,除非被suspend.
- resume方法:会激发event事件,可以利用这个方法来结束异步处理。同时也可以激活因为suspend停止的read事件,同时也可以在resume以后再调用suspend方法。注意,这里未必是要求必须先suspend以后再resume。
- event,request,response 在事件响应过程中都可以被使用,但是线程不安全,同时在调用了close以后,request,response资源会被释放,可以通过对event对象 做同步来保证线程安全的问题。当READ事件和END事件都发生的时候,首先会完成READ事件,然后再去完成END。
具体的实现代码如下:
public class SIPCometJBossServlet extends HttpServlet implements HttpEventServlet { @Override public void event(HttpEvent event) throws IOException, ServletException { switch (event.getType()) { //will be called at the beginning of the processing of the connection case BEGIN: { event.setTimeout(100 * 1000);//设置超时时间 //event.suspend();//resume之前不必要一定使用suspend new Handler(event).start(); break; } //Error will be called by the container in the case //where an IO exception or a similar unrecoverable error occurs case ERROR: { event.close(); break; } //End may be called to end the processing of the request case END: { //event.close();//可以写也可以不写,因为进入这个方法也就是调用了close方法, //起码暂时还不知道有其他什么入口 break; } //This indicates that input data is available, //and that at least one read call can be made without blocking case READ: { break; } //The connection timed out according to the timeout value which has been set //,but the connection will not be closed unless the servlet uses the close method of the event case TIMEOUT: { event.close();//如果不主动关闭,Timeout方法会被循环调用,会话不会结束 break; } //The end of file of the input has been reached, and no further data is available case EOF: { event.close(); break; } //Event will be called by the container after the resume() method is called, //during which any operation can be performed, including closing the connection using the close() method. case EVENT: { event.close();//作为resume方法调用后主动释放连接资源的一种手段 break; } //Write is sent if the servlet is using the isWriteReady method case WRITE: { break; } } } class Handler extends java.lang.Thread { private HttpEvent event;//event的生命周期已经不限制于事件处理方法,因此随时可以关闭请求处理 private HttpServletResponse response; private HttpServletRequest request; public Handler(HttpEvent event) { this.event = event; this.response = event.getHttpServletResponse(); this.request = event.getHttpServletRequest(); } @Override public void run() { try { String id; id = request.getParameter("id"); if (id == null) id = "no id"; Thread.sleep(5000); //危险!!!其实event,response,request都是线程不安全的,因此此时可能response已经被释放, //需要同步住event的对象来操作,效率可能会降低 PrintWriter pw = response.getWriter(); pw.write(id); pw.flush(); event.resume();//发送结束调用resume方法,进入event方法,结束请求处理 } catch (Exception e) { e.printStackTrace(); } } } }
使用总结:
- 对于Servlet描述的异步服务处理有了较好的支持。
- 事件方法比较丰富,但是对于可定义事件支持不够完善。
- 对象并发控制需要开发者自己设计,权衡多线程处理的高效以及资源争夺的消耗。
下面对异步服务处理Servlet和普通Servlet做了一下简单的性能测试。
首先我原本想用ab来做一下简单的压力测试即可,但是ab好像对于apr模式下的测试支持的不好,一压就报错(apr_poll: The timeout specified has expired (70007)),也可能是自己不会用吧,因此就自己写了一段测试代码来做测试。
测试场景如下:
两类Servlet都可以设置处理时Hold的时间,来达到消耗连接数的目的。测试客户端可以设置并发多少用户,每个用户发起多少次请求。下表就是测试的结果:
这里设置的是Servlet都hold1秒钟,APR启动时配置的最大连接数为默认的200个。
客户端设置 | 普通Servlet总耗时(ms) | 异步Servlet总耗时(ms) | 普通Servlet单个线程耗时(ms) | 异步Servlet单个线程耗时(ms) |
100并发线程,每个线程执行1次请求 | 263866 | 274430 | 2638 | 2744 |
300并发线程,每个线程执行1次请求 | 550718 | 617082 | 1835 | 2056 |
100并发线程,每个线程执行10次请求 | 1087747 | 1207920 | 10877 | 12079 |
300并发线程,每个线程执行10次请求 | retrying request,connect reject | 5193644 | retrying request,connect reject | 17312 |
从上表可以看出,就纯粹从处理效率来说,采用事件处理方式在线程切换过程中存在着一定的损失,但是就我们使用异步请求处理的本意来看,对于在高并发下对后端依赖无法避免的性能损耗情况下,异步请求解决了连接耗尽的问题。
最后再来看我在测试过程中用JProfiler来截取的一些线程创建和使用状况:
上图是最初的线程创建情况,还没有任何请求被发送到服务端,因此线程池也没有开任何一个连接。
这是普通的Servlet在压力测试下的线程状况,线程就开到了200最大值,图中由于程序来Hold请求处理线程出现了红色阻塞和黄色等待,同时客户端已经开始出现拒绝连接的错误。下图就是错误的截图:
上图是异步服务处理Servlet在压力测试开始的情况,可以发现它的http线程还是200,但是其他事件处理线程在不断增长。下图已经增长到了 3000多个线程。(这里需要注意的就是这种异步处理资源申请没有设置上限,因此对于资源消耗来说也是比较大的,同时要防范攻击性请求造成服务端垮掉)。
结语
多线程、分布式计算、Erlang等这些编程方式、框架设计、语言其实都在实现这一个理论,那就是分而治之,多线程是站在单应用的角度去考虑解决方 案,分布式计算是在多机协作考虑解决方案,Erlang在单机多处理器的角度去考虑解决方案。但彼此的理念都是一样,将能够分割的不相关联的独立任务并行 处理,最终实现最优化的处理效果。
对于服务集成平台是否采用这种技术,我自己还没有最终的决定,首先就如上面的测试结果来看,有得还是有失的,其次这种并发异步处理带来的多线程维护 控制复杂度,也需要考虑到成本中。Jetty的开发者对于是否将异步服务处理Servlet来交由开发者控制而不是容器本身来控制表示出了反对意见,的 确,这样复杂的控制交给开发者来处理会增加开发者的学习成本以及维护成本。
作者介绍: 岑文初,就职于阿里软件公司研发中心平台一部,任架构师。当前主要工作涉及阿里软件开发平台服务框架(ASF)设计与实现,服务集成平台(SIP)设计与实现。没有什么擅长或者精通,工作到现在唯一提升的就是学习能力和速度。个人Blog为:http://blog.csdn.net/cenwenchu79 。
转载:InfoQ中文站 备份一个。
发表评论
-
Mac 安装maven
2017-03-08 23:05 478Mac OS X 安装Maven: 下载 Maven ... -
MAC 安装eclipse svn 插件
2017-03-08 22:48 659参考此链接: http://www.cnblogs.com ... -
tomcat 单机多实例
2015-07-08 09:06 855tomcat 部署单机多实例,实现每个实例都是跟 ... -
java 分块上传
2014-05-30 14:56 1463java 分块下载 java多线程分块上传并 ... -
bat class to java Jad反编译
2013-12-04 14:58 1204反编译所使用的工具是jad.exe 有时候需要批量 ... -
ant svn 自动更新和发布
2012-05-23 16:42 2356团队管理中,当项目非常多,而且发布频繁,手动发布往往非常繁琐, ... -
DatabaseMetaData getExportedKey() 无法获取信息
2012-03-14 17:26 1198在jdbc DatabaseMetaData.getExpo ... -
Column 'IS_AUTOINCREMENT' not found
2012-03-14 10:41 2478java.sql.SQLException: Column ' ... -
java 递归加减法
2012-01-12 17:30 1617有时候设计到list map 做交集,并集等操作。 可以参考 ... -
java 发送mail
2011-12-06 09:19 1531java 发送mail,很久之前整过,没做记录,这次整理下做个 ... -
java ant 压缩与解压缩
2011-09-15 16:05 2446以下本文来自: http://blog.csdn.net/l ... -
Java源码中的发现:快速判断一个int值是几位数
2011-07-22 15:57 4034判断一个int值是几位数,要是我自己实现,估计又会想到除法和模 ... -
Weblogic 部署SSL
2011-07-15 16:14 943weblogic 部署SSL 整理网路上的 一部分由 ... -
CXF客户端配置请求超时限制
2011-07-13 17:14 5134在用cxf 开发webservice应用时,客户端老报 ... -
Weblogic的基础优化!
2011-07-04 16:43 1287由于项目需要,最近研究了一下系统优化。 系统性能优化是系 ... -
判断偶数几种方法性能
2011-06-24 17:06 1358判断一个数是否偶数,在编程中经常用的,大部分人都用的是 ... -
java读取文件夹下的所有文件夹和文件
2011-05-18 10:07 1432import java.io.FileNotFoundExce ... -
ThreadLocal的使用场景
2011-04-11 17:24 1108在Java的多线程编程中,为保证多个线程对共享变量的安全访问, ... -
Java 进制之间互相转换
2011-03-30 13:34 1284public static void main(String[ ... -
B/S架构下applet,JNI实现对客户端硬件的读取
2011-03-26 10:20 1530昨天整个Applet 调用JNI 实现读取指纹的Demo,郁闷 ...
相关推荐
1、文件内容:ibus-table-chinese-erbi-1.4.6-3.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ibus-table-chinese-erbi-1.4.6-3.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊
选择Java后台技术和MySQL数据库,在前台界面为提升用户体验,使用Jquery、Ajax、CSS等技术进行布局。 系统包括两类用户:学生、管理员。 学生用户只要实现了前台信息的查看,打开首页,查看网站介绍、自习室信息、在线留言、轮播图信息公告等,通过点击首页的菜单跳转到对应的功能页面菜单,包括网站首页、自习室信息、注册登录、个人中心、后台登录。 学生用户通过账户账号登录,登录后具有所有的操作权限,如果没有登录,不能在线预约。学生用户退出系统将注销个人的登录信息。 管理员通过后台的登录页面,选择管理员权限后进行登录,管理员的权限包括轮播公告管理、老师学生信息管理和信息审核管理,管理员管理后点击退出,注销登录信息。 管理员用户具有在线交流的管理,自习室信息管理、自习室预约管理。 在线交流是对前台用户留言内容进行管理,删除留言信息,查看留言信息。
面向基层就业个性化大学生服务平台(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计 【功能需求】 面向基层就业个性化大学生服务平台(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计 面向基层就业个性化大学生服务平台中的管理员角色主要负责了如下功能操作。 (1)职业分类管理功能需求:对职业进行划分分类管理等。 (2)用户管理功能需求:对用户信息进行维护管理等。 (3)职业信息管理功能需求:对职业信息进行发布等。 (4)问卷信息管理功能需求:可以发布学生的问卷调查操作。 (5)个性化测试管理功能需求:可以发布个性化测试试题。 (6)试题管理功能需求:对测试试题进行增删改查操作。 (7)社区交流管理功能需求:对用户的交流论坛信息进行维护管理。 面向基层就业个性化大学生服务平台中的用户角色主要负责了如下功能操作。 (1)注册登录功能需求:没有账号的用户,可以输入账号,密码,昵称,邮箱等信息进行注册操作,注册后可以输入账号和密码进行登录。 (2)职业信息功能需求:用户可以对职业信息进行查看。 (3)问卷信息功能需求:可以在线进行问卷调查答卷操作。 (4)社区交流功能需求:可以在线进行社区交流。 (5)个性化测试功能需求:可以在线进行个性化测试。 (6)公告资讯功能需求:可以查看浏览系统发布的公告资讯信息。 【环境需要】 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.数据库:MySql 5.7/8.0等版本均可; 【购买须知】 本源码项目经过严格的调试,项目已确保无误,可直接用于课程实训或毕业设计提交。里面都有配套的运行环境软件,讲解视频,部署视频教程,一应俱全,可以自己按照教程导入运行。附有论文参考,使学习者能够快速掌握系统设计和实现的核心技术。
三菱Fx3u程序:自动检测包装机电机控制模板,PLC脉冲与伺服定位,手自动切换功能,三菱Fx3u程序:自动检测包装机电机控制模板——涵盖伺服定位与手自动切换功能,三菱Fx3u程序,自动检测包装机。 该程序六个电机,plc本体脉冲控制3个轴,3个1pg控制。 程序内包括伺服定位,手自动切,功能快的使用,可作为模板程序,很适合新手。 ,三菱Fx3u程序; 自动检测包装机; 六个电机; PLC脉冲控制; 伺服定位; 手自动切换; 功能快捷键; 模板程序。,三菱Fx3u PLC控制下的自动包装机程序:六电机伺服定位与手自动切换模板程序
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
计及信息间隙决策与多能转换的综合能源系统优化调度模型:实现碳经济最大化与源荷不确定性考量,基于信息间隙决策与多能转换的综合能源系统优化调度模型:源荷不确定性下的高效碳经济调度策略,计及信息间隙决策及多能转的综合能源系统优化调度 本代码构建了含风电、光伏、光热发电系统、燃气轮机、燃气锅炉、电锅炉、储气、储电、储碳、碳捕集装置的综合能源系统优化调度模型,并考虑P2G装置与碳捕集装置联合运行,从而实现碳经济的最大化,最重要的是本文引入了信息间隙决策理论考虑了源荷的不确定性(本代码的重点)与店铺的47代码形成鲜明的对比,注意擦亮眼睛,认准原创,该代码非常适合修改创新,,提供相关的模型资料 ,计及信息间隙决策; 综合能源系统; 优化调度; 多能转换; 碳经济最大化; 风电; 光伏; 燃气轮机; 储气; 储电; 储碳; 碳捕集装置; P2G装置联合运行; 模型资料,综合能源系统优化调度模型:基于信息间隙决策和多能转换的原创方案
IPG QCW激光模块电源驱动电路设计与实现:包含安全回路、紧急放电回路及光纤互锁功能的多版本原理图解析,IPG QCW激光模块电源驱动电路设计与实现:含安全回路、紧急放电及光纤互锁等多重保护功能的原理图解析,IPG QCW激光模块电源驱动电路, 包含安全回路,紧急放电回路,光纤互锁回路等, 元件参数请根据实际设计适当调整,此电路仅供参考,不提供pcb文件 原理图提供PDF和KICAD两个版本。 ,IPG激光模块; QCW激光电源驱动; 安全回路; 紧急放电回路; 光纤互锁回路; 原理图PDF和KICAD版本。,IPG激光模块电源驱动电路图解:含安全与紧急放电回路
基于LSSVM的短期电力负荷预测模型及其性能评估:结果揭露精确度与误差分析,LSSVM在短期电力负荷预测中的结果分析:基于均方根误差、平均绝对误差及平均相对百分误差的评估。,LSSVM最小二乘支持向量机做短期电力负荷预测。 结果分析 均方根误差(RMSE):0.79172 平均绝对误差(MAE):0.4871 平均相对百分误差(MAPE):13.079% ,LSSVM(最小二乘支持向量机);短期电力负荷预测;均方根误差(RMSE);平均绝对误差(MAE);平均相对百分误差(MAPE),LSSVM在电力负荷短期预测中的应用及性能分析
1、文件内容:libmtp-examples-1.1.14-1.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/libmtp-examples-1.1.14-1.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊
资源内项目源码是均来自个人的课程设计、毕业设计或者具体项目,代码都测试ok,都是运行成功后才上传资源,答辩评审绝对信服的,拿来就能用。放心下载使用!源码、说明、论文、数据集一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 4、如有侵权请私信博主,感谢支持
2023-04-06-项目笔记-第四百一十六阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.414局变量的作用域_414- 2025-02-21
MINIST数据集和春风机器学习框架
1、文件内容:ibus-table-chinese-wu-1.4.6-3.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ibus-table-chinese-wu-1.4.6-3.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊
宿舍管理系统(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计 【功能需求】 系统拥有管理员和学生两个角色,主要具备系统首页、个人中心、学生管理、宿舍信息管理、宿舍分配管理、水电费管理、进入宿舍管理、出入宿舍管理、维修信息管理、卫生信息管理、考勤信息管理、留言板、交流论坛、系统管理等功能模块。 【环境需要】 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.数据库:MySql 5.7/8.0等版本均可; 【购买须知】 本源码项目经过严格的调试,项目已确保无误,可直接用于课程实训或毕业设计提交。里面都有配套的运行环境软件,讲解视频,部署视频教程,一应俱全,可以自己按照教程导入运行。附有论文参考,使学习者能够快速掌握系统设计和实现的核心技术。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
人凤飞飞凤飞飞是粉色丰富
2024蓝桥杯嵌入式学习资料
image_download_1740129191509.jpg
基于Multisim仿真的带优先病房呼叫系统设计(仿真图) 设计一个病房呼叫系统。 功能 (1)当有病人紧急呼叫时,产生声,光提示,并显示病人的编号; (2)根据病人的病情设计优先级别,当有多人呼叫时,病情严重者优先; (3)医护人员处理完当前最高级别的呼叫后,系统按优先级别显示其他呼叫病人的病号。
基于STM32F103的3.6kW全桥逆变器资料:并网充电放电、智能切换与全方位保护方案,基于STM32F103的3.6kW全桥逆变器资料:并网充电放电、智能控制与全方位保护方案,逆变器光伏逆变器,3.6kw储能逆变器全套资料 STM32储能逆变器 BOOST 全桥 基于STM32F103设计,具有并网充电、放电;并网离网自动切;485通讯,在线升级;风扇智能控制,提供过流、过压、短路、过温等全方位保护。 基于arm的方案区别于dsp。 有PCB、原理图及代码ad文件。 ,逆变器; 储能逆变器; STM32F103; 3.6kw; 485通讯; 全方位保护; 智能控制; 方案区别; PCB文件; 原理图文件; ad文件。,基于STM32F103的3.6kw储能逆变器:全方位保护与智能控制