TCP通信と通信画面のpythonファイルが2個あります。
TCP通信の方は量1個目というデータを取得できるのですがこの取得したデータをもう一つの
通信画面のpythonファイルにtkinterを使用してメッセージボックスを作りそこに量1個目の
データを表示させたいです。
問題となっているのはTCP通信を while True: を使用してループを作って連続で通信させていること、通信画面ではtkinter画面に対しても root.mainloop() となってループを使用していることで同時にループを使っているのでどうすれば1個のループでうまくできる方法が分かりません。
今の段階では通信画面.pyを動作させたときに import TCP通信が動作しtkinter画面を作る
ところまで到達できません。
もう1個の問題としてはTCP通信で得たデータをtkinterのメッセージボックスに表示させる
ために text= にどのような変数などを入れたらいいかが分かりません。
下記にTCP通信と通信画面のコードを記述しますのでご教示をお願いします。
尚、TCP通信は動くプログラムであることを前提としています。
TCP通信.py
import
1import struct 2import time 3import codecs 4import sys 5TARGET_IP ='192.168.4.5' 6TARGET_PORT = 502 7BUFFER_SIZE = 512 8 9sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 10sock.connect((TARGET_IP, TARGET_PORT)) 11sock.settimeout(3.0) 12 13try: 14 print("Send modbus request ...") 15 transactionId = 502 16 protocolId = 0 17 len = 6 18 unitId = 0xff 19 functionCode = 3 # Read Input Status (0x02) 20 startRegister = 0x0100 21 data = 0x0001 # bit count 22 req = struct.pack('>3H 2B 2H', int(transactionId), int(protocolId), int(len), int(unitId), int(functionCode), int(startRegister), int(data)) 23 24 while True: 25 sock.send(req) 26 rec = sock.recv(BUFFER_SIZE) 27 28 print("TX: {0}".format(codecs.encode(req, 'hex_codec'))) 29 h="RX: {0}".format(codecs.encode(rec, 'hex_codec')) 30 print(h) 31 量1個目 = int(h[24:32], 16) 32 33 print("量1個目:", 量1個目) 34 35finally: 36 sock.close()
通信画面.py
import
1import tkinter 2import sys 3import TCP通信 4 5root = tkinter.Tk() 6root.title("TCP通信画面") #タイトルの入力 7root.geometry("400x400") #表示画面の大きさ(横x縦) 8 9#IPアドレス 10la1 = tkinter.Label(root,text="IPアドレス") 11la1.place(x=10,y=10) 12me1 = tkinter.Message(root,text="192.168.4.5",width=200,bg="white") 13me1.place(x=80,y=10) 14 15la量1個目 = tkinter.Label(root,text="量1個目") 16la量1個目.place(x=10,y=50) 17me量1個目 = tkinter.Message(root,text="TCP通信",width=200,bg="white") 18me量1個目.place(x=80,y=50) 19 20root.mainloop()
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。