#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 超轻量级伺服驱动选型工具 - 纯内置模块版本 使用 Python 内置 http.server 模块,无需额外依赖 """ import os import sys import json import threading from http.server import HTTPServer, SimpleHTTPRequestHandler from urllib.parse import parse_qs, urlparse # 伺服电机参数数据库 SERVO_MOTORS = [ {"model": "ECMA-C20604RS", "power": 0.4, "torque": 1.27, "speed": 3000, "inertia": 0.00015}, {"model": "ECMA-C20804RS", "power": 0.75, "torque": 2.39, "speed": 3000, "inertia": 0.00028}, {"model": "ECMA-C20807RS", "power": 0.75, "torque": 2.39, "speed": 3000, "inertia": 0.00028}, {"model": "ECMA-C21007RS", "power": 1.5, "torque": 4.77, "speed": 3000, "inertia": 0.00056}, {"model": "ECMA-C21307RS", "power": 2.0, "torque": 6.37, "speed": 3000, "inertia": 0.00075}, {"model": "ECMA-C21807RS", "power": 3.0, "torque": 9.55, "speed": 3000, "inertia": 0.00112}, {"model": "ECMA-C22010RS", "power": 4.0, "torque": 12.73, "speed": 3000, "inertia": 0.00150}, ] class ServoHandler(SimpleHTTPRequestHandler): def do_GET(self): if self.path == '/': self.send_response(200) self.send_header('Content-type', 'text/html; charset=utf-8') self.end_headers() html_content = self.get_html_content() self.wfile.write(html_content.encode('utf-8')) elif self.path == '/api/motors': self.send_response(200) self.send_header('Content-type', 'application/json; charset=utf-8') self.end_headers() self.wfile.write(json.dumps(SERVO_MOTORS, ensure_ascii=False).encode('utf-8')) else: super().do_GET() def do_POST(self): if self.path == '/api/calculate': content_length = int(self.headers['Content-Length']) post_data = self.rfile.read(content_length).decode('utf-8') params = json.loads(post_data) # 简单的选型计算逻辑 results = self.calculate_selection(params) self.send_response(200) self.send_header('Content-type', 'application/json; charset=utf-8') self.end_headers() self.wfile.write(json.dumps(results, ensure_ascii=False).encode('utf-8')) def calculate_selection(self, params): """简单的伺服电机选型计算""" required_torque = float(params.get('torque', 0)) required_speed = float(params.get('speed', 0)) safety_factor = float(params.get('safety', 1.5)) suitable_motors = [] for motor in SERVO_MOTORS: if (motor['torque'] >= required_torque * safety_factor and motor['speed'] >= required_speed): suitable_motors.append(motor) return { 'suitable_motors': suitable_motors, 'required_torque': required_torque, 'required_speed': required_speed, 'safety_factor': safety_factor } def get_html_content(self): return '''