网站建设的几种结构/高质量外链代发

主要输入和输出
控制器,此处特指自动温控控制器,在最简单的描述下,只接受一个输入,给出一个输出,即:
- 输入温度;
- 输出操作;
在控制器内部,比对输入温度和设定状态,以比对结果为依据计算操作值。
操作值则表达三种抽象的操作要求:
- 正向操作及其力度(加温);
- 反向操作及其力度(降温);
- 什么都不做;
在控制器外部,机械或装置任意地解释操作值,做出机械动作。
这个动作的结果可能可以改变输入温度的值,也可能不能改变,也可能有时能改变有时不能改变。控制器可能能把被操作的温度带动到设定的目标温度,也可能不能,也可能有时能有时不能。对于控制器的使用者来说,可能说,能够把想控制的温度确定地控制到想要的温度,是控制器存在的理由。但对于控制器的实现者来说,可以说,控制手段和控制结果间的不确定性,才是控制器存在的理由。
比例区间和输出内容
假设被使用的加热手段和降温手段的力度范围,各自在最大力度下能使被操作物的温度变化速率一样,再假设我们又容许结果温度和被设定的目标温度间可以有误差,比较温度在误差范围内就不再尝试改变温度,那么可以从这两个假设可以衍生出用来划定区间的两个概念:
- 最大力度的范围:假设我能称之为比例区;
- 不做操作的范围:假设我能称之为死区;

以设定目标值为中心,结合比例区和死区的概念,可以划分出五个区间:
- 死区以内;
- 低于目标值、死区以外,比例区以内;
- 低于目标值、比例区以外;
- 高于目标值、死区以外,比例区以内;
- 高于目标值、比例区以外;
划分完区间后,就可以通过判断某一温度值落于哪一个区间来得出操作值的内容:
- 死区以内:什么都不做;
- 低于目标值、死区以外,比例区以内:按区间比例做正向操作;
- 低于目标值、比例区以外:全力做正向操作;
- 高于目标值、死区以外,比例区以内:按区间比例做反向操作;
- 高于目标值、比例区以外:全力做反向操作;

接口的编排
控制器可以提供一些接口来设置控制器的要素,比如:
Class Controller{...void setTargetValue(float inReal){...}void setProcessValue(float inReal){...}void setDeadZone(...){...}void setProportionZone(...){...}...
}
对于不同的操作偏好和装置特性,控制器也可以有完全不同的设置方法和实现。
比如,比例区可以不对称,死区也可以不对称。比例区可能不可以超过某个预设范围,也可能可以,可能可以为负,也可能不可以。死区可能可以比比例区更大,也可能不可以,也可能需要强制其不能超过比例区的某一部分,也可能不能小于某一部分。这些问题都有待留给机械装置的构造去回答,不会也不应有固定的答案:
Class Controller{...void setDeadZone(float factor){...}void setDeadZone(float negative, float positive){...}void setDeadZone(float negativeFactor, float positiveFactor, float factorBase){...}void setDeadZone(float negativeFactor, float positiveFactor, float rangeMin, float rangeMax){...}...void setProportionZone(float factor){...}void setProportionZone(float negative, float positive){...}void setProportionZone(float negativeFactor, float positiveFactor, float factorBase){...}void setProportionZone(float negativeFactor, float positiveFactor, float rangeMin, float rangeMax){...}...
}
同样,控制值可以被任何装置任意地解释成任何状态。
它可能是某个液泵的转速,可能是某个阀门的角度,也可能是电加热棒的通断频率,也可能是某个滑块的位移。它的变化可能是连续的,也可能是离散的,可能是均一的,也可能是曲线的。对此,控制器也完全可以提供不同的表达形式和获取方法:
Class Controller{.../**@return [-1f ~ 1f]*/float getAnalogOutput(){return ...}...boolean getPositiveOutput(){return ...}boolean getNegativeOutput(){return ...}/**@return [0 ~ 100]*/int getOutputPercentage(){return ...}...int getPositivePercentage(){return...}int getNegativePercentage(){return...}...boolean getClockedPositive(int timeSpan){return ...}boolean getClockedNegative(int timeSpan){return ...}...
}
取决于设计,控制器也完全可以应用到气压、流量、等等等等温度以外的控制器中。
在本系列最后完成的样例中,温控控制器裁剪后还被用来做燃烧器风门的角度控制。
显示面板
在本系列最后完成的样例中,将直接在画布里绘图表现区间:
- 中心横线代表目标值;
- 内侧方形区域代表死区;
- 外侧方形区域代表比例区;
- 具体的数值另外直接用文字写出;

https://github.com/keyboard2769/myProcessingSimsPLC/blob/master/DemoBurnerAndDryer/Controller.pdegithub.com