Python调式

本文介绍如何使用Python内置模块pdb进行程序调试。通过一个简单的示例程序,演示了设置断点、单步执行、查看变量状态等基本调试操作。
import pdb

age = int(input("请输入你家狗狗的年龄: "))
print("")

#加入断点
pdb.set_trace()

if age < 0:
    print("你是在逗我吧!")
elif age == 1:
    print("相当于 14 岁的人。")
elif age == 2:
    print("相当于 22 岁的人。")
elif age > 2:
    human = 22 + (age - 2) * 5
    print("对应人类年龄: ", human)
  1. 加入断点

    import pdb
    pdb.set_trace()
  2. 开始运行调试
    这里写图片描述

    --> 箭头指示当前的语句;
    (Pdb)表示等待调式指令。

  3. h指令(help)
    可以查看所有调试指令。
    这里写图片描述

  4. l指令(list)
    查看代码上下文。
    这里写图片描述

  5. p指令
    用于查看变量。用法:p 变量名
    例如,查看age变量的值
    这里写图片描述

  6. n指令(next)
    单步执行指令。
    这里写图片描述

  7. b指令(break)
    加入指定断点。用法:b 行号
    这里写图片描述

  8. c指令(continue)
    运行到断点处
    这里写图片描述

    这里写图片描述

  9. s指令(step)
    进入函数
    我们在原有代码上修改后,新增test函数。此命令可以进入函数中调试
    这里写图片描述

  10. r指令(return)
    执行代码从当前函数返回

小结

这里写图片描述

### 增量式PID控制器参数调整 增量式PID控制器因其特性适合于多种应用场景,在Python中实现该类控制器并对其进行参数调整是一个重要的技能。下面将介绍一种基于误差反馈机制的增量式PID控制器的设计思路以及如何利用Python代码进行参数微调。 #### 控制器设计原则 为了确保系统的稳定性和响应速度,通常会依据具体应用环境下的动态行为特征来设定比例系数\(K_p\)、积分时间常数\(T_i\)(或其倒数——积分增益\(K_i= \frac{K_p}{T_i}\))、微分提前角频率\(\omega_d=\sqrt{\left|\ln(0.5)\right|}/T_s\)(其中Ts为采样周期),进而决定微分增益\(K_d=T_s*\omega_d*K_p\) [^2]。 #### 参数调节方法 对于增量式的PID控制系统而言,可以通过观察阶跃响应曲线来进行初步整定: - 如果超调过大,则适当减小\(K_p\); - 若存在稳态误差,则增加\(K_i\)直到消除静差为止; - 当振荡较为明显时,可以尝试增大\(K_d\)以抑制波动; 此外,还可以借助Ziegler-Nichols法则或其他先进的自适应算法来自动生成最优参数组合[^4]。 #### Python示例代码 以下是使用Python编写的一个简单版本的增量式PID控制器及其参数调整逻辑: ```python class Incremental_PID: def __init__(self, P=0.2, I=0.0, D=0.0): self.Kp = P self.Ki = I self.Kd = D self.P_error_last = 0 self.I_error = 0 self.D_error = 0 def update(self,current_value,set_point): error = set_point - current_value P_out = self.Kp * (error-self.P_error_last) self.I_error += error I_out = self.Ki * self.I_error self.D_error = error - self.P_error_last D_out = self.Kd * self.D_error output = P_out + I_out + D_out self.P_error_last = error return output def adjust_pid_params(pid_controller, response_curve): """根据给定的响应曲线调整PID参数""" overshoot_threshold = 0.1 # 设置允许的最大超调百分比 steady_state_error_tolerance = 0.01 # 定义可接受范围内的静态误差 while True: max_overshoot = max(response_curve)-response_curve[-1] final_steady_state_error = abs(setpoint-response_curve[-1]) if max_overshoot > overshoot_threshold*setpoint or \ final_steady_state_error >= steady_state_error_tolerance: pid_controller.Kp *= 0.9 # 减少P值 if final_steady_state_error != 0 and\ all(abs(e)<steady_state_error_tolerance for e in response_curve[-int(len(response_curve)*0.1):]): pid_controller.Ki *= 1.1 # 提高I值 elif any(abs(diff)>oscillation_limit for diff in np.diff(response_curve)): pid_controller.Kd *= 1.1 # 加大D值 else: break # 达到理想效果后退出循环 ``` 此段程序定义了一个名为`Incremental_PID` 的类用于创建增量型PID对象,并提供了一种基本框架去迭代优化这些参数直至满足性能指标的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青菜小王子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值