




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
c#编写can上位机程序周立功can pci接口卡提供的示例代码都是vc,vb和delphi的,没有c#.net的例子。但是在使用c#调用can api的时候,由于这些api对数据类型的校验非常严格,所以,调试起来比较麻烦。摸索了一段时间,终于使用c# 2.0 vs.2008调用can api可以正常的发送接收数据了。 现在把api的声明提供如下,有同样需求的,就可以少走很多弯路了。view plaincopy to clipboardprint?01.public sealed class canapi 02. 03. /接口卡类型定义 04. public enum pcidevicetype 05. 06. vci_pci5121 =1, 07. vci_pci9810 =2, 08. vci_usbcan1 =3, 09. vci_usbcan2 =4, 10. vci_pci9820 =5, 11. vci_can232 =6, 12. vci_pci5110 =7, 13. vci_canlite =8, 14. vci_isa9620 =9, 15. vci_isa5420 =10, 16. vci_pc104can = 11, 17. vci_canete =12, 18. vci_dnp9810 =13, 19. vci_pci9840 =14, 20. vci_pci9820i =16 21. 22. 23. /函数调用返回状态值 24. public static readonly int status_ok =1; 25. public static readonly int status_err =0; 26. 27. public enum errortype 28. 29. /can错误码 30. err_can_overflow =0x0001, /can控制器内部fifo溢出 31. err_can_erralarm =0x0002, /can控制器错误报警 32. err_can_passive =0x0004, /can控制器消极错误 33. err_can_lose =0x0008, /can控制器仲裁丢失 34. err_can_buserr =0x0010, /can控制器总线错误 35. 36. /通用错误码 37. err_deviceopened =0x0100, /设备已经打开 38. err_deviceopen =0x0200, /打开设备错误 39. err_devicenotopen =0x0400, /设备没有打开 40. err_bufferoverflow =0x0800, /缓冲区溢出 41. err_devicenotexist =0x1000, /此设备不存在 42. err_loadkerneldll =0x2000, /装载动态库失败 43. err_cmdfailed =0x4000, /执行命令失败错误码 44. err_buffercreate =0x8000 /内存不足 45. 46. 47. 48. 49. 50. /1.zlgcan系列接口卡信息的数据类型。 51. structlayout(layoutkind.sequential, charset = charset.ansi) 52. public struct vci_board_info 53. 54. public ushort hw_version; 55. public ushort fw_version; 56. public ushort dr_version; 57. public ushort in_version; 58. public ushort irq_num; 59. public byte can_num; 60. system.runtime.interopservices.marshalasattribute(system.runtime.interopservices.unmanagedtype.byvaltstr, sizeconst = 20) 61. public string str_serial_num; 62. system.runtime.interopservices.marshalasattribute(system.runtime.interopservices.unmanagedtype.byvaltstr, sizeconst = 40) 63. public string str_hw_type; 64. system.runtime.interopservices.marshalasattribute(system.runtime.interopservices.unmanagedtype.byvalarray, sizeconst = 4, arraysubtype = system.runtime.interopservices.unmanagedtype.u2) 65. public ushort reserved; 66. 67. 68. /2.定义can信息帧的数据类型。 69. structlayout(layoutkind.sequential, charset = charset.ansi) 70. public struct vci_can_obj 71. 72. public uint id; 73. public uint timestamp; 74. public byte timeflag; 75. public byte sendtype; 76. public byte remoteflag;/是否是远程帧 77. public byte externflag;/是否是扩展帧 78. public byte datalen; 79. marshalas(unmanagedtype.byvalarray, sizeconst = 8, arraysubtype = unmanagedtype.i1) 80. public byte data; 81. marshalas(unmanagedtype.byvalarray, sizeconst = 3, arraysubtype = unmanagedtype.i1) 82. public byte reserved; 83. 84. 85. /3.定义can控制器状态的数据类型。 86. structlayout(layoutkind.sequential, charset = charset.ansi) 87. public struct vci_can_status 88. 89. public byte errinterrupt; 90. public byte regmode; 91. public byte regstatus; 92. public byte regalcapture; 93. public byte regeccapture; 94. public byte regewlimit; 95. public byte regrecounter; 96. public byte regtecounter; 97. public uint reserved; 98. 99. 100. /4.定义错误信息的数据类型。 101. structlayout(layoutkind.sequential, charset = charset.ansi) 102. public struct vci_err_info 103. 104. public uint errcode; 105. 106. system.runtime.interopservices.marshalasattribute(system.runtime.interopservices.unmanagedtype.byvalarray, sizeconst = 3, arraysubtype = system.runtime.interopservices.unmanagedtype.i1) 107. public byte passive_errdata; 108. 109. public byte arlost_errdata; 110. 111. 112. /5.定义初始化can的数据类型 113. structlayout(layoutkind.sequential, charset = charset.ansi) 114. public struct vci_init_config 115. 116. public uint acccode; 117. public uint accmask; 118. public uint reserved; 119. public byte filter; 120. public byte timing0; 121. public byte timing1; 122. public byte mode; 123. 124. structlayout(layoutkind.sequential, charset = charset.ansi) 125. public struct chgdesipandport 126. 127. system.runtime.interopservices.marshalasattribute(system.runtime.interopservices.unmanagedtype.byvaltstr, sizeconst = 10) 128. public string szpwd; 129. 130. system.runtime.interopservices.marshalasattribute(system.runtime.interopservices.unmanagedtype.byvaltstr, sizeconst = 20) 131. public string szdesip; 132. 133. public int desport; 134. 135. 136. #region api函数 137. 138. dllimport(controlcan.dll, entrypoint = vci_opendevice, charset = charset.ansi, callingconvention = callingconvention.stdcall) 139. public static extern uint vci_opendevice(uint devicetype, uint deviceind, uint reserved); 140. 141. dllimport(controlcan.dll, entrypoint = vci_closedevice, charset = charset.ansi, callingconvention = callingconvention.stdcall) 142. public static extern uint vci_closedevice(uint devicetype, uint deviceind); 143. 144. dllimport(controlcan.dll, entrypoint = vci_initcan, charset = charset.ansi, callingconvention = callingconvention.stdcall) 145. public static extern uint vci_initcan(uint devicetype, uint deviceind, uint canind, ref vci_init_config pinitconfig); 146. 147. 148. dllimport(controlcan.dll, entrypoint = vci_readboardinfo, charset = charset.ansi, callingconvention = callingconvention.stdcall) 149. public static extern uint vci_readboardinfo(uint devicetype, uint deviceind, ref vci_board_info pinfo); 150. 151. dllimport(controlcan.dll, entrypoint = vci_readerrinfo, charset = charset.ansi, callingconvention = callingconvention.stdcall) 152. public static extern uint vci_readerrinfo(uint devicetype, uint deviceind, uint canind, ref vci_err_info perrinfo); 153. 154. 155. dllimport(controlcan.dll, entrypoint = vci_readcanstatus, charset = charset.ansi, callingconvention = callingconvention.stdcall) 156. public static extern uint vci_readcanstatus(uint devicetype, uint deviceind, uint canind, ref vci_can_status pcanstatus); 157. 158. dllimport(controlcan.dll, entrypoint = vci_getreference, charset = charset.ansi, callingconvention = callingconvention.stdcall) 159. public static extern uint vci_getreference(uint devicetype, uint deviceind, uint canind, uint reftype, object pdata); 160. 161. dllimport(controlcan.dll, entrypoint = vci_setreference, charset = charset.ansi, callingconvention = callingconvention.stdcall) 162. public static extern uint vci_setreference(uint devicetype, uint deviceind, uint canind, uint reftype, object pdata); 163. 164. dllimport(controlcan.dll, entrypoint = vci_getreceivenum, charset = charset.ansi, callingconvention = callingconvention.stdcall) 165. public static extern uint vci_getreceivenum(uint devicetype, uint deviceind, uint canind); 166. 167. dllimport(controlcan.dll, entrypoint = vci_clearbuffer, charset = charset.ansi, callingconvention = callingconvention.stdcall) 168. public static extern uint vci_clearbuffer(uint devicetype, uint deviceind, uint canind); 169. 170. dllimport(controlcan.dll, entrypoint = vci_startcan, charset = charset.ansi, callingconvention = callingconvention.stdcall) 171. public static extern uint vci_startcan(uint devicetype, uint deviceind, uint canind); 172. 173. dllimport(controlcan.dll, entrypoint = vci_resetcan, charset = charset.ansi, callingconvention = callingconvention.stdcall) 174. public static extern uint vci_resetcan(uint devicetype, uint deviceind, uint canind); 175. 176. dllimport(controlcan.dll, entrypoint = vci_transmit, charset = charset.ansi, callingconvention = callingconvention.stdcall) 177. public static extern uint vci_transmit(uint devicetype, uint deviceind, uint canind, ref vci_can_obj psend, uint len); 178. 179. dllimport(controlcan.dll, entrypoint = vci_receive, charset = charset.ansi, callingconvention = callingconvention.stdcall) 180. public static extern uint vci_receive(uint devicetype, uint deviceind, uint canind, ref vci_can_obj preceive, uint len, int waittime); 181. 182. 183. #endregion 184. public sealed class canapi /接口卡类型定义 public enum pcidevicetype vci_pci5121=1, vci_pci9810=2, vci_usbcan1=3, vci_usbcan2=4, vci_pci9820=5, vci_can232=6, vci_pci5110=7, vci_canlite=8, vci_isa9620=9, vci_isa5420=10, vci_pc104can=11, vci_canete=12, vci_dnp9810=13, vci_pci9840=14, vci_pci9820i=16 /函数调用返回状态值 public static readonly int status_ok=1; public static readonly int status_err=0; public enum errortype /can错误码 err_can_overflow=0x0001,/can控制器内部fifo溢出 err_can_erralarm=0x0002,/can控制器错误报警 err_can_passive=0x0004,/can控制器消极错误 err_can_lose=0x0008,/can控制器仲裁丢失 err_can_buserr=0x0010,/can控制器总线错误 /通用错误码 err_deviceopened=0x0100,/设备已经打开 err_deviceopen=0x0200,/打开设备错误 err_devicenotopen=0x0400,/设备没有打开 err_bufferoverflow=0x0800,/缓冲区溢出 err_devicenotexist=0x1000,/此设备不存在 err_loadkerneldll=0x2000,/装载动态库失败 err_cmdfailed=0x4000,/执行命令失败错误码 err_buffercreate=0x8000/内存不足 /1.zlgcan系列接口卡信息的数据类型。 structlayout(layoutkind.sequential, charset = charset.ansi) public struct vci_board_info public ushort hw_version; public ushort fw_version; public ushort dr_version; public ushort in_version; public ushort irq_num; public byte can_num; system.runtime.interopservices.marshalasattribute(system.runtime.interopservices.unmanagedtype.byvaltstr, sizeconst = 20) public string str_serial_num; system.runtime.interopservices.marshalasattribute(system.runtime.interopservices.unmanagedtype.byvaltstr, sizeconst = 40) public string str_hw_type; system.runtime.interopservices.marshalasattribute(system.runtime.interopservices.unmanagedtype.byvalarray, sizeconst = 4, arraysubtype = system.runtime.interopservices.unmanagedtype.u2) public ushort reserved; /2.定义can信息帧的数据类型。 structlayout(layoutkind.sequential, charset = charset.ansi) public struct vci_can_obj public uint id; public uint timestamp; public byte timeflag; public byte sendtype; public byte remoteflag;/是否是远程帧 public byte externflag;/是否是扩展帧 public byte datalen; marshalas(unmanagedtype.byvalarray, sizeconst = 8, arraysubtype = unmanagedtype.i1) public byte data; marshalas(unmanagedtype.byvalarray, sizeconst = 3, arraysubtype = unmanagedtype.i1) public byte reserved; /3.定义can控制器状态的数据类型。 structlayout(layoutkind.sequential, charset = charset.ansi) public struct vci_can_status public byte errinterrupt; public byte regmode; public byte regstatus; public byte regalcapture; public byte regeccapture; public byte regewlimit; public byte regrecounter; public byte regtecounter; public uint reserved; /4.定义错误信息的数据类型。 structlayout(layoutkind.sequential, charset = charset.ansi) public struct vci_err_info public uint errcode; system.runtime.interopservices.marshalasattribute(system.runtime.interopservices.unmanagedtype.byvalarray, sizeconst = 3, arraysubtype = system.runtime.interopservices.unmanagedtype.i1) public byte passive_errdata; public byte arlost_errdata; /5.定义初始化can的数据类型 structlayout(layoutkind.sequential, charset = charset.ansi) public struct vci_init_config public uint acccode; public uint accmask; public uint reserved; public byte filter; public byte timing0; public byte timing1; public byte mode; structlayout(layoutkind.sequential, charset = charset.ansi) public struct chgdesipandport system.runtime.interopservices.marshalasattribute(system.runtime.interopservices.unmanagedtype.byvaltstr, sizeconst = 10) public string szpwd; system.runtime.interopservices.marshalasattribute(system.runtime.interopservices.unmanagedtype.byvaltstr, sizeconst = 20) public string szdesip; public int desport; #region api函数 dllimport(controlcan.dll, entrypoint = vci_opendevice, charset = charset.ansi, callingconvention = callingconvention.stdcall) public static extern uint vci_opendevice(uint devicetype, uint deviceind, uint reserved); dllimport(controlcan.dll, entrypoint = vci_closedevice, charset = charset.ansi, callingconvention = callingconvention.stdcall) public static extern uint vci_closedevice(uint devicetype, uint deviceind); dllimport(controlcan.dll, entrypoint = vci_initcan, charset = charset.ansi, callingconvention = callingconvention.stdcall) public static extern uint vci_initcan(uint devicetype, uint deviceind, uint canind, ref vci_init_config pinitconfig); dllimport(controlcan.dll, entrypoint = vci_readboardinfo, charset = charset.ansi, callingconvention = callingconvention.stdcall) public static extern uint vci_readboardinfo(uint devicetype, uint deviceind, ref vci_board_info pinfo); dllimport(controlcan.dll, entrypoint = vci_readerrinfo, charset = charset.ansi, callingconvention = callingconvention.stdcall) public static extern uint vci_readerrinfo(uint devicetype, uint deviceind, uint canind, ref vci_err_info perrinfo); dllimport(controlcan.dll, entrypoint = vci_readcanstatus, charset = charset.ansi, callingconvention = callingconvention.stdcall) public static extern uint vci_readcanstatus(uint devicetype, uint deviceind, uint canind, ref vci_can_status pcanstatus); dllimport(controlcan.dll, entrypoint = vci_getreference, charset = charset.ansi, callingconvention = callingconvention.stdcall) public static extern uint vci_getreference(uint devicetype, uint deviceind, uint canind, uint reftype, object pdata); dllimport(controlcan.dll, entrypoint = vci_setreference, charset = charset.ansi, callingconvention = callingconvention.stdcall) public static extern uint vci_setreference(uint devicetype, uint deviceind, uint canind, uint reftype, object pdata); dllimport(controlcan.dll, entrypoint = vci_getreceivenum, charset = charset.ansi, callingconvention = callingconvention.stdcall) public static extern uint vci_getreceivenum(uint devicetype, uint deviceind, uint canind); dllimport(controlcan.dll, entrypoint = vci_clearbuffer, charset = charset.ansi, callingconvention = callingconvention.stdcall) public static extern uint vci_clearbuffer(uint devicetype, uint deviceind, uint canind); dllimport(controlcan.dll, entrypoint = vci_startcan, charset = charset.ansi, callingconvention = callingconvention.stdcall) public static extern uint vci_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025能源企业出纳职责履行及担保责任合同范本
- 2025年战略性新兴产业知识产权情报服务采购协议挖掘市场机遇
- 2025年高效节能型变频器控制柜设备供应与安装服务合同
- 二零二五年度工业产品技术支持合同
- 2025年度时尚饮品品牌与KTV跨界联合营销合作协议
- 2025版高等职业教育院校与企业联合办学合同
- 2025年大型太阳能光伏电站项目全过程咨询与施工监理合同
- 2025年互联网数据中心网络安全招投标与全程监管服务协议
- 2025年离婚财产分割子女监护抚养赡养全面协议及执行细则合同
- 2025年新能源车辆运输服务合同模板
- 《俗世奇人》整本书导读课件
- 传统白酒生产项目商业计划书
- 2025年教师资格证考试综合素质(中学)试题及答案
- 江苏省淮安市2024-2025学年高一下学期期末考试物理试卷(解析版)
- 《基孔肯雅热防控技术指南(2025年版)》解读课件
- 2025年呼伦贝尔市生态环境局所属事业单位引进人才(2人)模拟试卷附答案详解(综合卷)
- 2025年中国建设银行招聘考试(综合知识)历年参考题库含答案详解(5套)
- BMS基础知识培训课件
- 承接战略贴近业务人力资源规划设计到应用
- 2025年广元市专业技术人员公需科目继续教育考试试题及答案
- 消防外管网维修合同范本
评论
0/150
提交评论