0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在创龙科技T113-i工业开发板上部署Qt应用

全志在线 来源:Rice嵌入式 2023-12-03 10:22 次阅读

Qt在工业上的使用场景包括工业自动化嵌入式系统、汽车行业、航空航天、医疗设备、制造业和物联网应用。Qt被用来开发工业设备的用户界面、控制系统嵌入式应用和其他工业应用,因其跨平台性和丰富的功能而备受青睐。

Qt能够为工业领域带来什么好处:

- Qt提供了强大的图形引擎,使开发人员能够创建具有吸引力和高性能的用户界面。

- Qt允许开发人员根据具体需求定制用户界面和功能。这对于满足不同行业和项目的独特需求至关重要,使工业应用能够实现个性化的解决方案

- Qt提供了丰富的库和工具,涵盖了各种应用程序开发需求,包括图形、网络通信、多媒体处理、数据存储等。这简化了工业应用程序的开发流程

- Qt可以轻松与各种硬件设备和通信协议集成,这对于工业自动化和控制系统来说非常重要,因为它们需要与各种传感器、执行器和其他工业设备进行通信

本次开发教程的测试板卡来自创龙科技的TLT113-EVM国产工业评估板,基于全志科技T113-i双核ARM Cortex-A7 + 玄铁C906 RISC-V + HiFi4 DSP异构多核处理器设计,ARM Cortex-A7处理器单元主频高达1.2GHz。

评估板由核心板和评估底板组成,核心板CPUROMRAM电源、晶振等所有元器件均采用国产工业级方案,国产化率100%。同时,评估底板大部分元器件亦采用国产工业级方案。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。

742345f4-902b-11ee-939d-92fbcf53809c.jpg

T113-i国产工业评估板硬件资源图解

此外,T113-i国产工业开发板的接口资源丰富,能够支持引出双路网口、双路CAN、双路USB、双路RS485RS232通信接口,同时引出LVDS LCD、TFT LCD、MIPI LCD、HDMI OUT、CVBS IN/OUT、LINE IN、MIC IN、H/P OUT等音视频多媒体接口,板载WIFI、4G(选配)模块,支持1080P@60fps JPEG/MJPEG视频硬件编码,支持4K@30fps H.265、4K@24fps H.264视频硬件解码,方便用户快速进行产品方案评估与技术预研。

接下来我们来聊聊如何在创龙科技T113-i工业开发板上部署Qt应用。

开发板Qt运行环境

开发板SDK准备

创龙科技的资料中提供了开发板的SDK-T113-i_v1.0.tar.gz,需要解压ubuntu中解压出来:

rice@rice:~$mkdirt113//创建t113工作目录,然后将压缩包拷贝到此目录
rice@rice:~$cdt113
....

rice@rice:~/t113$tar-zxvfSDK-T113-i_v1.0.tar.gz
rice@rice:~/t113$cdT113-i_v1.0/
rice@rice:~/t113/T113-i_v1.0$ls
brandybuildrootdeviceinstall_tools.shoutrtos-dsptools
buildbuild.shkernelplatformtest

安装依赖软件,创龙科技提供了安装脚本:install_tools.sh,我们执行该脚本即可完成依赖工具的安装:

rice@rice:~/t113/T113-i_v1.0$./install_tools.sh
[sudo]passwordforrice:
Readingpackagelists...Done
Buildingdependencytree
Readingstateinformation...Done
texinfoisalreadythenewestversion(6.5.0.dfsg.1-2).
0upgraded,0newlyinstalled,0toremoveand121notupgraded.
Readingpackagelists...Done
Buildingdependencytree
Readingstateinformation...Done
pkg-configisalreadythenewestversion(0.29.1-0ubuntu2).
0upgraded,0newlyinstalled,0toremoveand121notupgraded.
Readingpackagelists...Done

......

解压Buildroot dl--dl.tar.gz,其为 Buildroot dl 目录压缩包,用于存放从官网下载的开源软件包:

rice@rice:~/t113$tar-xvfdl.tar.gz-C~/t113/buildroot/buildroot-201902/

构建Qt固件

在编译固件前,先清理一下SDK的编译和配置生成文件:

rice@rice:~/t113/T113-i_v1.0$./build.shdistclean

配置linux内核,处理器型号,显示方式,编译器等信息

rice@rice:~/t113/T113-i_v1.0$./build.shconfig
Welcometomkscriptsetupprogress
Allavailableplatform:
0.linux
Choice[linux]:0
Allavailablelinux_dev:
0.bsp
1.dragonboard
2.longan
3.tinyos
Choice[longan]:2
Allavailablekern_ver:
0.linux-5.4
Choice[linux-5.4]:0
Allavailableic:
0.t113
1.t113_i
Choice[t113_i]:1
Allavailableboard:
0.evb1
1.evb1_auto
2.evb1_auto_nand
3.evb1_auto_nor
4.tlt113-evm-emmc
5.tlt113-evm-nand
6.tlt113-minievm-emmc
7.tlt113-minievm-nand
Choice[tlt113-evm-nand]:5
Allavailableoutput_configs:
0.hdmi
1.lvds-lcd
2.mipi-lcd
3.tft-lcd
4.cvbs
Choice[hdmi]:0
Allavailableflash:
0.default
1.nor
Choice[default]:0
Allavailablebuild_root:
0.buildroot-201902
1.ubuntu
Choice[buildroot-201902]:0
Allavailablegnueabi:
0.gnueabi
1.gnueabihf
Choice[gnueabi]:0

设置编译的环境变量:

rice@rice:~/t113/T113-i_v1.0$source./build/envsetup.sh

我们采用一键编译 SPL、U-Boot、Linux 内核和 buildroot文件系统。

rice@rice:~/t113/T113-i_v1.0$./build.sh
ACTIONList:mklichee;========
Executecommand:mklichee
INFO:----------------------------------------
INFO:buildlichee...
INFO:chip:sun8iw20p1
INFO:platform:linux
INFO:kernel:linux-5.4
INFO:board:tlt113-evm-nand
INFO:output:/home/rice/t113/T113-i_v1.0/out/t113_i/tlt113-evm-nand/longan
INFO:----------------------------------------
INFO:buildbuildroot...
Preparebrtoolchaingcc-linaro-5.3.1-2016.05-x86_64_arm-linux-gnueabi.tar.xz...
make:Enteringdirectory'/home/rice/t113/T113-i_v1.0/buildroot/buildroot-201902'

...

编译Qt库,使其开发板固件支持Qt应用运行环境:

rice@rice:~/t113/T113-i_v1.0$./build.shqt
ACTIONList:mkqt;========
Executecommand:mkqt
INFO:buildQt...
INFO:buildarm-linux-gnueabiversion'sQt
/home/rice/t113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5.12.5
Usingbuilt-inspecs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target:x86_64-linux-gnu
Configuredwith:../src/configure-v--with-pkgversion='Ubuntu7.5.0-3ubuntu1~18.04'--with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs--enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++--prefix=/usr--with-gcc-major-version-only--program-suffix=-7--program-prefix=x86_64-linux-gnu---enable-shared--enable-linker-build-id--libexecdir=/usr/lib--without-included-gettext--enable-threads=posix--libdir=/usr/lib--enable-nls--enable-bootstrap--enable-clocale=gnu--enable-libstdcxx-debug--enable-libstdcxx-time=yes--with-default-libstdcxx-abi=new--enable-gnu-unique-object--disable-vtable-verify--enable-libmpx--enable-plugin--enable-default-pie--with-system-zlib--with-target-system-zlib--enable-objc-gc=auto--enable-multiarch--disable-werror--with-arch-32=i686--with-abi=m64--with-multilib-list=m32,m64,mx32--enable-multilib--with-tune=generic--enable-offload-targets=nvptx-none--without-cuda-driver--enable-checking=release--build=x86_64-linux-gnu--host=x86_64-linux-gnu--target=x86_64-linux-gnu
Threadmodel:posix

.....

打包系统镜像文件,执行之后,可以看到生成的固件文件,它默认生成两个版本的固件,分别是:nand固件和SD卡固件,我们是采用SD卡启动,所以使用SD卡固件。

rice@rice:~/t113/T113-i_v1.0$./build.shpack
ACTIONList:mkpack;========
Executecommand:mkpack
INFO:packingfirmware...
INFO:UseBIN_PATH:/home/rice/t113/T113-i_v1.0/device/config/chips/t113_i/bin
copyingtoolsfile
copyingconfigsfile
copyingproductconfigsfile
/home/rice/t113/T113-i_v1.0/out/pack_out/aultls32.fex
/home/rice/t113/T113-i_v1.0/out/pack_out/aultools.fex
/home/rice/t113/T113-i_v1.0/out/pack_out/boot_package.cfg
/home/rice/t113/T113-i_v1.0/out/pack_out/boot_package.fex

......

dsp0.fexLen:0x3fc78
Vdsp0.fexLen:0x4
BuildImg0
Dragonexecuteimage.cfgSUCCESS!
----------imageisat----------

size:613M/home/rice/t113/T113-i_v1.0/out/t113_i_linux_tlt113-evm-nand-sdboot_uart0.img

packfinish

运行环境验证

下载运行实例

将编译打包后的固件(t113_i_linux_tlt113-evm-nand-sdboot_uart0.img)放到windows上,通过工具PhoenixCard.exe烧录到SD卡上。将SD卡插到读卡器上,然后插进电脑

743a2274-902b-11ee-939d-92fbcf53809c.jpg

创龙科技提供了qt的demo,我们将led_control的实例拷贝到板子上:

rice@rice:~/t113/qt-demos/led_control/bin$scpled_controlroot@ip:~/

创龙T113-i上运行实例

关闭默认的Qt运行程序,设置qt的环境变量

root@T113-Tronlong:~#killallLauncher
root@T113-Tronlong:~#source/etc/qtenv.sh
add/dev/input/event1toQtApplication.
findqt5installeddone

运行实例验证Qt功能,运行效果如图:

root@T113-Tronlong:~#./led_control

74525a56-902b-11ee-939d-92fbcf53809c.jpg

Qt开发环境

开发环境下载

Qt开发环境下载,作者是使用Qt 5.12.0,下载链接:https://download.qt.io/archive/qt/5.12/5.12.0/,Ubuntu需要下载:qt-opensource-linux-x64-5.12.0.run

746bb80c-902b-11ee-939d-92fbcf53809c.jpg

开发环境交叉编译环境配置

配置Debuggers

点击菜单栏"Tools -> Options"

击"Kits -> Debuggers -> Add -> Browse…"

选择目标平台的GDB,路径:/home/rice/t113/T113-i_v1.0/out/t113_i/tlt113-evm-nand/longan/buildroot/host/usr/bin/arm-linux-gnueabi-gdb

747cfaae-902b-11ee-939d-92fbcf53809c.jpg

配置交叉工具链

点击菜单栏"Tools -> Options"

击"Kits -> Compilers -> Add -> GCC -> C++ -> Browse…"

选择目标平台的交叉工具链,路径:/home/rice/t113/T113-i_v1.0/out/t113_i/tlt113-evm-nand/longan/buildroot/host/usr/bin/arm-linux-gnueabi-g++

7491439c-902b-11ee-939d-92fbcf53809c.jpg

配置Qt Versions

点击菜单栏"Tools -> Options"

击"Kits -> Qt Versions -> Add -> GCC -> C++ -> Browse…"

选择目标平台的Qt Versions,路径:/home/rice/t113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5.12.5/Qt_5.12.5/bin/qmake

74a4d5ec-902b-11ee-939d-92fbcf53809c.jpg

配置Kits

点击菜单栏"Tools -> Options"

击"Kits -> Kits"

将 Name 修改为"T113",Device type 选择"Generic Linux Device",Compiler 的 C++选择"T113-GCC",Debugger 选择"T113-Debugger",Qt version 选择"T113-qt5",点击 Apply,然后点击 OK 完成配置

74cabd20-902b-11ee-939d-92fbcf53809c.jpg

开发Qt应用

作者开发了一个快速验证硬件功能的,主要功能包含:

板载LED灯控制,代码实现:

staticQStringledPath="/sys/class/leds/user-led0";

voidrice::ledInit()
{
setLedStatus(0);

ui->ledPushButton->setText("LEDOFF");
ui->ledPushButton->setStyleSheet("border-width:1px;"
"border-style:solid;"
"border-color:white;"
"background-color:rgba(88,88,88,200)");
}

voidrice::ledDeinit()
{

}

boolrice::setLedStatus(intstatus)
{
QStringcmd="echo"+QString::number(status)+">"+ledPath+"/brightness";
if(system(cmd.toStdString().c_str())==-1){
printf("setledstatusfailed!
");
returnfalse;
}
returntrue;
}

intrice::getLedStatus(void)
{
QStringcmd="cat"+ledPath+"/brightness";
FILE*fp=popen(cmd.toStdString().c_str(),"r");
if(fp==nullptr){
return-1;
}

charled_status[32];
if(fgets(led_status,sizeof(led_status),fp)==nullptr){
printf("fgetserror:%s
",cmd.toStdString().c_str());
pclose(fp);
return-1;
}

pclose(fp);
returnatoi(led_status);
}

voidrice::on_ledPushButton_clicked()
{
intledStatus=getLedStatus();
if(ledStatus==0){
setLedStatus(1);
ui->ledPushButton->setText("LEDON");
ui->ledPushButton->setStyleSheet("border-width:1px;"
"border-style:solid;"
"border-color:white;"
"background-color:rgba(00,205,00,255)");
}
else{
setLedStatus(0);
ui->ledPushButton->setText("LEDOFF");
ui->ledPushButton->setStyleSheet("border-width:1px;"
"border-style:solid;"
"border-color:white;"
"background-color:rgba(88,88,88,200)");
}
}

板载按键检测,代码实现:

voidrice::keyInit()
{
keyFd=open(keyPath.toUtf8().data(),O_RDONLY);
if(keyFd==-1)
{
printf("Cannotopenfile(%s)",keyPath.toUtf8().data());
return;
}
ui->keyTextEdit->append("KeyMonitor!
");
ui->keyTextEdit->append("Keyuser0pressed!");

keyNotify=newQSocketNotifier(this->keyFd,QSocketNotifier::Read,this);
connect(this->keyNotify,SIGNAL(activated(int)),this,SLOT(keyHandler()));
}

voidrice::keyDeinit()
{

}

voidrice::keyHandler()
{
structinput_eventbuf;

if(read(keyFd,&buf,sizeof(structinput_event))>0)
{
if(buf.code==KEY_PROG1&&buf.value==1)
{
ui->keyTextEdit->append("Keyuser0pressed!");
}
}
}

RTC时钟获取并显示,代码实现:

voidrice::dateInit()
{
structrtc_timertc_tm_temp;
dateFd=open(datePath.toUtf8().data(),O_RDONLY);
if(dateFd==-1)
{
printf("Cannotopenfile(%s)",keyPath.toUtf8().data());
return;
}
if(ioctl(dateFd,RTC_RD_TIME,&rtc_tm_temp)< 0)
    {
        printf("Get date failed");
        return;
    }
    ui->yearLineEdit->setText(QString::number(rtc_tm_temp.tm_year+1900));
ui->monthLineEdit->setText(QString::number(rtc_tm_temp.tm_mon+1));
ui->dayLineEdit->setText(QString::number(rtc_tm_temp.tm_mday));
}

voidrice::dateDeint()
{

}

网络调试助手,代码实现:

voidrice::netInit()
{
server=newQTcpServer();
socket=newQTcpSocket();
}

voidrice::netDeint()
{

}

voidrice::netNewClientConnect()
{
socket=server->nextPendingConnection();
connect(socket,&QTcpSocket::readyRead,this,&rice::netNewRcve);
}

voidrice::on_netPushButton_clicked()
{
intport=ui->portLineEdit->text().toInt();
if(ui->netPushButton->text()==tr("Open"))
{
if(ui->typeComboBox->currentText()==tr("Server"))
{
connect(server,&QTcpServer::newConnection,this,&rice::netNewClientConnect);
if(!server->listen(QHostAddress::Any,port))
{
printf("Listenfailed
");
return;
}
}
elseif(ui->typeComboBox->currentText()==tr("Client"))
{
QStringip=ui->ipComboBox->currentText();
socket->abort();
socket->connectToHost(ip,port);

if(!socket->waitForConnected(3000))
{
printf("Connectserverfailed");
return;
}
connect(socket,&QTcpSocket::readyRead,this,&rice::netNewRcve);
}
ui->netPushButton->setText("Close");
}
elseif(ui->netPushButton->text()==tr("Close"))
{
if(ui->typeComboBox->currentText()==tr("Server"))
{
socket->abort();
server->close();
}
elseif(ui->typeComboBox->currentText()==tr("Client"))
{
socket->disconnectFromHost();
}
ui->netPushButton->setText("Open");
}
}

voidrice::on_sendPushButton_clicked()
{
if(socket->isOpen())
{
socket->write(ui->sendLineEdit->text().toUtf8().data());
}
}

voidrice::netNewRcve()
{
ui->recvTextEdit->append(socket->readAll());
}

voidrice::on_typeComboBox_currentIndexChanged(constQString&arg1)
{
if(arg1==tr("Server"))
{
ui->ipComboBox->setEditable(false);
}
else
{
ui->ipComboBox->setEditable(true);
}
}

Qt应用验证

板载LED灯控制验证,当点击开关LED按钮时,LED灯会根据状态亮灭:

74de934a-902b-11ee-939d-92fbcf53809c.jpg

74fbf5ca-902b-11ee-939d-92fbcf53809c.png

当应用运行起来时,会获取RTC时间,并显示:

7533ff88-902b-11ee-939d-92fbcf53809c.jpg

当板载按键按下时,窗口会显示按键按下:

7549084c-902b-11ee-939d-92fbcf53809c.jpg

网络调试助手支持TCP客户端和TCP服务器两种类型,下面演示服务器验证。开发板上设置板子的IP,和端口号,然后通过PC上网络调试助手连接上板子,并克实现数据的收发:

客户端往服务器发送数据

75690c46-902b-11ee-939d-92fbcf53809c.jpg757e548e-902b-11ee-939d-92fbcf53809c.jpg

服务器往客户端发送数据

758cab56-902b-11ee-939d-92fbcf53809c.jpg75aaef12-902b-11ee-939d-92fbcf53809c.jpg    

本文转载自Rice嵌入式


审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式系统
    +关注

    关注

    40

    文章

    3391

    浏览量

    128172
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10394

    浏览量

    206418
  • 开发板
    +关注

    关注

    25

    文章

    4394

    浏览量

    93700
  • Qt
    Qt
    +关注

    关注

    1

    文章

    299

    浏览量

    37269
  • 创龙科技
    +关注

    关注

    1

    文章

    129

    浏览量

    7537
  • 全志T113
    +关注

    关注

    0

    文章

    42

    浏览量

    61

原文标题:Qt应用开发--国产工业开发板T113-i的部署教程

文章出处:【微信号:gh_79acfa3aa3e3,微信公众号:全志在线】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Qt应用开发--国产工业开发板T113-i部署教程

    本次开发教程的测试板卡来自创龙科技的TLT113-EVM国产工业评估板,基于全志科技T113-i双核ARM Cortex-A7 + 玄铁C9
    的头像 发表于 11-05 08:44 1196次阅读
    <b class='flag-5'>Qt</b>应用<b class='flag-5'>开发</b>--国产<b class='flag-5'>工业</b><b class='flag-5'>开发板</b><b class='flag-5'>T113-i</b>的<b class='flag-5'>部署</b>教程

    【飞凌 OK113i-C 全志T113-i开发板】视频编解码测试

    前言本文测试OK113i-S开发板-视频编解码的功能OK113i-S开发板是支持视频的编解码的,下面是官方介绍的编解码功能T113-i 是一
    发表于 12-25 09:41

    【米尔-全志T113-i开发板试用】发布opencv-mobile米尔t113i专享预编译包

    MYC-YT113i核心开发板 真正的国产核心,100%国产物料认证 国产T113-i处理器配备2*Cortex-A7@1.2GHz
    发表于 02-25 20:23

    【米尔-全志T113-i开发板试用】上电+配编译器+编译+运行ruapu测试工具全流程视频

    MYC-YT113i核心开发板 真正的国产核心,100%国产物料认证 国产T113-i处理器配备2*Cortex-A7@1.2GHz
    发表于 02-25 22:49

    【米尔-全志T113-i开发板试用】米尔-全志T113-i开发环境搭建

    ,使用passwd命令给米尔-全志T113-i开发板的root账号加上密码,因为我的SSH客户端不允许root空密码。 然后,开发板上修改/etc/ssh/sshd_config文件
    发表于 03-01 21:43

    【米尔-全志T113-i开发板试用】移植libmodbus库到米尔-全志T113-i开发板

    申请米尔-全志T113-i开发板试用的很大一个原因是想测试开发板工业领域的应用,modbus作为工业
    发表于 03-05 22:31

    【米尔-全志T113-i开发板试用】米尔-全志T113-i开发板与modbus设备的连接和操作

    。 四、结论 1、米尔-全志T113-i开发板提供了丰富的接口和稳定的操作系统环境,很适合工业控制软件程序开发; 2、依托libmodbus这个modbus协议库,对于linux应用下
    发表于 03-21 19:39

    CODESYS领导到访龙科技,共同助力工业控制软硬件技术发展

    的知名企业,双方工业自动化领域的客户高度重合。CODESYS和龙科技的深入合作,将为客户提供更深层次的软硬件一站式解决方案,进一步缩减客户项目
    发表于 03-31 16:20

    LVGL案例分享--手把手教你移植到T113-i国产工业开发板

    龙科技T113-i开发板上。 LVGL LVGL,全名“Littlev Graphics Library”,是一个开源的图形库,主要用于嵌入式系统上创建图形用户界面(GUI)。它
    发表于 11-17 09:55

    Qt应用开发--国产工业开发板全志T113-i部署教程

    工业开发板,它提供了Qt的运行环境,可以让我们快速的部署工业领域的用户交互界面,控制系统等。 接下来我们来聊聊如何在
    发表于 11-30 14:25

    飞凌 OK113i-C 全志T113-i开发板初体验

    的PC上进行操作,而且,因为以前安装过T113-S3的开发环境,所以在编译SDK过程中并没有碰到其他因缺少依赖软件报的错误。 T113-i longan linux
    发表于 12-14 15:33

    多核异构工业开发板:创龙科技T113-i

    概述 本次评测开发板--创龙T113-i工业开发板,这是一款基于全志科技处T113-i理器, 采用双Cortex-A7 + Xuantie
    的头像 发表于 10-24 10:26 561次阅读
    多核异构<b class='flag-5'>工业</b><b class='flag-5'>开发板</b>:创<b class='flag-5'>龙科技</b><b class='flag-5'>T113-i</b>

    如何把LVGL移植到T113-i国产工业开发板

    本次开发教程的测试板卡来自创龙科技的TLT113-EVM国产工业评估板,基于全志科技T113-i双核ARM Cortex-A7 + 玄铁C9
    发表于 11-14 17:28 443次阅读
    如何把LVGL移植到<b class='flag-5'>T113-i</b>国产<b class='flag-5'>工业</b><b class='flag-5'>开发板</b>

    飞凌嵌入式T113-i开发板的调屏方法

    对于飞凌嵌入式T113-i开发板的调屏问题,需要按照以下步骤进行操作
    的头像 发表于 01-29 16:25 307次阅读

    米尔-全志T113-i开发板与modbus设备的连接和操作

    本文主要介绍通过米尔-全志T113-i开发板实现与modbus设备的连接和操作。
    的头像 发表于 03-21 19:42 121次阅读
    米尔-全志<b class='flag-5'>T113-i</b><b class='flag-5'>开发板</b>与modbus设备的连接和操作