前提・実現したいこと
ソケット通信で外部から取得した数値を変数に格納し、Flaskを使いHTML上にその数値を表示させたいです。
該当のソースコード
Python
1from flask import * # 必要なライブラリのインポート 2 3 4comand = "あいうえお" #ソケット通信コード抜きで実行するとき 5 6app = Flask(__name__) # アプリの設定 7 8 9@app.route("/") # どのページで実行する関数か設定 10def index(): 11 return render_template("index.html", comand=comand) 12 13 14 15if __name__ == "__main__": # 実行されたら 16 app.run(debug=False, host='localhost', port=9999) # debug=False でRestartingを無効にする
Python
1import logging 2import socket 3import webbrowser 4 5webbrowser.open_new('https://docs.python.org/ja/3/library/index.html') # ブラウザーに接続 6 7logging.basicConfig(level=logging.DEBUG, format='%(threadName)s: %(message)s') 8host_ip = '192.168.24.204' # PLCのIPアドレス 9host_port = 8501 # 上位リンク通信のポート番号(デフォルト値) 10 11logging.debug('start') 12client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 13# socket.AF_INETでip4を使うことを指定。socket.SOCK_STREAMでTCPを使うことを指定。 14 15try: 16 #クライアント接続 17 client.connect((host_ip,host_port)) # サーバーに接続(kv-7500にTCP接続/上位リンク通信) 18except: 19 print("PLC接続NG") 20 21 22 23 24 25comand = "RD DM1016.D\r" # 上位リンク通信のコマンド(データ読み出しコマンド、左から順に、読み出しコード、IOの番号、?。 26 # DM1016:生産数日 27 28#comand = "RDS DM53000.D 2\r" # 上位リンク通信のコマンド(データ連続読み出しコマンド) 29 30 31 #[.D]⇒±10進数32BIT表示・・・返り値は10桁の0埋め数値 32 33client.send(comand.encode("ascii")) # 上位リンク通信のデータコードがASCIIなのでエンコード 34 # ASCII:文字コード 35 # comand を ASCII にエンコード 36 # エンコード:他の形式に変換すること 37print("send : " + comand) 38 39response = client.recv(64) # 受信用バイト配列を定義しておく 40response = response.decode("UTF-8") # PLCからの返答がbyteデータなのでUTF-8にデコード 41 # UTF-8: 文字コード ASCIIよりデータサイズが小さい 42 # デコード:エンコードされたものをもとの形式に戻すこと 43 44client.close() 45 46print("Received :" ,response) 47logging.debug('end') 48
HTML
1<!doctype html> 2 3<html lang="ja"> 4 <head> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 7 <title>{{ comand }}</title> 8 </head> 9 <body> 10 <h1>生産数{{ comand }}</h1> 11 </body> 12</html>
flask/ templates/ index.html app.py app.pyproj app.sln
試したこと
ソケット通信のコード抜きで、comandという変数を数字や文字式で定義しても、ローカルサーバが読み込まれなかったり、サーバーエラー、また”例外がスローされました”表示されます。
デバック、実行こそ問題なくできるものの、コマンドプロンプト上で表示されるローカルホストのURLをブラウザに入れてみると、以下のエラーが表示されます。
index.htmlについて"例外がスローされました"
ソケット通信のコードのみで実行した場合はcomand内の数字はコマンドプロンプト上に正しく表示されます。