رابط باس USB-CAN
عملکرد رابط آداپتور
دستورالعمل استفاده از کتابخانه
قسمت اول به پایان رسیدVIEW
اگر کاربر فقط از آداپتور رابط باس USB-CAN برای انجام تست ارتباطی CAN bus استفاده کند و سپس می تواند مستقیماً از نرم افزار USB-CAN Tool ارائه شده برای ارسال و دریافت داده های آزمایش استفاده کند.
اگر کاربر قصد دارد برای محصولات خود برنامه نرم افزاری بنویسد. لطفاً دستورالعمل های زیر را به دقت بخوانید و از s مرجع بگیریدampکد le ارائه می دهیم:
⑴ C++Builder ⑵C# ⑶VC ⑷VB ⑸VB.NET ⑹Delphi ⑺LabVIEW ⑻ LabWindows/CVI ⑼Matlab ⑽QT ⑾Python/Python-can.
توسعه کتابخانه file :ControlCAN.lib، ControlCAN.DLL
اعلام عملکرد نسخه VC file :ControlCAN.h
اعلام عملکرد نسخه VB file: ControlCAN.bas
آزمایشگاهVIEW ماژول بسته تابع کتابخانه نسخه :ControlCAN.llb
اعلان تابع نسخه دلفی file: ControlCAN.pas
بخش دوم: کتابخانه و ساختار داده با عملکرد سازگار
2.1. تعریف نوع
2.1.1. نوع وسیله
نوع تعریف | مقدار را تایپ کنید | توضیحات |
DEV_USBCAN2 | 4 | USBCAN-2A/USBCAN-2C/CANalyst-II MiniPCIe-CAN |
2.1.2. VCI_BOARD_INFO
ساختار VCI_BOARD_INFO حاوی اطلاعات دستگاه کارت رابط سری USB-CAN است.
ساختار در تابع VCI_ReadBoardInfo پر می شود.
عضو:
نسخه hw
شماره نسخه سخت افزار، نماد هگزادسیمال. به عنوان مثال 0x0100 نشان دهنده V1.00 است.
fw_نسخه
شماره نسخه سخت افزار، نماد هگزادسیمال. به عنوان مثال 0x0100 نشان دهنده V1.00 است.
صفحه 2
dr_Version
شماره نسخه درایور، نماد هگزادسیمال. به عنوان مثال 0x0100 نشان دهنده V1.00 است.
in_Version
شماره نسخه کتابخانه رابط، نماد هگزادسیمال. به عنوان مثال 0x0100 نشان دهنده V1.00 است.
irq_Num
سیستم رزرو شده است.
can_Num
تعداد کل کانال CAN را نشان می دهد.
str_Serial_Num
شماره سریال این کارت برد.
str_hw_Type
نوع سخت افزار، مانند "USBCAN V1.00" (توجه: شامل پایان دهنده رشته '\0').
رزرو شده است
سیستم رزرو شده است.
2.1.3. VCI_CAN_OBJ
در توابع VCI_Transmit و VCI_Receive، ساختار VCI_CAN_OBJ برای انتقال فریم پیام CAN استفاده می شود.
عضو:
ID
شناسه پیام فرمت شناسه مستقیم، تراز راست، لطفاً به: پیوست یک: جزئیات تراز شناسه مراجعه کنید.
TimeStamp
دریافت خیابانamp اطلاعات بازه زمانی، زمان شروع زمانی که کنترل کننده CAN مقدار دهی اولیه می شود، واحد 0. 1 میلی ثانیه است.
پرچم زمان
از نظر اینکه آیا از زمان stamp، 1 TimeSt موثر استamp. TimeFlag و TimeStamp فقط زمانی معنی دار هستند که فریم دریافت شود.
SendType
نوع ارسال = 0 نشان دهنده نوع عادی، = 1 نشان دهنده ارسال تک است.
RemoteFlag
خواه این پرچم از راه دور باشد. = 1 نشان دهنده پرچم راه دور، = 0 نشان دهنده پرچم داده است.
پرچم خارجی
چه پرچم خارجی باشد. = 1 نشان دهنده پرچم خارجی، = 0 نشان دهنده پرچم استاندارد است.
دیتالن
طول داده (<=8) یعنی طول داده.
داده ها
داده های بسته
رزرو شده است
سیستم رزرو شده است.
2.1.4. VCI_INIT_CONFIG
ساختار VCI_INIT_CONFIG پیکربندی اولیه CAN را تعریف می کند. ساختار در تابع VCI_InitCan پر می شود.
عضو:
AcCode
کد پذیرش فیلتر شده را دریافت کنید.
AccMask
ماسک فیلتر را دریافت کنید.
رزرو شده است
رزرو شده است.
فیلتر کنید
روش فیلتر کردن، اجازه تنظیم محدوده 0-3 را می دهد، برای جزئیات به بخش 2.2.3 جدول حالت فیلتر مراجعه کنید.
زمان 0
پارامتر نرخ باود SJA1000، زمان 0 (BTR0).
زمان 1
پارامتر نرخ باود SJA1000، زمان 1 (BTR1).
حالت
حالت عملیاتی، 0 = عملکرد عادی، 1 = حالت فقط گوش دادن، 2 = پذیرش خود به خود و حالت آزمون ارسال.
اظهارات:
درباره تنظیمات فیلتر لطفاً به: پیوست II: دستورالعمل های تنظیم پارامتر CAN مراجعه کنید.
CAN Timing0 و Timing1 برای تنظیم نرخ باود استفاده می شوند، این دو پارامتر فقط در مقدار اولیه s استفاده می شوند.tage.
جدول مرجع Baud معمولی:
نرخ باود CAN | زمان 0 (BTR0) | زمان 1 (BTR1) |
10 هزار bps | 0x31 | 0x1C |
20 هزار bps | 0x18 | 0x1C |
40 هزار bps | 0x87 | 0xFF |
50 هزار bps | 0x09 | 0x1C |
80 هزار bps | 0x83 | 0xFF |
100 هزار bps | 0x04 | 0x1C |
125 هزار bps | 0x03 | 0x1C |
200 هزار bps | 0x81 | 0xFA |
250 هزار bps | 0x01 | 0x1C |
400 هزار bps | 0x80 | 0xFA |
500 هزار bps | 0x00 | 0x1C |
666 هزار bps | 0x80 | 0xB6 |
800 هزار bps | 0x00 | 0x16 |
1000 هزار bps | 0x00 | 0x14 |
33.33 کیلوبیت بر ثانیه | 0x09 | 0x6F |
66.66 کیلوبیت بر ثانیه | 0x04 | 0x6F |
83.33 کیلوبیت بر ثانیه | 0x03 | 0x6F |
- کاربران فقط باید SJA1000 (16 مگاهرتز) را دنبال کنند تا پارامتر نرخ Baud را تنظیم کنند.
- آداپتور به طور موقت از نرخ Baud زیر 10K پشتیبانی نمی کند.
2.2. شرح تابع
2.2.1. VCI_OpenDevice
این عملکرد برای اتصال دستگاه ها استفاده می شود.
DWORD __stdcall VCI_OpenDevice(DWORD DevType,DWORD DevIndex,DWORD Reserved);
پارامترها:
DevType
نوع وسیله. ببینید: تعریف نوع دستگاه آداپتور.
DevIndex
نمایه دستگاه، برای مثالampهنگامی که فقط یک آداپتور USB-CAN وجود دارد، عدد شاخص 0 است، زمانی که چندین آداپتور USB-CAN وجود دارد، اعداد فهرست به ترتیب صعودی از 0 شروع می شود.
رزرو شده است
پارامترهای حفظ، 0 را پر کنید.
برمی گرداند:
مقدار بازگشتی = 1، که به معنی موفقیت آمیز بودن عملیات است. = 0 نشان می دهد که عملیات شکست خورده است. = -1 نشان می دهد که دستگاه وجود ندارد.
2.2.2. VCI_CloseDevice
این تابع برای بستن اتصال استفاده می شود.
DWORD __stdcall VCI_CloseDevice(DWORD DevType,DWORD DevIndex)؛
پارامترها:
DevType
نوع وسیله. ببینید: تعریف نوع دستگاه آداپتور.
DevIndex
نمایه دستگاه، برای مثالampهنگامی که فقط یک آداپتور USB-CAN وجود دارد، عدد شاخص 0 است، زمانی که چندین آداپتور USB-CAN وجود دارد، اعداد فهرست به ترتیب صعودی از 0 شروع می شود.
برمی گرداند:
مقدار بازگشتی = 1، که به معنی موفقیت آمیز بودن عملیات است. = 0 نشان می دهد که عملیات شکست خورده است. = -1 نشان می دهد که دستگاه وجود ندارد.
2.2.3. VCI_InitCan
این تابع برای مقداردهی اولیه CAN مشخص شده استفاده می شود.
DWORD __stdcall VCI_InitCAN(DWORD DevType، DWORD DevIndex، DWORD CANIndex،
PVCI_INIT_CONFIG pInitConfig)؛
پارامترها:
DevType
نوع وسیله. ببینید: تعریف نوع دستگاه آداپتور.
DevIndex
نمایه دستگاه، برای مثالampهنگامی که فقط یک آداپتور USB-CAN وجود دارد، عدد شاخص 0 است، زمانی که چندین آداپتور USB-CAN وجود دارد، اعداد فهرست به ترتیب صعودی از 0 شروع می شود.
CANIindex
شاخص کانال CAN، مانند زمانی که تنها یک کانال CAN وجود دارد، عدد ایندکس 0 است، اگر دو کانال وجود داشته باشد، عدد شاخص می تواند 0 یا 1 باشد.
pInitConfig
ساختار پارامتر مقداردهی اولیه لیست پارامترهای اعضا:
عضو | توضیحات عملکردی |
pInitConfig->AccCode | AccCode و AccMask می توانند با هم کار کنند تا مشخص کنند کدام بسته ها را می توان پذیرفت. از این دو رجیستر برای تنظیم شناسه در تراز چپ استفاده می شود، یعنی بالاترین بیت (Bit31) AccCode و AccMask با بالاترین بیت از مقدار ID تراز می شود. |
pInitConfig->AccMask | درباره تراز شناسه به پیوست ها مراجعه کنید: پیوست I: جزئیات تراز شناسه به عنوان مثال: اگر مقدار AccCode را 0x24600000 تنظیم کنید (یعنی 0x123 با 21 بیت به چپ منتقل می شود)، مقدار AccMask روی 0x00000000 تنظیم شده است، و سپس فقط بسته هایی با شناسه قاب پیام CAN 0x123 می توانند پذیرفته شوند (مقدار AcMask 0x00000000 نشان می دهد که همه بیت ها مرتبط هستند |
بیت). اگر مقدار AccCode روی 0x24600000 تنظیم شود، مقدار AccMask روی 0x600000 تنظیم می شود (0x03 با 21 بیت به چپ منتقل می شود) و سپس فقط بسته هایی با شناسه قاب پیام CAN 0x120 ~ 0x123 می توانند پذیرفته شوند (مقدار AccMask 0x600000 نشان می دهد که به غیر از bit0 ~ bit1 بیت های دیگر (bit2 ~ bit10) بیت های مرتبط هستند. توجه: این تنظیمات فیلتر سابقampبه قاب استاندارد، برای مثالample، 11 بیتی بالا بیت معتبر است. در مورد فریم توسعه یافته، و سپس شناسه معتبر 29 بیتی است. AccCode و AccMask 29 بیتی بالا را به عنوان بیت معتبر تنظیم می کنند! |
|
pInitConfig->Reserved | رزرو شده است |
pInitConfig->Filter | تنظیمات حالت فیلتر لطفا به بخش جدول حالت فیلتر مراجعه کنید. |
pInitConfig->Timing0 | تنظیم Baud rateT0 |
pInitConfig->Timing1 | تنظیم Baud rateT1 |
pInitConfig->Mode | حالت عامل: 0-عملکرد عادی 1-حالت فقط گوش دادن 2- حالت آزمون پذیرش و ارسال خود به خود (این مقدار از کتابخانه تابع ZLG حذف شده است) |
جدول حالت فیلتر:
ارزش | نام | توضیحات |
1 | دریافت انواع | مناسب برای هر دو قاب استاندارد و توسعه یافته! |
2 | فقط قاب استاندارد را دریافت کنید | مناسب برای قاب استاندارد، و گسترش یافته است |
قاب به طور مستقیم با فیلتر کردن حذف می شود! | ||
3 | فقط فریم توسعه یافته را دریافت کنید | مناسب برای قاب توسعه یافته، و قاب استاندارد توسط حذف خواهد شد فیلتراسیون مستقیم! . |
برمی گرداند:
مقدار بازگشتی = 1، که به معنی موفقیت آمیز بودن عملیات است. = 0 نشان می دهد که عملیات شکست خورده است. = -1 نشان می دهد که دستگاه وجود ندارد.
به عنوان مثال
2.2.4. VCI_ReadBoardInfo
این تابع برای خواندن اطلاعات سخت افزار آداپتور استفاده می شود. به طور کلی، می توان آن را نادیده گرفت.
DWORD __stdcall VCI_ReadBoardInfo(DWORD DevType,DWORD
DevIndex، PVCI_BOARD_INFO pInfo)؛
پارامترها:
DevType
نوع وسیله. ببینید: تعریف نوع دستگاه آداپتور.
DevIndex
نمایه دستگاه، برای مثالampهنگامی که فقط یک آداپتور USB-CAN وجود دارد، عدد شاخص 0 است، هنگامی که چندین آداپتور USB-CAN وجود دارد، اعداد فهرست به ترتیب صعودی از 0 شروع می شود. pInfo
VCI_BOARD_INFO برای ذخیره نشانگر ساختار اطلاعات دستگاه استفاده می شود.
برمی گرداند:
مقدار بازگشتی = 1، که به معنی موفقیت آمیز بودن عملیات است. = 0 نشان می دهد که عملیات شکست خورده است. = -1 نشان می دهد که دستگاه وجود ندارد.
2.2.5. VCI_GetReceiveNum
این تابع برای تعیین فریم های دریافتی اما خوانده نشده در بافر دریافتی تعیین شده استفاده می شود.
DWORD __stdcall VCI_GetReceiveNum(DWORD DevType,DWORD DevIndex,DWORD CANIndex);
پارامترها:
DevType
نوع وسیله. ببینید: تعریف نوع دستگاه آداپتور.
DevIndex
نمایه دستگاه، برای مثالampهنگامی که فقط یک آداپتور USB-CAN وجود دارد، عدد شاخص 0 است، زمانی که چندین آداپتور USB-CAN وجود دارد، اعداد فهرست به ترتیب صعودی از 0 شروع می شود.
CANIindex
فهرست کانال CAN.
برمی گرداند:
فریم هایی را که هنوز خوانده نشده اند برگردانید.
به عنوان مثال
#include "ControlCan.h" int ret=VCI_GetReceiveNum(2,0,0);
2.2.6. VCI_ClearBuffer
این تابع برای پاک کردن بافر دریافت و ارسال کانال تعیین شده توسط
آداپتور USB-CAN.
DWORD __stdcall VCI_ClearBuffer(DWORD DevType,DWORD DevIndex,DWORD CANIndex);
پارامترها:
DevType
نوع وسیله. ببینید: تعریف نوع دستگاه آداپتور.
DevIndex
نمایه دستگاه، برای مثالampهنگامی که فقط یک آداپتور USB-CAN وجود دارد، عدد شاخص 0 است، زمانی که چندین آداپتور USB-CAN وجود دارد، اعداد فهرست به ترتیب صعودی از 0 شروع می شود.
CANIindex
فهرست کانال CAN.
برمی گرداند:
مقدار بازگشتی = 1، که به معنی موفقیت آمیز بودن عملیات است. = 0 نشان می دهد که عملیات شکست خورده است. = -1 نشان می دهد که دستگاه وجود ندارد.
2.2.7. VCI_StartCAN
این تابع برای راه اندازی کنترلر CAN و عملکرد دریافت وقفه داخلی آداپتور استفاده می شود.
DWORD __stdcall VCI_StartCAN(DWORD DevType,DWORD DevIndex,DWORD CANIndex);
پارامترها:
DevType
نوع وسیله. ببینید: تعریف نوع دستگاه آداپتور.
DevIndex
نمایه دستگاه، برای مثالampهنگامی که فقط یک آداپتور USB-CAN وجود دارد، عدد شاخص 0 است، زمانی که چندین آداپتور USB-CAN وجود دارد، اعداد فهرست به ترتیب صعودی از 0 شروع می شود.
CANIindex
فهرست کانال CAN.
برمی گرداند:
مقدار بازگشتی = 1، که به معنی موفقیت آمیز بودن عملیات است. = 0 نشان می دهد که عملیات شکست خورده است. = -1 نشان می دهد که دستگاه وجود ندارد.
2.2.8. VCI_ResetCAN
این تابع برای تنظیم مجدد کنترلر CAN استفاده می شود.
DWORD __stdcall VCI_ResetCAN(DWORD DevType,DWORD DevIndex,DWORD CANIndex);
پارامترها:
DevType
نوع وسیله. ببینید: تعریف نوع دستگاه آداپتور.
DevIndex
نمایه دستگاه، برای مثالampهنگامی که فقط یک آداپتور USB-CAN وجود دارد، عدد شاخص 0 است، زمانی که چندین آداپتور USB-CAN وجود دارد، اعداد فهرست به ترتیب صعودی از 0 شروع می شود.
CANIindex
فهرست کانال CAN.
برمی گرداند:
مقدار بازگشتی = 1، که به معنی موفقیت آمیز بودن عملیات است. = 0 نشان می دهد که عملیات شکست خورده است. = -1 نشان می دهد که دستگاه وجود ندارد.
2.2.9. VCI_Transmit
این تابع برای ارسال فریم پیام CAN استفاده می شود.
DWORD __stdcall VCI_Transmit(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,PVCI_CAN_OBJ pSend,DWORD Length);
پارامترها:
DevType
نوع وسیله. ببینید: تعریف نوع دستگاه آداپتور.
DevIndex
نمایه دستگاه، برای مثالampهنگامی که فقط یک آداپتور USB-CAN وجود دارد، عدد شاخص 0 است، زمانی که چندین آداپتور USB-CAN وجود دارد، اعداد فهرست به ترتیب صعودی از 0 شروع می شود.
CANIindex
فهرست کانال CAN. pSend
اولین آدرس آرایه های قاب داده ای که باید ارسال شوند.
طول
تعداد فریم های داده ای که باید ارسال شوند، حداکثر 1000 است، مقدار توصیه شده 48 در سرعت بالا است.
برمی گرداند:
تعداد واقعی فریم هایی که قبلا ارسال شده را برگردانید، مقدار بازگشتی = -1 نشان دهنده یک خطای دستگاه است.
به عنوان مثال
2.2.10. VCI_Receive
این تابع برای درخواست دریافت استفاده می شود.
DWORD __stdcall VCI_Receive(DWORD DevType، DWORD DevIndex، DWORD CANIndex، PVCI_CAN_OBJ pReceive، ULONG Len، INT Waittime);
پارامترها:
DevType
نوع وسیله. ببینید: تعریف نوع دستگاه آداپتور.
DevIndex
نمایه دستگاه، برای مثالampهنگامی که فقط یک آداپتور USB-CAN وجود دارد، عدد شاخص 0 است، زمانی که چندین آداپتور USB-CAN وجود دارد، اعداد فهرست به ترتیب صعودی از 0 شروع می شود.
CANIindex
فهرست کانال CAN.
دریافت کنید
برای دریافت اولین نشانگر مجموعه فریم های داده.
لن
طول آرایه قاب داده باید بیشتر از 2500 باشد تا پیام عادی را برگرداند.
در غیر این صورت، چه پیام دریافت شود چه نشود، طول بازگشت صفر خواهد بود. آداپتور یک بافر 2000 فریمی برای هر کانال تنظیم می کند. بر اساس سیستم و محیط کاری خود، کاربر می تواند طول آرایه مناسب را از 2500 انتخاب کند.
زمان انتظار رزرو شده است.
برمی گرداند:
تعداد فریم هایی که واقعا خوانده شده اند را برگردانید، -1 نشان دهنده خطاهای دستگاه است.
به عنوان مثال
بخش سوم توابع دیگر و شرح ساختار داده
این فصل سایر انواع داده ها و عملکردهای کتابخانه رابط ZLG ناسازگار موجود در کتابخانه رابط آداپتور USB-CAN ControlCAN.dll را شرح می دهد. لطفا انجام بدهید
اگر از یک مدل ZLG سازگار برای توسعه ثانویه استفاده کنید، این توابع را فراخوانی نکنید تا بر سازگاری تأثیر نگذارد.
3.1 شرح عملکرد
3.1.1. VCI_UsbDeviceReset
آداپتور USB-CAN را بازنشانی کنید، پس از تنظیم مجدد باید با استفاده از VCI_OpenDevice دستگاه را دوباره باز کنید.
DWORD __stdcall VCI_UsbDeviceReset(DWORD DevType,DWORD DevIndex,DWORD Reserved
پارامترها:
DevType
نوع وسیله. ببینید: تعریف نوع دستگاه آداپتور.
DevIndex
نمایه دستگاه، برای مثالampهنگامی که فقط یک آداپتور USB-CAN وجود دارد، عدد شاخص 0 است، زمانی که چندین آداپتور USB-CAN وجود دارد، اعداد فهرست به ترتیب صعودی از 0 شروع می شود.
رزرو شده رزرو شده است.
برمی گرداند:
مقدار بازگشتی = 1، که به معنی موفقیت آمیز بودن عملیات است. = 0 نشان می دهد که عملیات شکست خورده است. = -1 نشان می دهد که دستگاه وجود ندارد.
bRel = VCI_UsbDeviceReset(nDeviceType، Independence، 0);
3.1.2. VCI_FindUsbDevice2
هنگامی که همان رایانه از چندین USB-CAN استفاده می کند، کاربر می تواند از این عملکرد برای یافتن دستگاه فعلی استفاده کند.
DWORD __stdcall VCI_FindUsbDevice2(PVCI_BOARD_INFO pInfo);
پارامترها:
pInfo
pInfo برای ذخیره پارامترهای اولین نشانگر آدرس بافر داده استفاده می شود.
برمی گرداند
شماره آداپتور USB-CAN متصل به رایانه را برگردانید.
بخش چهارم توابع کتابخانه رابط با استفاده از فرآیند
به منظور ضرب عملکرد دستگاه، توابع اضافی (توابع ارائه شده با پس زمینه سبز) را ارائه کردیم، این توابع عبارتند از: VCI_FindUsbDevice2 VCI_UsbDeviceReset. در طول توسعه دوم، این توابع لزوماً نباید فراخوانی شوند. حتی این عملکردها نادیده گرفته می شوند، همه عملکردهای آداپتور USB-CAN قابل دستیابی هستند.
www.waveshare.com
www.waveshare.com/wiki
اسناد / منابع
![]() |
کتابخانه عملکرد رابط آداپتور بین چهره اتوبوس WAVESHARE USB-CAN [pdfدفترچه راهنما کتابخانه عملکرد رابط آداپتور USB-CAN Bus Interface، USB-CAN، کتابخانه عملکرد رابط آداپتور بین چهره اتوبوس، کتابخانه عملکرد رابط، کتابخانه عملکرد |