From 4925d899b42d53181c211791789191fa1ef5eeac Mon Sep 17 00:00:00 2001 From: gitea Date: Sat, 10 Aug 2024 17:23:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=83=E5=88=86=E8=A1=A8=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E9=87=87=E9=9B=86=E7=A8=8B=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + dial_gauge/README.md | 2 + dial_gauge/conf.ini | 6 ++ dial_gauge/gauge.py | 99 +++++++++++++++++++++++++++++++ dial_gauge/gauge.xml | 43 ++++++++++++++ dial_gauge/target_dial_gauge.zip | Bin 0 -> 7888 bytes 6 files changed, 151 insertions(+) create mode 100644 dial_gauge/README.md create mode 100644 dial_gauge/conf.ini create mode 100644 dial_gauge/gauge.py create mode 100644 dial_gauge/gauge.xml create mode 100644 dial_gauge/target_dial_gauge.zip diff --git a/.gitignore b/.gitignore index e3f5f8c..9013072 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ aio/assets/templates/durable/ aio/assets/templates/.__c_msg.lock aio/code/commons/__pycache__/ aio/assets/templates/debug.log +dial_gauge/results.xlsx diff --git a/dial_gauge/README.md b/dial_gauge/README.md new file mode 100644 index 0000000..b16f45a --- /dev/null +++ b/dial_gauge/README.md @@ -0,0 +1,2 @@ +## 千分表数据自动采集 + diff --git a/dial_gauge/conf.ini b/dial_gauge/conf.ini new file mode 100644 index 0000000..295d61a --- /dev/null +++ b/dial_gauge/conf.ini @@ -0,0 +1,6 @@ +[md_rtu] +port = COM10 + +[md_tcp] +addr = 192.168.0.160 +port = 502 diff --git a/dial_gauge/gauge.py b/dial_gauge/gauge.py new file mode 100644 index 0000000..0f44f30 --- /dev/null +++ b/dial_gauge/gauge.py @@ -0,0 +1,99 @@ +from configparser import ConfigParser +from pymodbus.client import ModbusSerialClient, ModbusTcpClient +from time import sleep, strftime, localtime, time +from openpyxl import load_workbook, Workbook +from os import rename +# import pymodbus +# pymodbus.pymodbus_apply_logging_config("DEBUG") + + +def initializations(): + try: + now = strftime("%Y%m%d%H%M%S", localtime(time())) + rename('results.xlsx', f'results_{now}.xlsx') + except FileNotFoundError: + pass + + wb = Workbook() + ws = wb.active + ws.title = 'results' + ws['A1'].value = '时间' + ws['B1'].value = '次数' + ws['C1'].value = '结果' + wb.save('results.xlsx') + wb.close() + + +def do_connections(): + configs = ConfigParser() + configs.read('conf.ini') + + # ================ 配置Modbus TCP客户端 ================ + tcp_host = configs.get('md_tcp', 'addr') + tcp_port = configs.getint('md_tcp', 'port') + + client_tcp = ModbusTcpClient(tcp_host, tcp_port) + if client_tcp.connect(): + print(f"Modbus TCP已连接到{tcp_host}:{tcp_port}...") + else: + raise Exception(f"Modbus TCP无法连接到{tcp_host}:{tcp_port}...") + + # ================ 配置Modbus RTU客户端 ================ + rtu_port = configs.get('md_rtu', 'port') + + client_rtu = ModbusSerialClient( + method='rtu', + port=rtu_port, # 根据实际情况调整端口,Windows上可能是 'COM3' + baudrate=38400, # 根据协议设定波特率为38400 + timeout=1, + parity='N', # 无奇偶校验 + stopbits=2, # 2个停止位 + bytesize=8 # 8个数据位 + ) + if client_rtu.connect(): + print(f"Modbus RTU已连接到系统{rtu_port}端口...") + else: + raise Exception(f"Modbus RTU无法连接到系统{rtu_port}端口...") + + return client_tcp, client_rtu + + +def get_gauge_data(client_tcp, client_rtu): + count = 2 + client_tcp.write_register(41000, 1) # 将 act 信号置为 True + # ================ 功能实现 ================ + while True: + while True: + res_tcp = client_tcp.read_holding_registers(41001, 1) # 获取 time_to_go 的值 + sleep(0.5) + if not res_tcp.registers[0]: + continue + else: + break + try: + res_rtu = client_rtu.read_holding_registers(0x0000, 2, slave=1) + plus_or_minus = 1 if res_rtu.registers[0] == 0 else -1 + result = res_rtu.registers[1] * plus_or_minus / 10000 + now = strftime("%Y-%m-%d %H:%M:%S", localtime(time())) + wb = load_workbook('results.xlsx') + ws = wb['results'] + ws[f'A{count}'].value = now + ws[f'B{count}'].value = count-1 + ws[f'C{count}'].value = float(result) + wb.save('results.xlsx') + wb.close() + count += 1 + except: + client_tcp.write_register(41000, 0) # 将 act 信号置为 False + + sleep(2) # + + +def main(): + initializations() + client_tcp, client_rtu = do_connections() + get_gauge_data(client_tcp, client_rtu) + + +if __name__ == '__main__': + main() diff --git a/dial_gauge/gauge.xml b/dial_gauge/gauge.xml new file mode 100644 index 0000000..4a8fe65 --- /dev/null +++ b/dial_gauge/gauge.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dial_gauge/target_dial_gauge.zip b/dial_gauge/target_dial_gauge.zip new file mode 100644 index 0000000000000000000000000000000000000000..27ee43556dfb350065635c1820eb2337e35e8e85 GIT binary patch literal 7888 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 Kg3zBw0RI6z@dOS4 literal 0 HcmV?d00001