api.rst 11 KB

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