IMotionControl.cs 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624
  1. using SKMC.Api.Motion.Model;
  2. using SKMC.Api.Recipe.Model;
  3. using System;
  4. using System.Collections.Generic;
  5. namespace SKMC.Api.Motion.Control
  6. {
  7. /// <summary>
  8. /// 基于流程化的运动控制层接口
  9. /// 结合点位、速度配置, 方便控制脚本调用
  10. /// </summary>
  11. public interface IMotionControl
  12. {
  13. /// <summary>
  14. /// 设置参数
  15. /// </summary>
  16. /// <param name="key">interval/timeout_move/timeout_home</param>
  17. /// <param name="value"></param>
  18. void Set(string key, int value);
  19. /// <summary>
  20. /// 获取参数
  21. /// </summary>
  22. /// <param name="key">interval/timeout_move/timeout_home</param>
  23. /// <returns></returns>
  24. int Get(string key);
  25. /// <summary>
  26. /// 控制使能, true: motion控制有效, false: motion控制无效
  27. /// 运动过程中如有电机抛出MotionException, 该控制使能自动失效
  28. /// </summary>
  29. void Enable(bool enabled = true);
  30. /// <summary>
  31. /// 控制使能是否有效
  32. /// </summary>
  33. /// <returns></returns>
  34. bool IsEnable();
  35. /// <summary>
  36. /// 开启所有电机使能
  37. /// </summary>
  38. void EnableAllAxises();
  39. /// <summary>
  40. /// 关闭所有电机使能
  41. /// </summary>
  42. void DisableAllAxises();
  43. /// <summary>
  44. /// 判断控制卡是否连接状态
  45. /// </summary>
  46. /// <returns></returns>
  47. bool IsCardConnected();
  48. /// <summary>
  49. /// 电机上使能
  50. /// </summary>
  51. /// <param name="axisCode">电机码</param>
  52. /// <param name="clearError">清除驱动报警</param>
  53. void EnableAxis(string axisCode, bool clearError = true);
  54. /// <summary>
  55. /// 电机下使能
  56. /// </summary>
  57. /// <param name="axisCode">电机码</param>
  58. void DisableAxis(string axisCode);
  59. /// <summary>
  60. /// 多个电机上使能
  61. /// </summary>
  62. /// <param name="axisCodes">电机码集合</param>
  63. /// <param name="clearError">清除驱动报警</param>
  64. void EnableAxises(List<string> axisCodes, bool clearError = true);
  65. /// <summary>
  66. /// 多个电机下使能
  67. /// </summary>
  68. /// <param name="axisCodes">电机码集合</param>
  69. void DisableAxises(List<string> axisCodes);
  70. /// <summary>
  71. /// 获取电机对象
  72. /// </summary>
  73. /// <param name="axisCode">电机码</param>
  74. /// <returns>电机对象</returns>
  75. MotionAxis GetAxis(string axisCode);
  76. /// <summary>
  77. /// 指定轴回零
  78. /// </summary>
  79. /// <param name="axisCode">电机码</param>
  80. /// <param name="waiting">是否等待(!注意:目前此参数设置为false无效)</param>
  81. /// <param name="safeCnd">安全条件, 回零中如果不满足该安全条件立即停止并报警</param>
  82. /// <param name="onSuccess"></param>
  83. /// <param name="onTimeout"></param>
  84. /// <param name="timeout">超时时间(毫秒)</param>
  85. void HomeAxis(string axisCode, bool waiting = true, Func<bool> safeCnd = null, Action onSuccess = null, Action onTimeout = null, int timeout = 60000);
  86. /// <summary>
  87. /// 指定轴快速回零, 该轴必须是闭环电机, 如果是开环电机则降级为普通的HomeAxis回零
  88. /// 并且传入的stateCheck为true后(表示总线连接OK并且上一次回零到现在未中断),使用speedCode速度移动到0位置再进行回零。
  89. /// 如果传入的stateCheck为false则降级为普通的HomeAxis回零
  90. /// </summary>
  91. /// <param name="axisCode">电机码</param>
  92. /// <param name="speedCode">快速移动到0位置的速度码, !注意:为确保安全设置合适的速度</param>
  93. /// <param name="stateCheck">状态判断, 这里指Ecat总线连接状态以及上一次回零后Ecat总线是否正常</param>
  94. /// <param name="waiting">是否等待(!注意:目前此参数设置为false无效)</param>
  95. /// <param name="safeCnd">安全条件, 回零中如果不满足该安全条件立即停止并报警</param>
  96. /// <param name="onSuccess"></param>
  97. /// <param name="onTimeout"></param>
  98. /// <param name="timeout">超时时间(毫秒)</param>
  99. void HomeAxisFast(string axisCode, string speedCode, bool stateCheck, bool waiting = true,
  100. Func<bool> safeCnd = null, Action onSuccess = null, Action onTimeout = null, int timeout = 60000);
  101. /// <summary>
  102. /// 指定轴反向回零.
  103. /// 在无法进行负方向回零时, 可通过该方法往正方向回零, 回零完毕后设置当前位置为正限位最大值, 即可实现与负方向回零相同效果
  104. /// </summary>
  105. /// <param name="axisCode">电机码</param>
  106. /// <param name="homeMode">回零模式, 例如正限位+Z相回零的模式是2</param>
  107. /// <param name="maxPos">限位位置相对原点的位置, 单位mm, 推荐在限位位置设置点位并从点位获取</param>
  108. /// <param name="waiting">是否等待</param>
  109. /// <param name="safeCnd">安全条件, 回零中如果不满足该安全条件立即停止并报警</param>
  110. /// <param name="onSuccess"></param>
  111. /// <param name="onTimeout"></param>
  112. /// <param name="timeout">超时时间(毫秒)</param>
  113. void HomeAxisReverse(string axisCode, short homeMode, double maxPos, bool waiting = true,
  114. Func<bool> safeCnd = null, Action onSuccess = null, Action onTimeout = null, int timeout = 60000);
  115. /// <summary>
  116. /// 判断绑定某个点位的电机(一个或多个)是否在该点位附近。需同时满足negativeOffset与PositiveOffset的位置限定后返回true.
  117. /// <para>具体判断如下:</para>
  118. /// <para>1.电机未上使能, 返回false</para>
  119. /// <para>2.电机Enc数值 小于 点位设置值 - negativeOffset 或者 电机Enc数值 大于 点位设置值 + positiveOffset, 返回false</para>
  120. /// <para>3.剩下返回true</para>
  121. /// </summary>
  122. /// <param name="pointCode">点位码</param>
  123. /// <param name="axisIndex">绑定点位的电机序号, 0开头, 默认-1表示该点位的所有电机</param>
  124. /// <param name="negativeOffset">大于该点位的负方向距离</param>
  125. /// <param name="positiveOffset">小于该点位的正方向距离</param>
  126. /// <param name="onPassed">满足条件后的动作</param>
  127. /// <param name="onFailed">未满足条件后的动作</param>
  128. /// <returns>是否满足位置条件</returns>
  129. bool CheckAxisNearPoint(string pointCode, short axisIndex = -1, double negativeOffset = 0.1, double positiveOffset = 0.1);
  130. /// <summary>
  131. /// 通过点位码驱动对应的Axis运动, speedRadio表示每秒旋转圈数
  132. /// </summary>
  133. /// <param name="pointCode">点位码</param>
  134. /// <param name="speedRadio">每秒旋转圈数</param>
  135. /// <param name="waiting">是否等待到位, 默认为true</param>
  136. /// <param name="inRange">可偏移的范围, 单位毫米或者步距</param>
  137. /// <param name="onSuccess">运动完成后的回调动作</param>
  138. /// <param name="onTimeout">超时未完成的回调动作</param>
  139. /// <param name="checkCnd">检测的条件</param>
  140. /// <param name="onChecked">满足检测条件的动作</param>
  141. void MoveAxisRound(string pointCode, double speedRadio,
  142. bool waiting = true, double inRange = -1,
  143. Action onSuccess = null, Action onTimeout = null);
  144. /// <summary>
  145. /// 让绑定点位码的(多个)电机以指定速度运动到点位码
  146. /// </summary>
  147. /// <param name="pointCode">点位码</param>
  148. /// <param name="speedCode">速度码, null表示使用该点配置的默认速度码</param>
  149. /// <param name="waiting">是否等待到位, 默认为true</param>
  150. /// <param name="inRange">可偏移的范围, 单位毫米或者步距</param>
  151. /// <param name="sync">如果2个轴同时移动,是否需要同时达到(直线轨迹)</param>
  152. /// <param name="onSuccess">运动完成后的回调动作</param>
  153. /// <param name="onTimeout">超时未完成的回调动作</param>
  154. void MoveAxisPoint(string pointCode, string speedCode = null,
  155. bool waiting = true, double inRange = -1,
  156. Action onSuccess = null, Action onTimeout = null, bool sync = false);
  157. /// <summary>
  158. /// 让绑定点位码的(多个)电机以指定速度运动到点位码
  159. /// </summary>
  160. /// <param name="processPoint">点位对象</param>
  161. /// <param name="speedCode">速度码, null表示使用该点配置的默认速度码</param>
  162. /// <param name="waiting">是否等待到位, 默认为true</param>
  163. /// <param name="inRange">可偏移的范围, 单位毫米或者步距</param>
  164. /// <param name="sync">如果2个轴同时移动,是否需要同时达到(直线轨迹)</param>
  165. /// <param name="onSuccess">运动完成后的回调动作</param>
  166. /// <param name="onTimeout">超时未完成的回调动作</param>
  167. void MoveAxisPoint(RecipePoint processPoint, string speedCode = null,
  168. bool waiting = true, double inRange = -1,
  169. Action onSuccess = null, Action onTimeout = null,
  170. bool sync = false);
  171. /// <summary>
  172. /// 让绑定点位码的(多个)电机以指定速度运动到点位码并能叠加指定偏移量
  173. /// </summary>
  174. /// <param name="pointCode">点位码</param>
  175. /// <param name="posOffsets">各个电机的偏移量数组, 需要按电机绑定顺序赋值</param>
  176. /// <param name="speedCode">速度码, null表示使用该点配置的默认速度码</param>
  177. /// <param name="waiting">是否等待到位, 默认为true</param>
  178. /// <param name="distanceUnit">是否距离单位, true:毫米, false:电机步距</param>
  179. /// <param name="inRange">可偏移的范围, 单位毫米或者步距</param>
  180. /// <param name="sync">如果2个轴同时移动,是否需要同时达到(直线轨迹)</param>
  181. /// <param name="safeCnd">安全条件, 运动中如果不满足该安全条件立即停止并报警</param>
  182. /// <param name="onSuccess">运动完成后的回调动作</param>
  183. /// <param name="onTimeout">超时未完成的回调动作</param>
  184. /// <param name="checkCnd">检测的条件</param>
  185. /// <param name="onChecked">满足检测条件的动作</param>
  186. void MoveAxisPointFixset(string pointCode, double[] posOffsets, string speedCode = null,
  187. bool waiting = true, double inRange = -1,
  188. Action onSuccess = null, Action onTimeout = null,
  189. bool sync = false);
  190. /// <summary>
  191. /// 让绑定点位码的(多个)电机以指定速度运动到点位码并能叠加指定偏移量
  192. /// </summary>
  193. /// <param name="processPoint">点位对象</param>
  194. /// <param name="posOffsets">各个电机的偏移量数组, 需要按电机绑定顺序赋值</param>
  195. /// <param name="speedCode">速度码, null表示使用该点配置的默认速度码</param>
  196. /// <param name="waiting">是否等待到位, 默认为true</param>
  197. /// <param name="inRange">可偏移的范围, 单位毫米或者步距</param>
  198. /// <param name="sync">如果2个轴同时移动,是否需要同时达到(直线轨迹)</param>
  199. /// <param name="onSuccess">运动完成后的回调动作</param>
  200. /// <param name="onTimeout">超时未完成的回调动作</param>
  201. void MoveAxisPointFixset(RecipePoint processPoint, double[] posOffsets, string speedCode = null,
  202. bool waiting = true, double inRange = -1,
  203. Action onSuccess = null, Action onTimeout = null,
  204. bool sync = false);
  205. /// <summary>
  206. /// 让绑定点位码的指定单个电机以指定速度运动到点位码
  207. /// </summary>
  208. /// <param name="pointCode">点位码</param>
  209. /// <param name="axisCode">电机码</param>
  210. /// <param name="speedCode">速度码, null表示使用该点配置的默认速度码</param>
  211. /// <param name="waiting">是否等待到位, 默认为true</param>
  212. /// <param name="inRange">可偏移的范围, 单位毫米或者步距</param>
  213. /// <param name="onSuccess">运动完成后的回调动作</param>
  214. /// <param name="onTimeout">超时未完成的回调动作</param>
  215. void MoveAxisPointOne(string pointCode, string axisCode, string speedCode = null,
  216. bool waiting = true, double inRange = -1,
  217. Action onSuccess = null, Action onTimeout = null);
  218. void MoveAxisPointOneFixset(string pointCode, string axisCode, double fixset, string speedCode = null,
  219. bool waiting = true, double inRange = -1,
  220. Action onSuccess = null, Action onTimeout = null);
  221. /// <summary>
  222. /// 让绑定点位码的指定单个电机以指定速度运动到点位码
  223. /// </summary>
  224. /// <param name="processPoint">点位对象</param>
  225. /// <param name="axisCode">电机码</param>
  226. /// <param name="speedCode">速度码, null表示使用该点配置的默认速度码</param>
  227. /// <param name="waiting">是否等待到位, 默认为true</param>
  228. /// <param name="inRange">可偏移的范围, 单位毫米或者步距</param>
  229. /// <param name="onSuccess">运动完成后的回调动作</param>
  230. /// <param name="onTimeout">超时未完成的回调动作</param>
  231. void MoveAxisPointOne(RecipePoint processPoint, string axisCode, string speedCode = null,
  232. bool waiting = true, double inRange = -1,
  233. Action onSuccess = null, Action onTimeout = null);
  234. /// <summary>
  235. /// 聚合多个点位码并同时运动, 注意: 每个点位的运动速度来自各自的点位(ProcessPoint)中的速度码
  236. /// </summary>
  237. /// <param name="processPoints">需要聚合运动的点位对象集合</param>
  238. /// <param name="waiting">是否等待到位, 默认为true</param>
  239. /// <param name="inRange">可偏移的范围, 单位毫米或者步距</param>
  240. /// <param name="onSuccess">运动完成后的回调动作</param>
  241. /// <param name="onTimeout">超时未完成的回调动作</param>
  242. void MoveAxisAssemblePoints(List<RecipePoint> processPoints,
  243. bool waiting = true, double inRange = -1,
  244. Action onSuccess = null, Action onTimeout = null);
  245. /// <summary>
  246. /// 聚合多个点位码并同时运动, 注意: 每个点位的运动速度优先使用speedCode, 如果speedCode为空则使用各自的点位中设置的速度码
  247. /// </summary>
  248. /// <param name="pointCodes">需要聚合运动的点位码集合</param>
  249. /// <param name="speedCode">速度码, null表示使用各点位的默认速度码</param>
  250. /// <param name="waiting">是否等待到位, 默认为true</param>
  251. /// <param name="distanceUnit">是否距离单位, true:毫米, false:电机步距</param>
  252. /// <param name="inRange">可偏移的范围, 单位毫米或者步距</param>
  253. /// <param name="safeCnd">安全条件, 运动中如果不满足该安全条件立即停止并报警</param>
  254. /// <param name="onSuccess">运动完成后的回调动作</param>
  255. /// <param name="onTimeout">超时未完成的回调动作</param>
  256. /// <param name="checkCnd">检测的条件</param>
  257. /// <param name="onChecked">满足检测条件的动作</param>
  258. void MoveAxisAssemblePoints(string[] pointCodes, string speedCode = null,
  259. bool waiting = true, double inRange = -1,
  260. Action onSuccess = null, Action onTimeout = null);
  261. /// <summary>
  262. /// 等待电机运动到位
  263. /// </summary>
  264. /// <param name="axisCode">电机码</param>
  265. /// <param name="timeout">超时时间</param>
  266. /// <param name="inRange">可偏移的范围, 单位毫米或者步距</param>
  267. /// <param name="safeCnd">安全条件, 运动中如果不满足该安全条件立即停止并报警</param>
  268. /// <param name="onSuccess">运动完成后的回调动作</param>
  269. /// <param name="onTimeout">超时未完成的回调动作</param>
  270. /// <param name="checkCnd">检测的条件</param>
  271. /// <param name="onChecked">满足检测条件的动作</param>
  272. void WaitAxisDone(string axisCode, int timeout = 10000, double inRange = -1,
  273. Action onSuccess = null, Action onTimeout = null);
  274. /// <summary>
  275. /// 等待电机运动到位
  276. /// </summary>
  277. /// <param name="motionAxis">电机对象</param>
  278. /// <param name="timeout">超时时间</param>
  279. /// <param name="inRange">可偏移的范围, 单位毫米或者步距</param>
  280. /// <param name="onSuccess">运动完成后的回调动作</param>
  281. /// <param name="onTimeout">超时未完成的回调动作</param>
  282. void WaitAxisDone(MotionAxis motionAxis, int timeout = 10000, double inRange = -1,
  283. Action onSuccess = null, Action onTimeout = null);
  284. /// <summary>
  285. /// 等待点位上所有电机到位
  286. /// </summary>
  287. /// <param name="pointCode">点位码</param>
  288. /// <param name="timeout">超时时间</param>
  289. /// <param name="inRange">可偏移的范围, 单位毫米或者步距</param>
  290. /// <param name="onSuccess">运动完成后的回调动作</param>
  291. /// <param name="onTimeout">超时未完成的回调动作</param>
  292. void WaitAxisPointDone(string pointCode, int timeout = 10000, double inRange = -1,
  293. Action onSuccess = null, Action onTimeout = null);
  294. /// <summary>
  295. /// 等待点位上所有电机到位
  296. /// </summary>
  297. /// <param name="processPoint">点位对象</param>
  298. /// <param name="timeout">超时时间</param>
  299. /// <param name="inRange">可偏移的范围, 单位毫米或者步距</param>
  300. /// <param name="safeCnd">安全条件, 运动中如果不满足该安全条件立即停止并报警</param>
  301. /// <param name="onSuccess">运动完成后的回调动作</param>
  302. /// <param name="onTimeout">超时未完成的回调动作</param>
  303. void WaitAxisPointDone(RecipePoint processPoint, int timeout = 10000, double inRange = -1,
  304. Func<bool> safeCnd = null, Action onSuccess = null, Action onTimeout = null,
  305. Func<bool> checkCnd = null, Action onChecked = null);
  306. /// <summary>
  307. /// 等待电机组所有电机到位
  308. /// </summary>
  309. /// <param name="axisCodes">电机码集合</param>
  310. /// <param name="timeout">超时时间</param>
  311. void WaitAxisGroupDone(List<string> axisCodes, int timeout = 10000);
  312. /// <summary>
  313. /// 等待并阻塞当前线程, 直到满足特定条件
  314. /// </summary>
  315. /// <param name="cndDone">完成条件 (满足后释放阻塞)</param>
  316. /// <param name="onTimeout">超时动作</param>
  317. /// <param name="timeout">超时时间(ms)</param>
  318. /// <param name="interval">监测条件的间隔时间(ms)</param>
  319. void WaitCndDone(Func<bool> cndDone, Action onTimeout, int timeout, int interval = 25);
  320. /// <summary>
  321. /// 电机按一定速度持续运动, 非阻塞
  322. /// </summary>
  323. /// <param name="axisCode">电机码</param>
  324. /// <param name="speedCode">速度码</param>
  325. /// <param name="direction">方向</param>
  326. void MoveKeepAxis(string axisCode, string speedCode, ushort direction);
  327. /// <summary>
  328. /// 电机相对运动
  329. /// </summary>
  330. /// <param name="axisCode">电机码</param>
  331. /// <param name="speedCode">速度码</param>
  332. /// <param name="distance">距离</param>
  333. /// <param name="waiting">是否等待</param>
  334. void MoveAxisRel(string axisCode, string speedCode, double distance, bool waiting = true);
  335. /// <summary>
  336. /// 电机绝对运动,确保回零后调用
  337. /// </summary>
  338. /// <param name="axisCode">电机码</param>
  339. /// <param name="speedCode">速度码</param>
  340. /// <param name="position">坐标</param>
  341. /// <param name="waiting">是否等待</param>
  342. void MoveAxisAbs(string axisCode, string speedCode, double position, bool waiting = false);
  343. /// <summary>
  344. /// 电机绝对运动,确保回零后调用
  345. /// </summary>
  346. /// <param name="axisCode">电机码</param>
  347. /// <param name="processSpeed">速度对象</param>
  348. /// <param name="position">坐标</param>
  349. /// <param name="waiting">是否等待</param>
  350. void MoveAxisAbs(string axisCode, RecipeSpeed processSpeed, double position, bool waiting = false);
  351. /// <summary>
  352. /// 停止单个电机
  353. /// </summary>
  354. /// <param name="axisCode">电机码</param>
  355. void StopAxis(string axisCode, bool waiting = false);
  356. /// <summary>
  357. /// 停止多个电机
  358. /// </summary>
  359. /// <param name="axisCodes">电机码集合</param>
  360. void StopAxises(List<string> axisCodes);
  361. /// <summary>
  362. /// 点位上多个电机停止运动
  363. /// </summary>
  364. /// <param name="pointCode">点位码</param>
  365. void StopAxisPoint(string pointCode);
  366. /// <summary>
  367. /// 点位上多个电机急停
  368. /// </summary>
  369. /// <param name="pointCode">点位码</param>
  370. void StopAxisPointEmg(string pointCode);
  371. /// <summary>
  372. /// 多个电机急停
  373. /// </summary>
  374. /// <param name="axisCodes">电机码集合</param>
  375. void StopAxisesEmg(List<string> axisCodes);
  376. /// <summary>
  377. /// 所有电机停止
  378. /// </summary>
  379. void StopAxisAll();
  380. /// <summary>
  381. /// 暂停一个电机运动
  382. /// </summary>
  383. /// <param name="axisCode">电机码</param>
  384. void PauseAxis(string axisCode);
  385. /// <summary>
  386. /// 暂停一个点位上多个电机运动
  387. /// </summary>
  388. /// <param name="pointCode">点位码</param>
  389. void PauseAxisPoint(string pointCode);
  390. /// <summary>
  391. /// 恢复一个电机运动
  392. /// </summary>
  393. /// <param name="axisCode">电机码</param>
  394. void ResumeAxis(string axisCode);
  395. /// <summary>
  396. /// 暂停一个点位上多个电机运行
  397. /// </summary>
  398. /// <param name="pointCode">点位码</param>
  399. void ResumeAxisPoint(string pointCode);
  400. /// <summary>
  401. /// 清除电机计数(反馈值与目标值)
  402. /// </summary>
  403. /// <param name="axisCode">电机码</param>
  404. void ClearAxisCounter(string axisCode);
  405. /// <summary>
  406. /// 清除电机驱动器报警(部分驱动器可能无效)
  407. /// </summary>
  408. /// <param name="axisCode">电机码</param>
  409. void ClearAxisError(string axisCode);
  410. /// <summary>
  411. /// 更新电机持续运行时的速度
  412. /// </summary>
  413. /// <param name="axisCode">电机码</param>
  414. /// <param name="speedCode">速度码</param>
  415. void UpdateAxisKeepSpeed(string axisCode, string speedCode);
  416. /// <summary>
  417. /// 更新电机持续运行时的速度.
  418. /// [注意]速度单位是mm/s, 慎用
  419. /// </summary>
  420. /// <param name="axisCode">电机码</param>
  421. /// <param name="recipeSpeed">速度对象, 至少需要MaxVel、Acc、Dec 这3个属性</param>
  422. void UpdateAxisKeepSpeed(string axisCode, RecipeSpeed recipeSpeed);
  423. /// <summary>
  424. /// 更新电机点对点移动时的速度
  425. /// </summary>
  426. /// <param name="axisCode">电机码</param>
  427. /// <param name="speedCode">速度码</param>
  428. void UpdateAxisMoveSpeed(string axisCode, string speedCode);
  429. /// <summary>
  430. /// 更新电机点对点移动时的速度.
  431. /// [注意]速度单位是mm/s, 慎用
  432. /// </summary>
  433. /// <param name="axisCode">电机码</param>
  434. /// <param name="recipeSpeed">速度对象, 至少需要MaxVel、Acc、Dec 这3个属性</param>
  435. void UpdateAxisMoveSpeed(string axisCode, RecipeSpeed recipeSpeed);
  436. /// <summary>
  437. /// 开始监测电机步距
  438. /// </summary>
  439. /// <param name="axisCode">电机码</param>
  440. /// <param name="ticks">时间周期, -1表示当前</param>
  441. void StartAxisWatch(string axisCode, long ticks = -1);
  442. /// <summary>
  443. /// 读取电机状态并获取对象
  444. /// </summary>
  445. /// <param name="axisCode">电机码</param>
  446. /// <returns>电机对象</returns>
  447. MotionAxis ReadAxisStatus(string axisCode);
  448. /// <summary>
  449. /// 读取电机状态
  450. /// </summary>
  451. /// <param name="motionAxis">电机对象</param>
  452. void ReadAxisStatus(MotionAxis motionAxis);
  453. /// <summary>
  454. /// 电机到位判断
  455. /// </summary>
  456. /// <param name="axisCode">电机码</param>
  457. /// <returns>是否到位</returns>
  458. bool AxisDoneCheck(string axisCode);
  459. /// <summary>
  460. /// 多个电机到位判断, 如果其中一个电机未到位返回false
  461. /// </summary>
  462. /// <param name="axisCodes">电机码</param>
  463. /// <returns>是否到位</returns>
  464. bool AxisDoneCheck(List<string> axisCodes);
  465. /// <summary>
  466. /// 设置DO点开关值(会检测接口是否失效, 推荐气缸等动作IO使用)
  467. /// </summary>
  468. /// <param name="doCode">DO码</param>
  469. /// <param name="value">开关值</param>
  470. /// <param name="logged">本次动作是否记录到日志</param>
  471. void PushIO(string doCode, short value, bool logged = true);
  472. /// <summary>
  473. /// 设置DO点开关值
  474. /// </summary>
  475. /// <param name="doCode">DO码</param>
  476. /// <param name="value">开关值</param>
  477. /// <param name="logged">本次动作是否记录到日志</param>
  478. void PushIO(string doCode, int value, bool logged = true);
  479. /// <summary>
  480. /// 设置DO点开关值(不检测接口是否失效, 推荐指示灯等非动作IO使用)
  481. /// </summary>
  482. /// <param name="doCode">DO码</param>
  483. /// <param name="value">开关值</param>
  484. /// <param name="logged">本次动作是否记录到日志</param>
  485. void SetIO(string doCode, short value, bool logged = true);
  486. /// <summary>
  487. /// 设置DO点开关值反向
  488. /// </summary>
  489. /// <param name="doCode">DO码</param>
  490. void PushIORev(string doCode);
  491. /// <summary>
  492. /// 设置一对DO点开关值
  493. /// </summary>
  494. /// <param name="do1Code">DO1码</param>
  495. /// <param name="do1Value">DO1开关值</param>
  496. /// <param name="do2Code">DO2码</param>
  497. /// <param name="do2Value">DO2开关值</param>
  498. void PushIOPair(string do1Code, short do1Value, string do2Code, short do2Value);
  499. /// <summary>
  500. /// 获取DI开关值
  501. /// </summary>
  502. /// <param name="diCode">DI码</param>
  503. /// <param name="fromCache">是否从缓存获取</param>
  504. /// <returns></returns>
  505. short GetDiValue(string diCode, bool fromCache = true);
  506. /// <summary>
  507. /// 读取一次DI开关值并写入cache, 同时返回该数值
  508. /// </summary>
  509. /// <param name="diCode">DI码</param>
  510. /// <returns></returns>
  511. short ReadDiValue(string diCode);
  512. /// <summary>
  513. /// 获取DO开关值
  514. /// </summary>
  515. /// <param name="doCode">DO码</param>
  516. /// <param name="fromCache">是否从缓存获取</param>
  517. /// <returns></returns>
  518. short GetDoValue(string doCode, bool fromCache = true);
  519. /// <summary>
  520. /// 读取一次DO开关值并写入cache, 同时返回该数值
  521. /// </summary>
  522. /// <param name="diCode">DI码</param>
  523. /// <returns></returns>
  524. short ReadDoValue(string doCode);
  525. /// <summary>
  526. /// 获取模拟量数值
  527. /// </summary>
  528. /// <param name="adCode">AD码</param>
  529. /// <returns></returns>
  530. short GetAdValue(string adCode);
  531. /// <summary>
  532. /// 获取模拟量数值
  533. /// </summary>
  534. /// <param name="adIndex">AD序号</param>
  535. /// <returns></returns>
  536. short GetAdValue(short adIndex);
  537. /// <summary>
  538. /// 读取一次模拟量数值到MotionCacher的MotionAO中
  539. /// </summary>
  540. /// <param name="adCode">AD码</param>
  541. void ReadAdValue(string adCode);
  542. /// <summary>
  543. /// 读取一次模拟量数值到MotionCacher的MotionAO中
  544. /// </summary>
  545. /// <param name="adIndex">AD序号</param>
  546. void ReadAdValue(short adIndex);
  547. }
  548. }