api.rst 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484
  1. API 手册
  2. ===========================
  3. ec_master_init
  4. ---------------------------
  5. 创建并初始化一个主站
  6. .. code-block:: c
  7. :linenos:
  8. int ec_master_init(ec_master_t *master, uint8_t master_index);
  9. .. list-table::
  10. :widths: 10 10
  11. :header-rows: 1
  12. * - parameter
  13. - description
  14. * - master
  15. - 主站对象指针
  16. * - master_index
  17. - 主站索引号,从 0 开始
  18. ec_master_deinit
  19. ---------------------------
  20. 销毁主站对象,暂不支持
  21. .. code-block:: c
  22. :linenos:
  23. void ec_master_deinit(ec_master_t *master);
  24. ec_master_start
  25. ---------------------------
  26. 启动主站周期任务,所有slave 进入 op 模式,开始周期性执行 PDO 通信。 **此函数需要等待 slave 扫描完成后才能调用,函数内部会检查是否扫描完成,如果没有则死等(会进行任务切换)**。
  27. .. code-block:: c
  28. :linenos:
  29. int ec_master_start(ec_master_t *master, uint32_t period_us);
  30. .. list-table::
  31. :widths: 10 10
  32. :header-rows: 1
  33. * - parameter
  34. - description
  35. * - master
  36. - 主站对象指针
  37. * - period_us
  38. - 主站周期,单位微秒
  39. ec_master_stop
  40. ---------------------------
  41. 停止主站周期任务,所有 slave 退回到 preop 模式。
  42. .. code-block:: c
  43. :linenos:
  44. int ec_master_stop(ec_master_t *master);
  45. .. list-table::
  46. :widths: 10 10
  47. :header-rows: 1
  48. * - parameter
  49. - description
  50. * - master
  51. - 主站对象指针
  52. ec_master_get_slave_domain
  53. ----------------------------
  54. 获取指定 slave 的 PDO domain 的起始地址,起始地址为 output domain。 **对应 slave rxpdo + txpdo 内容**。
  55. 需要搭配 `ec_master_get_slave_domain_size` 一起使用,用于获取指定 slave 总的 PDO domain。
  56. .. code-block:: c
  57. :linenos:
  58. uint8_t *ec_master_get_slave_domain(ec_master_t *master, uint32_t slave_index);
  59. .. list-table::
  60. :widths: 10 10
  61. :header-rows: 1
  62. * - parameter
  63. - description
  64. * - master
  65. - 主站对象指针
  66. * - slave_index
  67. - 从站索引号,从 0 开始
  68. * - return
  69. - 指向指定 slave PDO domain的指针,起始地址为 output domain
  70. ec_master_get_slave_domain_size
  71. ---------------------------------
  72. 获取指定 slave 的 PDO domain 的大小,包含 input domain 和 output domain。
  73. .. code-block:: c
  74. :linenos:
  75. uint32_t ec_master_get_slave_domain_size(ec_master_t *master, uint32_t slave_index);
  76. .. list-table::
  77. :widths: 10 10
  78. :header-rows: 1
  79. * - parameter
  80. - description
  81. * - master
  82. - 主站对象指针
  83. * - slave_index
  84. - 从站索引号,从 0 开始
  85. * - return
  86. - 指定 slave PDO domain 的大小,单位字节
  87. ec_master_get_slave_domain_output
  88. ------------------------------------
  89. 获取指定 slave 的 PDO output domain 起始地址。 **对应 slave rxpdo 内容**。
  90. 需要搭配 `ec_master_get_slave_domain_osize` 一起使用。
  91. .. code-block:: c
  92. :linenos:
  93. uint8_t *ec_master_get_slave_domain_output(ec_master_t *master, uint32_t slave_index);
  94. .. list-table::
  95. :widths: 10 10
  96. :header-rows: 1
  97. * - parameter
  98. - description
  99. * - master
  100. - 主站对象指针
  101. * - slave_index
  102. - 从站索引号,从 0 开始
  103. * - return
  104. - 指向指定 slave PDO output domain 的起始地址
  105. ec_master_get_slave_domain_osize
  106. ---------------------------------
  107. 获取指定 slave 的 PDO output domain 的大小。
  108. .. code-block:: c
  109. :linenos:
  110. uint32_t ec_master_get_slave_domain_size(ec_master_t *master, uint32_t slave_index);
  111. .. list-table::
  112. :widths: 10 10
  113. :header-rows: 1
  114. * - parameter
  115. - description
  116. * - master
  117. - 主站对象指针
  118. * - slave_index
  119. - 从站索引号,从 0 开始
  120. * - return
  121. - 指定 slave PDO domain 的大小,单位字节
  122. ec_master_get_slave_domain_input
  123. ---------------------------------
  124. 获取指定 slave 的 PDO input domain 的起始地址。 **对应 slave txpdo 内容**。
  125. 需要搭配 `ec_master_get_slave_domain_isize` 一起使用,用于获取指定 slave 总的 PDO domain。
  126. .. code-block:: c
  127. :linenos:
  128. uint8_t *ec_master_get_slave_domain_input(ec_master_t *master, uint32_t slave_index);
  129. .. list-table::
  130. :widths: 10 10
  131. :header-rows: 1
  132. * - parameter
  133. - description
  134. * - master
  135. - 主站对象指针
  136. * - slave_index
  137. - 从站索引号,从 0 开始
  138. * - return
  139. - 指向指定 slave PDO domain的指针,起始地址为 output domain
  140. ec_master_get_slave_domain_isize
  141. ---------------------------------
  142. 获取指定 slave 的 PDO input domain 的大小。
  143. .. code-block:: c
  144. :linenos:
  145. uint32_t ec_master_get_slave_domain_isize(ec_master_t *master, uint32_t slave_index);
  146. .. list-table::
  147. :widths: 10 10
  148. :header-rows: 1
  149. * - parameter
  150. - description
  151. * - master
  152. - 主站对象指针
  153. * - slave_index
  154. - 从站索引号,从 0 开始
  155. * - return
  156. - 指定 slave PDO input domain 的大小,单位字节
  157. ec_coe_download
  158. --------------------------------
  159. 使用 SDO 下载数据到从站对象字典。
  160. .. code-block:: c
  161. :linenos:
  162. int ec_coe_download(ec_master_t *master,
  163. uint16_t slave_index,
  164. ec_datagram_t *datagram,
  165. uint16_t index,
  166. uint8_t subindex,
  167. const void *buf,
  168. uint32_t size,
  169. bool complete_access);
  170. .. list-table::
  171. :widths: 10 10
  172. :header-rows: 1
  173. * - parameter
  174. - description
  175. * - master
  176. - 主站对象指针
  177. * - slave_index
  178. - 从站索引号,从 0 开始
  179. * - datagram
  180. - 数据报文对象指针, 需要使用 ec_datagram_init 初始化后传入
  181. * - index
  182. - 从站对象字典索引号
  183. * - subindex
  184. - 从站对象字典子索引号
  185. * - buf
  186. - 指向数据缓冲区的指针
  187. * - size
  188. - 缓冲区大小,单位字节
  189. * - complete_access
  190. - 是否使用完整访问方式
  191. * - return
  192. - 函数执行结果,0 表示成功,非 0 表示失败
  193. ec_coe_upload
  194. --------------------------------
  195. 使用 SDO 上传从站对象字典的数据。
  196. .. code-block:: c
  197. :linenos:
  198. int ec_coe_upload(ec_master_t *master,
  199. uint16_t slave_index,
  200. ec_datagram_t *datagram,
  201. uint16_t index,
  202. uint8_t subindex,
  203. const void *buf,
  204. uint32_t maxsize,
  205. uint32_t *size,
  206. bool complete_access);
  207. .. list-table::
  208. :widths: 10 10
  209. :header-rows: 1
  210. * - parameter
  211. - description
  212. * - master
  213. - 主站对象指针
  214. * - slave_index
  215. - 从站索引号,从 0 开始
  216. * - datagram
  217. - 数据报文对象指针, 需要使用 ec_datagram_init 初始化后传入
  218. * - index
  219. - 从站对象字典索引号
  220. * - subindex
  221. - 从站对象字典子索引号
  222. * - buf
  223. - 指向数据缓冲区的指针
  224. * - maxsize
  225. - 缓冲区最大大小,单位字节
  226. * - size
  227. - 实际上传数据的大小指针,单位字节
  228. * - complete_access
  229. - 是否使用完整访问方式
  230. * - return
  231. - 函数执行结果,0 表示成功,非 0 表示失败
  232. ec_foe_write
  233. --------------------------------
  234. 使用 FOE 写文件到从站。
  235. .. code-block:: c
  236. :linenos:
  237. int ec_foe_write(ec_master_t *master,
  238. uint16_t slave_index,
  239. ec_datagram_t *datagram,
  240. const char *filename,
  241. uint32_t password,
  242. const void *buf,
  243. uint32_t size);
  244. .. list-table::
  245. :widths: 10 10
  246. :header-rows: 1
  247. * - parameter
  248. - description
  249. * - master
  250. - 主站对象指针
  251. * - slave_index
  252. - 从站索引号,从 0 开始
  253. * - datagram
  254. - 数据报文对象指针, 需要使用 ec_datagram_init 初始化后传入
  255. * - filename
  256. - 文件名字符串指针
  257. * - password
  258. - 文件访问密码
  259. * - buf
  260. - 指向数据缓冲区的指针
  261. * - size
  262. - 缓冲区大小,单位字节
  263. * - return
  264. - 函数执行结果,0 表示成功,非 0 表示失败
  265. ec_foe_read
  266. --------------------------------
  267. 使用 FOE 从从站读文件。
  268. .. code-block:: c
  269. :linenos:
  270. int ec_foe_read(ec_master_t *master,
  271. uint16_t slave_index,
  272. ec_datagram_t *datagram,
  273. const char *filename,
  274. uint32_t password,
  275. void *buf,
  276. uint32_t maxsize,
  277. uint32_t *size);
  278. .. list-table::
  279. :widths: 10 10
  280. :header-rows: 1
  281. * - parameter
  282. - description
  283. * - master
  284. - 主站对象指针
  285. * - slave_index
  286. - 从站索引号,从 0 开始
  287. * - datagram
  288. - 数据报文对象指针, 需要使用 ec_datagram_init 初始化后传入
  289. * - filename
  290. - 文件名字符串指针
  291. * - password
  292. - 文件访问密码
  293. * - buf
  294. - 指向数据缓冲区的指针
  295. * - maxsize
  296. - 缓冲区最大大小,单位字节
  297. * - size
  298. - 实际读取数据的大小指针,单位字节
  299. * - return
  300. - 函数执行结果,0 表示成功,非 0 表示失败
  301. ec_eoe_start
  302. --------------------------------
  303. 配置主从站 IPv4 并启动 EoE 通信。
  304. .. code-block:: c
  305. :linenos:
  306. int ec_eoe_start(ec_eoe_t *eoe,
  307. ec_master_t *master,
  308. uint16_t slave_index,
  309. struct ec_eoe_ip_param *master_ip_param,
  310. struct ec_eoe_ip_param *slave_ip_param);
  311. .. list-table::
  312. :widths: 10 10
  313. :header-rows: 1
  314. * - parameter
  315. - description
  316. * - ec_eoe_t
  317. - EoE 对象指针
  318. * - master
  319. - 主站对象指针
  320. * - slave_index
  321. - 从站索引号,从 0 开始
  322. * - master_ip_param
  323. - 主站 IP 参数指针
  324. * - slave_ip_param
  325. - 从站 IP 参数指针
  326. * - return
  327. - 函数执行结果,0 表示成功,非 0 表示失败
  328. .. note::
  329. 主站和从站需要在同一个网关下才能通信成功,并且 mac 地址需要不同。
  330. ec_datagram_init
  331. --------------------------------
  332. 初始化数据报文对象,datagram 内存采用动态初始化。
  333. .. code-block:: c
  334. :linenos:
  335. void ec_datagram_init(ec_datagram_t *datagram, size_t mem_size);
  336. .. list-table::
  337. :widths: 10 10
  338. :header-rows: 1
  339. * - parameter
  340. - description
  341. * - datagram
  342. - 数据报文对象指针
  343. * - mem_size
  344. - 数据报文内存大小,单位字节
  345. ec_datagram_init_static
  346. --------------------------------
  347. 初始化数据报文对象,datagram 内存采用静态初始化。
  348. .. code-block:: c
  349. :linenos:
  350. void ec_datagram_init_static(ec_datagram_t *datagram, uint8_t *data, size_t mem_size);
  351. .. list-table::
  352. :widths: 10 10
  353. :header-rows: 1
  354. * - parameter
  355. - description
  356. * - datagram
  357. - 数据报文对象指针
  358. * - data
  359. - 指向数据缓冲区的指针
  360. * - mem_size
  361. - 数据报文内存大小,单位字节
  362. ec_datagram_clear
  363. --------------------------------
  364. 清理数据报文对象,释放动态分配的内存。
  365. .. code-block:: c
  366. :linenos:
  367. void ec_datagram_clear(ec_datagram_t *datagram);
  368. .. list-table::
  369. :widths: 10 10
  370. :header-rows: 1
  371. * - parameter
  372. - description
  373. * - datagram
  374. - 数据报文对象指针