質問編集履歴

3

ソケット通信のコードとFlaskのコードを合わせたものを追加いたしました。

2020/10/17 06:59

投稿

akirabrian67
akirabrian67

スコア11

test CHANGED
File without changes
test CHANGED
@@ -156,6 +156,138 @@
156
156
 
157
157
  ```
158
158
 
159
+ ```Python
160
+
161
+ from flask import * # 必要なライブラリのインポート
162
+
163
+ import logging
164
+
165
+ import socket
166
+
167
+ import webbrowser
168
+
169
+
170
+
171
+ # webbrowser.open_new('https://docs.python.org/ja/3/library/index.html') # ブラウザーに接続
172
+
173
+
174
+
175
+ logging.basicConfig(level=logging.DEBUG, format='%(threadName)s: %(message)s')
176
+
177
+ host_ip = '192.168.24.204' # PLCのIPアドレス
178
+
179
+ host_port = 8501 # 上位リンク通信のポート番号(デフォルト値)
180
+
181
+
182
+
183
+ logging.debug('start')
184
+
185
+ client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
186
+
187
+ # socket.AF_INETでip4を使うことを指定。socket.SOCK_STREAMでTCPを使うことを指定。
188
+
189
+
190
+
191
+ try:
192
+
193
+ #クライアント接続
194
+
195
+ client.connect((host_ip,host_port)) # サーバーに接続(kv-7500にTCP接続/上位リンク通信)
196
+
197
+ except:
198
+
199
+ print("PLC接続NG")
200
+
201
+
202
+
203
+
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+ comand = "RD DM1016.D\r" # 上位リンク通信のコマンド(データ読み出しコマンド、左から順に、読み出しコード、IOの番号、?。
212
+
213
+ # DM1016:生産数日
214
+
215
+
216
+
217
+ #comand = "RDS DM53000.D 2\r" # 上位リンク通信のコマンド(データ連続読み出しコマンド)
218
+
219
+
220
+
221
+
222
+
223
+ #[.D]⇒±10進数32BIT表示・・・返り値は10桁の0埋め数値
224
+
225
+
226
+
227
+ client.send(comand.encode("ascii")) # 上位リンク通信のデータコードがASCIIなのでエンコード 
228
+
229
+ # ASCII:文字コード
230
+
231
+ # comand を ASCII にエンコード
232
+
233
+ # エンコード:他の形式に変換すること
234
+
235
+ print("send : " + comand)
236
+
237
+
238
+
239
+ response = client.recv(64) # 受信用バイト配列を定義しておく
240
+
241
+ response = response.decode("UTF-8") # PLCからの返答がbyteデータなのでUTF-8にデコード
242
+
243
+ # UTF-8: 文字コード ASCIIよりデータサイズが小さい
244
+
245
+ # デコード:エンコードされたものをもとの形式に戻すこと
246
+
247
+
248
+
249
+ client.close()
250
+
251
+
252
+
253
+ print("Received :" ,response)
254
+
255
+ logging.debug('end')
256
+
257
+
258
+
259
+
260
+
261
+
262
+
263
+ app = Flask(__name__) # アプリの設定
264
+
265
+
266
+
267
+
268
+
269
+ @app.route("/") # どのページで実行する関数か設定
270
+
271
+
272
+
273
+ def index():
274
+
275
+ return render_template("index.html", command=response) # Hello, World! を出力
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+ if __name__ == "__main__": # 実行されたら
284
+
285
+ app.run(debug=False, host='localhost', port=9999) # debug=False でRestartingを無効にする、host="'0'0'0'0"ではなくローカルホストにすること
286
+
287
+ ```
288
+
289
+
290
+
159
291
  ```HTML
160
292
 
161
293
  <!doctype html>

2

index() 内の記述変更しました。

2020/10/17 06:59

投稿

akirabrian67
akirabrian67

スコア11

test CHANGED
File without changes
test CHANGED
@@ -10,6 +10,10 @@
10
10
 
11
11
  ![イメージ説明](0f87e95de7e26c1c3c94d6fdb0fa6391.png)
12
12
 
13
+ ![イメージ説明](9550a2cf78c11f0dff13e32e3f86c0ec.png)
14
+
15
+ ![イメージ説明](c9ca3a46b87d71a15c21208deca8b579.png)
16
+
13
17
 
14
18
 
15
19
  ### 該当のソースコード
@@ -189,3 +193,29 @@
189
193
  上記のソケット通信のコードをもう一つのPythonのコードに組み込み、comandという変数をそろえて実行しましたが同様のエラーが発生いたします。
190
194
 
191
195
  数日前にも同様の質問をしましたが解決できませんでした。
196
+
197
+
198
+
199
+ comand という変数が数値を受け取るものではなく、コマンド入れているだけだったので、index()内のcomand という部分をresponse に変えてみましたが、以前表示されません。
200
+
201
+ 具体的なエラーの流れは
202
+
203
+
204
+
205
+ デバック
206
+
207
+
208
+
209
+ コマンドプロンプロ上に「 Running on http://localhost:9999/ 」と表示されます (画像2)
210
+
211
+
212
+
213
+ 実際に http://localhost:9999/ に飛ぶ
214
+
215
+
216
+
217
+ 例外がスローされましたと表示される (画像1)
218
+
219
+
220
+
221
+ ブラウザは読み込み中のまま (画像3)

1

index()でcomand=comand をcomand=responseに変更いたしました。

2020/10/17 06:17

投稿

akirabrian67
akirabrian67

スコア11

test CHANGED
File without changes
test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
 
42
42
 
43
- return render_template('index.html', comand=comand)
43
+ return render_template('index.html', comand=response)
44
44
 
45
45
 
46
46