You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask电机控制应用双按钮功能区分及停止按钮失效问题排查

问题根因

  • 前端的stop按钮不在提交表单范围内,且按钮类型为普通button,点击时不会向后端发送POST请求,后端无法接收到停止指令
  • 后端直接通过request.form['key']的方式强制取参数,若请求未携带对应参数会直接抛出KeyError,导致请求中断
  • 后端逻辑未区分submit和stop请求的执行顺序,即使stop请求能到达,也会先执行电机启动逻辑再执行停止逻辑,不符合预期

修复方案

1. 调整前端HTML代码

将stop按钮移入表单内部,修改按钮类型为submit,修改后表单部分代码如下:

<form method="post" action="/cooking_station/">
    <table>
        <tr>
            <td class="special_td">
                <table> 
                    <tr> 
                        <td> <p>Function:</p> </td> 
                        <td><select name="move" style="height:50px;">
                            <option value= "1" >Home swing</option>
                            <option value= "5" >Relative</option>
                            <option value= "5" SELECTED>★★★★</option>
                        </select></td>
                    </tr> 
                    <tr> 
                        <td> <p>Power level:</p> </td> 
                        <td> <input type="text" name="power_level" id="demoA" style="height:50px;" value={{power_level}}> </td> 
                    </tr> 
                    <tr> 
                        <td> <p>Velocity:</p> </td> 
                        <td> <input type="text" name="speed" id="demoB" style="height:50px;" value={{speed}}> </td> 
                    </tr> 
                    <tr> 
                        <td> <p>Timer:</p> </td> 
                        <td> <input type="text" name="timing" id="demoC" style="height:50px;" value={{timing}}></td>
                    </tr> 
                    <tr> 
                        <td> <input type="submit" id="submit" name="submit" class="submit" value="Submit"> </td> 
                        <!-- 把stop按钮移到表单内,类型改为submit -->
                        <td> <input type="submit" id="stop" name="stop" class="stop" value="Stop"> </td>
                        <td><p3>{{message}}</p3></td>
                        <td><p3>The angle is: {{message2}} grad</p3></td>
                    </tr> 
                </table>
            </td>
        </tr>  
    </table>
</form>
<!-- 删掉原来在表单外的stop按钮代码 -->

2. 调整后端Python代码

修改参数取值方式,调整逻辑执行顺序,避免stop请求触发启动逻辑:

def testing(template_file, silo_type, name):
    global motor_id, object_controlword, object_statusword, angle, speed, move, distance, timing, power_level
    # 改用get方法取参数,设置默认值避免KeyError
    speed = request.form.get('speed', 0)
    move = request.form.get('move', 0)
    timing = request.form.get('timing', 0)
    power_level = request.form.get('power_level', 0)
    message = ""
    message2 = 0
    # 空值转换
    if speed  == '':
        speed = 0
    if move  == '':
        move = 0
    if timing  == '':
        timing = 0
    if power_level  == '':
        power_level = 0
    
    now = datetime.now()
    python_file = open(name + now.strftime("%d-%m-%y_%H:%M:%S") + ".txt", "x")

    if silo_type == 'cooking_station':
        CookingStation1 = CookingStation(int(51), int(3))
        # 优先判断stop请求,避免执行启动逻辑
        if request.form.get('stop'):
            print("stop test")
            CookingStation1.InductionGenerator.disable()
            # 可根据实际需求补充电机停止逻辑,比如 CookingStation1.Drive.stop()
            message = "The induction generator has stopped !"
        elif request.form.get("submit"):
            # 只有点击submit才执行启动逻辑
            angle = int(speed) * int(timing)
            message2=angle
            print("Move: ", move)
            print("angle: ", message2)
            if int(move) == 1:
                CookingStation1.Drive.move_home()
            if int(move) == 5:
                CookingStation1.Drive.move_rel(int(angle), int(speed))
                CookingStation1.InductionGenerator.setPower(int(power_level))
                CookingStation1.InductionGenerator.enable(int(timing))
        python_file.write("Execution date and time: " + now.strftime("%d/%m/%Y_%H:%M:%S") + ", Angle chosen: " + str(angle) + ", Speed chosen: " + str(speed) + ", Power value: " + str(power_level) + '\n')
        return render_template(template_file, angle=angle,speed=speed,move=move,timing=timing,power_level=power_level,message2=message2, message=message)

内容的提问来源于stack exchange,提问作者Camille Bouquet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:45:04