Error = InputPoint- pp->rOut; pp->ContrlOut=0.0407*Error-0.04028*pp->error_1 //calculate the controlling quantity directly +0.8187*pp->u_1+(1-0.8187)*pp->u_6; pp->error_2=pp->error_1; pp->error_1=Error; pp->u_6=pp->u_5; /*get the next controlling quantity*/ pp->u_5=pp->u_4; pp->u_4=pp->u_3; pp->u_3=pp->u_2; pp->u_2=pp->u_1; pp->u_1=pp->ContrlOut; if(pp->ContrlOut>=1.0) /*Restricting Maxim PID Out*/ pp->ContrlOut=1.0; if(pp->ContrlOut<0) pp->ContrlOut=0; return pp->ContrlOut; //此公式用到的大林算法离散化方法
时间: 2024-02-19 21:00:18 浏览: 19
抱歉,我并没有看到这段代码中使用到大林算法的离散化方法。这段代码是一个PID控制器的实现,其中的公式是PID控制器的控制规律。PID控制器的作用是根据当前的误差(偏差)来计算输出量,以实现对被控对象的控制。这里使用了比例项、积分项和微分项,计算出来的控制量通过一些限制后作为本次的输出值,并同时更新一些历史变量的值,用于下一次的计算。
相关问题
spid[ucNum].rin = uwTmp; spid[ucNum].rout = PID_Cal(&spid,ucNum,spid[ucNum].rin); spid[ucNum].high_time = (unsigned char)(((spid[ucNum].rout)&0xFFFF)/40);
这段代码中的PID_Cal函数是一个计算PID控制器输出的函数,其返回值为一个float类型的数据。该函数需要传入三个参数:一个指向spid数组的指针、当前温度控制通道号ucNum和当前输入的温度值spid[ucNum].rin。在该函数中,会根据PID控制器的算法计算出当前的控制器输出值spid[ucNum].rout,并将其存储在spid[ucNum].rout中。接下来,将spid[ucNum].rout这个float类型的数据转换为一个0-255之间的整数,存储在spid[ucNum].high_time中,用于控制温度控制器的工作。这里的转换方式是将spid[ucNum].rout的低16位取出来,并将其除以40,然后将结果转换为unsigned char类型。
error:0308010C:digital envelope rout
这个错误(error:0308010C:digital envelope routines::unsupported)是由于node.js V17版本中最近发布的OpenSSL3.0对允许算法和密钥大小增加了严格的限制引起的。解决这个问题有三种方案:方案1是在IDEA终端输入命令export NODE_OPTIONS=--openssl-legacy-provider(适用于Linux和Mac OS),方案2是在IDEA终端输入命令$env:NODE_OPTIONS="--openssl-legacy-provider"(解决问题),方案3是卸载Node.js17版本,安装Node.js17-版本。你可以尝试这些方案来解决这个错误。