Compare commits
2 Commits
0df7ea6350
...
1dbf3de955
Author | SHA1 | Date | |
---|---|---|---|
1dbf3de955 | |||
3c29b2bfdd |
2
串口上位机/.gitignore
vendored
Normal file
2
串口上位机/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
/dist
|
||||
/.build
|
8
串口上位机/default.aproj
Normal file
8
串口上位机/default.aproj
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<project ver="10" name="串口上位机" libEmbed="true" icon="..." ui="win" output="K74B上位机.exe" CompanyName="单位名称" FileDescription="K74B上位机" LegalCopyright="Copyright (C) 作者 2022" ProductName="K74B上位机" InternalName="K74B上位机" FileVersion="0.0.0.3" ProductVersion="0.0.0.3" publishDir="/dist/" dstrip="false">
|
||||
<file name="main.aardio" path="main.aardio" comment="main.aardio"/>
|
||||
<folder name="资源文件" path="res" embed="true" local="false" ignored="false">
|
||||
<folder name="img" path="res\img" comment="res\img" local="false" embed="true" ignored="false"/>
|
||||
</folder>
|
||||
<folder name="窗体文件" path="dlg" comment="目录" embed="true" local="false" ignored="false"/>
|
||||
</project>
|
20
串口上位机/lib/config.aardio
Normal file
20
串口上位机/lib/config.aardio
Normal file
@ -0,0 +1,20 @@
|
||||
//config 配置文件
|
||||
import fsys.config;
|
||||
config = fsys.config("/config/");
|
||||
//config = fsys.config( io.appData("/软件作者/应用程序名/") );
|
||||
|
||||
//不需要序列化的配置名字前请添加下划线
|
||||
namespace config {
|
||||
__appName = "应用程序名";
|
||||
__appVersion = "1.0.0.01";
|
||||
__appDescription = "这是一个测试程序";
|
||||
__website = "http://www.aardio.com/";
|
||||
}
|
||||
|
||||
/**intellisense(config)
|
||||
__appName = 应用程序名
|
||||
__appVersion = 应用程序内部版本号
|
||||
__appDescription = 程序说明
|
||||
__website = 官方网站
|
||||
? = 配置文件名,\n读写配置并序列化为一个表对象,\n表的成员值可以是支持序列化的普通变量,支持table对象\n配置文件在首次使用时自动加载,退出程序时自动保存\n!fsys_table.
|
||||
end intellisense**/
|
235
串口上位机/main.aardio
Normal file
235
串口上位机/main.aardio
Normal file
@ -0,0 +1,235 @@
|
||||
import fonts.fontAwesome;
|
||||
import win.dlg.message;
|
||||
import win.ui;
|
||||
/*DSG{{*/
|
||||
mainForm = win.form(text="串口上位机";right=885;bottom=591;border="dialog frame";max=false)
|
||||
mainForm.add(
|
||||
btnClear={cls="button";text="清空";left=751;top=549;right=866;bottom=576;z=6};
|
||||
btnFresh={cls="button";text="刷新";left=41;top=47;right=138;bottom=101;font=LOGFONT(h=-20);z=3};
|
||||
btnOpen={cls="button";text="打开";left=346;top=47;right=442;bottom=101;font=LOGFONT(h=-20);z=4};
|
||||
button={cls="button";text="发送";left=213;top=435;right=371;bottom=483;z=21};
|
||||
combobox={cls="combobox";left=154;top=61;right=332;bottom=87;edge=1;font=LOGFONT(h=-20);items={};mode="dropdown";z=1};
|
||||
edChangeCur={cls="edit";text="0";left=146;top=389;right=246;bottom=422;center=1;edge=1;font=LOGFONT(h=-19);z=19};
|
||||
edOutputCur={cls="edit";text="0";left=146;top=217;right=246;bottom=250;center=1;edge=1;font=LOGFONT(h=-19);readonly=1;z=13};
|
||||
edOutputVol={cls="edit";text="0";left=146;top=170;right=246;bottom=203;center=1;edge=1;font=LOGFONT(h=-19);readonly=1;z=9};
|
||||
edTargetCur={cls="edit";text="0";left=146;top=263;right=246;bottom=296;center=1;edge=1;font=LOGFONT(h=-19);readonly=1;z=14};
|
||||
editRx={cls="edit";left=476;top=33;right=859;bottom=538;edge=1;multiline=1;readonly=1;vscroll=1;z=5};
|
||||
lbComPort={cls="static";text="串口信息";left=40;top=4;right=413;bottom=40;transparent=1;z=2};
|
||||
static={cls="static";text="V1.0 20250707";left=16;top=563;right=134;bottom=582;font=LOGFONT(h=-16);notify=1;transparent=1;z=7};
|
||||
static10={cls="static";text="mA";left=256;top=389;right=314;bottom=423;align="center";center=1;font=LOGFONT(h=-19);transparent=1;z=20};
|
||||
static2={cls="static";text="输出电压";left=30;top=172;right=123;bottom=206;align="center";center=1;font=LOGFONT(h=-19);transparent=1;z=10};
|
||||
static3={cls="static";text="输出电流";left=30;top=216;right=123;bottom=250;align="center";center=1;font=LOGFONT(h=-19);transparent=1;z=11};
|
||||
static4={cls="static";left=117;top=118;right=316;bottom=147;center=1;font=LOGFONT(h=-20);transparent=1;z=8};
|
||||
static5={cls="static";text="目标电流";left=31;top=263;right=124;bottom=297;align="center";center=1;font=LOGFONT(h=-19);transparent=1;z=12};
|
||||
static6={cls="static";text="mV";left=253;top=167;right=311;bottom=201;align="center";center=1;font=LOGFONT(h=-19);transparent=1;z=15};
|
||||
static7={cls="static";text="mA";left=253;top=211;right=311;bottom=245;align="center";center=1;font=LOGFONT(h=-19);transparent=1;z=16};
|
||||
static8={cls="static";text="mA";left=253;top=257;right=311;bottom=291;align="center";center=1;font=LOGFONT(h=-19);transparent=1;z=17};
|
||||
static9={cls="static";text="修改电流";left=31;top=388;right=124;bottom=422;align="center";center=1;font=LOGFONT(h=-19);transparent=1;z=18}
|
||||
)
|
||||
/*}}*/
|
||||
|
||||
import sys.comPort;
|
||||
import console;
|
||||
import sio;
|
||||
import win.timer;
|
||||
|
||||
|
||||
var sioPort;
|
||||
//串口列表
|
||||
FreshHw = function(){
|
||||
comPorts = sys.comPort.list();
|
||||
mainForm.combobox.items = comPorts;
|
||||
mainForm.combobox.selIndex = sys.comPort.find("CP210x")[["index"]] or 1;
|
||||
if(#comPorts == 0){
|
||||
mainForm.lbComPort.text = "没有找到硬件"
|
||||
}
|
||||
}
|
||||
FreshHw();
|
||||
|
||||
RxPrint = function(str){
|
||||
var timenow = time.now();
|
||||
mainForm.editRx.print(tostring(timenow) ++ str);
|
||||
}
|
||||
TxPrint = function(str){
|
||||
mainForm.editRx.print(str);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//获取串口信息
|
||||
mainForm.combobox.oncommand = function(id,event){
|
||||
var item = comPorts[mainForm.combobox.selIndex]
|
||||
if(item){
|
||||
mainForm.lbComPort.text = item.friendlyName;
|
||||
}
|
||||
}
|
||||
|
||||
mainForm.btnFresh.oncommand = function(id,event){
|
||||
FreshHw();
|
||||
mainForm.combobox.oncommand();
|
||||
}
|
||||
|
||||
|
||||
var data = {};
|
||||
var buf = {};
|
||||
|
||||
var runtime = 0;
|
||||
var current_offset = 0;
|
||||
var output_Cur = 0;
|
||||
var output_Vol = 0;
|
||||
var target_Cur = 0;
|
||||
|
||||
display = function(){
|
||||
|
||||
mainForm.edOutputVol.text = output_Vol;
|
||||
mainForm.edOutputCur.text = output_Cur/100;
|
||||
mainForm.edTargetCur.text = target_Cur/100;
|
||||
|
||||
}
|
||||
import console;
|
||||
MsgProcess = function(data){
|
||||
//console.dumpJson(data);
|
||||
if(#data == 10){
|
||||
runtime = (data[1]<<8) + data[2];
|
||||
current_offset = (data[3]<<8) + data[4];
|
||||
output_Vol = (data[5]<<8) + data[6];
|
||||
output_Cur = (data[7]<<8) + data[8];
|
||||
target_Cur = (data[9]<<8) + data[10];
|
||||
var str = "rx:"
|
||||
for(i=1;#data;1){
|
||||
str += string.format(" %02X",data[i]);
|
||||
}
|
||||
RxPrint(str);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
DataPrecess = function(str){
|
||||
data = string.split(str,' ');
|
||||
var newdata = {};
|
||||
if(#data > 0){
|
||||
//table.append(buf,data);
|
||||
//console.log("data");
|
||||
//console.dumpJson(data);
|
||||
for(i=1;#data;1){
|
||||
newdata[i] = tonumber(data[i],16);
|
||||
}
|
||||
//console.log("newdata");
|
||||
//console.dumpJson(newdata);
|
||||
table.append(buf,newdata);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
uartdataProcess = function(){
|
||||
if(#buf > 13){
|
||||
var len = #buf;
|
||||
var str = "";
|
||||
//console.dumpJson(buf);
|
||||
//console.log("len = " ++ len);
|
||||
for(i=1;len-13;1){
|
||||
if(buf[i] == 0x55 && buf[i+1] == 0xAA && buf[i+12] == 0x5A){
|
||||
MsgProcess(table.slice(buf,i+2,i+11));
|
||||
//buf = table.slice(buf,14);
|
||||
table.clear(buf);
|
||||
return ;
|
||||
}
|
||||
}
|
||||
buf = table.slice(buf,len-13);
|
||||
//table.clear(buf);
|
||||
//RxPrint(str);
|
||||
}
|
||||
}
|
||||
|
||||
var timer = win.timer(mainForm,100);
|
||||
timer.onTimer = function(hwnd,msg,id,tick){
|
||||
uartdataProcess();
|
||||
display();
|
||||
//mainForm.editRx.print("test");
|
||||
|
||||
}
|
||||
|
||||
|
||||
mainForm.btnOpen.oncommand = function(id,event){
|
||||
if(sioPort){
|
||||
sioPort.close();
|
||||
}
|
||||
|
||||
var err;
|
||||
sioPort,err = sio.port(mainForm.combobox.selText);
|
||||
if(!sioPort){
|
||||
return mainForm.msgErr(err,300);
|
||||
}
|
||||
sioPort.ioctl(115200,8,1,"none");
|
||||
//串口接收到数据触发回调
|
||||
sioPort.termCntIrq(1,function(port){
|
||||
var ret = sioPort.readHex()
|
||||
if(ret != null){
|
||||
DataPrecess(string.trim(ret));
|
||||
}
|
||||
|
||||
} )
|
||||
sioPort.setBaudRate(115200);
|
||||
mainForm.msgOk("已打开端口",200);
|
||||
mainForm.combobox.disabled = 1;
|
||||
timer.enable();
|
||||
}
|
||||
|
||||
mainForm.onDestroy = function(){
|
||||
if(sioPort){
|
||||
sioPort.close();
|
||||
}
|
||||
}
|
||||
TxMsg = function(str){
|
||||
if(sioPort == null){
|
||||
//mainForm.msgErr("端口未打开",300);
|
||||
return;
|
||||
}
|
||||
//mainForm.editRx.print(tostring(time.now()) + " Tx: " + string.upper(str));
|
||||
sioPort.writeHex(str);
|
||||
return;
|
||||
}
|
||||
|
||||
msg_tx = function(){
|
||||
var data = (tf_state<<2) | (jr_state);
|
||||
var str = tostring(data,16);
|
||||
str = string.right(str,1);
|
||||
TX_str = str ++ "0 FC"
|
||||
//mainForm.editRx.print(TX_str);
|
||||
}
|
||||
|
||||
|
||||
mainForm.btnClear.oncommand = function(id,event){
|
||||
mainForm.editRx.text = ""
|
||||
}
|
||||
|
||||
mainForm.button.oncommand = function(id,event){
|
||||
var new_cur = tonumber(mainForm.edChangeCur.text);
|
||||
if(new_cur >= 1 && new_cur<=100){
|
||||
new_cur = math.floor(new_cur * 100)
|
||||
txbuf = {0x5A,0xA5,0x02,new_cur>>8,new_cur&0xff};
|
||||
var str = "tx:"
|
||||
var datastr = "";
|
||||
for(i=1;#txbuf;1){
|
||||
datastr = datastr ++ string.format("%02X",txbuf[i]) ++ " ";
|
||||
}
|
||||
datastr = string.trim(datastr);
|
||||
TxPrint(str ++ datastr);
|
||||
|
||||
TxMsg(datastr);
|
||||
//sioPort.write(sioPort);
|
||||
//TxMsg("5A A5 02 01 F4");
|
||||
}
|
||||
else {
|
||||
TxPrint("电流值范围1-100mA");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
mainForm.combobox.oncommand();
|
||||
display();
|
||||
mainForm.show();
|
||||
return win.loopMessage();
|
Loading…
x
Reference in New Issue
Block a user