前提・実現したいこと
Modbusで通信を行いPLCより連番コード、判定結果1、判定結果2、・・・総判定結果数を受け取り
受け取ったデータを別のPCから送られてきた画像ファイルと紐付け、画像ファイルの名前を連番コード+判定結果.bmpとしています
プログラム経験0から1週間ほどでいろんなところを継接ぎで追加していっているので通常ではありえないような書き方を
していると思いますが何卒お願いいたします
発生している問題・エラーメッセージ
プログラムを実行後にGUIの画面を動かしたりすると応答なしの表示が出て固まってしまいます
実際のデータの受け取りとリストの表示などは少し遅いのですが行われています
エラーメッセージ
該当のソースコード
Python
1import serial 2import tkinter as tk 3import tkinter.ttk as ttk 4import glob 5import os 6import re 7import time 8 9 10 11#変数とか 12port = ["COM0", "COM1", "COM2", "COM3", "COM4", "COM5"] 13kai = ["", "OK", "NG"] 14comp = ["未完了", "完了"] 15complete = b"\x00" 16 17root = tk.Tk() 18root.title('試作') 19root.geometry("800x600") 20 21tree = ttk.Treeview(root) 22tree.pack(fill="x", padx=20, pady=20) 23 24 25def start(): 26 #完了信号待ち 27 while True: 28 global complete 29 if complete == b"\x00": 30 btn_click() 31 elif complete == b"\x01": 32 print("作業完了信号受信") 33 file_operation() 34 break 35 36def btn_click(): 37 #シリアル通信部分 38 global complete 39 global BC 40 global k1, k2, k3, k4, k5, k6, k7 41 client = serial.Serial(port[5], 9600, timeout=0.5, parity=serial.PARITY_EVEN, stopbits=serial.STOPBITS_ONE) 42 size = 128 43 print(client.name) 44 #S:1,F:4,Addr:3000,Data:100 45 commando = b"\x01\x04\x30\x00\x00\x64\xfe\xe1" 46 client.write(commando) 47 result1 = client.readline() 48 print(result1.hex()) 49 complete = result1[4:5] 50 BC = result1[5:7] 51 k1 = result1[7:9] 52 k2 = result1[9:11] 53 k3 = result1[11:13] 54 k4 = result1[13:15] 55 k5 = result1[15:17] 56 k6 = result1[17:19] 57 k7 = result1[19:21] 58 #k101あたりに送られてくるデータ数を入れる 59 client.close() 60 61def file_operation(): 62 global filename 63 global BC 64 global kai 65 global complete 66 path = 'c:/test/' 67 glob.glob(os.path.join(path, '*.txt')) 68 os.chdir(path) 69 filename = glob.glob('*.txt') 70 #ここらへんでif文入れて送られてきたデータ数に合わせて出力する 71 print(filename[0]) 72 print(filename[1]) 73 print(filename[2]) 74 75 time_str = time.strftime('%Y%m%d') 76 os.rename(filename[0], BC.hex() + "-1-" + kai[int.from_bytes(k1, 'big')] + time_str + '.txt') 77 os.rename(filename[1], BC.hex() + "-2-" + kai[int.from_bytes(k2, 'big')] + time_str + '.txt') 78 os.rename(filename[2], BC.hex() + "-3-" + kai[int.from_bytes(k3, 'big')] + time_str + '.txt') 79 tree.insert("", "end", values=(BC.hex(), kai[int.from_bytes(k1, 'big')], filename[0], BC.hex() + "-1-" + kai[int.from_bytes(k1, 'big')] + time_str + '.txt')) 80 tree.insert("", "end", values=(BC.hex(), kai[int.from_bytes(k2, 'big')], filename[1], BC.hex() + "-2-" + kai[int.from_bytes(k2, 'big')] + time_str + '.txt')) 81 tree.insert("", "end", values=(BC.hex(), kai[int.from_bytes(k3, 'big')], filename[2], BC.hex() + "-3-" + kai[int.from_bytes(k3, 'big')] + time_str + '.txt')) 82 83 client = serial.Serial(port[5], 9600, timeout=0.5, parity=serial.PARITY_EVEN, stopbits=serial.STOPBITS_ONE) 84 size = 128 85 #作業完了信号をOFFにする 86 commando1 = b"\x01\x06\x30\x00\x00\x00\x86\xca" 87 client.write(commando1) 88 client.close() 89 complete = b"\x00" 90 91 92btn = tk.Button(root,text='取得スタート',width=10,bg="gray", command=start) 93btn.pack(fill='x', padx=30) 94 95 96tree["columns"] = (1, 2, 3, 4) 97tree["show"] = "headings" 98tree.column(1, anchor='center', width=75) 99tree.column(2, anchor='center', width=75) 100tree.column(3, anchor='center', width=120) 101tree.column(4, anchor='center', width=120) 102 103tree.heading(1, text="連番") 104tree.heading(2, text="判定") 105tree.heading(3, text="変更前ファイル名") 106tree.heading(4, text="変更後ファイル名") 107 108tree.pack(side=tk.TOP, fill=tk.BOTH, expand=1) 109 110root.mainloop()
試したこと
シリアル通信のタイムアウトを2秒など長めにしても変化がありませんでした
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/15 10:01
2019/01/15 12:49