SELECT * FROM kb0_ui WHERE is_use_zengliang_tongji=1 AND kb0_idstr='t_yi1xek3dhp' AND dianwei_name='dianneng_zong' AND (ADDTIME BETWEEN '2021/01/01 00:00:00' AND '2022/01/01 00:00:00') ORDER BY diff_value1 DESC ,id ASC LIMIT 0,22
比
SELECT * FROM kb0_ui WHERE is_use_zengliang_tongji=1 AND kb0_idstr='t_yi1xek3dhp' AND dianwei_name='dianneng_zong' AND (ADDTIME BETWEEN '2021/01/01 00:00:00' AND '2022/01/01 00:00:00') ORDER BY diff_value1 DESC LIMIT 0,22
要快!!,
或者ORDER BY round(diff_value1,5) DESC 也快
--------------------------
company_id LIKE '...' 反而比company_id ='...'要快,可能改為 company_id LIKE '...' 后主鍵索引變?yōu)榱薃DDTIME ,
explain 分析 key_len從171變小為 17了 :
SELECT SUM(diff_value1) AS zong_diff1,date_hour_index FROM kb0_ui WHERE is_use_zengliang_tongji=1 AND dianwei_name='dianneng_zong' AND (company_id LIKE 't_uolcoya67e') AND (ADDTIME >= '2021-11-04 00:00:00' ) AND ADDTIME <= '2021-11-04 23:59:59' GROUP BY date_hour_index
比
SELECT SUM(diff_value1) AS zong_diff1,date_hour_index FROM kb0_ui WHERE is_use_zengliang_tongji=1 AND dianwei_name='dianneng_zong' AND (company_id = 't_uolcoya67e') AND (ADDTIME >= '2021-11-04 00:00:00' ) AND ADDTIME <= '2021-11-04 23:59:59' GROUP BY date_hour_index
===================================================================
public int SendPortSP_try_more(string v20_sub_cmd_is_dl_or_68xieyi, int gongwei_index, int is_rec_senddata_str0_or_rec_senddata_len1, int comm_index, string cmd1, byte[] ombuffer, int wait_sec = -1, int isnowait = -1, int isPLC = -1, int is_stopmsg_err1 = 0, int is_nowait_for_liji_closeV = 0, int recv_mubiao_length = 0, byte headbyte = 0, string sub_cmd = "", float wait_sec_after_write=-1)
{
.........................
if (wait_sec_after_write >= 0.01f)
{
if (sleep_with_rt_ok(wait_sec_after_write * 1000, gongwei_index,comm_index) == 1)
{
sended = 1;
break;
}
}
if (isnowait == 0)//v1002:
{
//防止重發(fā)包的返回包干擾下面的續(xù)包:
if (sleep_with_rt_ok(1 * 1000, gongwei_index, comm_index) == 1)
{
sended = 1;
break;
}
}
===================================================================
NO1。
所有textBox和checkbox, radioButton等全部要用拼音尾綴來命名,不能用數(shù)字尾綴來命令,否則容易
弄錯(cuò)textBox,而導(dǎo)致隱藏的bug幾個(gè)月
-----------------
有很多按鈕的界面,可以把按鈕的事件做成一個(gè),然后switch (button.Name)一下,比分散寫到各個(gè)事件函數(shù)里要方便:
private void f1_h2004_Click(object sender, EventArgs e)
{
Button button = (Button) sender;
switch (button.Name)
{
case "f1_h2004":
this.x_Omron.寫[0].value_D500[0x1b] = 1;
this.x_Omron.寫[0].cmd_D500[0x1b] = true;
break;
case "f1_h2005":
===================================================================
vs2010里如果復(fù)制某個(gè)界面的控件到新工程,那么所有輸入框事件和combox控件的改變事件都要手工拷貝來,不然很可能改值后保存不住,
而引發(fā)寫入?yún)?shù)不是改動(dòng)的值,從而參數(shù)始終不變而改不了,誤以為寫成功了,比如跳閘閥值,這樣有安全風(fēng)險(xiǎn)!!!!
===================================================================
選擇性序列化:
[Serializable]
public class MyObject
{
public int n1;
[NonSerialized] public int n2;
public String str;
}
===================================================================
驗(yàn)證斷路器等寫入的參數(shù)是否正確寫入時(shí),緩存原始寫入值的變量最好帶絕對(duì)地址,否則按變量索引增量時(shí)容易出日后的兼容性問題:
//v3.3:
public int get_val_by_writed_d_addr(int addr11, List<v1000_val_cls> writed_d)
{
foreach (v1000_val_cls in1 in writed_d)
{
if (in1.addr == addr11)
{
return in1.val1;
}
public int SendPortSP_try_more(string v20_sub_cmd_is_dl_or_68xieyi, int gongwei_index, int is_rec_senddata_str0_or_rec_senddata_len1, int comm_index, string cmd1, byte[] ombuffer, int wait_sec = -1, int isnowait = -1, int isPLC = -1, int is_stopmsg_err1 = 0, int is_nowait_for_liji_closeV = 0, int recv_mubiao_length = 0, byte headbyte = 0, string sub_cmd = "", int wait_sec_after_write=-1)
{
lock (lock_obj1[comm_lock_index])//bug????
{
lock (lock_obj2_recv_timeout)
{
rttobj.v16_buffer.Clear();//v80
rttobj.v40_cur_datastep = 0;//v400 !!!!!must
System.Threading.Thread.Sleep(3);//v500,防止下一個(gè)包影響上一個(gè)包的發(fā)包代碼后的if(recv_ok1b!=1.........
rttobj.recv_ok1b = 0;//v80
}
===================================================================
Program.cs里加入容錯(cuò)機(jī)制,出錯(cuò)時(shí)不奔潰,而顯示錯(cuò)誤信息:
static class Program
{
================================================================================================
用 序列化類來保存參數(shù)時(shí),各參數(shù)類務(wù)必不要含類的引用,而要用類的my_ID形式來保存引用哪個(gè)ID的類,否則序列化后類的引用丟失!!
================================================================================================
刪除元素時(shí)務(wù)必在for (i。。。。掃描外再套層 while (ishave == 1),不然某些條件下會(huì)漏刪:
int ishave=1;//must 1
while (ishave == 1)
{
ishave = 0;
for (int ii = 0; ii < sim_UI_cls.all_yuanjian_links.Count; ii++)
{
if (sim_UI_cls.all_yuanjian_links[ii].yuanjian_id_form == pw_draw_shows.last_moveover_ele.yuanjian_id)
{
sim_UI_cls.all_yuanjian_links.RemoveAt(ii);
ii = 0; ishave = 1;
continue;
}
if (sim_UI_cls.all_yuanjian_links[ii].yuanjian_id_to == pw_draw_shows.last_moveover_ele.yuanjian_id)
{
sim_UI_cls.all_yuanjian_links.RemoveAt(ii);
ii = 0; ishave = 1;
continue;