modbus_MediaPipe/Web.py

48 lines
1.5 KiB
Python

import struct
import time
import threading
from pymodbus.client import ModbusTcpClient
from flask import Flask, jsonify
app = Flask(__name__)
modbus_data = {'rpm': 0, 'ai': 0, 'analog': 0} # 全域變數儲存資料
def read_modbus_data():
client = ModbusTcpClient(host="169.254.11.130", port=502)
if client.connect():
result = client.read_holding_registers(address=1633, count=6, slave=255)
client.close()
if result.isError():
return {'rpm': 'Error', 'ai': 'Error', 'analog': 'Error'}
else:
regs = result.registers
def to_float32(low, high):
return struct.unpack('<f', struct.pack('<HH', low, high))[0]
return {
'rpm': to_float32(regs[0], regs[1]),
'ai': to_float32(regs[2], regs[3]),
'analog': to_float32(regs[4], regs[5]),
}
else:
return {'rpm': 'Disconnected', 'ai': 'Disconnected', 'analog': 'Disconnected'}
def polling_loop():
global modbus_data
while True:
modbus_data = read_modbus_data()
print(modbus_data) # ✅ 持續印出
time.sleep(0.5)
@app.route("/")
def index():
return "✅ Flask is running. Visit /modbus to get data."
@app.route("/modbus")
def get_data():
return jsonify(modbus_data)
if __name__ == "__main__":
threading.Thread(target=polling_loop, daemon=True).start() # ✅ 背景輪詢
app.run(host='127.0.0.1', port=5000, debug=True)