随笔 - 80  文章 - 0  评论 - 3  阅读 - 37371
  2024年11月28日

最近做一个阀门开度随液位变化的程序,

液位设定一个目标值,

液位高于目标值,阀门开度减小;

液位低于目标值,阀门开度增加。

很明显,该程序适合用PID控制,

在大循环中计算阀门开度值,并下置给阀门,结果,设备经常离线

原因:

经分析,大循环中运行,数据下置太快,设备反应不过来,导致通讯超时,或者是撞包,组态没收到设备回复,导致设备离线。

总之,应该是下置数据据太快导致的离线。

解决方法:

建立中间变量,在大循环中计算开度值,赋值给中间变量。

建立一个延时触发的程序,每5s触发一次下置,命令间隔为200ms。

每5s触发一次下置:

首先,建立一个200ms的定时器,命令间隔200ms.

接着,在大循环中建立如下程序:

IF $Second % 5 == 0 THEN  //取系统时间的秒数据,对5求余,结果为0,则5s时间到
pp = 1;  //数据是否下置的标志
ENDIF

接着,在条件动作程序里:

条件:pp == 1 && #Timer.Status == 2

ControlVar = ControlVar + 1;  //指针指向下一条数据

IF ControlVar == 4 THEN   //一轮循环结束,将指针复位

  ControlVar = 0;     //命令间隔

  pp=0;           //5s一次循环

ENDIF

#Timer.Start();      //下置一次数据后,重启定时器

最后,在数据改变触发程序中:

if ControlVar == 1 then
        ///
        //下置哪条数据就将变量赋值给对应的IO点
        ///
    a1 = a1 + 1;//将指针指向下一条数据
endif

if ControlVar == 2 then
        ///
        //下置哪条数据就将变量赋值给对应的IO点
        ///
    a2 = a2 + 1;
endif

if ControlVar == 3 then
        ///
        //下置哪条数据就将变量赋值给对应的IO点
        ///
    a3 = a3 + 1;
endif

if ControlVar == 4 then
        ///
        //下置哪条数据就将变量赋值给对应的IO点
        ///
    a4 = a4 + 1;
endif    

完成!!!

 测试结果符合预期:

 

posted @ 2024-11-28 19:01 flash610 阅读(117) 评论(0) 推荐(0) 编辑
  2024年10月19日
摘要: 最近,有些CAD打开之后有的字体无法显示出来,最后网上找了一个万能的字体替代库:@~!HZTXT.SHX。 能解决大部分的问题。 链接:https://pan.baidu.com/s/18osrAMmE-5SKeJZHx5rAnA 提取码:ycw1 阅读全文
posted @ 2024-10-19 18:14 flash610 阅读(84) 评论(0) 推荐(0) 编辑
  2024年8月12日
摘要: 右键进入opc UA 配置: 添加URL: 进入到设置界面添加用户和密码: 接下来在UA Expert中配置,添加URL连接,安全策略和kepserver一致,用户和密码,如下图: 配置好后点击连接connect: 第一次连接会报出如下错误: 此时要回到opc UA配置下面,在受信任的客户端下面,会 阅读全文
posted @ 2024-08-12 18:02 flash610 阅读(254) 评论(0) 推荐(0) 编辑
  2023年12月28日
摘要: win + R --> slmgr.vbs -dlv 现实最为详细的激活信息,包括:激活ID,安装ID,激活截至日期等。 阅读全文
posted @ 2023-12-28 20:29 flash610 阅读(209) 评论(0) 推荐(0) 编辑
  2023年8月20日
摘要: 需要的软件,CAD2020安装包,注册机。 1. 安装好CAD2020。 2. 在C:\Program Files (x86)\Common Files\Autodesk Shared\AdskLicensing目录下找到uninstall.exe,双击运行。 3. 在安装包目录下..\CAD202 阅读全文
posted @ 2023-08-20 18:48 flash610 阅读(4234) 评论(0) 推荐(0) 编辑
  2023年8月2日
摘要: 本文引用自 https://news.eda365.com/tech/fdbjmn/12007832461506.html 隔离数字信号的办法很多,隔离模拟信号的办法却没有想象的那么多,关键是隔离的成本,比想象的都要高出许多。特别是要求精确测量的场合,模拟信号的隔离,成本高得更加是离谱的无法想象。 阅读全文
posted @ 2023-08-02 09:37 flash610 阅读(55) 评论(0) 推荐(0) 编辑
  2023年7月14日
摘要: 台达变频器通讯控制参数设置步骤 以TD-500为例: 1. 运行指令来源设置: P0-02=2 通讯给定 2. 频率指令来源设置: P0-03=0 通讯给定 3. 通讯地址设置: PD-02 范围: 0-247 0为广播地址 4. 通讯传输速度设置:PD-00=5 9600bps 5. 通讯格式: 阅读全文
posted @ 2023-07-14 11:16 flash610 阅读(3178) 评论(0) 推荐(0) 编辑
  2023年6月8日
摘要: HTML标题 通过<h1> <h6>标签来定义 。每个元素代表不同层级的内容。 HTML段落 通过标签<p>来定义 HTML的空格 空格在HTML中是毫无意义的 HTML的链接 通过<a>实现 例如:<a href="http://www.w3cschool.cn">这是一个链接</a> href是 阅读全文
posted @ 2023-06-08 18:47 flash610 阅读(5) 评论(0) 推荐(0) 编辑
  2023年2月17日
摘要: // 使用固件库点亮 LED int main(void) { // 定义一个 GPIO_InitTypeDef 类型的结构体 GPIO_InitTypeDef GPIO_InitStructure; // 开启 GPIO 端口时钟 RCC_APB2ENR |= (1<<3); // 选择要控制的 阅读全文
posted @ 2023-02-17 16:45 flash610 阅读(45) 评论(0) 推荐(0) 编辑
  2022年11月28日
摘要: 只修改寄存器的某几位,其它位不变。 1. 把变量的某位清零 //定义一个变量 a = 1001 1111 b (二进制数) unsigned char a = 0x9f; //对 bit2 清零 a &= ~(1<<2); //括号中的 1 左移两位, (1<<2)得二进制数: 0000 0100 阅读全文
posted @ 2022-11-28 15:58 flash610 阅读(179) 评论(0) 推荐(0) 编辑
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示