通用上位機 串口曲線顯示工具 udp控制軟件


嵌入式設備開發調試過程中,需要使用上位機查看設備狀態,下達指令。使用曲線實現狀態可視化,記錄數據事后分析等功能能夠大大提高開發調試效率。  
而不同的嵌入式設備,不同的項目,需要上位機控制的量完全不同,導致基本上每塊電路都需要自己的上位機,這個工作量是難以承擔的。實際項目中經常使用串口助手、串口數據曲線顯示等通用工具,實現調試。但功能和通用性略差  
 
所以需要一款通用上位機,能夠盡可能廣泛的適應各種項目,各種設備的調試工作。  
1. 通過文本行方式對設備進行測控,包括狀態上報和指令下達。協議易於描述  
2. 上傳狀態和下發指令的界面都通過配置文件描述,所以上位機可以在各項目間通用。  
3. 不僅實現曲線顯示、變量顯示、指令下達,還顯示是否有數據刷新、指令是否有回復,回復是否正確  
4. 曲線顯示不僅是圖形,還通過游標實現特定位置的值顯示、兩點測距功能、區域縮放功能  
5. 具有數據記錄/回放、曲線導出/導入功能  
 
例如如下幾個項目中的上位機:  
 
均由本通用上位機軟件的不同配置而成  
項目地址:
測控UI功能  
界面曲線顯示區、傳感值顯示區、基礎控制區和配置控制區,對參數的顯示包括:  
1. 傳感數值型:顯示名稱、數值、最近是否收到過數據、選擇是否顯示曲線  
2. 控制數值型:顯示名稱、期望值、結果是否成功  
3. 控制指令:顯示名稱、結果是否成功  
4. 開關型:顯示名稱、狀態、最近是否收到過數據,無論當前狀態是開還是關,都可以下達開和關的指令(即使在開的狀態也可以下達開的指令)  
5. 參數型:顯示名稱、期望、當前值、最近是否收到過數據  
 
曲線功能  
1. 上位機為多個傳感值顯示曲線,每個曲線可實時選擇顯示、隱藏  
2. 曲線具有統一的縱坐標,橫坐標可以使用次數和時間兩種  
3. 曲線可按一定長度循環顯示,可長期實時顯示  
4. 曲線可保存、加載歷史曲線  
5. 曲線顯示界面可使用鼠標左鍵拖動框選一定的區域放大顯示  
6. 曲線顯示界面可使用鼠標滾輪實現縮放  
7. 曲線顯示界面可使用鼠標右鍵拖動平移  
 
數據源  
上位機的數據源可以是串口、網絡、日志回放等方式,以相同的方法實現數據輸入、輸出。  
上位機選擇數據源,實現“打開”“關閉”操作,以方便的實現對端口的占用和釋放  
數據源端口的配置在配置文件中,以免對UI造成不必要的需求  
 
通用數據協議  
使用類nmea協議的形式,作為上位機的標准協議,其他協議使用適配器來適配。例如,下位機使用二進制協議時,上位機通過C語言dll外擴適配器,將文本協議轉換為二進制協議與下位機交互。所以,上位機只需實現通用文本協議即可實現所有測控協議需求。  
協議規定:  
  • 數據由文本組成,文本分行,行分列。  
  • 每一行數據可以是不同的數據包類型,通過列數量或第一列文本決定數據包類型  
  • 使用行(\n)作為數據包的分割,對於指令,使用空格或tab作為參數的分割符。對於測量變量,使用空格、逗號、tab作為分隔符  
  • 行首第一列可以作為普通數據,也可作為協議標志,以$開頭,接接協議名稱。  
例如:  
    1 2 3 4 5 6 7      是一個7列數據,若系統中沒有其他數據包是7列,則可以通過列數唯一確定這個數據包類型
    $r,OK              是一個2列數據,第一列以$開頭,則“r”為協議名稱,通過“r”確定這個數據包的類型
 
規定:  
指令配置時,可通過寫入\n來做多個指令
$開頭的是與插件或下位機約定的文本協議  
^開頭的是軟件自身控制協議:  
    ^clear         清除當前數據  
    ^x_axis 總電壓 x軸的索引,只有收到此變量后才增加曲線x軸坐標,若為空,則使用時間ms數作為x軸  
 
例如,要配置一個udp傳輸的數據控制鏈路:
設備發送的上行數據,為一行文本,共9列:
 

其中狀態字為二進制,按bit定義,例如:bit0表示增益切換,bit1表示蜂鳴,bit2表示指示激光開關等

 
1、通過配置文件配置udp端口:
1             {
2             "type":"udp", //數據源類型:udp
3             "name":"udp1",
4             "ip" : "127.0.0.1", "port" : 12345,
5             "rmt_ip" : "127.0.0.1", "rmt_port" : 12346
6         },

可以看到界面上數據源中有剛配置的udp數據源:udp1

 

2、通過配置文件配置傳感變量

需要描述要傳感的變量名稱、協議,以及變量在協議中的位置。另外,可配置此變量是否默認繪制曲線、顯示小數點位數等
 1     "dset":
 2     [
 3         { "name":"濃度","prot_l":9,"prot_off":0, "is_cv":"true"},
 4         { "name":"信噪比","prot_l":9,"prot_off":2},
 5         { "name":"信號強度","prot_l":9,"prot_off":3},
 6         { "name":"期望溫度","prot_l":9,"prot_off":4},
 7         { "name":"溫度","prot_l":9,"prot_off":5, "is_cv":"true"},
 8         { "name":"板溫","prot_l":9,"prot_off":6},
 9         { "name":"采樣值","prot_l":1,"prot_off":0, "is_cv":"true"},
10         { "name":"模式","dtype":"str","prot_l":9,"prot_off":8,
11             "stype":"hex","pro_method":"pro_bit","pro_bit":9,"end_bit":10,
12             "str_tab":["控溫","找峰","測量","調試"]},
13         { "name":"溫控","dtype":"str","prot_l":9,"prot_off":8,"is_dis":"false",
14             "stype":"hex","pro_method":"pro_bit","pro_bit":15},
15         { "name":"調制輸出","dtype":"str","prot_l":9,"prot_off":8,"is_dis":"false",
16             "stype":"hex","pro_method":"pro_bit","pro_bit":6},
17         { "name":"指令結果","dtype":"str","prot_name":"$r","prot_l":2,"prot_off":1,
18             "stype":"str","str_tab":["err","OK"]},
19         {"name":"i_off","prot_l":2,"prot_name":"$@:3:1:0:16","prot_off":1,"pro_k":0.1,"is_dis":"false"},
20         //參數
21         {"name":"uid","prot_l":2,"prot_name":"$@:3:2:0:0","prot_off":1,"is_dis":"false"},
22         {"name":"tpid_p","prot_l":2,"prot_name":"$@:3:2:6:0","prot_off":1,"is_dis":"false"}
23     ],
傳感變量的name是唯一的,傳感變量在協議中的位置,例如,"prot_l":9表示此變量在有9個列的行數據中提取,"prot_off":2表示此變量是其中的第3列。
傳感變量的類型包括:浮點,字符,hex,整數
處理方法包括:線性處理(pro_val),按位處理(pro_bit)
傳感量可按數值顯示,也可按字符顯示,通過配置str_tab,輸入值查表得到字符,用於顯示模式、錯誤等。
配置結果:

 

 3、通過配置文件配置指令

指令通過按鈕等控件在界面上顯示,可配置控件的類型和位置,以及點擊按鈕后發送的指令。

支持的指令控件包括:

1     public enum CmdType //指令類型
2     {
3         bt, //按鍵
4         text, //文本框
5         sw, //開關
6         rpl_bool, //帶回復的指令
7         label, //文本控件
8         para, //參數型
9     }

配置案例:

 1     "cmds":
 2     [
 3         {"name":"開數據","cmd":"s 1\n^x_axis","type":"bt"},
 4         {"name":"關數據","cmd":"s 0","type":"bt"},
 5         {"name":"顯示原始","cmd":"oa 1\ns 0\n^clear\n^x_axis 采樣值","type":"bt"},
 6         {"name":"溫度期望","cmd":"st","type":"bt","suffixname":"tb_exp_T","repeat_T":5},
 7         {"name":"tb_exp_T","type":"text","dft":"25"},
 8         {"name":"0~35℃","type":"label"},
 9         {"name":"直流電流","cmd":"si","type":"bt","suffixname":"tb_i"},
10         {"name":"tb_i","type":"para","dft":"80","cmd":"@ 0,1,0,16,0","refdname":"i_off"},
11         {"name":"直流偏移","cmd":"i_off","type":"bt","suffixname":"tb_i"},
12         {"name":"標0","refdname":"指令結果","cmd":"cali 0","type":"rpl_bool"},
13         {"name":"","type":"label"},
14         {"name":"","type":"label"},
15         {"name":"溫控","refdname":"溫控","dft":"開",
16             "cmd":"outc 1","cmdoff":"outc 0","type":"sw","c_span":2},
17         {"name":"調制輸出","refdname":"調制輸出","dft":"開",
18             "cmd":"isw 1","cmdoff":"isw 0","type":"sw","c_span":2}
19     ],

顯示效果:

 

 此圖為無數據刷新的狀態。點擊按鈕后,發送此按鈕配置對應的指令,指令中可引用文本框控件的內容,作為指令的參數。

參數控件支持查詢設備中的變量

 
4、通過配置文件配置參數
同指令配置,在菜單欄也有一個區域能夠配置下行指令,一般用於放置設備可保存的參數
1     "menu_cmd":
2     [
3         {"name":"tpid_p","cmd":"@ 1,2,0,0,","type":"bt","suffixname":"tb_uid"},
4         {"name":"tb_tpid_p","type":"para","dft":"80","cmd":"@ 0,2,0,6,0","refdname":"tpid_p"}
5     ],
6     "menu_name":"參數"

效果:

 

 

5、打開上位機,打開數據源,查看傳感數據

 

 傳感變量有數據刷新時變綠,控制控件有數據刷新時會變亮。

 

 

6、保存數據、曲線
保存曲線指保存曲線控件中的數據,保存為csv文件。加載曲線時,加載csv文件
文件頭部第一行為列描述,加載csv文件時,提取文件頭的列名,與軟件中配置的變量對比,若都能夠匹配,則顯示。
軟件可記錄原始數據,勾選記錄原始數據后,原始數據記錄在data目錄下,以時間為文件名,按小時切分文件。
原始數據文件的每一行行首,添加時間戳,格式為:分、秒、毫秒

 

回放數據時,軟件通過時間戳進行回放

7、回放數據

 在軟件數據源選擇時,選擇回放數據源,通過文件選擇對話框選擇要回放的數據

軟件回放過程與其他數據源完全一致,變量與控制控件收到數據刷新后變綠

 

 

 回放對話框實現:

  至首/上一行/暫停恢復/下一行/至尾 等功能

回放時可選擇不同的倍速

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM