# 英鈿 佺樂 規格
## 1. 取得成型機上 燈號與感測器數值
| 感測器 | 說明 |
| -------- |-------- |
| 計數器 | 碼錶數值 |
| 電源指示燈 | 電源開關燈 ,0未開啟,1已開啟 |
| RUN按鈕 | 按下後開始製作,計數器也會開始跳 ,0未開啟,1已開啟 |
| 主馬達過熱燈 | 異常-馬達過熱 ,0未發生,1異常發生 |
| 主馬達過載燈 | 異常-馬達過載 ,0未發生,1異常發生 |
| 低油壓指示燈 | 異常-低油壓 ,0未發生,1異常發生 |
| 計數器結束燈 | 異常-計數器結束 ,0未發生,1異常發生 |
| 短送異常燈 | 異常-短送異常 ,0未發生,1異常發生 |
| 風壓失燈 | 異常-風壓失異常 ,0未發生,1異常發生 |
| 分離式煞車未開啟燈 | 異常-分離式煞車未開啟 ,0未發生,1異常發生 |
*異常燈會根據成型機不同而有增減
## 2.將感測器數值寫入MySQL資料庫中(DZ Connect 3張表, 1張Local表),其中機器狀態Status須依照燈號邏輯判斷
### 2.1機器狀態Status邏輯判斷說明
```mermaid
graph TD
A{電源指示燈} --> |0| B["關機 Status=0"]
A{電源指示燈} --> |1| C{"異常(主馬達/低油壓/短送...)是否發生?"}
C --> |是| D["警報 Status=3"]
C --> |否| E{"RUN指示燈狀態"}
E --> |1| F["運行 Status=1"]
E --> |0| G["閒置 Status=2"]
style F fill:#00ff00
style G fill:#ffff00
style B fill:#aaaaaa
style D fill:#ff0000
```
### 2.2寫入DZ Connect資料庫:3個資料表(manyoutput, manyidle, manyalarm)
#### 2.2.1資料表`manyoutput`
- 資料寫入說明:
```mermaid
graph TD
A["Status從 0|2|3 變為1"] --> |"IPC內部紀錄 開始時間DateStart 與 開始計數器值"| B["Status從 1 變回 0|2|3"]
B --> |"IPC紀錄 結束時間DateEnd 與 結束時計數器值CountEnd,計算出持續時間TimeSpan 與此次生產數量TotalCount"| C["將上述數值利用SQL寫入DZ manyoutput"]
```
- C#範例
```C#
const ContEnd = 'O.K.'
const State = 'OUTPUT'
console.log(req.body)
const sql_mysql = "INSERT INTO manyoutput SET ?;"
const sql_condition = {
MachineNo: 'MachineNo',//機台編號(MahcineNumber)
DateStart: startTime,//起始時間
DateEnd: endTime, //結束時間
TimeSpan: timeSpan,//持續時間
TotalCount: totalCount,//此次生產數量
ContEnd: ContEnd,//同上
State: State //同上
}
```
- SQL
```SQL
Insert into idirect1.manyoutput
(MachineNo,DateStart,DateEnd,TimeSpan,TotalCount,ContEnd,State) values (…)
```
#### 2.2.2資料表 `manyidle`
- 資料寫入說明:
```mermaid
graph TD
A["Status從 0|1|3 變為2"] --> |"IPC內部紀錄 開始時間DateStart 與 開始計數器值"| B["Status從 2 變回 0|1|3"]
B --> |"IPC紀錄 結束時間DateEnd 與 結束時計數器值CountEnd,計算出持續時間TimeSpan 與此次生產數量TotalCount"| C["將上述數值利用SQL寫入DZ manyidle"]
```
- C#範例
```C#
const ContEnd = 'O.K.'
const State = IDLE
console.log(req.body)
const sql_mysql = "INSERT INTO manyidle SET ?;"
const sql_condition = {
MachineNo: 'MachineNo', //機台編號
DateStart: startTime, //起始時間
DateEnd: endTime, //結束時間
TimeSpan: timeSpan, //持續時間
ContEnd: ContEnd, //同上
State: State//同上
}
```
- SQL
```SQL
Insert into idirect1.manyidle
(MachineNo,DateStart,DateEnd,TimeSpan ,ContEnd,State) values (…)
```
#### 2.2.3 資料表 `manyalarm`
- 資料寫入說明:
```mermaid
graph TD
A["Status從 0|1|2 變為3"] --> |"IPC內部紀錄 開始時間DateStart 與 開始計數器值"| B["Status從 2 變回 0|1|2"]
B --> |"IPC紀錄 結束時間DateEnd 與 結束時計數器值CountEnd,計算出持續時間TimeSpan 與此次生產數量TotalCount"| C["將上述數值利用SQL寫入DZ manyalarm"]
```
- C#範例
```C#
const ContEnd = 'O.K.'
const State = ALARM
console.log(req.body)
const sql_mysql = "INSERT INTO manyalarm SET ?;"
const sql_condition = {
MachineNo: 'MachineNo', //機台編號
DateStart: startTime, //起始時間
DateEnd: endTime, //結束時間
TimeSpan: timeSpan, //持續時間
ContEnd: ContEnd, //同上
State: State, //同上
ConStart: 'alarmText', //警報訊息
test: 'alarmNo' // 警報編號
}
```
- SQL
```SQL
Insert into idirect1.manyalarm
(MachineNo,DateStart,DateEnd,TimeSpan ,ContEnd,State,Constart,test) values (…)
```
### 2.3 寫入IPC內資料庫:1個,讓DZ Connect抓取即時資料用
- 機器燈號資料表 SQL語法範例
```SQL
CREATE TABLE light (
id int(11) NOT NULL AUTO_INCREMENT, #自動產生
Machine varchar(20) NOT NULL, #PLC連接程式辨別機器用名稱
MachineNumber varchar(20) NOT NULL, #機器名稱 *達易抓取欄位
Count int(11) NOT NULL, #計數器(感測器數值) *達易抓取欄位
ShortSend_NG tinyint(1) NOT NULL, #短送異常燈(感測器數值) *達易抓取欄位
OilLow tinyint(1) NOT NULL, #低油壓指示燈(感測器數值) *達易抓取欄位
WindPressure tinyint(1) NOT NULL, #風壓失燈(感測器數值) *達易抓取欄位
MainMotor_OverHot tinyint(1) NOT NULL, #主馬達過熱燈(感測器數值) *達易抓取欄位
MainMotor_OverLoad tinyint(1) NOT NULL, #主馬達過載燈(感測器數值) *達易抓取欄位
SeparateBrakes_NoOpen tinyint(1) NOT NULL, #分離式煞車未開啟燈(感測器數值) *達易抓取欄
Status int(11) NOT NULL, #機器狀態,0|1|2|3 依照2.1邏輯判斷 *達易抓取欄
Run int(11) NOT NULL,
PowerSwitch int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY Light_Machine_9ae72803_uniq (`Machine`),
KEY Light_Machine_9ae72803 (`Machine`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
```

### 參考目前狀態

## 3. 將感測器狀態利用MQTT或AMPQ傳到雲端[非必要]