using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using XCharts.Runtime; using TMPro; using System; using UnityEngine.Networking; using System.Data; using UnityEngine.SceneManagement; using System.Net.Sockets; public class Main : MonoBehaviour { private readonly string 安卓版本號 = "1.0.6", IOS版本號 = "1.5"; public CanvasScaler canvasScaler; public BarChart chart; public BarChart chart2; public TMP_FontAsset myFont; public Sprite UIsprite;public Sprite sprite_check; AudioSource alarm_sound; [SerializeField] TMP_InputField 驗證碼_tb; [SerializeField] TextMeshProUGUI 電表編號_tb,平均電壓_tb,平均電流_tb,累計用電量_tb,副電表編號_tb,副平均電壓_tb,副平均電流_tb,副累計用電量_tb,主跑馬燈_tb,副跑馬燈_tb, 消防異常page_lb,消防跑馬燈_tb,設備編號_tb,設備位置_tb,設備樓層_tb,設備用途_tb,設備區塊_tb,試算_平均電壓_tb,試算_平均電流_tb,試算_平均功率_tb,試算_總消耗功率_tb,試算_總消耗能量_tb, 試算_電費試算_tb,試算_計算規則_tb,區間總和_tb,電費總和_tb,詳細平均電壓_tb,詳細平均電流_tb,詳細電流A相_tb,詳細電流B相_tb,詳細電流C相_tb,詳細電流不平衡A相_tb,詳細電流不平衡B相_tb, 詳細電流不平衡C相_tb,詳細電壓AB相_tb,詳細電壓BC相_tb,詳細電壓CA相_tb,詳細電壓不平衡AB相_tb,詳細電壓不平衡BC相_tb,詳細電壓不平衡CA相_tb,詳細平均有效功率_tb,詳細平均無效功率_tb, 詳細平均視在功率_tb,提供的有效電能_tb,接收的有效電能_tb,提供加接收的有效電能_tb,提供減接收的有效電能_tb,提供的無效電能_tb,接收的無效電能_tb,提供加接收的無效電能_tb,提供減接收的無效電能_tb, 提供的視在電能_tb,接收的視在電能_tb,提供加接收的視在電能_tb,提供減接收的視在電能_tb,V2_lb,V3_lb,I2_lb,I3_lb,副V2_lb,副V3_lb,副I2_lb,副I3_lb,詳V2_lb,詳V3_lb,詳I2_lb,詳I3_lb,詳P2_lb, 詳P3_lb,詳Q2_lb,詳Q3_lb,詳S2_lb,詳S3_lb,彈跳文字_tb,讀取_tb,排碳係數_lb,排碳最新係數_lb,排碳使用度數_lb,排碳量_lb; [SerializeField] GameObject 電能監控系統_pl,電能背景_ex,主跑馬燈_pl,主電力警報音效_bt,副電力警報音效_bt,副跑馬燈_pl,簡易電表_pl,小電表_pl,驗證碼_pl,彈跳_pl, 右側按鈕_pl,電費試算表_pl,試算_電表名稱_cb,試算_幣別_tb,試算_幣別_cb,電能報表_pl,開始時間_cb,結束時間_cb,電表編號_cb,詳細電表_pl,讀取_pl,超級_pl,前往商店_pl; [SerializeField] TMP_Dropdown 試算_開始年_cb,試算_結束年_cb,試算_開始月_cb,試算_結束月_cb,試算_開始日_cb,試算_結束日_cb,區間_開始_年_cb,區間_開始_月_cb,區間_開始_日_cb, 電費_開始_年_cb,電費_開始_月_cb,電費_開始_日_cb,電費_開始_小時_cb,電費_結束_年_cb,電費_結束_月_cb,電費_結束_日_cb,電費_結束_小時_cb,排碳_年_cb,排碳_月_cb,排碳_日_cb,客戶名稱_cb; [SerializeField] Slider 詳V1,詳V2,詳V3,詳I1,詳I2,詳I3; [SerializeField] private List 控件圖片 = new List(); [SerializeField] private List W = new List();[SerializeField] private List 安全運行天數_img = new List(); public Transform 小電表清單_tp;public GameObject 小電表清單_rpf;public GameObject 小電表清單_ct; public Transform 簡易電表清單_tp;public GameObject 簡易電表清單_rpf;public GameObject 簡易電表清單_ct; public LineChart 電費_chart,年用電_chart; public BarChart 電壓_barchart,電流_barchart,功率_barchart,度數_chart; public Transform 電費清單_tp;public GameObject 電費清單_rpf;public GameObject 電費清單_ct;public GameObject 電費清單_lpf; public Transform 年用電清單_tp;public GameObject 年用電清單_rpf;public GameObject 年用電清單_ct;public GameObject 年用電清單_lpf; public Transform 度數清單_tp;public GameObject 度數清單_rpf;public GameObject 度數清單_ct;public GameObject 度數清單_lpf; //public AdMobManager adMobManager; private float timer=0; private bool 載入完畢=false,已開啟=false; public float maxButtonPressInterval = 3f; public int requiredButtonPressCount = 2; private string loadingText = ""; private int dotCount = 0; void Awake(){ Global.Zoneoffset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).Hours-7; alarm_sound = GetComponent(); Global.年=DateTime.Now.Year.ToString(); Global.上次功率因素數值=0;Global.上次副功率因素數值=0; 讀取_pl.SetActive(true);StartCoroutine(AnimateText()); } void Start(){ Screen.autorotateToPortrait = false; Screen.orientation = ScreenOrientation.LandscapeLeft; float screenWidth = Screen.width; float screenHeight = Screen.height; float rate = screenWidth/screenHeight; if (canvasScaler == null){ canvasScaler = GetComponent(); } if (rate>(1900f/900f)){ canvasScaler.matchWidthOrHeight = 1f; } else{ canvasScaler.matchWidthOrHeight = 0f; } if(Global.初次載入主畫面){ //adMobManager.RequestBanner(); Global.Wnum = new Sprite[] {W[0],W[1],W[2],W[3],W[4],W[5],W[6],W[7],W[8],W[9]}; Global.sprite_check=sprite_check; Global.sprite_box=UIsprite; Global.初次載入主畫面=false; SQL_CommString.SQL_連線字串_外(); SQL_Module.TestSQL(SQL_Module.ConString4); if(!SQL_Module.T_SQL){ 彈跳_pl.SetActive(true); 讀取_pl.SetActive(false); 彈跳文字_tb.text="伺服器維護中,請稍後再重新登入"; Global.彈跳狀態="伺服器維護"; } SQL_CommString.SQL_連線字串_外2(); SQL_ele_sys.SQL_取得版本號(); if(SQL_Module.dr.Read()){ string 系統版本號1="",系統版本號2=""; #if UNITY_ANDROID 系統版本號1=SQL_Module.dr[0].ToString(); 系統版本號2=SQL_Module.dr[1].ToString(); if(安卓版本號 != 系統版本號1 && 安卓版本號 != 系統版本號2){ 讀取_pl.SetActive(false); 前往商店_pl.SetActive(true); //adMobManager.HideBanner(); } #elif UNITY_IPHONE 系統版本號1=SQL_Module.dr[2].ToString(); 系統版本號2=SQL_Module.dr[3].ToString(); if(IOS版本號 != 系統版本號1 && IOS版本號 != 系統版本號2){ 讀取_pl.SetActive(false); 前往商店_pl.SetActive(true); //adMobManager.HideBanner(); } #else 系統版本號1=SQL_Module.dr[0].ToString(); 系統版本號2=SQL_Module.dr[1].ToString(); if(安卓版本號 != 系統版本號1 && 安卓版本號 != 系統版本號2){ 讀取_pl.SetActive(false); 前往商店_pl.SetActive(true); //adMobManager.HideBanner(); } #endif } SQL_ele_sys.SQL_取得PHP(); if(SQL_Module.dr.Read()){ Global.PHP路徑=SQL_Module.dr[0].ToString(); } if(PlayerPrefs.HasKey("客戶代號")){ Global.客戶代號 = PlayerPrefs.GetString("客戶代號"); }else{ Global.客戶代號 = "GCM"; } Debug.Log(Global.客戶代號); if(Global.PHP路徑==""){ 彈跳_pl.SetActive(true); 彈跳文字_tb.text="與伺服器連線異常,請稍後再重新登入"; Global.彈跳狀態="PHP路徑取得異常"; }else{ Debug.Log(Global.PHP路徑); StartCoroutine(PostRequest(10,"取得資料庫_"+ Global.客戶代號,"")); StartCoroutine(PostRequest(11,"取得電表_" + Global.客戶代號,"")); StartCoroutine(PostRequest(12,"是否為PLC_" + Global.客戶代號,"")); } SQL_ele_sys.SQL_取得排碳係數(); DataSet ds1 = new(); SQL_Module.da.Fill(ds1); Global.排碳係數表 = ds1.Tables[0]; if(PlayerPrefs.HasKey("副電表編號")){ 副電表編號_tb.text=PlayerPrefs.GetString("副電表編號"); } 排碳_年_cb.ClearOptions(); 排碳_年_cb.AddOptions(Global.年度Options); 排碳_年_cb.value=Global.年度Options.IndexOf(DateTime.Today.Year.ToString()); 刷新排碳係數(); 排碳_月_cb.ClearOptions(); List 月份 = new() { "","一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月" }; 排碳_月_cb.AddOptions(月份); 排碳_月_cb.value= 0; 排碳_日_cb.ClearOptions(); 已開啟=true; } } void Update(){ timer += Time.deltaTime; Global.deleytime += Time.deltaTime; if(!Global.載入電表名稱Option){ Global.電表名稱Option.Clear(); for(int i =0;i<=Global.電表數量-1;i++){ Global.電表名稱Option.Add(Global.電表名稱[i]); } Global.載入電表名稱Option=true; } if(Global.資料來源=="pi" && timer >= 3f && Global.系統選擇=="電能監控系統" && !電能報表_pl.activeInHierarchy && Global.PHP_Load_End_電表即時路徑){ timer=0f; for(int i=0;i<=Global.電表數量-1;i++){ StartCoroutine(PostRequest_電表資料(Global.電表資料清單.Rows[i][0].ToString())); } if(詳細電表_pl.activeInHierarchy){ 載入詳細電表資料(); }else{ 載入主電表資料(); 載入副電表資料(); 載入簡易電表資料(); } //載入電表異常(); }else if(Global.資料來源 == "PLC" && timer >= 3f && Global.系統選擇=="電能監控系統" && !電能報表_pl.activeInHierarchy){ timer=0f; if(Global.客戶代號=="GCM"){ StartCoroutine(PostRequest_電表資料PLC(0,"RDS D6.U 146\r")); //StartCoroutine(PostRequest_電表資料PLC(1,"RDS M970 " + Global.電表數量.ToString() + "\r")); StartCoroutine(PostRequest_電表資料PLC(2,"RDS D1006.U 146\r")); StartCoroutine(PostRequest_電表資料PLC(3,"RDS D2006.U 146\r")); StartCoroutine(PostRequest_電表資料PLC(4,"RDS D3006.U 146\r")); StartCoroutine(PostRequest_電表資料PLC(5,"RDS D4006.U 146\r")); StartCoroutine(PostRequest_電表資料PLC(6,"RDS D5006.U 146\r")); StartCoroutine(PostRequest_電表資料PLC(7,"RDS D6006.U 146\r")); }else{ StartCoroutine(PostRequest_電表資料PLC(0,"RDS D6.U 146\r")); //StartCoroutine(PostRequest_電表資料PLC(1,"RDS M970 " + Global.電表數量.ToString() + "\r")); StartCoroutine(PostRequest_電表資料PLC(2,"RDS D206.U 146\r")); StartCoroutine(PostRequest_電表資料PLC(3,"RDS D406.U 146\r")); StartCoroutine(PostRequest_電表資料PLC(4,"RDS D606.U 146\r")); StartCoroutine(PostRequest_電表資料PLC(5,"RDS D806.U 146\r")); StartCoroutine(PostRequest_電表資料PLC(6,"RDS D1006.U 146\r")); StartCoroutine(PostRequest_電表資料PLC(7,"RDS D1206.U 146\r")); } if(詳細電表_pl.activeInHierarchy){ 載入詳細電表資料(); }else{ 載入主電表資料(); 載入副電表資料(); 載入簡易電表資料(); } //載入電表異常(); } /*if(Global.長案){ Global.長案=false; if(電能監控系統_pl.activeInHierarchy && !電能報表_pl.activeInHierarchy && !詳細電表_pl.activeInHierarchy){ open_report(); }else if(電能報表_pl.activeInHierarchy || 詳細電表_pl.activeInHierarchy){ 電能監控系統(); } }*/ /*if(Global.連點[0]){ Global.連點[0]=false; Open_detail(0); } if(Global.連點[1]){ Global.連點[1]=false; Open_detail(1); }*/ if(電能報表_pl.activeInHierarchy || 詳細電表_pl.activeInHierarchy){ if (Input.touchCount == 2 || Input.GetMouseButton(2) || Input.GetMouseButton(1)){ 電能監控系統(); Global.長案=false; //adMobManager.RequestBanner(); } } //============== /*if(主跑馬燈_pl.activeInHierarchy==true || 副跑馬燈_pl.activeInHierarchy==true ){ if(timer2>=0.5f){ timer2=0; if(主跑馬燈_tb.text != "" && 主跑馬燈_tb.text.Length>=50){主跑馬燈_tb.text = 文字旋轉(主跑馬燈_tb.text, -1);} if(副跑馬燈_tb.text != "" && 副跑馬燈_tb.text.Length>=50 ){副跑馬燈_tb.text = 文字旋轉(副跑馬燈_tb.text, -1);} if(消防跑馬燈_tb.text != "" && 消防跑馬燈_tb.text.Length>=25 ){消防跑馬燈_tb.text = 文字旋轉(消防跑馬燈_tb.text, -1);} } } if(Global.系統選擇 != "消防系統" ){ if(timer5>=3600f){ timer5=0; 電能監控系統(); } }else{ timer5=0; } if(Global.電表異常BL[1]==true || Global.副電表有異常==true){ if(Global.Ele_alarm_sound==true ){ if(!alarm_sound.isPlaying){ alarm_sound.Play(); } }else{ alarm_sound.Stop(); } }else{ alarm_sound.Stop(); } if(Global.連點[0]){ Global.連點[0]=false; open_detail(0); } if(Global.連點[1]){ Global.連點[1]=false; open_detail(1); } if(電能報表_pl.activeInHierarchy || 詳細電表_pl.activeInHierarchy){ if (Input.touchCount == 3 || Input.GetMouseButton(2) || Input.GetMouseButton(1)){ 電能監控系統(); Main.Global.長案=false; } } if(Global.PHP_Load_End9){ Global.PHP_Load_End9=false; string alarm_data = Global.PHP_Report9; string 介面="H01";string ele_data="";string 語言; 語言="CH"; for(int i=0;i<=18;i++){ if(alarm_data.Substring(i*2,1)=="1"){ //ele_data += Global.系統語言字典[介面+(i+7).ToString("00")+語言].Trim()+" "; int[] Abase=new int[]{0,2,3,6,8,9,11,12,15}; int[] Bbase=new int[]{0,1,4,6,7,9,10,13,16}; int[] Cbase=new int[]{1,2,5,7,8,10,11,14,17}; if(Abase.Contains(i)){ foreach (Image pic in 小電表清單_ct.GetComponentsInChildren()){ if(pic.name.Contains("R_"+Global.電表異常num.ToString())){ pic.color=new Color(1f,0f,0.05212975f,1f); } } }else if(Bbase.Contains(i)){ foreach (Image pic in 小電表清單_ct.GetComponentsInChildren()){ if(pic.name.Contains("S_"+Global.電表異常num.ToString())){ pic.color=new Color(1f,0f,0.05212975f,1f); } } }else if(Cbase.Contains(i)){ foreach (Image pic in 小電表清單_ct.GetComponentsInChildren()){ if(pic.name.Contains("T_"+Global.電表異常num.ToString())){ pic.color=new Color(1f,0f,0.05212975f,1f); } } } } } if(Global.主電表上次異常內容 != ele_data){ 主跑馬燈_tb.text = ele_data; Global.主電表上次異常內容 = ele_data; } if(Global.副電表上次異常內容 != ele_data){ 副跑馬燈_tb.text = ele_data; Global.副電表上次異常內容 = ele_data; } }*/ if(Global.PHP_Load_End_取得資料庫路徑 && Global.PHP_Load_End_電表資料來源){ Global.PHP_Load_End_取得資料庫路徑=false;Global.PHP_Load_End_電表資料來源=false; 取得電表資料資料庫(); 安全運行天數(); 電能監控系統(); 切換排碳時間(); 讀取_pl.SetActive(false); } } public void 開啟驗證碼(){ 驗證碼_pl.SetActive(true); if(PlayerPrefs.HasKey("驗證碼")){ 驗證碼_tb.text = PlayerPrefs.GetString("驗證碼"); if(驗證碼_tb.text=="0003065795" || 驗證碼_tb.text=="wswtony1234"){ SQL_ele_sys.SQL_電表客戶名稱(); DataSet ds1 = new(); SQL_Module.da.Fill(ds1); Global.客戶名稱表 = ds1.Tables[0]; List 客戶名稱Options = new(); for(int i=0;i<=Global.客戶名稱表.Rows.Count-1;i++){ 客戶名稱Options.Add(Global.客戶名稱表.Rows[i][0].ToString()); } 客戶名稱_cb.ClearOptions(); 客戶名稱_cb.AddOptions(客戶名稱Options); 超級_pl.SetActive(true); } }else{ 驗證碼_tb.text = ""; } } public void 輸入驗證碼(){ if(驗證碼_tb.text=="0003065795" || 驗證碼_tb.text=="wswtony1234"){ if(!超級_pl.activeInHierarchy){ SQL_ele_sys.SQL_電表客戶名稱(); DataSet ds1 = new(); SQL_Module.da.Fill(ds1); Global.客戶名稱表 = ds1.Tables[0]; List 客戶名稱Options = new(); for(int i=0;i<=Global.客戶名稱表.Rows.Count-1;i++){ 客戶名稱Options.Add(Global.客戶名稱表.Rows[i][0].ToString()); } 客戶名稱_cb.ClearOptions(); 客戶名稱_cb.AddOptions(客戶名稱Options); 超級_pl.SetActive(true); } }else{ string 舊驗證碼 = ""; if(PlayerPrefs.HasKey("驗證碼")){ 舊驗證碼 = PlayerPrefs.GetString("驗證碼"); } if(驗證碼_tb.text != "" && 驗證碼_tb.text != 舊驗證碼){ SQL_ele_sys.SQL_驗證碼判斷(驗證碼_tb.text); if(SQL_Module.dr.Read()){ Global.客戶代號 = SQL_Module.dr[2].ToString(); if(PlayerPrefs.HasKey("客戶代號")){PlayerPrefs.DeleteKey("客戶代號");} PlayerPrefs.SetString("客戶代號",Global.客戶代號); if(PlayerPrefs.HasKey("驗證碼")){PlayerPrefs.DeleteKey("驗證碼");} PlayerPrefs.SetString("驗證碼",驗證碼_tb.text); 彈跳_pl.SetActive(true); //adMobManager.HideBanner(); 彈跳文字_tb.text="驗證碼認證成功,請重新開啟APP"; if(PlayerPrefs.HasKey("副電表編號")){PlayerPrefs.DeleteKey("副電表編號");} Global.彈跳狀態="驗證碼認證成功"; } }else{ 彈跳_pl.SetActive(true); 彈跳文字_tb.text="驗證碼有誤,請確認驗證碼是否正確!"; Global.彈跳狀態="驗證碼認證失敗"; } } } public void 切換驗證碼(){ for(int i=0;i<=Global.客戶名稱表.Rows.Count-1;i++){ if(客戶名稱_cb.options[客戶名稱_cb.value].text==Global.客戶名稱表.Rows[i][0].ToString()){ string 新驗證碼 = Global.客戶名稱表.Rows[i][1].ToString(); SQL_ele_sys.SQL_驗證碼判斷(新驗證碼); if(SQL_Module.dr.Read()){ Global.客戶代號 = SQL_Module.dr[2].ToString(); if(PlayerPrefs.HasKey("客戶代號")){PlayerPrefs.DeleteKey("客戶代號");} PlayerPrefs.SetString("客戶代號",Global.客戶代號); if(PlayerPrefs.HasKey("驗證碼")){PlayerPrefs.DeleteKey("驗證碼");} PlayerPrefs.SetString("驗證碼",驗證碼_tb.text); if(PlayerPrefs.HasKey("副電表編號")){PlayerPrefs.DeleteKey("副電表編號");} 超級_pl.SetActive(false);電表編號_tb.text="PANEL EMVCB#1";副電表編號_tb.text="PANEL EMVCB#1"; Global.初次載入主畫面=true; string sceneName = SceneManager.GetActiveScene().name; SceneManager.LoadScene(sceneName); } } } } public void 回原廠(){ if(PlayerPrefs.HasKey("驗證碼")){PlayerPrefs.DeleteKey("驗證碼");} if(PlayerPrefs.HasKey("客戶代號")){PlayerPrefs.DeleteKey("客戶代號");} if(PlayerPrefs.HasKey("副電表編號")){PlayerPrefs.DeleteKey("副電表編號");} 彈跳_pl.SetActive(true); 彈跳文字_tb.text="已回復原廠設定,請重新開啟APP"; Global.彈跳狀態="回原廠成功"; } private void 取得電表資料資料庫(){ SQL_ele_sys.SQL_電表資料資料庫(Global.客戶代號); DataSet ds1 = new(); SQL_Module.da.Fill(ds1); Global.電表資料資料庫清單=ds1.Tables[0]; } private void 刷新排碳係數(){ for(int i=0;i<=Global.排碳係數表.Rows.Count-1;i++){ if(Global.排碳係數表.Rows[i][0].ToString()==排碳_年_cb.options[排碳_年_cb.value].text){ 排碳係數_lb.text=Global.排碳係數表.Rows[i][1].ToString(); }else{ 排碳係數_lb.text=Global.排碳係數表.Rows[0][1].ToString(); } } 排碳最新係數_lb.text = Global.排碳係數表.Rows[0][0].ToString(); } public void 切換排碳時間(){ if(已開啟){ string 排碳時間選擇="月"; if(排碳_月_cb.value==0 && 排碳_日_cb.value==0){ 排碳時間選擇="月"; }else if(排碳_月_cb.value !=0 && 排碳_日_cb.value==0){ 排碳時間選擇="日"; }else if(排碳_月_cb.value !=0 && 排碳_日_cb.value!=0){ 排碳時間選擇="小時"; } Moudle.載入日期(2,排碳_年_cb,排碳_月_cb,排碳_日_cb); 計算排碳(排碳時間選擇); } } private void 計算排碳(string 排碳時間選擇){ //讀取_pl.SetActive(true); string 電表編號 = 副電表編號_tb.text; int 電表id=0; string 流水號=取得流水號(副電表編號_tb.text);string 電表編號改="";string 電表迴路="";string 功率單位=""; for(int i=0;i<=Global.電表資料清單.Rows.Count-1;i++){ if(Global.電表資料清單.Rows[i][0].ToString().Contains(流水號)){ 電表id=i; 電表編號改 = Global.電表資料清單.Rows[i][3].ToString(); 電表迴路 = Global.電表資料清單.Rows[i][4].ToString(); if(Global.資料來源=="PLC"){ 功率單位 = Global.電表資料清單.Rows[i]["圖表顯示功率"].ToString(); }else{ 功率單位 = Global.電表資料清單.Rows[i][9].ToString(); } } } string p;if(電表迴路=="迴路1"){p="P1";}else{p="P2";}string 倍率;if(功率單位=="W"){倍率="1000";}else{倍率="1";} int N_year =int.Parse(排碳_年_cb.options[排碳_年_cb.value].text); int N_month = 排碳_月_cb.GetComponent().value; int N_day = 排碳_日_cb.GetComponent().value; List TimeData = new(){"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"}; DataTable ds3 = new(); float 排碳度數總和 = 0; if(排碳時間選擇=="小時"){ ds3.Columns.Add("小時",typeof(string));ds3.Columns.Add("度數",typeof(string)); }else if(排碳時間選擇=="日"){ ds3.Columns.Add("日期",typeof(string));ds3.Columns.Add("度數",typeof(string)); }else{ ds3.Columns.Add("月份",typeof(string));ds3.Columns.Add("度數",typeof(string)); } bool 有無 = 資料庫判斷(N_year.ToString()); if(有無 && 流水號!=null){ List 清單 = 資料庫明細(N_year.ToString()); string SQL語法="SELECT "; if(排碳時間選擇=="小時"){ for(int n=0;n<=23;n++){ string 開始時間=N_year.ToString().PadLeft(4,'0')+N_month.ToString().PadLeft(2,'0')+N_day.ToString().PadLeft(2,'0')+n.ToString().PadLeft(2,'0')+"0000"; string 結束時間=N_year.ToString().PadLeft(4,'0')+N_month.ToString().PadLeft(2,'0')+N_day.ToString().PadLeft(2,'0')+n.ToString().PadLeft(2,'0')+"5959"; for(int j=0;j<=清單.Count-1;j++){ if(Global.資料來源=="PLC"){ SQL語法+=@"(SELECT SUM(度) AS Expr1 FROM (SELECT CONVERT(VARCHAR(10), 上傳時間, 120) AS 日期, AVG(CAST(總平均功率 AS FLOAT) * "+ 倍率 +@") AS 度 FROM ["+清單[j]+"].dbo.電表資料表 AS 電表資料表_"+n.ToString().PadLeft(2,'0')+"_"+j.ToString().PadLeft(2,'0')+@" WHERE (電表編號 LIKE N'"+電表編號+ "') AND (上傳時間 BETWEEN '"+開始時間+"' AND '"+結束時間+@"') GROUP BY CONVERT(VARCHAR(10), 上傳時間, 120)) AS DailyAverages_"+n.ToString().PadLeft(2,'0')+"_"+j.ToString().PadLeft(2,'0')+") AS 總P_"+n.ToString().PadLeft(2,'0')+"_"+j.ToString().PadLeft(2,'0')+","; }else{ SQL語法+="(SELECT SUM(度) AS Expr1 FROM (SELECT CONVERT(VARCHAR(10), 上傳時間, 120) AS 日期, AVG(CAST("+ p +" AS FLOAT) * "+ 倍率 +@") AS 度 FROM ["+清單[j]+"].dbo.電表資料表 AS 電表資料表_"+n.ToString().PadLeft(2,'0')+"_"+j.ToString().PadLeft(2,'0')+@" WHERE (電表編號 LIKE N'"+電表編號改+ "') AND (上傳時間 BETWEEN '"+開始時間+"' AND '"+結束時間+@"') GROUP BY CONVERT(VARCHAR(10), 上傳時間, 120)) AS DailyAverages_"+n.ToString().PadLeft(2,'0')+"_"+j.ToString().PadLeft(2,'0')+") AS 總P_"+n.ToString().PadLeft(2,'0')+"_"+j.ToString().PadLeft(2,'0')+","; } } } }else if(排碳時間選擇=="日"){ for(int n=1;n<=DateTime.DaysInMonth(N_year,N_month);n++){ string 開始時間=N_year.ToString()+N_month.ToString().PadLeft(2,'0')+n.ToString().PadLeft(2,'0')+"000000"; string 結束時間=N_year.ToString()+N_month.ToString().PadLeft(2,'0')+n.ToString().PadLeft(2,'0')+"235959"; for(int j=0;j<=清單.Count-1;j++){ if(Global.資料來源=="PLC"){ SQL語法+=@"(SELECT SUM(度) AS Expr1 FROM (SELECT CONVERT(VARCHAR(10), 上傳時間, 120) AS 日期, AVG(CAST(總平均功率 AS FLOAT) * "+ 倍率 +@") AS 度 FROM ["+清單[j]+"].dbo.電表資料表 AS 電表資料表_"+n.ToString().PadLeft(2,'0')+"_"+j.ToString().PadLeft(2,'0')+@" WHERE (電表編號 LIKE N'"+電表編號+ "') AND (上傳時間 BETWEEN '"+開始時間+"' AND '"+結束時間+@"') GROUP BY CONVERT(VARCHAR(10), 上傳時間, 120)) AS DailyAverages_"+n.ToString().PadLeft(2,'0')+"_"+j.ToString().PadLeft(2,'0')+") AS 總P_"+n.ToString().PadLeft(2,'0')+"_"+j.ToString().PadLeft(2,'0')+","; }else{ SQL語法+=@"(SELECT SUM(度) AS Expr1 FROM (SELECT CONVERT(VARCHAR(10), 上傳時間, 120) AS 日期, AVG(CAST("+ p +" AS FLOAT) * "+ 倍率 +@") AS 度 FROM ["+清單[j]+"].dbo.電表資料表 AS 電表資料表_"+n.ToString().PadLeft(2,'0')+"_"+j.ToString().PadLeft(2,'0')+@" WHERE (電表編號 LIKE N'"+電表編號改+ "') AND (上傳時間 BETWEEN '"+開始時間+"' AND '"+結束時間+@"') GROUP BY CONVERT(VARCHAR(10), 上傳時間, 120)) AS DailyAverages_"+n.ToString().PadLeft(2,'0')+"_"+j.ToString().PadLeft(2,'0')+") AS 總P_"+n.ToString().PadLeft(2,'0')+"_"+j.ToString().PadLeft(2,'0')+","; } } } }else{ for(int n=0;n<=Global.月份Options_中.Count-1;n++){ string 開始時間=N_year.ToString()+(n+1).ToString().PadLeft(2,'0')+"01000000"; string 結束時間=N_year.ToString()+(n+1).ToString().PadLeft(2,'0')+"31235959"; for(int j=0;j<=清單.Count-1;j++){ if(Global.資料來源=="PLC"){ SQL語法+=@"(SELECT SUM(度) AS Expr1 FROM (SELECT CONVERT(VARCHAR(10), 上傳時間, 120) AS 日期, AVG(CAST(總平均功率 AS FLOAT) * "+ 倍率 +@") AS 度 FROM ["+清單[j]+"].dbo.電表資料表 AS 電表資料表_"+n.ToString().PadLeft(2,'0')+"_"+j.ToString().PadLeft(2,'0')+@" WHERE (電表編號 LIKE N'"+電表編號+ "') AND (上傳時間 BETWEEN '"+開始時間+"' AND '"+結束時間+@"') GROUP BY CONVERT(VARCHAR(10), 上傳時間, 120)) AS DailyAverages_"+n.ToString().PadLeft(2,'0')+"_"+j.ToString().PadLeft(2,'0')+") AS 總P_"+n.ToString().PadLeft(2,'0')+"_"+j.ToString().PadLeft(2,'0')+","; }else{ SQL語法+=@"(SELECT SUM(度) AS Expr1 FROM (SELECT CONVERT(VARCHAR(10), 上傳時間, 120) AS 日期, AVG(CAST("+ p +" AS FLOAT) * "+ 倍率 +@") AS 度 FROM ["+清單[j]+"].dbo.電表資料表 AS 電表資料表_"+n.ToString().PadLeft(2,'0')+"_"+j.ToString().PadLeft(2,'0')+@" WHERE (電表編號 LIKE N'"+電表編號改+ "') AND (上傳時間 BETWEEN '"+開始時間+"' AND '"+結束時間+@"') GROUP BY CONVERT(VARCHAR(10), 上傳時間, 120)) AS DailyAverages_"+n.ToString().PadLeft(2,'0')+"_"+j.ToString().PadLeft(2,'0')+") AS 總P_"+n.ToString().PadLeft(2,'0')+"_"+j.ToString().PadLeft(2,'0')+","; } } } } SQL語法 = SQL語法[..^",".Length]; SQL_ele_sys.SQL_載入區間表格_月_改(SQL語法); if(SQL_Module.dr.Read()){ if(排碳時間選擇=="小時"){ for(int n=0;n<=23;n++){ DataRow row = ds3.NewRow(); row["小時"] =n.ToString().PadLeft(2,'0'); float 度數=0; for(int s=0;s<=SQL_Module.dr.FieldCount-1;s++){ string colname = SQL_Module.dr.GetName(s); if(int.Parse(colname.Substring(3,2))==n){ if(SQL_Module.dr[s].ToString()!=""){ 度數 += float.Parse(SQL_Module.dr[s].ToString()); } } } if(Global.電表功率單位[電表id] == "W"){ row["度數"] = (度數 / 1000).ToString("#,##0.##"); 排碳度數總和 += 度數 / 1000; }else{ row["度數"] = 度數.ToString("#,##0.##"); 排碳度數總和 += 度數; } ds3.Rows.Add(row); } }else if(排碳時間選擇=="日"){ for(int n=0;n<=DateTime.DaysInMonth(N_year,N_month)-1;n++){ DataRow row = ds3.NewRow(); row["日期"] =TimeData[n]; float 度數=0; for(int s=0;s<=SQL_Module.dr.FieldCount-1;s++){ string colname = SQL_Module.dr.GetName(s); if(int.Parse(colname.Substring(3,2))==n+1){ if(SQL_Module.dr[s].ToString()!=""){ 度數 += float.Parse(SQL_Module.dr[s].ToString()); } } } if(Global.電表功率單位[電表id] == "W"){ row["度數"] = (度數 / 1000).ToString("#,##0.##"); 排碳度數總和 += 度數 / 1000; }else{ row["度數"] = 度數.ToString("#,##0.##"); 排碳度數總和 += 度數; } ds3.Rows.Add(row); } }else{ for(int n=0;n<=Global.月份Options_中.Count-1;n++){ DataRow row = ds3.NewRow(); row["月份"] = Global.月份Options_中[n]; float 度數=0; for(int s=0;s<=SQL_Module.dr.FieldCount-1;s++){ string colname = SQL_Module.dr.GetName(s); if(int.Parse(colname.Substring(3,2))==n){ if(SQL_Module.dr[s].ToString()!=""){ 度數 += float.Parse(SQL_Module.dr[s].ToString()); } } } if(Global.電表功率單位[電表id] == "W"){ row["度數"] = (度數 / 1000).ToString("#,##0.##"); 排碳度數總和 += 度數 / 1000; }else{ row["度數"] = 度數.ToString("#,##0.##"); 排碳度數總和 += 度數; } ds3.Rows.Add(row); } } } } 排碳使用度數_lb.text = string.Format("{0:###,##0.##}",排碳度數總和); float 排碳係數 = float.Parse(排碳係數_lb.text); float 排碳量 = 排碳係數 * 排碳度數總和 / 1000; 排碳量_lb.text = string.Format("{0:###,##0.###}",排碳量); } //============================ public void 電能監控系統(){ 電能報表_pl.SetActive(false);詳細電表_pl.SetActive(false); if(!電能監控系統_pl.activeInHierarchy){電能監控系統_pl.SetActive(true);} //Global.資料來源 = "PLC"; Global.系統選擇 = "電能監控系統"; 載入電表編號資料(); //載入小電表(); 載入簡易電表(); 載入圖表上限(); Color[] colorr =new Color[3]{new Color(0,0,0,0),new Color(0,0,0,1),new Color(1,1,1,1)}; Color[] colobr =new Color[3]{new Color(0,0,0,0),new Color(1,1,1,1),new Color(0,0,0,1)}; Color fontcolor=colorr[Global.系統主題]; Color color2 = new Color(0.97f, 0.48f, 0.99f, 1f); Moudle.BarChart_表格設定(chart,fontcolor,color2,false,false,false); Moudle.BarChart_表格設定(chart2,fontcolor,color2,false,false,false); Moudle.BarChart_表格設定(電壓_barchart,fontcolor,color2,false,false,false); Moudle.BarChart_表格設定(電流_barchart,fontcolor,color2,false,false,false); Moudle.BarChart_表格設定(功率_barchart,fontcolor,color2,false,false,false); Moudle.LineChart_表格設定(電費_chart,fontcolor,color2,false,true,true); Moudle.LineChart_表格設定(年用電_chart,fontcolor,color2,false,true,true); Moudle.BarChart_表格設定(度數_chart,fontcolor,color2,false,true,true); //載入主電表資料(); /*if(!string.IsNullOrEmpty(Global.電表名稱[1])){ 載入副電表資料(Global.電表名稱[1]); } 載入電表異常(); //載入系統主題(); 載入簡易電表資料(); 載入圖表上限(); Color[] colorr =new Color[3]{new Color(0,0,0,0),new Color(0,0,0,1),new Color(1,1,1,1)}; Color[] colobr =new Color[3]{new Color(0,0,0,0),new Color(1,1,1,1),new Color(0,0,0,1)}; Color fontcolor=colorr[Global.系統主題]; Color color2 = new Color(0.97f, 0.48f, 0.99f, 1f); Moudle.BarChart_表格設定(chart,fontcolor,color2,false,false,false); Moudle.BarChart_表格設定(chart2,fontcolor,color2,false,false,false); Moudle.BarChart_表格設定(電壓_barchart,fontcolor,color2,false,false,false); Moudle.BarChart_表格設定(電流_barchart,fontcolor,color2,false,false,false); Moudle.BarChart_表格設定(功率_barchart,fontcolor,color2,false,false,false); Moudle.LineChart_表格設定(電費_chart,fontcolor,color2,false,true,true); Moudle.LineChart_表格設定(年用電_chart,fontcolor,color2,false,true,true); Moudle.BarChart_表格設定(度數_chart,fontcolor,color2,false,true,true);*/ } private void 安全運行天數(){ if(Global.上次更新天數 != DateTime.Now.Day){ DateTime day2 = DateTime.Now; int dayear, damonth, daday; if(DateTime.Now.Year > 2023){ dayear = DateTime.Now.Year - 2023; day2 = day2.AddYears(-dayear); } if(DateTime.Now.Month > 1){ damonth = DateTime.Now.Month - 1; day2 = day2.AddMonths(-damonth); } if(DateTime.Now.Day > 1){ daday = DateTime.Now.Day - 1; day2 = day2.AddDays(-daday); } Global.運行天數 = new TimeSpan(DateTime.Now.Ticks - day2.Ticks); string ddd = Global.運行天數.Days.ToString().PadLeft(5,'0'); 安全運行天數_img[0].sprite = Global.Wnum[int.Parse(ddd.Substring(0,1))]; 安全運行天數_img[1].sprite = Global.Wnum[int.Parse(ddd.Substring(1,1))]; 安全運行天數_img[2].sprite = Global.Wnum[int.Parse(ddd.Substring(2,1))]; 安全運行天數_img[3].sprite = Global.Wnum[int.Parse(ddd.Substring(3,1))]; 安全運行天數_img[4].sprite = Global.Wnum[int.Parse(ddd.Substring(4,1))]; } } private void 載入電表編號資料(){ try{ SQL_ele_sys.SQL_電表清單資料(Global.客戶代號); DataSet ds1 = new(); SQL_Module.da.Fill(ds1); Global.電表資料清單=ds1.Tables[0]; Global.電表數量 = ds1.Tables[0].Rows.Count; if(電表編號_tb.text=="PANEL EMVCB#1" && Global.客戶代號 !="GCM"){ 電表編號_tb.text=ds1.Tables[0].Rows[0][1].ToString(); } if(副電表編號_tb.text=="PANEL EMVCB#1" && Global.客戶代號 !="GCM"){ 副電表編號_tb.text=ds1.Tables[0].Rows[0][1].ToString(); } for(int i=0;i<=Global.電表數量-1;i++){ Global.電表名稱[i]=ds1.Tables[0].Rows[i][1].ToString(); if(Global.資料來源=="PLC"){ Global.電表功率單位[i]=ds1.Tables[0].Rows[i]["圖表顯示功率"].ToString(); Global.圖表最大電壓[i]=ds1.Tables[0].Rows[i]["圖表顯示電壓"].ToString(); Global.圖表最大電流[i]=ds1.Tables[0].Rows[i]["圖表顯示電流"].ToString(); Global.圖表最大功率[i]=ds1.Tables[0].Rows[i]["圖表最大功率"].ToString(); }else{ Global.電表功率單位[i]=ds1.Tables[0].Rows[i]["功率單位"].ToString(); Global.圖表最大電壓[i]=ds1.Tables[0].Rows[i]["最大電壓"].ToString(); Global.圖表最大電流[i]=ds1.Tables[0].Rows[i]["最大電流"].ToString(); Global.圖表最大功率[i]=ds1.Tables[0].Rows[i]["最大功率"].ToString(); } } Global.載入電表名稱Option=false; }finally{ SQL_Module.conn.Close(); } } private void 載入圖表上限(){ if(詳細電表_pl.activeInHierarchy){ 詳V1.maxValue= int.Parse(Global.圖表最大電壓[Global.詳細電表電表ID-1]); 詳V2.maxValue= int.Parse(Global.圖表最大電壓[Global.詳細電表電表ID-1]); 詳V3.maxValue= int.Parse(Global.圖表最大電壓[Global.詳細電表電表ID-1]); 詳I1.maxValue= int.Parse(Global.圖表最大電流[Global.詳細電表電表ID-1]); 詳I2.maxValue= int.Parse(Global.圖表最大電流[Global.詳細電表電表ID-1]); 詳I3.maxValue= int.Parse(Global.圖表最大電流[Global.詳細電表電表ID-1]); 詳V3_lb.text = Global.圖表最大電壓[Global.詳細電表電表ID-1]; 詳V2_lb.text = (float.Parse(Global.圖表最大電壓[Global.詳細電表電表ID-1])/2).ToString("##0") ; 詳I3_lb.text = Global.圖表最大電流[Global.詳細電表電表ID-1]; 詳I2_lb.text = (float.Parse(Global.圖表最大電流[Global.詳細電表電表ID-1])/2).ToString("##0") ; 詳S3_lb.text = Global.圖表最大功率[Global.詳細電表電表ID-1]; 詳S2_lb.text = (float.Parse(Global.圖表最大功率[Global.詳細電表電表ID-1])/2).ToString("##0") ; 詳Q3_lb.text = Global.圖表最大功率[Global.詳細電表電表ID-1]; 詳Q2_lb.text = (float.Parse(Global.圖表最大功率[Global.詳細電表電表ID-1])/2).ToString("##0") ; 詳P3_lb.text = Global.圖表最大功率[Global.詳細電表電表ID-1]; 詳P2_lb.text = (float.Parse(Global.圖表最大功率[Global.詳細電表電表ID-1])/2).ToString("##0") ; }else{ Global.上限電表ID1 = Array.IndexOf(Global.電表名稱, 電表編號_tb.text); Global.上限電表ID2 = Array.IndexOf(Global.電表名稱, 副電表編號_tb.text); V3_lb.text = Global.圖表最大電壓[Global.上限電表ID1]; V2_lb.text = (float.Parse(Global.圖表最大電壓[Global.上限電表ID1])/2).ToString("##0") ; I3_lb.text = Global.圖表最大電流[Global.上限電表ID1]; I2_lb.text = (float.Parse(Global.圖表最大電流[Global.上限電表ID1])/2).ToString("##0") ; 副V3_lb.text = Global.圖表最大電壓[Global.上限電表ID2]; 副V2_lb.text = (float.Parse(Global.圖表最大電壓[Global.上限電表ID2])/2).ToString("##0") ; 副I3_lb.text = Global.圖表最大電流[Global.上限電表ID2]; 副I2_lb.text = (float.Parse(Global.圖表最大電流[Global.上限電表ID2])/2).ToString("##0") ; } } private void 載入小電表(){ Moudle.清除控件(小電表清單_ct); int k=0; int h=0; for(int i=0;i<=Global.電表數量-1;i++){ GameObject header = Instantiate(小電表清單_rpf, 小電表清單_tp); TextMeshProUGUI ele_text = new GameObject("ele_"+i+"_tb").AddComponent(); if (i % 2 == 1){ header.transform.localPosition=new Vector3(6,-10-(140*(k)),0); k+=1; }else{ header.transform.localPosition = new Vector3(394, -10 - (140 * (h)), 0); h+=1; } header.AddComponent().type=Image.Type.Sliced; header.GetComponent().sprite=UIsprite; header.name="小電表_"+i.ToString(); header.GetComponent().fillCenter=false; header.GetComponent().color = new Color(1f,1f,1f,1f); //header.AddComponent