From ef77566b1da01ab7373ca31bebe8ac24350a0110 Mon Sep 17 00:00:00 2001 From: zhu-mengmeng <15588200382@163.com> Date: Sat, 19 Jul 2025 13:59:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=95=B0=E9=87=8F?= =?UTF-8?q?=E5=92=8C=E6=9C=BA=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/jtDB.db | Bin 188416 -> 192512 bytes from pymodbus.py | 3 ++- ui/main_window_ui.py | 28 ++++++++++++++++++++++++---- widgets/main_window.py | 41 ++++++++++++++++++++++++++++++++++++++++- 4 files changed, 66 insertions(+), 6 deletions(-) diff --git a/db/jtDB.db b/db/jtDB.db index 5706bfae6539a2f0fa3180bef42d1f7a23b23eb9..5ea899cf91f0e7215029796193d193841b714a36 100644 GIT binary patch delta 5625 zcmcJTYiu0V702(LS$o$zJ2UI}F>D;$>qiny*v&k4b{-M69V4U|@`5c?fe_;+AcEr! zTBAUdb`qpA2~tehi8|#K>{LY*rIvzQZHn58svn4`Xq~Ep67uMWkYG`$5c!hu5O-$n z&CGfxHeJwu*tv6N=6BAy|9kFZ@0-Nl{}6|osy+h%tb8`!4L>_RaQX+3F;;cA!%pM= z?x(6Z#zD+82;MpJ%Kod)1RWp!AklneVP7rvNnF6#&6b_PhQSOql++V3eY>L zsmPl%zxZV1-f%?Q*W5sX)~@ArFxcB0>y3qYk(F4EOK|;}z73fTc2h`keRuR{>}yt% zIlc!oM*g_{XIHzwIJo}&s;!%NmKPJOl;D&&C#Zs=vOM79XDagFQOMaG==;h$GH)rhz9NizFcY$5T z!O=d{6S4#0BiucZ0_vqWOQ1RilXJ9@+UH}uNcW<$p_Y|8O&ceg! z;o0WbRuidW*c?3rSD4YWaG81O9Nc0lcJ1@dVa~!uurgYMWQofmV`SL6S{P4NJ)w)6fv>0BsF15F^Phh5@mq zb#+T0X*2(_2U~JOsjPqa^MjY3dgi12iHk43dTHXgd3rbYla>o7Ui@hE$cMi?aOuyZ zvdAhTd*Q^v>BIY{^G7e7c*)$f2UE<8BiP4>5j z=8_TYZ-u)wY$D!9{11@CDoDRZXQ;2KSE)P6FUVh$>myepzly9SRuRvkF%TmL?%NPW z0oQ^5>vZP35UvZgSucwh?n^CGaVVU*zXJig(R7nbo!gE~NXIv)dX9Oj)&VJiG zcMKy7Q^&9r-roUs1Nso%PQ6a8CjUteMm~=`8Hp0l6P@ATg;&>1)oc!33}r)D&Yb|l1D^zT!?y!f@Lv2d-i{r|dcc3dZscD=8`hW8pcO*0i412sawn-A>sk1$5nePnqj1jsXeJoammy$HO%bTMh~E#d&A}_jX&&*3YHDUC zDGS^x{MV09l9Zg@YA2K_CbY(p&`5+&N<8n3(wG>p-fS&-WR>T9k}Ax2Yf z`t_oD>Rni`A%s|2T*G>&A0iTQhE!U{Ie^;#lgX^!VH4@O(j*9OKBSANsrIZqZ|4o` z?S4V}jfMqfRqWd@R3$+e4 zhEMVwz;cC1$eVe(OGdS12_nwcl9-d|DGvwFB@b1Uw1w~<)thM01|ichr&xxq-V%9! z=L5N%``bcVVKGi_JcM?3T=Vw6gxOAFpLvJ}(~{x0{i z%z{Lb(`n~~<^+-?SJcEH(ga$a3&kCMS?=ufhxu}s&gqmN#*$vjlDIXeRfx&zq>b^A zp5Gee8nOIvYGIKL>k%92Aw(Y?UL(3wsi8F`It7|HmqR*%h@Kkpl!za%9LIPa|Dm(1 z!r-5Z|JAdp6;(?b5_66Ki}3m++E@zt1TFnGcLxTN_#% zTqBgKMpZ;;kdnAz#0{dTx}n9Q>o7X0q+6GdmhAvQzyH^cQmU`gj1=vNsu+eEi_le6 zjp2zO->Tmqe`TBjSIqxiI_VY`|>42A%#gu2ekiD+ShvwOaEu79^3l9^;>)g`*Kd zsx7Q#RL!K{!}^_-Kvgf7HRg~duz7SyV$Nw4-a@!&dy{8_X<1Qmzgv7R@U!(!kxXm ztX-r0pJ@h{fP6-NOj?wtrS14B_+n ztMk2NUCKeHOXy0!YSKKcH*fz4cW|`7h_;#Y*Wp7P?JIMq^Ke6H%ewj#6d)&FEECHG zuI$ajt)`NP-F$zrCOE-SvW)f?;50`AHBHf|zlapmx4^}d3ng)HIpFRBJRx+ZpEV~7 zypmGD;tkkqdnWy~Z0)%Tt*HlXejtG)kUMSn;on5&o$x&By5l_M_{yF`^RNRXZNDYLDIE=nUFGyy?Y1D3hID|g3@~@%K?V`*6h<|f)0Njr;Hn$u^ zjdmOe;8)Cx$55k4l(1@$2!C%v)Eqj9-gHC_5;KVD8A35@`fYRv+IaGBxaZea=Lnh) zZsO1*&H?$X+$G(WK9M@{U-%4e7nj93etqwWsH@HFIFGiNH_jn!<<22p@Hy}Rkf-D( V>4LNie}@NnU>mjuzC<%k{{To}erx~$ diff --git a/from pymodbus.py b/from pymodbus.py index 9db5710..1b35e7b 100644 --- a/from pymodbus.py +++ b/from pymodbus.py @@ -2,7 +2,7 @@ from pymodbus.client import ModbusTcpClient import time client = ModbusTcpClient('localhost', port=5020) client.connect() -client.write_registers(address=11, values=[2222]) +client.write_registers(address=11, values=[2922]) # client.write_registers(address=3, values=[0]) # time.sleep(2) # client.write_registers(address=0, values=[0]) @@ -15,6 +15,7 @@ client.write_registers(address=11, values=[2222]) client.write_registers(address=13, values=[1]) + result = client.read_holding_registers(address=13, count=1) print(result.registers[0],"123===") client.close() \ No newline at end of file diff --git a/ui/main_window_ui.py b/ui/main_window_ui.py index 6aa707f..a27207a 100644 --- a/ui/main_window_ui.py +++ b/ui/main_window_ui.py @@ -10,7 +10,9 @@ class MainWindowUI(QMainWindow): # 定义字段映射为类属性,方便外部引用 FIELD_MAPPING = { "库房": "lib", + "机台": "jt", "客户": "customerexp", + "订单数量": "maxsl", "规格": "size", "材质": "cz", "种类": "type_name", @@ -289,9 +291,9 @@ class MainWindowUI(QMainWindow): # 创建信息表格 - 使用QTableWidget实现 self.info_table = QTableWidget() - # 计算需要的行数:19个字段,每行2个字段,最后两行是备注(跨列) - # 前18个字段需要9行,备注占用2行,总共11行 - self.info_table.setRowCount(11) # 9行常规字段 + 2行备注 + # 计算需要的行数:21个字段,每行2个字段,最后两行是备注(跨列) + # 前20个字段需要10行,备注占用2行,总共12行 + self.info_table.setRowCount(12) # 10行常规字段 + 2行备注 self.info_table.setColumnCount(4) # 4列:标签1, 值1, 标签2, 值2 self.info_table.setShowGrid(True) # 显示网格线 self.info_table.horizontalHeader().setVisible(False) # 隐藏水平表头 @@ -372,6 +374,24 @@ class MainWindowUI(QMainWindow): value.addItem("不合格库(线材)") value.addItem("废丝库") value.setCurrentIndex(0) # 默认选择第一个 + elif field_name == "机台": + # 机台字段使用QLineEdit,与其他字段保持一致 + value = QLineEdit("") + value.setFont(self.normal_font) + value.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) + value.setStyleSheet("background-color: white; padding: 5px; border: 1px solid #cccccc;") + value.setFrame(False) + value.setContentsMargins(0, 0, 0, 0) + value.setFixedHeight(35) + elif field_name == "订单数量": + # 订单数量字段使用QLineEdit,与其他字段保持一致 + value = QLineEdit("") + value.setFont(self.normal_font) + value.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) + value.setStyleSheet("background-color: white; padding: 5px; border: 1px solid #cccccc;") + value.setFrame(False) + value.setContentsMargins(0, 0, 0, 0) + value.setFixedHeight(35) elif field_name == "线材类型": # 线材类型字段使用QComboBox,与库房组件配置相同 value = QComboBox() @@ -461,7 +481,7 @@ class MainWindowUI(QMainWindow): # 设置行高 for i in range(self.info_table.rowCount()): - if i == 9: # 备注行(第10行,索引为9) + if i == 10: # 备注行(第11行,索引为10) self.info_table.setRowHeight(i, 35) # 备注行第一行高度 self.info_table.setRowHeight(i + 1, 35) # 备注行第二行高度 break diff --git a/widgets/main_window.py b/widgets/main_window.py index 1b1ae98..510743b 100644 --- a/widgets/main_window.py +++ b/widgets/main_window.py @@ -2197,6 +2197,41 @@ class MainWindow(MainWindowUI): info['lib'] = warehouse_combo.currentText() else: info['lib'] = "成品库" # 默认值 + + # 添加炉号信息 + luno_container = self.info_values.get("炉号") + if luno_container: + # 炉号字段是容器,需要找到其中的QLineEdit + for child in luno_container.children(): + if hasattr(child, 'text') and hasattr(child, 'setText'): + luno_value = child.text().strip() + if luno_value: + info['luno'] = luno_value + break + else: + info['luno'] = "" # 默认值 + + # 添加线材类型信息 + wire_type_combo = self.info_values.get("线材类型") + if wire_type_combo: + wire_type_value = wire_type_combo.currentText().strip() + if wire_type_value and wire_type_value != "请选择": + info['xclx'] = wire_type_value + else: + info['xclx'] = "" # 默认值 + else: + info['xclx'] = "" # 默认值 + + # 添加机台信息 + machine_edit = self.info_values.get("机台") + if machine_edit: + machine_value = machine_edit.text().strip() + if machine_value: + info['jt'] = machine_value + else: + info['jt'] = "" # 默认值 + else: + info['jt'] = "" # 默认值 # 获取本机IP地址 # import socket # try: @@ -3780,8 +3815,12 @@ class MainWindow(MainWindowUI): if hasattr(child, 'text') and hasattr(child, 'setText'): current_value = child.text() break - else: + elif hasattr(self.info_values[field_name], 'text'): + # 其他有text方法的控件 current_value = self.info_values[field_name].text() + else: + # 对于没有text方法的控件,使用空字符串 + current_value = "" except RuntimeError as e: # 如果对象已被删除,记录错误并跳过 logging.warning(f"控件对象已被删除,字段: {field_name}, 错误: {str(e)}")