以下のコードは他のサイトにあってものに少し編集を加えたものです。
ソケット通信によりデータを最終的にコマンドプロンプトに表示するものです。
同じ"client"という変数に、comandとcycletimeというコマンドによりデバイスから取得したデータをエンコードをし代入している行があります。結果として、それぞれ別のデータが表示され問題はないのですが、なぜ同じ変数に代入しているのにもかかわらず別の結果が得られるのでしょうか?
また以下の行も同様の考えより理解できません。
responseとresponse1はともにclient.recv(64)からデータを受け取っているのにもかかわらず別のデータが受け取れるのでしょうか?
response = client.recv(64) # 受信用バイト配列を定義しておく
response1 = client.recv(64) #追加したコード
response = response.decode("UTF-8") # PLCからの返答がbyteデータなのでUTF-8にデコード
response1 = response1.decode("UTF-8") #追加したコード
Python
1import logging 2import socket 3 4logging.basicConfig(level=logging.DEBUG, format='%(threadName)s: %(message)s') 5host_ip = '198.168.50.14' # PLCのIPアドレス 6host_port = 8501 # 上位リンク通信のポート番号(デフォルト値) 7 8logging.debug('start') 9client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 10# socket.AF_INETでip4を使うことを指定。socket.SOCK_STREAMでTCPを使うことを指定。 11 12try: 13 #クライアント接続 14 client.connect((host_ip,host_port)) # サーバーに接続(kv-7500にTCP接続/上位リンク通信) 15except: 16 print("PLC接続NG") 17 18 19comand = "RD DM53000.D\r" # 上位リンク通信のコマンド(データ読み出しコマンド) 20cycletime = "RD DM1302.D\r" #追加したコード 21 22client.send(comand.encode("ascii")) 23client.send(cycletime.encode("ascii")) 24print("send : " + comand) 25print("send : " + cycletime) 26 27response = client.recv(64) # 受信用バイト配列を定義しておく 28response1 = client.recv(64) #追加したコード 29response = response.decode("UTF-8") # PLCからの返答がbyteデータなのでUTF-8にデコード 30response1 = response1.decode("UTF-8") #追加したコード 31 32client.close() 33 34print("Received :" ,response) 35print("Received :" ,response1) 36logging.debug('end')
回答3件
あなたの回答
tips
プレビュー