java codes
public class StandAloneServer {
static public final int PORT = 8182;
private final AutopubStore store = new CassandraAutopubStore();
private final Component component = new Component();
/** launch */
public StandAloneServer() throws Exception {
AutopubResource.setStorage(store);
System.out.println("Starting REST server on http://"
+ InetAddress.getLocalHost().getHostAddress() + ":" + PORT
+ "/");
component.getServers().add(Protocol.HTTP, PORT);
component.getDefaultHost().attach(new OpenAutopub());
component.getDefaultHost().attach("/resources",new StaticResourceApplication());
component.getClients().add(Protocol.CLAP);
component.start();
}
public void stop() throws Exception {
component.stop();
store.close();
}
/** entry point */
static public void main(String[] args) throws Exception {
String option="start";
if (args.length !=0){
option=args[0];
}
if ("start".equals(option)) {
new StandAloneServer();
String pid=getCurrentPid();
System.out.println(pid);
savePid(pid);
} else if("stop".equals(option)){
String pid = getPid();
killPid(pid);
savePid(null);
}
}
public static String getCurrentPid() throws IOException,InterruptedException {
Vector<String> commands=new Vector<String>();
commands.add("/bin/bash");
commands.add("-c");
commands.add("echo $PPID");
ProcessBuilder pb=new ProcessBuilder(commands);
Process pr=pb.start();
pr.waitFor();
if (pr.exitValue()==0) {
BufferedReader outReader=new BufferedReader(new InputStreamReader(pr.getInputStream()));
return outReader.readLine().trim();
} else {
System.out.println("Error while getting PID");
return "";
}
}
public static void savePid(String pid) throws IOException{
File f = new File("pid");
if(pid ==null){
FileWriter fw=new FileWriter(f);
fw.write("");
fw.close();
} else{
if (f.exists() && f.length()>0) {
System.out.println("there is exsiting server running");
}
FileWriter fw=new FileWriter(f);
fw.write(pid);
fw.close();
}
}
public static String getPid() throws IOException{
File f = new File("pid");
if (!f.exists()) return null;
BufferedReader br = new BufferedReader(new FileReader(f));
String pid=br.readLine();
br.close();
return pid;
}
public static void killPid(String pid) throws IOException{
Vector<String> commands=new Vector<String>();
commands.add("/bin/bash");
commands.add("-c");
commands.add("kill "+pid);
ProcessBuilder pb=new ProcessBuilder(commands);
Process pr=pb.start();
}
}
ant build.xml
<target name="startup" depends="compile" >
<java classname="com.hp.hpl.miul.openautopub.app.StandAloneServer" fork="true">
<arg line="start"/>
<classpath>
<path refid="classpath"/>
<pathelement location="target/ant-classes"/>
<pathelement location="src/main/resources"/>
<!--run functional test case -->
<pathelement location="src/test/resources"/>
</classpath>
</java>
</target>
<target name="shutdown" depends="compile">
<java classname="com.hp.hpl.miul.openautopub.app.StandAloneServer">
<arg line="stop"/>
<classpath>
<path refid="classpath"/>
<pathelement location="target/ant-classes"/>
<pathelement location="src/main/resources"/>
<!--run functional test case -->
<pathelement location="src/test/resources"/>
</classpath>
</java>
</target>
分享到:
相关推荐
2. **计算PID输出**:根据当前过程值与设定值的偏差,分别计算比例、积分和微分部分,然后将三者相加得到PID输出。 3. **限幅处理**:为了避免控制输出超出设备的允许范围,需要对PID输出进行限幅处理。 4. **延时...
5. **综合计算**:将比例项、积分项相加得到PID控制器的输出U(k) = U(k-1) + Kc * [E(k) - E(k-1)] + Ki * E(k)。 6. **限幅处理**:为了防止输出超出物理设备的承受范围,需要对输出值进行限幅处理,确保其处于设定...
- 然后将反馈值传递给`PIDCalc()`函数,得到PID控制器的输出值。 - 输出值可以用来控制外部设备,如电机等。 ### 三、总结 通过以上分析,我们可以看出,51单片机实现的PID控制程序主要包括了PID结构体的定义、PID...
临界比例法是通过预选择一个足够短的采样周期让系统工作,然后仅加入比例控制环节,直到系统对输入的阶跃响应出现临界振荡,记下这时的比例放大系数和临界振荡周期,最后通过公式计算得到 PID 控制器的参数。...
1. 手动整定:通过经验或试错法,逐步调整PID参数以获得期望的系统性能。 2. Ziegler-Nichols法则:一种经典的经验整定方法,基于系统阶跃响应来确定初始参数。 3. PID自动整定:利用自适应算法或模糊逻辑等技术,...
4. **PID计算**:根据误差信号计算比例、积分和微分项,并结合增益系数得到PID输出。 5. **限制与输出**:检查PID输出是否超出设备允许范围,进行上下限限制,并将结果送至执行机构(如电机驱动器)。 6. **闭环...
在模糊推理过程中,输入变量被模糊化并匹配到相应的模糊规则,然后通过模糊推理得到PID参数的模糊值。这些模糊值再经过解模糊化处理,转化为具体的PID参数值。自适应过程确保控制器能够根据系统的实际反馈不断优化...
4. **PID计算**:根据误差信号计算出比例、积分和微分项,然后将它们相加得到PID输出。 5. **限幅处理**:为防止PID输出过大导致电机过载,需要对PID输出进行限幅。 6. **执行控制**:将PID输出转化为电机控制信号...
基于模型的参数整定方法是指根据被控对象的数学模型,通过计算获得 PID 控制器的参数。这种方法需要对被控对象的数学模型进行建立,并且需要对模型的参数进行估计。但是,这种方法需要对被控对象有深入的了解,并且...
PID(比例-积分-微分)控制器是一种在自动化控制...通过深入阅读这篇论文,你可以获得PID算法的深入理解,并学习如何在实际工程问题中应用和优化PID控制器。对于控制系统设计者来说,这是一份非常有价值的参考资料。
3. **PID计算**:将误差分别乘以比例、积分和微分系数,然后将结果相加得到PID输出。 4. **控制输出**:PID输出作为电机驱动器的控制信号,调整电机的工作状态。 5. **反馈循环**:持续监测电机状态,更新误差,并...
3. **PID计算**:根据误差,分别计算P、I、D三个部分的输出,然后将它们相加得到PID控制器的总输出。 4. **PWM调制**:PID的输出通常会通过PWM(脉宽调制)信号来控制电源组的功率管,改变其导通时间,从而调节电压...
- **响应曲线法**:测量系统对阶跃输入的响应曲线,通过解析得到PID参数。 - **自整定PID控制器**:采用模糊逻辑、神经网络等智能算法自动整定PID参数。 ### 应用案例 PID控制广泛应用于各种控制系统中,如温度控制...
PID(比例-积分-微分)控制器是一种广泛应用的自动控制算法,它在各种控制系统中扮演着核心角色。本文将深入探讨PID控制算法的离散化处理,特别是后向差分方法,以及差分PID和差分方程PID的概念。 首先,PID控制器...
描述中提到的“通过调节相应的参数值获得pid准确值”,意味着我们需要对PID参数进行整定。整定过程通常包括手动试凑、Ziegler-Nichols法则、自整定算法等方法。每种方法都有其适用场景和优缺点,比如手动试凑适合小...
接着,通过调用CMSIS-PID库的函数更新PID参数并得到控制输出,这个输出会直接影响到步进电机的脉冲频率。在整个过程中,PID参数(P、I、D系数)的调整至关重要,它们直接影响着系统的稳定性和响应时间。 总结来说,...
控制器根据输入误差(e)和误差变化率(de/dt)进行模糊化,然后应用模糊规则库,得出模糊输出,最后通过反模糊化得到PID参数的实际值。 ### 4. 刘金琨的先进PID控制MATLAB仿真 刘金琨的先进PID控制MATLAB仿真提供...
总的来说,电机转速的PID控制是自动化领域的基础技能,位置式PID控制器以其高效和灵活性在众多控制系统中得到广泛应用。通过对“PID_电机转速PID_位置式PID_pid_”主题的学习,我们可以掌握如何设计和实现一个能精确...
5. **PID输出**:最后将比例项、积分项和微分项相加得到PID控制器的输出,即 `lun = lunp + luni + lund + lun_1` 和 `run = runp + runi + rund + run_1`。 #### 控制信号输出 - 根据PID控制器的输出,更新步进...