質問編集履歴
3
PressSerial.csにコンストラクタ追加
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
クラス修正
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
|
-
|
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
|
-
|
41
|
+
sensInfo.Add(new PressSerial(gno, i));
|
42
42
|
} catch
|
43
43
|
{
|
44
44
|
|
1
クラスファイルの追加・修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -32,8 +32,7 @@
|
|
32
32
|
Task.Run(async () =>
|
33
33
|
{
|
34
34
|
// 送信コマンドの編集を行って送信
|
35
|
-
CreateSendCommand(psens.
|
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
|
|