http://www.cnblogs.com/hoojo/archive/2011/03/30/1999563.html
http://www.cnblogs.com/hoojo/archive/2012/07/13/2590593.html
如果你不了解restful风格的WebService,你可以参考:
http://www.oracle.com/technetwork/articles/javase/index-137171.html
SpringMVC对RESTful的支持:
http://www.cnblogs.com/hoojo/archive/2011/06/10/2077422.html
使用 Jersey框架,搭建RESTful WebService(这个也比较简单)
http://www.ibm.com/developerworks/cn/web/wa-aj-tomcat/
官方文档:http://jersey.java.net/nonav/documentation/latest/user-guide.html#d4e8
其中,比较常用的RESTful框架就有Jersey、Spring REST、CXF RESTful,这些都可以很好的整合Spring框架,发布也相当的简单。且简单、易用、易上手,文档也比较丰富。
System:Windows
JavaEE Server:tomcat6
JavaSDK: jdk6+
IDE:eclipse、MyEclipse 6.6
开发依赖库:
JDK6、 JavaEE5、CXF-2.3.3、Spring 3.0.4
下面我们就接着http://www.cnblogs.com/hoojo/archive/2011/03/30/1999563.html这篇文章,开始我们CXF RESTful WebService的旅程,enjoy~!^_*
准备工作
首先,你需要添加相关的jar包
其中,jsr331-api-1.1.1.jar是必须的,利用CXF发布REST服务得用到它,在cxf的lib库中可以找到这个jar。
下载地址:http://www.apache.org/dyn/closer.cgi?path=/cxf/2.3.11/apache-cxf-2.3.11.zip
其它的jar包都是非必须的!
- package com.hoo.entity;
- import java.util.Map;
- import javax.xml.bind.annotation.XmlRootElement;
- /**
- * <b>function:</b> MapBean 封装Map集合元素
- * @author hoojo
- * @createDate 2012-7-20 下午01:22:31
- * @file MapBean.java
- * @package com.hoo.entity
- * @project CXFWebService
- * @blog http://blog.csdn.net/IBM_hoojo
- * @email hoojo_@126.com
- * @version 1.0
- */
- @XmlRootElement
- public class MapBean {
- private Map<String, User> map;
- //@XmlElement(type = User.class)
- public Map<String, User> getMap() {
- return map;
- }
- public void setMap(Map<String, User> map) {
- this.map = map;
- }
- }
- package com.hoo.entity;
- import java.util.HashMap;
- import java.util.List;
- import javax.xml.bind.annotation.XmlRootElement;
- /**
- * <b>function:</b> Users Entity
- * @author hoojo
- * @createDate 2011-3-18 上午09:27:31
- * @file Users.java
- * @package com.hoo.entity
- * @project CXFWebService
- * @blog http://blog.csdn.net/IBM_hoojo
- * @email hoojo_@126.com
- * @version 1.0
- */
- @XmlRootElement(name = "UserInfos")
- public class Users {
- private List<User> users;
- private User[] userArr;
- private HashMap<String, User> maps;
- // getter/setter
- }
- package com.hoo.entity;
- import java.io.Serializable;
- import javax.xml.bind.annotation.XmlRootElement;
- /**
- * <b>function:</b>User Entity
- * @author hoojo
- * @createDate Dec 16, 2010 10:20:02 PM
- * @file User.java
- * @package com.hoo.entity
- * @project AxisWebService
- * @blog http://blog.csdn.net/IBM_hoojo
- * @email hoojo_@126.com
- * @version 1.0
- */
- @XmlRootElement(name = "UserInfo")
- public class User implements Serializable {
- private static final long serialVersionUID = 677484458789332877L;
- private int id;
- private String name;
- private String email;
- private String address;
- //getter/setter
- @Override
- public String toString() {
- return this.id + "#" + this.name + "#" + this.email + "#" + this.address;
- }
- }
一、定义你的WebService的接口RESTSample.java,代码如下
- package com.hoo.service;
- import java.io.IOException;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.ws.rs.Consumes;
- import javax.ws.rs.DELETE;
- import javax.ws.rs.GET;
- import javax.ws.rs.POST;
- import javax.ws.rs.PUT;
- import javax.ws.rs.Path;
- import javax.ws.rs.PathParam;
- import javax.ws.rs.Produces;
- import javax.ws.rs.core.Context;
- import javax.ws.rs.core.MediaType;
- import com.hoo.entity.MapBean;
- import com.hoo.entity.User;
- import com.hoo.entity.Users;
- /*
- 注释(Annotation):在 javax.ws.rs.* 中定义,是 JAX-RS (JSR 311) 规范的一部分。
- @Path:定义资源基 URI。由上下文根和主机名组成,资源标识符类似于 http://localhost:8080/RESTful/rest/hello。
- @GET:这意味着以下方法可以响应 HTTP GET 方法。
- @Produces:以纯文本方式定义响应内容 MIME 类型。
- @Context: 使用该注释注入上下文对象,比如 Request、Response、UriInfo、ServletContext 等。
- @Path("{contact}"):这是 @Path 注释,与根路径 “/contacts” 结合形成子资源的 URI。
- @PathParam("contact"):该注释将参数注入方法参数的路径,在本例中就是联系人 id。其他可用的注释有 @FormParam、@QueryParam 等。
- @Produces:响应支持多个 MIME 类型。在本例和上一个示例中,APPLICATION/XML 将是默认的 MIME 类型。
- */
- /**
- * <b>function:</b> CXF RESTful风格WebService
- * @author hoojo
- * @createDate 2012-7-20 下午01:23:04
- * @file RESTSampleSource.java
- * @package com.hoo.service
- * @project CXFWebService
- * @blog http://blog.csdn.net/IBM_hoojo
- * @email hoojo_@126.com
- * @version 1.0
- */
- @Path(value = "/sample")
- public interface RESTSample {
- @GET
- @Produces(MediaType.TEXT_PLAIN)
- public String doGet();
- @GET
- @Produces(MediaType.TEXT_PLAIN)
- @Path("/request/{param}")
- public String doRequest(@PathParam("param") String param,
- @Context HttpServletRequest servletRequest, @Context HttpServletResponse servletResponse);
- @GET
- @Path("/bean/{id}")
- @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- public User getBean(@PathParam("id") int id);
- @GET
- @Path("/list")
- @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
- public Users getList();
- @GET
- @Path("/map")
- @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- public MapBean getMap();
- /*
- @Consumes:声明该方法使用 HTML FORM。
- @FormParam:注入该方法的 HTML 属性确定的表单输入。
- @Response.created(uri).build(): 构建新的 URI 用于新创建的联系人(/contacts/{id})并设置响应代码(201/created)。
- 您可以使用 http://localhost:8080/Jersey/rest/contacts/<id> 访问新联系人
- */
- @POST
- @Path("/postData")
- public User postData(User user) throws IOException;
- @PUT
- @Path("/putData/{id}")
- @Consumes(MediaType.APPLICATION_XML)
- public User putData(@PathParam("id") int id, User user);
- @DELETE
- @Path("/removeData/{id}")
- public void deleteData(@PathParam("id") int id);
- }
二、RESTSample接口的实现,这里我们只是简单的实现下,并不是涉及实际的具体业务
- package com.hoo.service;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.ws.rs.DELETE;
- import javax.ws.rs.GET;
- import javax.ws.rs.POST;
- import javax.ws.rs.PUT;
- import javax.ws.rs.Path;
- import javax.ws.rs.PathParam;
- import javax.ws.rs.Produces;
- import javax.ws.rs.core.Context;
- import javax.ws.rs.core.MediaType;
- import javax.ws.rs.core.Request;
- import javax.ws.rs.core.UriInfo;
- import com.hoo.entity.MapBean;
- import com.hoo.entity.User;
- import com.hoo.entity.Users;
- /*
- 注释(Annotation):在 javax.ws.rs.* 中定义,是 JAX-RS (JSR 311) 规范的一部分。
- @Path:定义资源基 URI。由上下文根和主机名组成,资源标识符类似于 http://localhost:8080/RESTful/rest/hello。
- @GET:这意味着以下方法可以响应 HTTP GET 方法。
- @Produces:以纯文本方式定义响应内容 MIME 类型。
- @Context: 使用该注释注入上下文对象,比如 Request、Response、UriInfo、ServletContext 等。
- @Path("{contact}"):这是 @Path 注释,与根路径 “/contacts” 结合形成子资源的 URI。
- @PathParam("contact"):该注释将参数注入方法参数的路径,在本例中就是联系人 id。其他可用的注释有 @FormParam、@QueryParam 等。
- @Produces:响应支持多个 MIME 类型。在本例和上一个示例中,APPLICATION/XML 将是默认的 MIME 类型。
- */
- /**
- * <b>function:</b> CXF RESTful风格WebService
- * @author hoojo
- * @createDate 2012-7-20 下午01:23:04
- * @file RESTSampleSource.java
- * @package com.hoo.service
- * @project CXFWebService
- * @blog http://blog.csdn.net/IBM_hoojo
- * @email hoojo_@126.com
- * @version 1.0
- */
- @Path(value = "/sample")
- public class RESTSampleSource implements RESTSample {
- @Context
- private UriInfo uriInfo;
- @Context
- private Request request;
- @GET
- @Produces(MediaType.TEXT_PLAIN)
- public String doGet() {
- return "this is get rest request";
- }
- @GET
- @Produces(MediaType.TEXT_PLAIN)
- @Path("/request/{param}")
- public String doRequest(@PathParam("param") String param,
- @Context HttpServletRequest servletRequest, @Context HttpServletResponse servletResponse) {
- System.out.println(servletRequest);
- System.out.println(servletResponse);
- System.out.println(servletRequest.getParameter("param"));
- System.out.println(servletRequest.getContentType());
- System.out.println(servletResponse.getCharacterEncoding());
- System.out.println(servletResponse.getContentType());
- return "success";
- }
- @GET
- @Path("/bean/{id}")
- @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- public User getBean(@PathParam("id") int id) {
- System.out.println("####getBean#####");
- System.out.println("id:" + id);
- System.out.println("Method:" + request.getMethod());
- System.out.println("uri:" + uriInfo.getPath());
- System.out.println(uriInfo.getPathParameters());
- User user = new User();
- user.setId(id);
- user.setName("JojO");
- return user;
- }
- @GET
- @Path("/list")
- @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
- public Users getList() {
- System.out.println("####getList#####");
- System.out.println("Method:" + request.getMethod());
- System.out.println("uri:" + uriInfo.getPath());
- System.out.println(uriInfo.getPathParameters());
- List<User> list = new ArrayList<User>();
- User user = null;
- for (int i = 0; i < 4;i ++) {
- user = new User();
- user.setId(i);
- user.setName("JojO-" + i);
- list.add(user);
- }
- Users users = new Users();
- users.setUsers(list);
- return users;
- }
- @GET
- @Path("/map")
- @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- public MapBean getMap() {
- System.out.println("####getMap#####");
- System.out.println("Method:" + request.getMethod());
- System.out.println("uri:" + uriInfo.getPath());
- System.out.println(uriInfo.getPathParameters());
- Map<String, User> map = new HashMap<String, User>();
- User user = null;
- for (int i = 0; i < 4;i ++) {
- user = new User();
- user.setId(i);
- user.setName("JojO-" + i);
- map.put("key-" + i, user);
- }
- MapBean bean = new MapBean();
- bean.setMap(map);
- return bean;
- }
- /*
- @Consumes:声明该方法使用 HTML FORM。
- @FormParam:注入该方法的 HTML 属性确定的表单输入。
- @Response.created(uri).build(): 构建新的 URI 用于新创建的联系人(/contacts/{id})并设置响应代码(201/created)。
- 您可以使用 http://localhost:8080/Jersey/rest/contacts/<id> 访问新联系人
- */
- @POST
- @Path("/postData")
- @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- public User postData(User user) throws IOException {
- System.out.println(user);
- user.setName("jojo##12321321");
- return user;
- }
- @PUT
- @Path("/putData/{id}")
- @Produces({ MediaType.APPLICATION_XML })
- public User putData(@PathParam("id") int id, User user) {
- System.out.println("#####putData#####");
- System.out.println(user);
- user.setId(id);
- user.setAddress("hoojo#gz");
- user.setEmail("hoojo_@126.com");
- user.setName("hoojo");
- System.out.println(user);
- return user;
- }
- @DELETE
- @Path("/removeData/{id}")
- public void deleteData(@PathParam("id") int id) {
- System.out.println("#######deleteData#######" + id);
- }
- }
三、配置我们的WebService,修改applicationContext-server.xml。这里主要是添加jaxrs标签的支持,修改头部文件如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:jaxws="http://cxf.apache.org/jaxws"
- xmlns:jaxrs="http://cxf.apache.org/jaxrs"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd
- http://cxf.apache.org/jaxws
- http://cxf.apache.org/schemas/jaxws.xsd
- http://cxf.apache.org/jaxrs
- http://cxf.apache.org/schemas/jaxrs.xsd">
特别注意上面加粗带下划线的部分,这是新增加的配置。我们发布restful WebService需要用到它。
然后在配置文件中添加如下配置
- <import resource="classpath:META-INF/cxf/cxf.xml"/>
- <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
- <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
- <bean id="restSample" class="com.hoo.service.RESTSampleSource"/>
- <!-- 这里的地址很重要,客户端需要通过这个地址来访问WebService -->
- <jaxrs:server id="restServiceContainer" address="/rest">
- <jaxrs:serviceBeans>
- <ref bean="restSample" />
- </jaxrs:serviceBeans>
- <jaxrs:extensionMappings>
- <entry key="json" value="application/json" />
- <entry key="xml" value="application/xml" />
- </jaxrs:extensionMappings>
- <jaxrs:languageMappings>
- <entry key="en" value="en-gb"/>
- </jaxrs:languageMappings>
- </jaxrs:server>
这样服务器端就完成了CXF RESTful WebService的发布,启动你的tomcat。然后在浏览器中服务地址:http://localhost:8000/CXFWebService/ (其实这里请求的是CXFServlet,你可以看看上一篇Spring整合CXF文章的web.xml的配置)
你就可以看到我们这里刚刚发布的RESTSample rest的WebService
你也可以看看里面的xml,也就是WebService的wsdl文件内容。我们找一个GET方式的WebService的方法,在浏览器中调用一下试试
http://localhost:8000/CXFWebService/rest/sample/bean/123
这个url对应到下面这个方法
- @GET
- @Path("/bean/{id}")
- @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- public User getBean(@PathParam("id") int id)
结果如下
一篇xml文档内容。
四、编写客户端代码,调用RESTful WebService
- package com.hoo.client;
- import java.io.IOException;
- import javax.ws.rs.core.MediaType;
- import org.apache.cxf.jaxrs.client.WebClient;
- import org.junit.After;
- import org.junit.Before;
- import org.junit.Test;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import com.hoo.entity.MapBean;
- import com.hoo.entity.User;
- import com.hoo.entity.Users;
- import com.hoo.service.RESTSample;
- /**
- * <b>function:</b> RESTful风格WebService
- * @author hoojo
- * @createDate 2012-7-20 下午03:31:03
- * @file RSETServiceClient.java
- * @package com.hoo.client
- * @project CXFWebService
- * @blog http://blog.csdn.net/IBM_hoojo
- * @email hoojo_@126.com
- * @version 1.0
- */
- public class RSETServiceClient {
- private static WebClient client;
- @Before
- public void init() {
- // 手动创建webClient对象,注意这里的地址是发布的那个/rest地址
- //String url = "http://localhost:8000/CXFWebService/rest/";
- //client = WebClient.create(url);
- // 从Spring Ioc容器中拿webClient对象
- ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-client.xml");
- client = ctx.getBean("webClient", WebClient.class);
- }
- @After
- public void destory(){
- }
- @Test
- public void testGet() {
- System.out.println(client.path("sample").accept(MediaType.TEXT_PLAIN).get(String.class));
- }
- @Test
- public void testRequest() {
- System.out.println(client.path("sample/request/234234").accept(MediaType.TEXT_PLAIN).get(String.class));
- }
- @Test
- public void testBean() {
- User user = client.path("sample/bean/{id}", 25).accept(MediaType.APPLICATION_XML).get(User.class);
- System.out.println(user);
- }
- @Test
- public void testList() {
- System.out.println(client.path("sample/list").accept(MediaType.APPLICATION_XML).get(Users.class).getUsers());
- }
- @Test
- public void testMap() {
- System.out.println(client.path("sample/map").accept(MediaType.APPLICATION_XML).get(MapBean.class).getMap());
- }
- @Test
- public void testDeleteData() {
- client.path("sample/removeData/23").delete();
- }
- @Test
- public void testPostData() {
- User user = new User();
- user.setId(21432134);
- user.setAddress("hoojo#gz");
- user.setEmail("hoojo_@126.com");
- user.setName("hoojo");
- System.out.println(client.path("sample/postData").accept(MediaType.APPLICATION_XML).post(user, User.class));
- }
- @Test
- public void testPutData() {
- User user = new User();
- user.setId(21432134);
- System.out.println(client.path("sample/putData/1").accept(MediaType.APPLICATION_XML).put(user).getEntity());
- }
- }
如果你喜欢用Spring的方式,还需要在applicationContext-client.xml中增加如下配置
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:jaxws="http://cxf.apache.org/jaxws"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd
- http://cxf.apache.org/jaxws
- http://cxf.apache.org/schemas/jaxws.xsd">
- <bean id="webClient" class="org.apache.cxf.jaxrs.client.WebClient" factory-method="create">
- <constructor-arg type="java.lang.String" value="http://localhost:8000/CXFWebService/rest/" />
- </bean>
- </beans>
这种是利用WebClient对象来调用WebService,还有一种方法也可以调用WebService,代码如下:
// 手动创建
- //RESTSample sample = JAXRSClientFactory.create("http://localhost:8000/CXFWebService/rest", RESTSample.class);
- // 从Spring Ioc容器中拿webClient对象
- ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-client.xml");
- RESTSample sample = ctx.getBean("restSampleBean", RESTSample.class);
- System.out.println(sample);
- System.out.println(sample.doGet());
- //System.out.println(sample.doRequest("haha", null, null));
- System.out.println(sample.getBean(22));
- System.out.println(sample.getList());
- System.out.println(sample.getMap().getMap());
- User user = new User();
- user.setId(21432134);
- user.setAddress("hoojo#gz");
- user.setEmail("hoojo_@126.com");
- user.setName("hoojo");
- System.out.println(sample.postData(user));
- System.out.println(sample.putData(111, user));
- sample.deleteData(2);
这种方式相对比WebClient要简单,直接使用接口中的方法即可。同样如果你要整合到Spring可以在applicationContext-client.xml中增加配置如下:
- <bean id="restSampleBean" class="org.apache.cxf.jaxrs.client.JAXRSClientFactory" factory-method="create">
- <constructor-arg type="java.lang.String" value="http://localhost:8000/CXFWebService/rest/" />
- <constructor-arg type="java.lang.Class" value="com.hoo.service.RESTSample" />
- </bean>
执行以上方法可以看到控制台打印结果如下:
org.apache.cxf.jaxrs.client.ClientProxyImpl@1cf7491
this is get rest request
22#JojO#null#null
com.hoo.entity.Users@16eb6bc
{key-0=0#JojO-0#null#null, key-1=1#JojO-1#null#null, key-2=2#JojO-2#null#null, key-3=3#JojO-3#null#null}
21432134#jojo##12321321#hoojo_@126.com#hoojo#gz
111#hoojo#hoojo_@126.com#hoojo#gz
server console
####getBean#####
id:22
Method:GET
uri:sample/bean/22
{id=[22]}
####getList#####
Method:GET
uri:sample/list
{}
####getMap#####
Method:GET
uri:sample/map
{}
21432134#hoojo#hoojo_@126.com#hoojo#gz
#####putData#####
21432134#hoojo#hoojo_@126.com#hoojo#gz
111#hoojo#hoojo_@126.com#hoojo#gz
#######deleteData#######2
就这样,整合restful WebService成功。
相关推荐
内容概要:本文详细介绍了基于MATLAB GUI界面和卷积神经网络(CNN)的模糊车牌识别系统。该系统旨在解决现实中车牌因模糊不清导致识别困难的问题。文中阐述了整个流程的关键步骤,包括图像的模糊还原、灰度化、阈值化、边缘检测、孔洞填充、形态学操作、滤波操作、车牌定位、字符分割以及最终的字符识别。通过使用维纳滤波或最小二乘法约束滤波进行模糊还原,再利用CNN的强大特征提取能力完成字符分类。此外,还特别强调了MATLAB GUI界面的设计,使得用户能直观便捷地操作整个系统。 适合人群:对图像处理和深度学习感兴趣的科研人员、高校学生及从事相关领域的工程师。 使用场景及目标:适用于交通管理、智能停车场等领域,用于提升车牌识别的准确性和效率,特别是在面对模糊车牌时的表现。 其他说明:文中提供了部分关键代码片段作为参考,并对实验结果进行了详细的分析,展示了系统在不同环境下的表现情况及其潜在的应用前景。
嵌入式八股文面试题库资料知识宝典-计算机专业试题.zip
嵌入式八股文面试题库资料知识宝典-C and C++ normal interview_3.zip
内容概要:本文深入探讨了一款额定功率为4kW的开关磁阻电机,详细介绍了其性能参数如额定功率、转速、效率、输出转矩和脉动率等。同时,文章还展示了利用RMxprt、Maxwell 2D和3D模型对该电机进行仿真的方法和技术,通过外电路分析进一步研究其电气性能和动态响应特性。最后,文章提供了基于RMxprt模型的MATLAB仿真代码示例,帮助读者理解电机的工作原理及其性能特点。 适合人群:从事电机设计、工业自动化领域的工程师和技术人员,尤其是对开关磁阻电机感兴趣的科研工作者。 使用场景及目标:适用于希望深入了解开关磁阻电机特性和建模技术的研究人员,在新产品开发或现有产品改进时作为参考资料。 其他说明:文中提供的代码示例仅用于演示目的,实际操作时需根据所用软件的具体情况进行适当修改。
少儿编程scratch项目源代码文件案例素材-剑客冲刺.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
内容概要:本文详细介绍了基于PID控制器的四象限直流电机速度驱动控制系统仿真模型及其永磁直流电机(PMDC)转速控制模型。首先阐述了PID控制器的工作原理,即通过对系统误差的比例、积分和微分运算来调整电机的驱动信号,从而实现转速的精确控制。接着讨论了如何利用PID控制器使有刷PMDC电机在四个象限中精确跟踪参考速度,并展示了仿真模型在应对快速负载扰动时的有效性和稳定性。最后,提供了Simulink仿真模型和详细的Word模型说明文档,帮助读者理解和调整PID控制器参数,以达到最佳控制效果。 适合人群:从事电力电子与电机控制领域的研究人员和技术人员,尤其是对四象限直流电机速度驱动控制系统感兴趣的读者。 使用场景及目标:适用于需要深入了解和掌握四象限直流电机速度驱动控制系统设计与实现的研究人员和技术人员。目标是在实际项目中能够运用PID控制器实现电机转速的精确控制,并提高系统的稳定性和抗干扰能力。 其他说明:文中引用了多篇相关领域的权威文献,确保了理论依据的可靠性和实用性。此外,提供的Simulink模型和Word文档有助于读者更好地理解和实践所介绍的内容。
嵌入式八股文面试题库资料知识宝典-2013年海康威视校园招聘嵌入式开发笔试题.zip
少儿编程scratch项目源代码文件案例素材-驾驶通关.zip
小区开放对周边道路通行能力影响的研究.pdf
内容概要:本文探讨了冷链物流车辆路径优化问题,特别是如何通过NSGA-2遗传算法和软硬时间窗策略来实现高效、环保和高客户满意度的路径规划。文中介绍了冷链物流的特点及其重要性,提出了软时间窗概念,允许一定的配送时间弹性,同时考虑碳排放成本,以达到绿色物流的目的。此外,还讨论了如何将客户满意度作为路径优化的重要评价标准之一。最后,通过一段简化的Python代码展示了遗传算法的应用。 适合人群:从事物流管理、冷链物流运营的专业人士,以及对遗传算法和路径优化感兴趣的科研人员和技术开发者。 使用场景及目标:适用于冷链物流企业,旨在优化配送路线,降低运营成本,减少碳排放,提升客户满意度。目标是帮助企业实现绿色、高效的物流配送系统。 其他说明:文中提供的代码仅为示意,实际应用需根据具体情况调整参数设置和模型构建。
少儿编程scratch项目源代码文件案例素材-恐怖矿井.zip
内容概要:本文详细介绍了基于STM32F030的无刷电机控制方案,重点在于高压FOC(磁场定向控制)技术和滑膜无感FOC的应用。该方案实现了过载、过欠压、堵转等多种保护机制,并提供了完整的源码、原理图和PCB设计。文中展示了关键代码片段,如滑膜观测器和电流环处理,以及保护机制的具体实现方法。此外,还提到了方案的移植要点和实际测试效果,确保系统的稳定性和高效性。 适合人群:嵌入式系统开发者、电机控制系统工程师、硬件工程师。 使用场景及目标:适用于需要高性能无刷电机控制的应用场景,如工业自动化设备、无人机、电动工具等。目标是提供一种成熟的、经过验证的无刷电机控制方案,帮助开发者快速实现并优化电机控制性能。 其他说明:提供的资料包括详细的原理图、PCB设计文件、源码及测试视频,方便开发者进行学习和应用。
基于有限体积法Godunov格式的管道泄漏检测模型研究.pdf
嵌入式八股文面试题库资料知识宝典-CC++笔试题-深圳有为(2019.2.28)1.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 V1.5.zip
Android系统开发_Linux内核配置_USB-HID设备模拟_通过root权限将Android设备转换为全功能USB键盘的项目实现_该项目需要内核支持configFS文件系统
C# WPF - LiveCharts Project
少儿编程scratch项目源代码文件案例素材-恐怖叉子 动画.zip
嵌入式八股文面试题库资料知识宝典-嵌⼊式⼯程师⾯试⾼频问题.zip