在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

基于VB6.0 實(shí)現(xiàn) CAN信號收發(fā) Demo

上海同星智能科技有限公司 ? 2024-07-27 08:21 ? 次閱讀

本文主要講的是,基于TSMaster 實(shí)現(xiàn)TOSUN 系列 CAN/CANFD,LIN 設(shè)備的操作。主要給大家介紹在 TSMaster 軟件里如何實(shí)現(xiàn)CAN 信號收發(fā) Demo工程。

本文關(guān)鍵詞:CAN報(bào)文、VB6.0、libTSCAN

1

關(guān)于Demo工程

簡要描述:

VB6.0編程語言調(diào)用libTSCAN接口實(shí)現(xiàn)硬件掃描、連接、CAN報(bào)文單幀發(fā)送、周期發(fā)送、報(bào)文接收,報(bào)文過濾。

典型應(yīng)用需求:

對于現(xiàn)在還在維護(hù)和開發(fā)的VB項(xiàng)目工程需要調(diào)用TSCAN硬件實(shí)現(xiàn)報(bào)文收發(fā)等業(yè)務(wù)。

2

技術(shù)背景

在 VB6.0中使用 Declare 語句聲明libTSCAN.dll中的函數(shù),這些聲明使得 VB6.0能夠與底層的 API 進(jìn)行交互。如:Private Declare Function tscan_connect Lib "libTSCAN.dll" (ByVal ADeviceSerial As String, ByRef AHandle As Long) As Long。

3

Demo工程實(shí)現(xiàn)

1.

添加庫文件

要實(shí)現(xiàn)對 TOSUN 系列 CAN/CANFD,LIN 設(shè)備的操作,需要基于 libTSCAN.dll ,libTSH.dll,binlog.dll 以及 liblog.dll動態(tài)鏈接庫文件。它們之間依賴關(guān)系如下圖1所示。

libTSCAN.dll ,libTSH.dll,binlog.dll 以及 liblog.dll動態(tài)鏈接庫文件文件位置可以在TSMaster安裝目錄下獲取。C:\Program Files (x86)\TOSUN\TSMaster\Data\SDK\examples\Python\Linux\lib\libTOSUN\windows\x86

360dce08-4bae-11ef-817b-92fbcf53809c.png

新建好VB工程后將以上依賴文件添加到VB工程目錄下,添加好后工程文件夾中的文件如下圖2所示。

3629c5a4-4bae-11ef-817b-92fbcf53809c.png

2.

聲明libTSCAN.dll中的函數(shù)

使用Declare 語句聲明libTSCAN.dll中的函數(shù)。


語法如下:

Private Declare [Function|Sub] 外部函數(shù)名 Lib "庫文件名" [Alias "別名"] ([參數(shù)列表])

Private:可選,表示該聲明在當(dāng)前模塊內(nèi)可見。如果需要在多個(gè)模塊中使用,可以使用Public

Declare:關(guān)鍵字,用于聲明外部函數(shù)。

FunctionSub:根據(jù)外部函數(shù)是返回值(Function)還是不返回值(Sub)來選擇。

外部函數(shù)名:你在VB6.0代碼中使用的函數(shù)名稱。

Lib:指定包含函數(shù)定義的DLL庫文件的名稱。

庫文件名:DLL庫文件的名稱,不包括擴(kuò)展名(.lib或.dll)。

Alias:可選,如果DLL中的函數(shù)名稱與VB6.0中的名稱沖突或不符合VB6.0的命名規(guī)則,可以使用別名。


參數(shù)列表:函數(shù)的參數(shù),包括參數(shù)的名稱、類型和傳遞方式(ByVal或ByRef)。

'加載libTSCAN函數(shù)庫,必須在調(diào)用其他API之前執(zhí)行

Private DeclareSub initialize_lib_tscan_verboseLib "libTSCAN.dll" (ByVal AEnableFIFO As Boolean, ByVal AEnableErrorFrame As Boolean, ByVal AUseHWTime As Boolean, ByVal ATSType As Long)


'釋放libTSCAN函數(shù)庫,必須在完成使用退出程序之前調(diào)用

Private Declare Sub finalize_lib_tscanLib "libTSCAN.dll" ()


'查詢設(shè)備的制造商,產(chǎn)品名稱,序列號,包含多少個(gè)CAN通道,是否支持FDCAN,多少個(gè)LIN通道,F(xiàn)lexray通道以及以太網(wǎng)通道

Private Declare Function tscan_get_device_info_detailLib "libTSCAN.dll" (ByVal ADeviceIndex As Long, ByRef AManufacturer As Long, ByRef AProduct As Long, ByRef ASerial As Long, ByRef ADeviceType As Long, ByRef ADeviceName As Long, ByRef ACANChannelCount As Long, ByRef AIsCANFD As Boolean, ByRef ALINChannelCount As Long, ByRef AFRChannelCount As Long, ByRef AEthernetChannelCount As Long) As Long


'連接設(shè)備

Private Declare Function tscan_connectLib "libTSCAN.dll" (ByVal ADeviceSerial As String, ByRef AHandle As Long) As Long


'斷開設(shè)備

Private Declare Function tscan_disconnect_by_handleLib "libTSCAN.dll" (ByVal AHandle As Long) As Long


'查詢當(dāng)前在線的TSCAN設(shè)備數(shù)量

Private Declare Function tscan_scan_devicesLib "libTSCAN.dll" (ByRef ADeviceCount As Long) As Long


'配置普通CAN硬件通道

Private Declare Function tscan_config_can_by_baudrateLib "libTSCAN.dll" (ByVal AHandle As Long, ByVal AChnIdx As Long, ByVal ARateKbps As Double, ByVal A120OhmConnected As Long) As Long


'配置FDCAN硬件通道;AControllerType[0:普通CAN 1:ISO-FD 2:NoISO-FD] AControllerMode[0:Normal 1: ACKOff 2: Retricted 3: Internal Loop 4: External Loop]

Private Declare Function tscan_config_canfd_by_baudrateLib "libTSCAN.dll" (ByVal AHandle As Long, ByVal AChnIdx As Long, ByVal AArbRateKbps As Double, ByVal ADataRateKbps As Double, ByVal AControllerType As Long, ByVal AControllerMode As Long, ByVal A120OhmConnected As Long) As Long


'發(fā)送CAN/CANFD報(bào)文

Private Declare Function tscan_transmit_can_syncLib "libTSCAN.dll" (ByVal ADeviceHandle As Long, ByRef ACAN As TLIBCAN, ByVal ATimeoutMS As Long) As Long


Private Declare Function tscan_transmit_can_asyncLib "libTSCAN.dll" (ByVal ADeviceHandle As Long, ByRef ACAN As TLIBCAN) As Long


'周期發(fā)送CAN/CANFD報(bào)文

'添加CAN周期發(fā)送報(bào)文

Private Declare Function tscan_add_cyclic_msg_canLib "libTSCAN.dll" (ByVal ADeviceHandle As Long, ByRef ACAN As TLIBCAN, ByVal APeriodMS As Single) As Long

'刪除CAN周期發(fā)送報(bào)文

Private Declare Function tscan_delete_cyclic_msg_can Lib "libTSCAN.dll" (ByVal ADeviceHandle As Long, ByRef ACAN As TLIBCAN) As Long


注:如需完整的VB6.0示例工程源代碼,可以隨時(shí)聯(lián)系同星應(yīng)用支持獲取。

3.

CAN /CANFD數(shù)據(jù)結(jié)構(gòu)定義

CAN與CAN FD數(shù)據(jù)結(jié)構(gòu)如下:

36400ab2-4bae-11ef-817b-92fbcf53809c.png

4.

調(diào)用接口說明

Demo內(nèi)部分使用到的接口說明:

initialize_lib_tscan_verbose

作用:初始化 tscan 庫模塊。必須調(diào)用此函數(shù)初始化 CAN 模塊過后,才能夠調(diào)用其他 API 函數(shù)。該函數(shù)和 finalize_lib_tscan 是成對使用的。

輸入?yún)?shù):

AEnableFIFO[IN]:是否開啟 FIFO 機(jī)制,建議設(shè)置為 True,否則用戶無法通過 tsfifo_receive_xx 函數(shù)讀取報(bào)文;

AEnableErrorFrame[IN]:是否接收錯(cuò)誤幀。如果設(shè)置為 False,則驅(qū)動直 接把 錯(cuò)誤幀拋棄掉;

AUseHWTime[IN]:是否使用設(shè)備連接時(shí)間;

ATSType[IN] :設(shè)置為False 即可;

返回值:無

finalize_lib_tscan

作用:在退出程序之前,釋放 CAN 模塊,和創(chuàng)建函數(shù)initialize_lib_tscan 函數(shù)配對使用。

輸入?yún)?shù):無

返回值:無

tscan_get_device_info_detail

作用:獲取設(shè)備信息

輸入?yún)?shù):

ADeviceIndex[IN]:設(shè)備索引值;

AManufacturer [OUT]:制造商;

AProduct[OUT] :產(chǎn)品名稱;

ASerial[OUT] :序列號;

ADeviceType[OUT] :設(shè)備類型;

ADeviceName[OUT] :設(shè)備名稱;

ACANChannelCount[OUT] :CAN通道數(shù)量;

AIsCANFD[OUT] :是否支持CANFD;

ALINChannelCount[OUT] :LIN通道數(shù)量;

AFRChannelCount[OUT] :FR通道數(shù)量;

AEthernetChannelCount[OUT] :以太網(wǎng)通道數(shù)量;

tscan_connect

作用:連接設(shè)備,并獲取該設(shè)備的唯一句柄

輸入?yún)?shù):

ADeviceSerial:獲取指定序列號的設(shè)備,該參數(shù)為空字符則表示獲取任意處于連接狀態(tài)的設(shè)備;

AHandle:設(shè)備句柄,后續(xù)操作硬件都需要根據(jù)該唯一設(shè)備句柄進(jìn)行操作;

tscan_scan_devices

作用:掃描在線設(shè)備數(shù)量

輸入?yún)?shù):

ADeviceCount[OUT]:返回在線設(shè)備數(shù)量;


tscan_config_can_by_baudrate

作用:配置CAN總線波特率

AHandle:設(shè)備句柄;

AChnIdx:應(yīng)用程序通道編號;

ARateKbps:波特率;

A120OhmConnected:是否使能內(nèi)部終端電阻

tscan_transmit_can_sync

作用:發(fā)送 CAN 報(bào)文,并檢測到發(fā)送成功后,才退出此函數(shù)。此函數(shù)返回成功,代表 CAN 報(bào)文一定已經(jīng)成功發(fā)送到了 CAN 總線上面。

輸入?yún)?shù):

ADeviceHandle:設(shè)備句柄;

ACAN:報(bào)文數(shù)據(jù);

ATimeoutMS:同步等待超時(shí)時(shí)間;

tscan_transmit_can_async

作用:以異步的方式發(fā)送CAN報(bào)文

輸入?yún)?shù):

ACAN:CAN 數(shù)據(jù)包。TLIBCAN 數(shù)據(jù)組成請查CAN、CANFD數(shù)據(jù)組成章節(jié)。

tscan_add_cyclic_msg_can

作用:增加周期發(fā)送的報(bào)文

輸入?yún)?shù):

ADeviceHandle:操作設(shè)備句柄

ACAN:CAN數(shù)據(jù)包;

APeriodMS:周期值;

tscan_delete_cyclic_msg_can

作用:刪除周期性發(fā)送 CAN 報(bào)文

ACAN:需要被刪除的是、周期報(bào)文;

tsfifo_receive_can_msgs

作用:讀取硬件緩存中的報(bào)文數(shù)據(jù)包。

輸入?yún)?shù):

ADeviceHandle:設(shè)備句柄;

ACANBuffers:數(shù)據(jù) Buffer,用于存儲讀取到的報(bào)文,該 Buffer 需要函數(shù)調(diào)用方創(chuàng)建;

ACANBufferSize:消息 Buffer 的大小;

AChn:目標(biāo)通道:對于多通道設(shè)備,本函數(shù)選擇讀取哪一個(gè)通道的數(shù)據(jù),該參數(shù)可以為空,默認(rèn)為通道 1;

ARxTx:==0:僅僅接收 Rx 報(bào)文;>0: Tx Rx 報(bào)文都讀取回來,該參數(shù)可以為空,默認(rèn)為只接收 Rx 報(bào)文;

tsfifo_add_can_canfd_pass_filter

作用:用戶如果只想接收特定 ID 報(bào)文的時(shí)候,需要調(diào)用此函數(shù)

輸入?yún)?shù):

ADeviceHandle:設(shè)備句柄;

AChnIdx:通道索引;

AIdentifier:報(bào)文標(biāo)識符;

AIsStd:是否標(biāo)準(zhǔn)幀;

tsfifo_delete_can_canfd_pass_filter

作用:取消報(bào)文過濾

輸入?yún)?shù):

ADeviceHandle:設(shè)備句柄;

AChnIdx:通道索引;

AIdentifier:報(bào)文標(biāo)識符;

AIsStd:是否標(biāo)準(zhǔn)幀;

5.

VB6.0 Demo實(shí)現(xiàn)效果

1)點(diǎn)擊[掃描設(shè)備],獲取在線設(shè)備數(shù)量打印于右邊控件中。

2)點(diǎn)擊[查詢設(shè)備信息],獲取設(shè)備具體信息打印于右邊控件中。

3)點(diǎn)擊[連接]完成硬件連接,打印連接成功日志及當(dāng)前設(shè)備句柄于右邊控件中。

4)點(diǎn)擊[配置硬件通道],完成通道及波特率設(shè)置。

5.)點(diǎn)擊[通道一發(fā)送普通報(bào)文]單幀發(fā)送0x7B。

6)點(diǎn)擊[從通道2接收CAN報(bào)文],讀取FIFO中的報(bào)文數(shù)據(jù)顯示在下方ListBox中。

7)點(diǎn)擊[發(fā)送周期報(bào)文] ,報(bào)文0x29A 按照50ms周期發(fā)送。

8)點(diǎn)擊[停止周期發(fā)送] ,報(bào)文0x29A停止周期發(fā)送。

9)點(diǎn)擊[從通道2接收CAN報(bào)文],讀取FIFO中的報(bào)文數(shù)據(jù)顯示子啊下方ListBox中。如圖3所示。

36579128-4bae-11ef-817b-92fbcf53809c.png

4

疑難解答(QA)

Q:連接之后,設(shè)備一直在接收消息,此時(shí)我開啟過濾之后,再去發(fā)送報(bào)文,接收報(bào)文的時(shí)候,是不是要把之前存的數(shù)據(jù)取出來,直到讀取到過濾的ID?

A:對的。添加過濾后主動把舊的緩存給清除掉。清除緩存函數(shù):tsfifo_clear_can_receive_buffers。

Q:函數(shù)的返回值代表什么意思?

A:函數(shù)返回值為0時(shí)代表函數(shù)執(zhí)行成功,其他值代表函數(shù)執(zhí)行失敗。具體失敗原因描述可以根據(jù)TSMaster內(nèi)系統(tǒng)內(nèi)置常數(shù)進(jìn)行查表。如返回值為3代表“設(shè)備未找到”,這時(shí)候就要檢查當(dāng)前TSCAN設(shè)備是否連接正常了。

3678b218-4bae-11ef-817b-92fbcf53809c.png

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

    關(guān)注

    57

    文章

    2773

    瀏覽量

    464462
  • 信號
    +關(guān)注

    關(guān)注

    11

    文章

    2808

    瀏覽量

    77158
  • LIN
    LIN
    +關(guān)注

    關(guān)注

    4

    文章

    221

    瀏覽量

    40404
  • can報(bào)文
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    2338
收藏 人收藏

    評論

    相關(guān)推薦

    如何用VB6.0調(diào)用MSComm控件接收與顯示數(shù)據(jù)呢

    如何用VB6.0調(diào)用MSComm控件接收與顯示數(shù)據(jù)呢?有哪些步驟?
    發(fā)表于 02-14 06:52

    VB6.0數(shù)字示波單片機(jī)實(shí)時(shí)監(jiān)測數(shù)據(jù)的一種方法

    本文介紹利用VB6.0數(shù)字動態(tài)圖形顯示單片機(jī)實(shí)時(shí)檢測數(shù)據(jù)的一種方法,該顯示方法符合人們看圖習(xí)慣,視覺效果好且數(shù)值顯示精確。關(guān)鍵詞:VB6.0, 數(shù)字動態(tài)圖形顯示,單片機(jī), 實(shí)
    發(fā)表于 08-05 16:03 ?33次下載

    基于VB6.0的PC機(jī)與單片機(jī)的遠(yuǎn)程通信

    簡要介紹了VB6.0中MSComm通信控件的屬性和使用方法,并給出了其在PC機(jī)與單片機(jī)遠(yuǎn)程通信中的應(yīng)用。關(guān)鍵詞:VB6.0 PC機(jī) 單片機(jī) 遠(yuǎn)程通信Abstract:This paper briefly introduce the principle and
    發(fā)表于 08-15 10:09 ?50次下載

    利用VB6.0實(shí)現(xiàn)測色儀的功能擴(kuò)展

    在油墨行業(yè)中測色儀已經(jīng)使用非常廣泛,但對套印油墨顏色的綜合測試評價(jià)方面還不能滿足需要。本文就此問題提出了利用VB6.0 中MSCOMM 控件來擴(kuò)展測色儀功能從而實(shí)現(xiàn)繪制色區(qū)圖
    發(fā)表于 08-27 11:27 ?23次下載

    利用VB6.0實(shí)現(xiàn)機(jī)車下線機(jī)自動控制系統(tǒng)

    本文介紹了應(yīng)用VB6.0作為開發(fā)工具,利用工控機(jī)和ACL-7225數(shù)據(jù)采集卡,開發(fā)自動控制系統(tǒng)的方法。系統(tǒng)共有22個(gè)輸入信號和16個(gè)輸出信號,采用了兩塊數(shù)據(jù)采集卡,由計(jì)算機(jī)通過數(shù)據(jù)采
    發(fā)表于 09-02 10:04 ?33次下載

    VB6.0在LED漢字信息顯示系統(tǒng)中的應(yīng)用

    本文介紹了 VB6.0 在LED 漢字信息顯示系統(tǒng)的應(yīng)用中如何進(jìn)行實(shí)時(shí)漢字點(diǎn)陣提取及串行通訊的方法,討論了程序設(shè)計(jì)要點(diǎn),給出了相應(yīng)的程序代碼。
    發(fā)表于 09-09 16:45 ?31次下載

    基于VB6.0的打印口(LPT)的應(yīng)用

             在 VB6.0 編程環(huán)境下,調(diào)用動態(tài)鏈接庫,通過打印口(LPT)實(shí)現(xiàn)PC 機(jī)對89C2051 單片機(jī)的編程。關(guān)鍵詞: VB6.0
    發(fā)表于 09-11 09:13 ?39次下載

    VB控件使用大全 (VB6.0中通過MSChart控件調(diào)用數(shù)

    VB控件使用大全:《 VB6.0中通過MSChart控件調(diào)用數(shù)據(jù)庫 》   02.txt 《 用VB6實(shí)現(xiàn)動態(tài)增減控件 》   03.t
    發(fā)表于 09-13 15:34 ?1276次下載
    <b class='flag-5'>VB</b>控件使用大全 (<b class='flag-5'>VB6.0</b>中通過MSChart控件調(diào)用數(shù)

    基于VB6.0的點(diǎn)陣字模信息提取方法

    摘要:提出通過顏色法提取像素點(diǎn)的漢字點(diǎn)陣字模信息提取方法,給出基于VB6.0的系統(tǒng)控件設(shè)置及流程實(shí)現(xiàn)方法。與基于內(nèi)碼法的漢字點(diǎn)陣提取方法的比較結(jié)果表明,該方法能夠方便
    發(fā)表于 07-16 11:20 ?67次下載

    VB6.0動態(tài)加載ActiveX控件漫談

    熟悉VB的朋友對使用ActiveX控件一定不會陌生,眾多控件極大地方便了編程,但唯一的缺陷是不能動態(tài)加載控件,必須在設(shè)計(jì)時(shí)通過引用,將控件放置在窗體上。VB6.0已能夠解決該問題
    發(fā)表于 10-08 15:21 ?71次下載

    VB6.0實(shí)現(xiàn)PC機(jī)與單片機(jī)的串行通信

    VB6.0實(shí)現(xiàn)PC機(jī)與單片機(jī)的串行通信:
    發(fā)表于 03-31 15:11 ?118次下載

    Vb6.0精簡版下載

    電子發(fā)燒友網(wǎng)站提供《Vb6.0精簡版下載.exe》資料免費(fèi)下載
    發(fā)表于 04-02 09:43 ?0次下載

    Visual+Basic+6.0+(vb6.0)簡體中文企業(yè)版下載

    電子發(fā)燒友網(wǎng)站提供《Visual+Basic+6.0+(vb6.0)簡體中文企業(yè)版下載.exe》資料免費(fèi)下載
    發(fā)表于 08-18 10:04 ?0次下載

    基于VB6.0的機(jī)車靜壓試驗(yàn)臺程序

    基于VB6.0的機(jī)車靜壓試驗(yàn)臺程序
    發(fā)表于 09-02 15:41 ?4次下載

    基于VB6.0的串行通信工控軟件設(shè)計(jì)及實(shí)例

    電子發(fā)燒友網(wǎng)站提供《基于VB6.0的串行通信工控軟件設(shè)計(jì)及實(shí)例.pdf》資料免費(fèi)下載
    發(fā)表于 10-31 09:33 ?1次下載
    基于<b class='flag-5'>VB6.0</b>的串行通信工控軟件設(shè)計(jì)及實(shí)例
    主站蜘蛛池模板: 国产一级特黄特色aa毛片 | 38pao强力打造永久免费高清视频 | 国产亚洲精品久久久久久久软件 | 亚洲人成网站在线在线 | 国产视频观看 | 国外免费精品视频在线观看 | 午夜毛片在线观看 | 波多野结衣中文字幕教师 | 最近观看免费高清视频 | 日韩dv| 欧美在线视频播放 | 天天插插插 | 自拍你懂的 | 国产精品视频久久久久久 | 色资源窝窝全色 | 性欧美成人免费观看视 | 色天天色综合 | 在线观看日本免费不卡 | 理论片人人51 | 精品视频一区二区三区 | 黄色国产在线视频 | 天天摸天天碰色综合网 | 色婷婷在线视频 | 在线看你懂 | 69日本xxxxhd| 快乐你懂的在线视频免费观看 | 国产三级在线看 | 你懂的网站在线 | 99久久婷婷国产综合精品电影 | free性日本| 欧美性xxxxxbbbbbb精品 | 久久香蕉综合精品国产 | q2002在线观看免费 | 色丁香在线 | 手机毛片在线 | 开心丁香婷婷深爱五月 | 日本黄色大片免费 | 国产视频黄色 | 天堂色综合 | 一区二区三区四区精品 | 久久xxxx |