質問編集履歴
3
エラーについての記述を訂正しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
def index():
|
32
32
|
|
33
|
-
return render_template("index
|
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
|
-
|
211
|
+
index.htmlについて"例外がスローされました"
|
212
|
+
|
213
|
+
|
210
214
|
|
211
215
|
|
212
216
|
|
2
ソースコードの追加と具体的なエラーの内容を記しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
|
3
|
-
外部から
|
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
|
-
|
153
|
+
<!doctype html>
|
154
|
+
|
155
|
+
|
156
|
+
|
68
|
-
|
157
|
+
<html lang="ja">
|
158
|
+
|
69
|
-
|
159
|
+
<head>
|
70
|
-
|
71
|
-
|
72
|
-
|
160
|
+
|
73
|
-
|
161
|
+
<meta charset="utf-8">
|
74
|
-
|
75
|
-
|
162
|
+
|
76
|
-
|
77
|
-
|
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
|
-
|
173
|
+
</body>
|
174
|
+
|
80
|
-
|
175
|
+
</html>
|
176
|
+
|
177
|
+
```
|
178
|
+
|
179
|
+
|
180
|
+
|
181
|
+
```ディレクトリ構成
|
182
|
+
|
183
|
+
flask/
|
184
|
+
|
185
|
+
templates/
|
186
|
+
|
81
|
-
|
187
|
+
index.html
|
82
|
-
|
83
|
-
|
188
|
+
|
84
|
-
|
85
|
-
|
189
|
+
app.py
|
86
|
-
|
190
|
+
|
87
|
-
app.r
|
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
|
-
|
213
|
+
ソケット通信のコードのみで実行した場合はcomand内の数字はコマンドプロンプト上に正しく表示されます。
|
1
実現したいことを明確にしました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,14 +1,6 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
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の中身を定数にしても同様。
|