Compare commits

..

No commits in common. "main" and "v0.0.1" have entirely different histories.
main ... v0.0.1

5 changed files with 28 additions and 17 deletions

Binary file not shown.

View File

@ -1,6 +1,6 @@
{ {
"modbus-server": { "modbus-server": {
"address": "172.17.16.202", "address": "25.7.55.237",
"port": 5020 "port": 5020
} }
} }

View File

@ -7,5 +7,5 @@ spec:
virtualEnv: base # 사용할 가상환경 이름입니다. virtualEnv: base # 사용할 가상환경 이름입니다.
package: requirements.txt # 설치할 Python 패키지 정보 파일입니다.(기본 값은 requirement.txt 입니다.) package: requirements.txt # 설치할 Python 패키지 정보 파일입니다.(기본 값은 requirement.txt 입니다.)
stackbase: stackbase:
tagName: v0.0.6 # Stackbase(gitea)에 릴리즈 태그명 입니 tagName: v0.0.1 # Stackbase(gitea)에 릴리즈 태그명 입니다.
repoName: sampyo-rs232 # Stackbase(gitea)에 저장될 저장소 이릅니다. repoName: sampyo-rs232 # Stackbase(gitea)에 저장될 저장소 이릅니다.

View File

@ -1,6 +1,6 @@
version: bwc/v2 # bwc 버전 정보입니다. version: bwc/v2 # bwc 버전 정보입니다.
spec: spec:
appName: sampyo-rs232-app # 앱의 이름입니다. appName: base-app # 앱의 이름입니다.
runFile: main.py # 앱의 실행 파일입니다. runFile: main.py # 앱의 실행 파일입니다.
env: env:
bin: python3 # 앱을 실행할 바이너라 파일 종류입니다.(장비에 따라 다르므로 확인 후 정의해야 합니다.) bin: python3 # 앱을 실행할 바이너라 파일 종류입니다.(장비에 따라 다르므로 확인 후 정의해야 합니다.)
@ -8,4 +8,4 @@ spec:
package: requirements.txt # 설치할 Python 패키지 정보 파일입니다.(기본 값은 requirement.txt 입니다.) package: requirements.txt # 설치할 Python 패키지 정보 파일입니다.(기본 값은 requirement.txt 입니다.)
stackbase: stackbase:
tagName: v0.0.1 # Stackbase(gitea)에 릴리즈 태그명 입니다. tagName: v0.0.1 # Stackbase(gitea)에 릴리즈 태그명 입니다.
repoName: sampyo-rs232 # Stackbase(gitea)에 저장될 저장소 이릅니다. repoName: base-template # Stackbase(gitea)에 저장될 저장소 이릅니다.

37
main.py
View File

@ -1,4 +1,4 @@
import signal, sys, time, os, json import signal, sys, time, os
import serial import serial
import asyncio import asyncio
from pymodbus.server.async_io import ModbusTcpServer from pymodbus.server.async_io import ModbusTcpServer
@ -19,19 +19,15 @@ async def measurement_weight(port, data):
result = result.replace(' ', '') result = result.replace(' ', '')
result = float(result.replace('\r\n', '')) result = float(result.replace('\r\n', ''))
result *= 1000 result *= 1000
result += 1000
# print(result) print(result)
# if result < 0.0: if result < 0.0:
# result = 0.0 result = 0.0
data.setValues(3, 1, [int(result)]) data.setValues(3, 1, [int(result)])
except Exception as e: except Exception as e:
print(f'measurement_weight: \n{e}') print(f'measurement_weight: \n{e}')
port.close()
time.sleep(0.5)
port.open()
pass pass
await asyncio.sleep(1) await asyncio.sleep(1)
@ -62,10 +58,7 @@ def exit_handler(signum, frame):
async def run_server(port, data): async def run_server(port, data):
# TCP 서버 시작 # TCP 서버 시작
with open(os.path.join('./config.json'), encoding='UTF-8') as f: server = ModbusTcpServer(context, address=("25.7.55.237", 5020))
jsonData = json.load(f)
server = ModbusTcpServer(context, address=(jsonData['modbus-server']['address'], jsonData['modbus-server']['port']))
update_coil_task = asyncio.create_task(measurement_weight(port=port, data=data)) update_coil_task = asyncio.create_task(measurement_weight(port=port, data=data))
update_hr_task = asyncio.create_task(set_zero(port=port, data=data)) update_hr_task = asyncio.create_task(set_zero(port=port, data=data))
@ -74,8 +67,14 @@ async def run_server(port, data):
await asyncio.gather(update_coil_task, update_hr_task) await asyncio.gather(update_coil_task, update_hr_task)
if __name__ == '__main__': if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('-app',help='')
args = parser.parse_args()
ROOT_PATH = f'/usr/local/sdt/app/{args.app}'
# Define serial port # Define serial port
serial_port = serial.Serial('/dev/ttyMAX0', 115200, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1) serial_port = serial.Serial('/dev/ttyMAX1', 115200, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1)
# For detect Ctrl+C # For detect Ctrl+C
signal.signal(signal.SIGINT, exit_handler) signal.signal(signal.SIGINT, exit_handler)
@ -89,3 +88,15 @@ if __name__ == '__main__':
context = ModbusServerContext(slaves=store, single=True) context = ModbusServerContext(slaves=store, single=True)
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
loop.run_until_complete(run_server(port=serial_port, data=store)) loop.run_until_complete(run_server(port=serial_port, data=store))
# while True:
# start = time.time()
# measurement_weight(port=serial_port, data=store)
# print(registers[0])
# end = time.time()
# diff = end - start
# if diff < 1:
# time.sleep(1 - diff)