質問編集履歴

3

エラーについての記述を訂正しました。

2020/10/16 09:33

投稿

akirabrian67
akirabrian67

スコア11

test CHANGED
File without changes
test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  def index():
32
32
 
33
- return render_template("index1.html", comand=comand)
33
+ return render_template("index.html", comand=comand)
34
34
 
35
35
 
36
36
 
@@ -204,9 +204,13 @@
204
204
 
205
205
 
206
206
 
207
- この例外がスローましたと表示されます。
207
+ デバック、実行そ問題なくできるもの、コマンドプロンプト上表示されるローカルホストのURLをブラウザに入てみる、以下のエラーが表示されます。
208
-
208
+
209
+
210
+
209
- return render_template("index1.html", comand=comand)
211
+ index.htmlについて"例外がスローされました"
212
+
213
+
210
214
 
211
215
 
212
216
 

2

ソースコードの追加と具体的なエラーの内容を記しました。

2020/10/16 09:33

投稿

akirabrian67
akirabrian67

スコア11

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- 外部からの受けた値をPython上で変数に格納し、その値をブラウザ上で表示たいですが、Flaskでそのような仕組みを構築することはできるでしょうか?
3
+ ソケット通信で外部から取得し値を変数に格納し、Flaskを使いHTML上にその値を表示させたいです
4
4
 
5
5
 
6
6
 
@@ -10,7 +10,43 @@
10
10
 
11
11
  ```Python
12
12
 
13
- from flask import *
13
+ from flask import * # 必要なライブラリのインポート
14
+
15
+
16
+
17
+
18
+
19
+ comand = "あいうえお" #ソケット通信コード抜きで実行するとき
20
+
21
+
22
+
23
+ app = Flask(__name__) # アプリの設定
24
+
25
+
26
+
27
+
28
+
29
+ @app.route("/") # どのページで実行する関数か設定
30
+
31
+ def index():
32
+
33
+ return render_template("index1.html", comand=comand)
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+ if __name__ == "__main__": # 実行されたら
42
+
43
+ app.run(debug=False, host='localhost', port=9999) # debug=False でRestartingを無効にする
44
+
45
+ ```
46
+
47
+
48
+
49
+ ```Python
14
50
 
15
51
  import logging
16
52
 
@@ -20,11 +56,15 @@
20
56
 
21
57
 
22
58
 
59
+ webbrowser.open_new('https://docs.python.org/ja/3/library/index.html') # ブラウザーに接続
60
+
61
+
62
+
23
63
  logging.basicConfig(level=logging.DEBUG, format='%(threadName)s: %(message)s')
24
64
 
25
- host_ip = '192.168.24.204'
65
+ host_ip = '192.168.24.204' # PLCのIPアドレス
26
-
66
+
27
- host_port = 8501
67
+ host_port = 8501 # 上位リンク通信のポート番号(デフォルト値)
28
68
 
29
69
 
30
70
 
@@ -32,61 +72,125 @@
32
72
 
33
73
  client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
34
74
 
75
+ # socket.AF_INETでip4を使うことを指定。socket.SOCK_STREAMでTCPを使うことを指定。
76
+
35
77
 
36
78
 
37
79
  try:
38
80
 
81
+ #クライアント接続
82
+
39
- client.connect((host_ip,host_port))
83
+ client.connect((host_ip,host_port)) # サーバーに接続(kv-7500にTCP接続/上位リンク通信)
40
84
 
41
85
  except:
42
86
 
43
87
  print("PLC接続NG")
44
88
 
45
-
46
-
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
47
- comand = "RD DM1016.D\r"
99
+ comand = "RD DM1016.D\r" # 上位リンク通信のコマンド(データ読み出しコマンド、左から順に、読み出しコード、IOの番号、?。
100
+
48
-
101
+ # DM1016:生産数日
102
+
103
+
104
+
49
- #comand = "RDS DM53000.D 2\r"
105
+ #comand = "RDS DM53000.D 2\r" # 上位リンク通信のコマンド(データ連続読み出しコマンド)
106
+
107
+
108
+
109
+
110
+
50
-
111
+ #[.D]⇒±10進数32BIT表示・・・返り値は10桁の0埋め数値
112
+
113
+
114
+
51
- client.send(comand.encode("ascii"))
115
+ client.send(comand.encode("ascii")) # 上位リンク通信のデータコードがASCIIなのでエンコード 
116
+
52
-
117
+ # ASCII:文字コード
118
+
53
-
119
+ # comand を ASCII にエンコード
120
+
121
+ # エンコード:他の形式に変換すること
54
122
 
55
123
  print("send : " + comand)
56
124
 
125
+
126
+
57
- response = client.recv(64)
127
+ response = client.recv(64) # 受信用バイト配列を定義しておく
58
-
128
+
59
- response = response.decode("UTF-8")
129
+ response = response.decode("UTF-8") # PLCからの返答がbyteデータなのでUTF-8にデコード
130
+
60
-
131
+ # UTF-8: 文字コード ASCIIよりデータサイズが小さい
132
+
133
+ # デコード:エンコードされたものをもとの形式に戻すこと
134
+
135
+
136
+
61
- client.close()
137
+ client.close()
138
+
139
+
62
140
 
63
141
  print("Received :" ,response)
64
142
 
65
143
  logging.debug('end')
66
144
 
145
+
146
+
147
+ ```
148
+
149
+
150
+
151
+ ```HTML
152
+
67
- app = Flask(__name__)
153
+ <!doctype html>
154
+
155
+
156
+
68
-
157
+ <html lang="ja">
158
+
69
-
159
+ <head>
70
-
71
-
72
-
160
+
73
- @app.route("/")
161
+ <meta charset="utf-8">
74
-
75
- def main():
162
+
76
-
77
- return render_template("index1.html", a="command")
163
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
164
+
78
-
165
+ <title>{{ comand }}</title>
166
+
167
+ </head>
168
+
169
+ <body>
170
+
171
+ <h1>生産数{{ comand }}</h1>
172
+
79
- @app.route("/index")
173
+ </body>
174
+
80
-
175
+ </html>
176
+
177
+ ```
178
+
179
+
180
+
181
+ ```ディレクトリ構成
182
+
183
+ flask/
184
+
185
+ templates/
186
+
81
- def index():
187
+ index.html
82
-
83
- return render_template("index1.html", a=command)
188
+
84
-
85
- if __name__ == "__main__": # 実行されたら
189
+ app.py
86
-
190
+
87
- app.run(debug=False, host='localhost', port=9999)
191
+ app.pyproj
192
+
88
-
193
+ app.sln
89
-
90
194
 
91
195
  ```
92
196
 
@@ -96,4 +200,14 @@
96
200
 
97
201
 
98
202
 
203
+ ソケット通信のコード抜きで、comandという変数を数字や文字式で定義しても、ローカルサーバが読み込まれなかったり、サーバーエラー、また”例外がスローされました”表示されます。
204
+
205
+
206
+
207
+ この行で例外がスローされましたと表示されます。
208
+
209
+ return render_template("index1.html", comand=comand)
210
+
211
+
212
+
99
- HTML上{{a}}などしたが表示されなかった。また、commandの中身を定数にしても同様
213
+ ソケット通信のコードのみ実行した場合はcomandの数字はコマンドプロンプト上く表示されます

1

実現したいことを明確にしました。

2020/10/15 19:05

投稿

akirabrian67
akirabrian67

スコア11

test CHANGED
File without changes
test CHANGED
@@ -1,14 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
-
4
-
5
- FlaskとHTMLでブラウザ上にPython内の変数の中身を表示したいのですが、変数が宣言されていないと表示されます。なぜなのでしょうか?Flaskでブラウザ上で変数扱うことはできないのでしょうか?
3
+ 外部からの受け取った値をPython上で変数に格納し、そブラウザ上で表示したいのですが、Flaskでそのような仕組み構築することはできでしょうか?
6
-
7
-
8
-
9
- またHTMLファイルをどこに置けばよいのでしょうか
10
-
11
-
12
4
 
13
5
 
14
6
 
@@ -104,4 +96,4 @@
104
96
 
105
97
 
106
98
 
107
- 変数く定数にてみたがブラウザには表示されな
99
+ HTML上{{a}}したが表示されなかったまた、commandの中身を定数にしても同様。