国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

英創(chuàng)信息技術(shù)ESM6802支持Qt MODBUS程序開發(fā)簡介

英創(chuàng)信息技術(shù) ? 來源:英創(chuàng)信息技術(shù) ? 作者:英創(chuàng)信息技術(shù) ? 2020-02-05 11:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

ESM6802使用iMX6DL作為CPU,支持硬件圖形加速,使得用戶可以開發(fā)具有較好圖形界面的工業(yè)控制程序。Qt是嵌入式開發(fā)中常用的圖形庫,MODBUS作為工控中常用的通信協(xié)議,已經(jīng)作為Qt的模塊引入了Qt中。我們在ESM6802上移植了最新的Qt 5.8.0版本,包括MODBUS模塊,用戶在使用中可以方便的調(diào)用Qt提供的API進(jìn)行MODBUS協(xié)議相關(guān)的程序編寫。Qt對于MODBUS協(xié)議的封裝使得用戶能夠更加便捷快速的進(jìn)行MODBUS應(yīng)用程序開發(fā),我們將在下面根據(jù)Qt源碼中的modbusmaster例程簡單介紹Qt的MODBUS相關(guān)函數(shù)接口。文中使用的程序可以在http://doc.qt.io/qt-5/qtserialbus-modbus-master-example.html獲取或向我們的工程師索取。

在使用Qt提供的MODBUS相關(guān)API時需要使用Qt提供的MODBUS數(shù)據(jù)類:QModbusDataUnit,類中有公共數(shù)據(jù)RegisterType表示此數(shù)據(jù)代表的MODBUS數(shù)據(jù)類型:

enum RegisterType { Invalid, DiscreteInputs, Coils, InputRegisters, HoldingRegisters }

可以使用構(gòu)造函數(shù)進(jìn)行初始化:

QModbusDataUnit(RegisterType type,intaddress, quint16 size)

對于MODBUS client相關(guān)的函數(shù),Qt將其封裝在類QModbusClient中,部分函數(shù)如下:

intnumberOfRetries()const

QModbusReply *sendRawRequest(constQModbusRequest &request,intserverAddress)

QModbusReply *sendReadRequest(constQModbusDataUnit &read,intserverAddress)

QModbusReply *sendReadWriteRequest(constQModbusDataUnit &read,constQModbusDataUnit &write,intserverAddress)

QModbusReply *sendWriteRequest(constQModbusDataUnit &write,intserverAddress)

voidsetNumberOfRetries(intnumber)

voidsetTimeout(intnewTimeout)

int timeout()const

其中numberOfRetries以及setTimeout是用于設(shè)置重試次數(shù)和超時時間的。send*Request系列函數(shù)是用于發(fā)送MODBUS數(shù)據(jù)包的函數(shù),其中數(shù)據(jù)相關(guān)的都用之前介紹的QModbusDataUnit類對象作為函數(shù)參數(shù)。

截取部分Qt例程modbusmaster發(fā)送讀請求的代碼如下:

首先設(shè)置連接類型(RTU/TCP)、重試次數(shù)、超時時間等,然后建立連接:

if(static_cast(ui->connectType->currentIndex()) == Serial) {

modbusDevice->setConnectionParameter(QModbusDevice::SerialPortNameParameter,

ui->portEdit->text());

modbusDevice->setConnectionParameter(QModbusDevice::SerialParityParameter,

m_settingsDialog->settings().parity);

modbusDevice->setConnectionParameter(QModbusDevice::SerialBaudRateParameter,

m_settingsDialog->settings().baud);

modbusDevice->setConnectionParameter(QModbusDevice::SerialDataBitsParameter,

m_settingsDialog->settings().dataBits);

modbusDevice->setConnectionParameter(QModbusDevice::SerialStopBitsParameter,

m_settingsDialog->settings().stopBits);

}else{

const QUrl url = QUrl::fromUserInput(ui->portEdit->text());

modbusDevice->setConnectionParameter(QModbusDevice::NetworkPortParameter, url.port());

modbusDevice->setConnectionParameter(QModbusDevice::NetworkAddressParameter, url.host());

}

modbusDevice->setTimeout(m_settingsDialog->settings().responseTime);

modbusDevice->setNumberOfRetries(m_settingsDialog->settings().numberOfRetries);

if(!modbusDevice->connectDevice()) {

statusBar()->showMessage(tr("Connect failed: ") + modbusDevice->errorString(), 5000);

}

設(shè)置讀取數(shù)據(jù)類型、地址等參數(shù):

QModbusDataUnit MainWindow::readRequest()const

{

constautotable =

static_cast(ui->writeTable->currentData().toInt());

intstartAddress = ui->readAddress->value();

Q_ASSERT(startAddress >= 0 && startAddress < 65535);

// do not go beyond 10 entries

int numberOfEntries = qMin(ui->readSize->currentText().toInt(), 65535 - startAddress);

return QModbusDataUnit(table, startAddress, numberOfEntries);

}

發(fā)送讀數(shù)據(jù)請求:

voidMainWindow::on_readButton_clicked()

{

if (!modbusDevice)

return;

ui->readValue->clear();

statusBar()->clearMessage();

if (auto*reply = modbusDevice->sendReadRequest(readRequest(), ui->serverEdit->value())) {

if (!reply->isFinished())

connect(reply, &QModbusReply::finished,this, &MainWindow::readReady);

else

deletereply; // broadcast replies return immediately

}else{

statusBar()->showMessage(tr("Read error: ") + modbusDevice->errorString(), 5000);

}

}

可以看到使用Qt提供的API進(jìn)行MODBUS通訊編程很便捷,只需要首先設(shè)置數(shù)據(jù)QModbusDataUnit,然后調(diào)用相應(yīng)的Request函數(shù)發(fā)送請求即可。

modbusmaster程序運行效果如下圖:

我們使用ESM6802連接ADAM模塊進(jìn)行測試連接圖如下:

ADAM-4117進(jìn)行電流采集時電流輸入量程為4~20mA,對應(yīng)的采樣值為0x0000~0xffff。有關(guān)AMAM-4117的介紹可以參考我們官網(wǎng)上的文章:《4~20mA模擬電流采集應(yīng)用方案》。當(dāng)輸入12.0mA(半量程)時讀到采樣值為0x8007,可見modbusmaster與AMAM模塊正確進(jìn)行了數(shù)據(jù)通信。

更多Qt MODBUS相關(guān)內(nèi)容請參考Qt官方資料:http://doc.qt.io/qt-5/qtmodbus-backends.html。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式主板
    +關(guān)注

    關(guān)注

    7

    文章

    6107

    瀏覽量

    37071
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    RK3562 單板機(jī)圖形用戶界面開發(fā)完全手冊:Qt Creator 配置與 LVGL 案例詳解(二)

    程序自啟動與 GPU 加速實現(xiàn)。通過圖片顯示、LED 控制等案例,明確關(guān)鍵代碼與測試步驟。創(chuàng)龍科技以清晰實操指引,幫助開發(fā)者高效完成 Qt 圖形界面
    的頭像 發(fā)表于 02-27 10:42 ?4927次閱讀
    RK3562 單板機(jī)圖形用戶界面<b class='flag-5'>開發(fā)</b>完全手冊:<b class='flag-5'>Qt</b> Creator 配置與 LVGL 案例詳解(二)

    RK3562 單板機(jī)圖形用戶界面開發(fā)完全手冊:Qt Creator 配置與 LVGL 案例詳解(一)

    程序自啟動與 GPU 加速實現(xiàn)。通過圖片顯示、LED 控制等案例,明確關(guān)鍵代碼與測試步驟。創(chuàng)龍科技以清晰實操指引,幫助開發(fā)者高效完成 Qt 圖形界面
    的頭像 發(fā)表于 02-26 11:41 ?266次閱讀
    RK3562 單板機(jī)圖形用戶界面<b class='flag-5'>開發(fā)</b>完全手冊:<b class='flag-5'>Qt</b> Creator 配置與 LVGL 案例詳解(一)

    如何讓S32K396支持FreeRTOS的多核運行?

    如何讓S32K396支持FreeRTOS的多核運行
    發(fā)表于 02-26 10:03

    CW32F030支持哪些協(xié)議及功能?

    CW32F030支持哪些協(xié)議及功能
    發(fā)表于 12-22 06:18

    龍芯中科助力2025教育信息技術(shù)應(yīng)用創(chuàng)新大賽成功舉辦

    2025年11月13日-15日,由中國教育技術(shù)協(xié)會主辦、浙江大學(xué)與中國教育技術(shù)協(xié)會網(wǎng)絡(luò)安全專業(yè)委員會聯(lián)合承辦,中國電子工業(yè)標(biāo)準(zhǔn)化技術(shù)協(xié)會信息技術(shù)應(yīng)用創(chuàng)新工作委員會、浙江高校信
    的頭像 發(fā)表于 11-21 16:23 ?784次閱讀

    請問CW32F003支持printf函數(shù)嗎?

    CW32F003支持printf函數(shù)嗎?
    發(fā)表于 11-21 07:48

    CW32L011支持哪些實時操作系統(tǒng)?

    CW32L011支持哪些實時操作系統(tǒng)?
    發(fā)表于 11-17 06:51

    RK3506開發(fā)QT Creator開發(fā)手冊,交叉編譯工具鏈與QT應(yīng)用示例,入門必備

    本文基于觸覺智能RK3506核心板/開發(fā)板介紹QTCreator交叉編譯配置與QT應(yīng)用示例。如需購買開發(fā)板進(jìn)行評估驗證簡介QTCreatorQtCreator?是由TheQtCompa
    的頭像 發(fā)表于 09-30 16:26 ?3682次閱讀
    RK3506<b class='flag-5'>開發(fā)</b>板<b class='flag-5'>QT</b> Creator<b class='flag-5'>開發(fā)</b>手冊,交叉編譯工具鏈與<b class='flag-5'>QT</b>應(yīng)用示例,入門必備

    創(chuàng)龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—Qt工程編譯、GPU核心使用說明

    及 Kits 配置;還介紹評估板運行 Qt 程序程序自啟動設(shè)置,以及通過 textures 案例演示 Qt+OpenGL 調(diào)用 GPU 核心進(jìn)行圖形渲染,為評估板
    的頭像 發(fā)表于 09-29 14:16 ?718次閱讀
    <b class='flag-5'>創(chuàng)</b>龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)<b class='flag-5'>開發(fā)</b>板—<b class='flag-5'>Qt</b>工程編譯、GPU核心使用說明

    stm32支持canfd和dma結(jié)合使用嗎?

    stm32支持canfd和dma結(jié)合使用嗎
    發(fā)表于 08-01 07:15

    佛瑞亞如何通過信息技術(shù)推動業(yè)務(wù)增長

    在數(shù)字化、信息化的浪潮下,信息技術(shù)已經(jīng)不僅是后臺工具,更成為驅(qū)動企業(yè)發(fā)展的關(guān)鍵力量。本期Women Inspiring Mobility,我們采訪了佛瑞亞中國區(qū)信息技術(shù)總監(jiān)馬瑛,了解她和團(tuán)隊如何將
    的頭像 發(fā)表于 07-29 14:00 ?900次閱讀

    K230支持ONVIF上傳視頻嗎?

    K230支持ONVIF上傳視頻嗎
    發(fā)表于 06-20 07:11

    科普|信創(chuàng)是什么?一文讀懂“信息技術(shù)應(yīng)用創(chuàng)新”戰(zhàn)略

    什么是信創(chuàng)?信創(chuàng),即“信息技術(shù)應(yīng)用創(chuàng)新”,是國家推動IT系統(tǒng)自主可控、安全可控的重要戰(zhàn)略工程。它不僅是技術(shù)層面的創(chuàng)新,更承載著保障國家網(wǎng)絡(luò)安全、推動產(chǎn)業(yè)升級和實現(xiàn)數(shù)字主權(quán)的重任。簡單來
    的頭像 發(fā)表于 06-13 10:06 ?8199次閱讀
    科普|信<b class='flag-5'>創(chuàng)</b>是什么?一文讀懂“<b class='flag-5'>信息技術(shù)</b>應(yīng)用創(chuàng)新”戰(zhàn)略

    技術(shù)案例】Qt 環(huán)境部署 - Ubuntu 篇

    什么是QtQt是一個跨平臺C++圖形用戶界面應(yīng)用程序開發(fā)框架,可構(gòu)建高性能的桌面、移動及Web應(yīng)用程序,也可用于
    的頭像 發(fā)表于 04-16 17:17 ?1926次閱讀
    【<b class='flag-5'>技術(shù)</b>案例】<b class='flag-5'>Qt</b> 環(huán)境部署 - Ubuntu 篇

    請問STM32CubeIDE v1.16.1支持代碼補(bǔ)全功能嗎?如何開啟呢?

    STM32CubeIDE v1.16.1支持代碼補(bǔ)全功能嗎?如何開啟呢?
    發(fā)表于 03-14 06:47