[WIP] Пытаемся сделать modbus
This commit is contained in:
parent
81e4b1de94
commit
b31ab46c79
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.venv
|
||||||
|
.vscode
|
||||||
|
build
|
38
main.py
38
main.py
@ -1,36 +1,40 @@
|
|||||||
from fastapi import FastAPI
|
from fastapi import FastAPI
|
||||||
import serial
|
from pymodbus.client import ModbusSerialClient
|
||||||
|
import time
|
||||||
import threading
|
import threading
|
||||||
from queue import Queue
|
from queue import Queue
|
||||||
|
|
||||||
|
|
||||||
serial_port = "COM4"
|
serial_port = "COM4"
|
||||||
baud_rate = 9600
|
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 poll_modbus():
|
||||||
def read_from_arduino():
|
|
||||||
global line
|
|
||||||
while True:
|
while True:
|
||||||
if serial_conn.in_waiting > 0:
|
if modbus_client.connect():
|
||||||
line = serial_conn.read().decode()
|
response = modbus_client.read_holding_registers(address=0, count=1, unit=1)
|
||||||
print(line)
|
if not response.isError():
|
||||||
|
modbus_queue.put(response.registers[0])
|
||||||
|
modbus_client.close()
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
threading.Thread(target=poll_modbus, daemon=True).start()
|
||||||
threading.Thread(target=read_from_arduino, daemon=True).start()
|
|
||||||
|
|
||||||
app = FastAPI()
|
app = FastAPI()
|
||||||
|
|
||||||
@app.get("/pin_state")
|
@app.get("/modbus_data")
|
||||||
async def get_pin_state():
|
async def get_modbus_data():
|
||||||
return {"pin_state": line}
|
if not modbus_queue.empty():
|
||||||
|
modbus_value = modbus_queue.get()
|
||||||
|
return {"modbus_data": modbus_value}
|
||||||
|
else:
|
||||||
|
return {"error": "No data received"}
|
||||||
|
|
||||||
@app.get("/")
|
@app.get("/")
|
||||||
async def root():
|
async def root():
|
||||||
return {"message": "Hello World"}
|
return {"message": "Welcome to Modbus with FastAPI"}
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
import uvicorn
|
import uvicorn
|
||||||
|
18
project1/project1.ino
Normal file
18
project1/project1.ino
Normal 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 ();
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user