teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

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

2018/06/27 03:10

投稿

Caffellattep
Caffellattep

スコア12

title CHANGED
File without changes
body CHANGED
@@ -11,9 +11,19 @@
11
11
  ```C#
12
12
  PressSerial.cs
13
13
 
14
+ // グループNo
15
+ public int GroupNo { private set; get; }
14
16
  private Serial mSerial;
15
17
  delegate void DisplayTextDelegate();
16
18
 
19
+ public PressSerial(int group)
20
+ {
21
+ GroupNo = group;
22
+
23
+ mSerial = new Serial(SerialEventHandler);
24
+
25
+ }
26
+
17
27
  /// シリアル通信クラス コンストラクタ
18
28
  public PressSerial()
19
29
  {
@@ -24,7 +34,7 @@
24
34
 
25
35
  public async Task Hell_Async(int gno, int ch_su,List<PressSensInfo> psenList)
26
36
  {
27
- //psenListに10台文の情報が入っている
37
+ //psenListに10台文の情報が入っている
28
38
  var timeout = TimeSpan.FromMilliseconds(1000);
29
39
  for (int i = 0; i < ch_su; i++)
30
40
  {
@@ -121,14 +131,21 @@
121
131
 
122
132
  ```
123
133
  ```C#
124
- PressureSens.csユーザーがアクセスする最上位クラス
134
+ PressureSens.csユーザーがアクセスする最上位クラス
135
+ // シリアル通信クラス。要素はグループ数分。
136
+ private List<PressSerial> PressSerialList;
125
137
  // センサ情報リスト
126
138
  public List<PressSensInfo> PSensInfoList { private set; get; }
127
139
 
128
140
  // コンストラクタ
129
141
  public PressureSens()
130
142
  {
143
+ PressSerialList = new List<PressSerial>();
131
144
  PSensInfoList = new List<PressSensInfo>();
145
+ for (int i = 0; i < 3) // グループNo(接続したCOMポート数)が3台とする
146
+ {
147
+ PressSerialList.Add(new PressSerial(i);
148
+ }
132
149
  }
133
150
 
134
151
  // センサ情報、接続台数チェックなど。

2

クラス修正

2018/06/27 03:10

投稿

Caffellattep
Caffellattep

スコア12

title CHANGED
File without changes
body CHANGED
@@ -22,11 +22,11 @@
22
22
 
23
23
  }
24
24
 
25
- public async Task Hell_Async(List<PressSensInfo> psenList)
25
+ public async Task Hell_Async(int gno, int ch_su,List<PressSensInfo> psenList)
26
26
  {
27
27
  //psenListに10台文の情報が入っている
28
28
  var timeout = TimeSpan.FromMilliseconds(1000);
29
- foreach (var psens in psenList)
29
+ for (int i = 0; i < ch_su; i++)
30
30
  {
31
31
  var rc = await Task.WhenAny(
32
32
  Task.Run(async () =>
@@ -38,7 +38,7 @@
38
38
  try
39
39
  {
40
40
  rc.Wait(timeout);
41
- psen.Value = XXX;//ここに受信した値を書き込みたい
41
+ sensInfo.Add(new PressSerial(gno, i));
42
42
  } catch
43
43
  {
44
44
 

1

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

2018/06/25 20:42

投稿

Caffellattep
Caffellattep

スコア12

title CHANGED
File without changes
body CHANGED
@@ -32,8 +32,7 @@
32
32
  Task.Run(async () =>
33
33
  { 
34
34
               // 送信コマンドの編集を行って送信
35
- CreateSendCommand(psens.ID); //psens.IDがキーとなる
35
+ CreateSendCommand(psens.Channel); 
36
-
37
36
  }));
38
37
 
39
38
  try
@@ -121,6 +120,68 @@
121
120
  }
122
121
 
123
122
  ```
123
+ ```C#
124
+ PressureSens.cs【ユーザーがアクセスする最上位クラス】
125
+ // センサ情報リスト
126
+ public List<PressSensInfo> PSensInfoList { private set; get; }
127
+
128
+ // コンストラクタ
129
+ public PressureSens()
130
+ {
131
+ PSensInfoList = new List<PressSensInfo>();
132
+ }
133
+
134
+ // センサ情報、接続台数チェックなど。
135
+ public async Task<Boolean> Initialize()
136
+ {
137
+ Boolean ret = true;
138
+
139
+ // センサ応答チェック呼び出し
140
+ await Task.Run(async () =>
141
+ {
142
+ // 実際はグループ毎に非同期で計測する。
143
+
144
+ int gno = 3; // グループNo(接続したCOMポート数)
145
+ int ch_su = 10; // 接続台数
146
+ for (int i = 0; i < gno; i++)
147
+ {
148
+ var rc = mPressSerial.Hell_Async(i, ch_su, PSensInfoList);
149
+ }
150
+ }
151
+ });
152
+ return true;
153
+ }
154
+
155
+ ```
156
+ ```C#
157
+ PressSensInfo.cs(センサデータ格納クラス)
158
+ /// 現在時刻(アラームやセンサ値など状態更新時の時刻)
159
+ public DateTime Time;
160
+ /// グループNo
161
+ public int GroupNo { private set; get; }
162
+ /// センサチャンネル
163
+ public int c { private set; get; }
164
+ /// グローバルID
165
+ /// </summary>
166
+ public int GlobalID { private set; get; }
167
+ /// センサ計測値
168
+ public Double Value = 0.0;
169
+ /// <summary>
170
+ /// センサ状態
171
+ /// </summary>
172
+ public int Status { private set; get; } = 0; // 0:待機 1:計測中 2:データエラー 3: …など
173
+
174
+ // センサデータクラスのコンストラクタ
175
+ public PressSensInfo (int group, int ch)
176
+ {
177
+ Status = 0;
178
+ Time = DateTime.Now;
179
+ GroupNo = group;
180
+ Channel = ch;
181
+ GlobalID = group * 100 + ch;
182
+ }
183
+
184
+ ```
124
185
  PressSerialクラスのHell_Asyncメソッド内でList配列のセンサ情報をloopでID情報などを送信して、センサ側からの応答を[受け取り、同じ配列データの変数に受信内容をセットするようにしたいのですが、DataReceivedイベントから、デリゲード呼び出しでPressSerialクラスのSerialEventHandler内で受信データを拾うことはできたのですが、この値をどうやってList<PressSensInfo>内にセットすれば良いか、
125
186
  SerialEventHandlerから上位のメソッドにコールバックする方法が分かりません。
126
187