[WIP] Пытаемся сделать modbus

This commit is contained in:
Dima 2024-04-29 20:06:59 +03:00
parent 81e4b1de94
commit b31ab46c79
3 changed files with 42 additions and 17 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
.venv
.vscode
build

38
main.py
View File

@ -1,36 +1,40 @@
from fastapi import FastAPI
import serial
from pymodbus.client import ModbusSerialClient
import time
import threading
from queue import Queue
serial_port = "COM4"
baud_rate = 9600
serial_conn = serial.Serial(serial_port, baud_rate)
modbus_client = ModbusSerialClient(method='rtu', port=serial_port, baudrate=baud_rate)
line = "0"
modbus_queue = Queue()
def read_from_arduino():
global line
def poll_modbus():
while True:
if serial_conn.in_waiting > 0:
line = serial_conn.read().decode()
print(line)
if modbus_client.connect():
response = modbus_client.read_holding_registers(address=0, count=1, unit=1)
if not response.isError():
modbus_queue.put(response.registers[0])
modbus_client.close()
time.sleep(1)
threading.Thread(target=read_from_arduino, daemon=True).start()
threading.Thread(target=poll_modbus, daemon=True).start()
app = FastAPI()
@app.get("/pin_state")
async def get_pin_state():
return {"pin_state": line}
@app.get("/modbus_data")
async def get_modbus_data():
if not modbus_queue.empty():
modbus_value = modbus_queue.get()
return {"modbus_data": modbus_value}
else:
return {"error": "No data received"}
@app.get("/")
async def root():
return {"message": "Hello World"}
return {"message": "Welcome to Modbus with FastAPI"}
if __name__ == "__main__":
import uvicorn

18
project1/project1.ino Normal file
View File

@ -0,0 +1,18 @@
#include <ModbusSerial.h>
const int GPIOCoil = 0;
ModbusSerial modbus(Serial, 10);
bool coils[10];
int pinToRead = 2;
void setup() {
Serial.begin(9600);
pinMode(pinToRead, INPUT);
modbus.addIsts(0);
}
void loop() {
modbus.setIsts(0, digitalRead(pinToRead));
modbus.task ();
}