chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【Z站推薦】CAN接口卡如何解決上位機系統(tǒng)的調度延時問題?

ZLG致遠電子 ? 2022-07-24 17:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

上位機調用CAN接口卡發(fā)送數據時,受上位機系統(tǒng)調度耗時的影響,實際CAN卡發(fā)送時會有時間上的誤差,是否有CAN卡可以將發(fā)送定時放到設備中來完成,從而規(guī)避掉上位機的調度影響呢?本文將為大家具體分析。使用CAN接口卡是CAN通訊領域無法避開的話題,它提供各種的接口類型,兼容多種上位機系統(tǒng),簡單易用的二次開發(fā)接口函數庫。此外,windows平臺還提供了專業(yè)的應用層協議庫(DBC解析庫、UDS庫等),比起用ARM直接開發(fā)CAN(FD),用戶使用接口卡二次開發(fā),可以直接調用高層協議函數庫,可以極大的節(jié)省應用層協議棧的開發(fā)成本。用戶只需關注自己的業(yè)務邏輯即可,大大的縮短項目開發(fā)周期。如此方便的用法也產生了一個問題,接口卡必須依賴于上位機的調用,不管windows還是linux系統(tǒng),非實時系統(tǒng)就涉及到一個延時問題——系統(tǒng)調度的延時。例如當上位機執(zhí)行到transmit發(fā)送函數,到系統(tǒng)執(zhí)行這個動作,驅動將buffer下發(fā)給CAN接口卡的時間。系統(tǒng)調度時間是不可控的,取決于多方因素:程序開發(fā)的語言,電腦的性能,CPU當前的占用率等,一般都為毫秒級誤差。因此,當用戶需要軟件定時來發(fā)送報文時,無法保證很低的時間誤差。

是否有辦法規(guī)避上位機調度的延時?

方法是有的。USBCANFD提供了兩種方法,一定程度上規(guī)避上位機調度的時延問題:

硬件定時發(fā)送;

隊列發(fā)送。

90c06842-0a15-11ed-9ade-dac502259ad0.png


90df7872-0a15-11ed-9ade-dac502259ad0.jpg 硬件定時發(fā)送

USBCANFD 支持每通道最大 100條定時發(fā)送列表,只需將待發(fā)送數據及周期設置到設備并使能,設備將自動進行發(fā)送。相比于 PC 端的發(fā)送,定時發(fā)送精度高,周期準。在設備進行定時發(fā)送任務時,PC 端仍可調用數據發(fā)送接口進行數據發(fā)送。軟件實現方法,在ZCAN_StartCAN之后,繼續(xù)通過setvalue方式將定時發(fā)送結構體下載到設備中:

ZCAN_AUTO_TRANSMIT_OBJ auto_can; //從CAN定時發(fā)送結構體生成實例ZCANFD_AUTO_TRANSMIT_OBJ auto_canfd; //從CANFD定時發(fā)送結構體生成實例memset(&auto_can, 0, sizeof(auto_can));auto_can.index = 0; // 定時列表索引0auto_can.enable = 1; // 使能此索引,每條可單獨設置auto_can.interval = 100; // 定時發(fā)送間隔100msget_can_frame(auto_can.obj, 0); // 構造CAN報文prop->SetValue("1/auto_send", (const char*)&auto_can); // 設置定時發(fā)送memset(&auto_can, 0, sizeof(auto_can));auto_can.index = 1; // 定時列表索引1auto_can.enable = 1; // 使能此索引,每條可單獨設置auto_can.interval = 200; // 定時發(fā)送間隔200msget_can_frame(auto_can.obj, 1); // 構造CAN報文prop->SetValue("1/auto_send", (const char*)&auto_can); // 設置定時發(fā)送memset(&auto_canfd, 0, sizeof(auto_canfd));auto_canfd.index = 2; // 定時列表索引2auto_canfd.enable = 1; // 使能此索引,每條可單獨設置auto_canfd.interval = 500; // 定時發(fā)送間隔500msget_canfd_frame(auto_canfd.obj, 2); // 構造CANFD報文prop->SetValue("1/auto_send_canfd", (const char*)&auto_canfd); // 設置定時發(fā)送prop->SetValue("1/apply_auto_send", "0"); // 使能定時發(fā)送Sleep(5000); // 等待發(fā)送5sprop->SetValue("1/clear_auto_send", "0"); // 清除定時發(fā)送

優(yōu)點:1.周期穩(wěn)定,精度100us;2.可修改報文內容隨時覆蓋;3.可根據需求單獨對某條定時報文進行禁用操作。缺點:1.數據不是自動變化的,如涉及到內容變化,需要再次設置定時;2.不適用于非周期性的報文。


90df7872-0a15-11ed-9ade-dac502259ad0.jpg 隊列發(fā)送

通過隊列發(fā)送,用戶可以提前準備好多幀報文,設定報文之間的間隔,將準備好的報文發(fā)送給設備,設備按照預定義的幀間隔進行精準發(fā)送,通過此方式可提高發(fā)送幀之間的幀間隔精度。與定時發(fā)送相比,隊列發(fā)送每幀只發(fā)送一次,需由用戶不斷準備報文并批量發(fā)送到設備。USBCANFD-200U先通過SetValue將設備的發(fā)送模式切換成隊列發(fā)送模式。隊列發(fā)送緩存大小為100幀,隊列發(fā)送過程中,可以通過GetValue查詢當前隊列緩存的剩余空間。隊列發(fā)送有兩種方法實現:

一種是合并發(fā)送ZCAN_TransmitData——對應發(fā)送結構體ZCANDataObj;

另一種是單通道發(fā)送ZCAN_Transmit和ZCAN_TransmitFD——對應發(fā)送結構體ZCAN_Transmit_Data和ZCAN_TransmitFD_Data。

兩者都是發(fā)送結構體中使能隊列發(fā)送標志位,并且填入隊列發(fā)送報文間隔,再通過對應發(fā)送函數,發(fā)給設備合并發(fā)送ZCAN_TranmitData的代碼實現:

Prop->Setvalue(“0/set_send_mode”, “1”); //USBCANFD需要切換發(fā)送模式,CANFDNET無需此步驟…void get_can_frame_queue(ZCANDataObj& data, int ch, canid_t id, bool is_fd, UINT delay){memset(&data, 0, sizeof(data)); //初始化data結構體data.dataType = ZCAN_DT_ZCAN_CAN_CANFD_DATA;data.chnl = ch; //通道號ZCANCANFDData & can_data = data.data.zcanCANFDData;can_data.frame.can_id = MAKE_CAN_ID(id, 0, 0, 0); // CAN ID + STD/EXT + DATA/RMTcan_data.frame.len = is_fd ? 64 : 8; // 數據長度 8/64can_data.flag.unionVal.transmitType = 0; // 正常發(fā)送can_data.flag.unionVal.txEchoRequest = 1; // 設置發(fā)送回顯can_data.flag.unionVal.frameType = is_fd ? 1 : 0; // CAN or CANFDcan_data.flag.unionVal.txDelay = ZCAN_TX_DELAY_UNIT_MS; // 隊列延時單位毫秒can_data.timeStamp = delay; // 隊列延時時間,最大值 65535for (int i = 0; i < can_data.frame.len; ++i) { ? ? ? ? ? ? ? ? // 填充 CAN 報文 DATAcan_data.frame.data[i] = i;}…Ret = ZCAN.TransmitData(device_handle, data ,len);

第二種方法ZCAN_Transmit的代碼實現:

Prop->Setvalue(“0/set_send_mode”, “1”); //USBCANFD需要切換發(fā)送模式,CANFDNET無需此步驟…ZCAN_Transmit_Data can_data[10]={};ZCAN_TransmitFD_Data canfd_data[10]={};memset(& can_data, 0, sizeof(can_data)); //初始化data結構體memset(& canfd_data, 0, sizeof(canfd_data)); //初始化data結構體…can_data[0].frame.can_id =0x100;can_data[0].frame.__pad =0x80; //使能CAN幀隊列發(fā)送can_data[0].frame.__res0 =0x64; // 低位,設置100mscan_data[0].frame.__res1 =0x00; // 高位…canfd_data[0].frame.can_id =0x200;canfd_data[0].frame.flags=0x80; //使能非加速CANFD隊列發(fā)送,0x81使能加速CANFD隊列發(fā)送canfd_data[0].frame.__res0 =0x64; // 低位,設置100mscanfd_data[0].frame.__res1 =0x00; // 高位…ret = ZCAN.Transmit(channel_handle, can_data, 10);ret_fd = ZCAN.TransmitFD(channel_handle, canfd_data, 10);

隊列發(fā)送的優(yōu)缺點:

  • 優(yōu)點:定時間隔準確,最小精度為100us;
  • 缺點:設備分配的緩存大小有限,實際使用中需要結合getvalue去查緩存剩余空間,避免發(fā)送幀丟失。

以上兩種方法分別適用不同場景,根據實際應用需求,靈活使用,可以很大程度規(guī)避上位機調度帶來的時延問題,對用戶的通訊起到更穩(wěn)定和精準的控制。

【版權聲明】本文為ZLG開發(fā)者社區(qū)用戶原創(chuàng)內容,未經授權不得轉載。歡迎更多用戶到社區(qū)交流互動、創(chuàng)作博文,一經采用,可獲得百元京東E卡。

地址:https://developer.zlg.cn(長按復制到PC端打開)

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    9004

    瀏覽量

    153740
  • CAN
    CAN
    +關注

    關注

    57

    文章

    2920

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    國產化板卡設計原理圖:2136-KC705E增強版基于FMC接口的 JFM7K325T PCIeX8 接口卡

    PCIeX8 接口卡, 無線圖傳, 國產化板卡, JFM7K325T, JFM7K325T板卡
    的頭像 發(fā)表于 07-11 09:57 ?129次閱讀
    國產化板卡設計原理圖:2136-KC705E增強版基于FMC<b class='flag-5'>接口</b>的 JFM7K325T PCIeX8 <b class='flag-5'>接口卡</b>

    國產化板卡設計原理圖:2330-基于FMC接口的JFM7K325T PCIeX4 3U PXIe接口卡

    3U PXIe, FMQL45T900I, K7圖形圖像硬件加速器, PXIe接口卡, JFM7K325T 芯片
    的頭像 發(fā)表于 07-03 14:13 ?156次閱讀
    國產化板卡設計原理圖:2330-基于FMC<b class='flag-5'>接口</b>的JFM7K325T PCIeX4 3U PXIe<b class='flag-5'>接口卡</b>

    【STM32系統(tǒng)】基于STM32設計的SD數據讀取與上位顯示系統(tǒng)(SDIO接口驅動、雷龍貼片SD

      基于STM32設計的SD數據讀取與上位顯示系統(tǒng)   演示視頻: 基于STM32設計的SD數據讀取與
    發(fā)表于 05-09 16:11

    工程師在產品選型的時究竟是選CAN還是CANFD接口卡呢?

    很多工程師在產品選型的時候會疑惑,究竟是選CAN接口卡還是CANFD接口卡呢?兩者之間有什么區(qū)別呢?影響選擇的關鍵因素又是什么?我們今天一個一個來拆解。1.波特率傳統(tǒng)的CAN
    的頭像 發(fā)表于 03-21 11:37 ?367次閱讀
    工程師在產品選型的時究竟是選<b class='flag-5'>CAN</b>還是CANFD<b class='flag-5'>接口卡</b>呢?

    愛普生實時時鐘與晶振技術賦能NIC網絡接口卡

    在網絡技術飛速發(fā)展的當下,NIC網絡接口卡(網卡)作為設備與網絡連接的關鍵橋梁,其時間同步精度直接決定了網絡性能的穩(wěn)定性和效率。愛普生(EPSON)憑借其領先的實時時鐘(RTC)與晶振技術,為NIC
    的頭像 發(fā)表于 03-12 13:38 ?366次閱讀
    愛普生實時時鐘與晶振技術賦能NIC網絡<b class='flag-5'>接口卡</b>

    STM32F103上位升級,RS485升級、CAN升級

    通過RS232接口升級主機 2、上位通過RS232接口升級主機及RS485從1 3、
    發(fā)表于 01-03 08:57

    運動控制網絡通訊的心跳檢測之C#上位編程

    使用C#上位編程實現運動控制網絡通訊的心跳檢測功能
    的頭像 發(fā)表于 12-24 10:54 ?1123次閱讀
    運動控制<b class='flag-5'>卡</b>網絡通訊的心跳檢測之C#<b class='flag-5'>上位</b><b class='flag-5'>機</b>編程

    上位系統(tǒng)架構分析 上位與下位的區(qū)別

    上位系統(tǒng)架構分析 1. 上位的定義與作用 上位
    的頭像 發(fā)表于 12-04 10:17 ?3518次閱讀

    DP83867雙端口TSN PCle應用接口卡

    電子發(fā)燒友網站提供《DP83867雙端口TSN PCle應用接口卡.pdf》資料免費下載
    發(fā)表于 11-13 15:23 ?0次下載
    DP83867雙端口TSN PCle應用<b class='flag-5'>接口卡</b>

    CAN總線測試工具選擇與使用

    1. CAN分析儀 CAN分析儀是一種高級的測試工具,能夠實時捕獲和分析CAN總線上的數據。它們通常具備以下功能: 數據捕獲和存儲 實時數據顯示 信號診斷和錯誤檢測 網絡參數配置 模擬CAN
    的頭像 發(fā)表于 11-12 10:16 ?2509次閱讀

    DP83867 SFP應用接口卡

    電子發(fā)燒友網站提供《DP83867 SFP應用接口卡.pdf》資料免費下載
    發(fā)表于 11-09 14:42 ?0次下載
    DP83867 SFP應用<b class='flag-5'>接口卡</b>

    CAN/CANFD接口函數使用說明

    電子發(fā)燒友網站提供《CAN/CANFD接口函數使用說明.pdf》資料免費下載
    發(fā)表于 10-15 17:35 ?0次下載

    絕對值碼盤接口卡的廣泛應用與創(chuàng)新實踐

    。數控機床領域在現代數控機床中,精度和穩(wěn)定性是至關重要的。絕對值碼盤接口卡被廣泛應用于機床的坐標軸位置測量系統(tǒng)中。以一臺高精度加工中心為例,機床的X、Y、Z三個坐標軸均
    的頭像 發(fā)表于 09-05 17:08 ?501次閱讀
    絕對值碼盤<b class='flag-5'>接口卡</b>的廣泛應用與創(chuàng)新實踐

    適用于網絡接口卡的BAW振蕩器解決方案

    電子發(fā)燒友網站提供《適用于網絡接口卡的BAW振蕩器解決方案.pdf》資料免費下載
    發(fā)表于 08-27 11:31 ?0次下載
    適用于網絡<b class='flag-5'>接口卡</b>的BAW振蕩器解決方案

    PCI CAN和PCIE CAN的區(qū)別

    PCI CAN和PCIe CAN主要在接口標準、性能、以及應用場景等方面存在不同。
    的頭像 發(fā)表于 08-02 09:36 ?1120次閱讀