質問編集履歴

3

PressSerial.csにコンストラクタ追加

2018/06/27 03:10

投稿

Caffellattep
Caffellattep

スコア12

test CHANGED
File without changes
test CHANGED
@@ -24,12 +24,32 @@
24
24
 
25
25
 
26
26
 
27
+ // グループNo
28
+
29
+ public int GroupNo { private set; get; }
30
+
27
31
  private Serial mSerial;
28
32
 
29
33
  delegate void DisplayTextDelegate();
30
34
 
31
35
 
32
36
 
37
+ public PressSerial(int group)
38
+
39
+ {
40
+
41
+ GroupNo = group;
42
+
43
+
44
+
45
+ mSerial = new Serial(SerialEventHandler);
46
+
47
+
48
+
49
+ }
50
+
51
+
52
+
33
53
  /// シリアル通信クラス コンストラクタ
34
54
 
35
55
  public PressSerial()
@@ -50,7 +70,7 @@
50
70
 
51
71
  {
52
72
 
53
- //psenListに10台文の情報が入っている
73
+ //psenListに10台文の情報が入っている
54
74
 
55
75
  var timeout = TimeSpan.FromMilliseconds(1000);
56
76
 
@@ -244,7 +264,11 @@
244
264
 
245
265
  ```C#
246
266
 
247
- PressureSens.csユーザーがアクセスする最上位クラス
267
+ PressureSens.csユーザーがアクセスする最上位クラス
268
+
269
+ // シリアル通信クラス。要素はグループ数分。
270
+
271
+ private List<PressSerial> PressSerialList;
248
272
 
249
273
  // センサ情報リスト
250
274
 
@@ -258,8 +282,18 @@
258
282
 
259
283
  {
260
284
 
285
+ PressSerialList = new List<PressSerial>();
286
+
261
287
  PSensInfoList = new List<PressSensInfo>();
262
288
 
289
+ for (int i = 0; i < 3) // グループNo(接続したCOMポート数)が3台とする
290
+
291
+ {
292
+
293
+ PressSerialList.Add(new PressSerial(i);
294
+
295
+ }
296
+
263
297
  }
264
298
 
265
299
 

2

クラス修正

2018/06/27 03:10

投稿

Caffellattep
Caffellattep

スコア12

test CHANGED
File without changes
test CHANGED
@@ -46,7 +46,7 @@
46
46
 
47
47
 
48
48
 
49
- public async Task Hell_Async(List<PressSensInfo> psenList)
49
+ public async Task Hell_Async(int gno, int ch_su,List<PressSensInfo> psenList)
50
50
 
51
51
  {
52
52
 
@@ -54,7 +54,7 @@
54
54
 
55
55
  var timeout = TimeSpan.FromMilliseconds(1000);
56
56
 
57
- foreach (var psens in psenList)
57
+ for (int i = 0; i < ch_su; i++)
58
58
 
59
59
  {
60
60
 
@@ -78,7 +78,7 @@
78
78
 
79
79
  rc.Wait(timeout);
80
80
 
81
- psen.Value = XXX;//ここに受信した値を書き込みたい
81
+ sensInfo.Add(new PressSerial(gno, i));
82
82
 
83
83
  } catch
84
84
 

1

クラスファイルの追加・修正

2018/06/25 20:42

投稿

Caffellattep
Caffellattep

スコア12

test CHANGED
File without changes
test CHANGED
@@ -66,9 +66,7 @@
66
66
 
67
67
               // 送信コマンドの編集を行って送信
68
68
 
69
- CreateSendCommand(psens.ID); //psens.IDがキーとなる
69
+ CreateSendCommand(psens.Channel); 
70
-
71
-
72
70
 
73
71
  }));
74
72
 
@@ -244,6 +242,130 @@
244
242
 
245
243
  ```
246
244
 
245
+ ```C#
246
+
247
+ PressureSens.cs【ユーザーがアクセスする最上位クラス】
248
+
249
+ // センサ情報リスト
250
+
251
+ public List<PressSensInfo> PSensInfoList { private set; get; }
252
+
253
+
254
+
255
+ // コンストラクタ
256
+
257
+ public PressureSens()
258
+
259
+ {
260
+
261
+ PSensInfoList = new List<PressSensInfo>();
262
+
263
+ }
264
+
265
+
266
+
267
+ // センサ情報、接続台数チェックなど。
268
+
269
+ public async Task<Boolean> Initialize()
270
+
271
+ {
272
+
273
+ Boolean ret = true;
274
+
275
+
276
+
277
+ // センサ応答チェック呼び出し
278
+
279
+ await Task.Run(async () =>
280
+
281
+ {
282
+
283
+ // 実際はグループ毎に非同期で計測する。
284
+
285
+
286
+
287
+ int gno = 3; // グループNo(接続したCOMポート数)
288
+
289
+ int ch_su = 10; // 接続台数
290
+
291
+ for (int i = 0; i < gno; i++)
292
+
293
+ {
294
+
295
+ var rc = mPressSerial.Hell_Async(i, ch_su, PSensInfoList);
296
+
297
+ }
298
+
299
+ }
300
+
301
+ });
302
+
303
+ return true;
304
+
305
+ }
306
+
307
+
308
+
309
+ ```
310
+
311
+ ```C#
312
+
313
+ PressSensInfo.cs(センサデータ格納クラス)
314
+
315
+ /// 現在時刻(アラームやセンサ値など状態更新時の時刻)
316
+
317
+ public DateTime Time;
318
+
319
+ /// グループNo
320
+
321
+ public int GroupNo { private set; get; }
322
+
323
+ /// センサチャンネル
324
+
325
+ public int c { private set; get; }
326
+
327
+ /// グローバルID
328
+
329
+ /// </summary>
330
+
331
+ public int GlobalID { private set; get; }
332
+
333
+ /// センサ計測値
334
+
335
+ public Double Value = 0.0;
336
+
337
+ /// <summary>
338
+
339
+ /// センサ状態
340
+
341
+ /// </summary>
342
+
343
+ public int Status { private set; get; } = 0; // 0:待機 1:計測中 2:データエラー 3: …など
344
+
345
+
346
+
347
+ // センサデータクラスのコンストラクタ
348
+
349
+ public PressSensInfo (int group, int ch)
350
+
351
+ {
352
+
353
+ Status = 0;
354
+
355
+ Time = DateTime.Now;
356
+
357
+ GroupNo = group;
358
+
359
+ Channel = ch;
360
+
361
+ GlobalID = group * 100 + ch;
362
+
363
+ }
364
+
365
+
366
+
367
+ ```
368
+
247
369
  PressSerialクラスのHell_Asyncメソッド内でList配列のセンサ情報をloopでID情報などを送信して、センサ側からの応答を[受け取り、同じ配列データの変数に受信内容をセットするようにしたいのですが、DataReceivedイベントから、デリゲード呼び出しでPressSerialクラスのSerialEventHandler内で受信データを拾うことはできたのですが、この値をどうやってList<PressSensInfo>内にセットすれば良いか、
248
370
 
249
371
  SerialEventHandlerから上位のメソッドにコールバックする方法が分かりません。