IMotionDriver.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410
  1. using SKMC.Api.Motion.Model;
  2. using System.Text;
  3. namespace SKMC.Api.Motion.Driver
  4. {
  5. /// <summary>
  6. /// 运动控制卡基础控制接口
  7. /// </summary>
  8. public interface IMotionDriver
  9. {
  10. /// <summary>
  11. /// 运动控制数据解析器接口
  12. /// </summary>
  13. IMotionDriverParser MotionDriverParser { get; set; }
  14. /// <summary>
  15. /// 获取型号
  16. /// </summary>
  17. /// <returns></returns>
  18. string GetModelCode();
  19. /// <summary>
  20. /// 初始化控制卡
  21. /// </summary>
  22. void InitBoard();
  23. /// <summary>
  24. /// 获取硬件句柄
  25. /// </summary>
  26. /// <returns></returns>
  27. ulong GetHandler();
  28. /// <summary>
  29. /// 关闭控制卡
  30. /// </summary>
  31. void CloseBoard();
  32. /// <summary>
  33. /// 检测控制卡状态
  34. /// </summary>
  35. /// <returns></returns>
  36. bool CheckHealth();
  37. /// <summary>
  38. /// 复位控制卡
  39. /// </summary>
  40. void ResetBoard();
  41. /// <summary>
  42. /// 获取控制卡Ethercat总线状态
  43. /// </summary>
  44. /// <returns>0为正常, 其他为异常</returns>
  45. int GetEcatStatus();
  46. /// <summary>
  47. /// 获取控制卡Ethercat总线错误码
  48. /// </summary>
  49. /// <returns>0为正常, 其他为错误码</returns>
  50. int GetEcatErrorCode();
  51. /// <summary>
  52. /// 获取Ethercat总线上的电机数量
  53. /// </summary>
  54. /// <returns>电机数量</returns>
  55. int GetAxisNum();
  56. /// <summary>
  57. /// 获取Ethercat总线上的IO输入数量
  58. /// </summary>
  59. /// <returns>IO输入数量</returns>
  60. int GetDiNum();
  61. /// <summary>
  62. /// 获取Ethercat总线上的IO输出数量
  63. /// </summary>
  64. /// <returns>IO输出数量</returns>
  65. int GetDoNum();
  66. /// <summary>
  67. /// 获取Ethercat总线上的AD输入数量
  68. /// </summary>
  69. /// <returns>AD输入数量</returns>
  70. int GetAdNum();
  71. /// <summary>
  72. /// 获取Ethercat总线上的DA输出数量
  73. /// </summary>
  74. /// <returns>DA输出数量</returns>
  75. int GetDaNum();
  76. /// <summary>
  77. /// 电机是否使能状态
  78. /// </summary>
  79. /// <param name="axisNo">电机轴号</param>
  80. /// <returns>是否使能状态</returns>
  81. bool IsAxisEnable(short axisNo);
  82. /// <summary>
  83. /// 获取电机状态值
  84. /// </summary>
  85. /// <param name="axisNo">电机轴号</param>
  86. /// <param name="status">状态数值</param>
  87. void GetAxisStatus(short axisNo, ref int status);
  88. /// <summary>
  89. /// 获取多个电机状态值
  90. /// </summary>
  91. /// <param name="count"></param>
  92. /// <param name="statusArr"></param>
  93. void GetMultiAxisStatus(short count, ref int[] statusArr);
  94. /// <summary>
  95. /// 电机上使能
  96. /// </summary>
  97. /// <param name="axisNo">电机轴号</param>
  98. void AxisEnable(short axisNo);
  99. /// <summary>
  100. /// 电机下使能
  101. /// </summary>
  102. /// <param name="axisNo">电机轴号</param>
  103. void AxisDisable(short axisNo);
  104. /// <summary>
  105. /// 电机上使能或下使能
  106. /// </summary>
  107. /// <param name="axisNo">电机轴号</param>
  108. /// <param name="enabled">true为上使能, false为下使能</param>
  109. void AxisEnabled(short axisNo, bool enabled);
  110. /// <summary>
  111. /// 设置运动参数(轴状态为到位isDone时生效)
  112. /// </summary>
  113. /// <param name="axisNo">电机轴号</param>
  114. /// <param name="moveParam">运动参数</param>
  115. void SetMoveProfile(short axisNo, AxisMoveParma moveParam);
  116. /// <summary>
  117. /// 更新绝对运动/相对运动时运动参数(轴状态为忙碌isBusy时生效)
  118. /// </summary>
  119. /// <param name="axisNo">电机轴号</param>
  120. /// <param name="moveParam">运动参数</param>
  121. void UpdateMoveTargetProfile(short axisNo, AxisMoveParma moveParam);
  122. /// <summary>
  123. /// 更新持续运动/Jog运动时运动参数(轴状态为忙碌isBusy时生效)
  124. /// </summary>
  125. /// <param name="axisNo">电机轴号</param>
  126. /// <param name="moveParam">运动参数</param>
  127. void UpdateMoveKeepProfile(short axisNo, AxisMoveParma moveParam);
  128. /// <summary>
  129. /// 相对运动
  130. /// </summary>
  131. /// <param name="axisNo">电机轴号</param>
  132. /// <param name="direction">运动方向</param>
  133. /// <param name="dist">运行步距</param>
  134. /// <returns>命令返回码</returns>
  135. short MoveRel(short axisNo, ushort direction, double dist);
  136. /// <summary>
  137. /// 绝对运动
  138. /// </summary>
  139. /// <param name="axisNo">电机轴号</param>
  140. /// <param name="direction">运动方向</param>
  141. /// <param name="dist">运行步距</param>
  142. /// <returns>命令返回码</returns>
  143. short MoveAbs(short axisNo, ushort direction, double dist);
  144. /// <summary>
  145. /// 中途更换目标位置
  146. /// </summary>
  147. /// <param name="axisNo">电机轴号</param>
  148. /// <param name="direction"></param>
  149. /// <param name="dist"></param>
  150. /// <returns>命令返回码</returns>
  151. short MoveAbsUpdate(short axisNo, ushort direction, double dist);
  152. /// <summary>
  153. /// 持续运动
  154. /// </summary>
  155. /// <param name="axisNo">电机轴号</param>
  156. /// <param name="vel"></param>
  157. /// <param name="direction"></param>
  158. /// <returns>命令返回码</returns>
  159. short MoveKeep(short axisNo, double vel, ushort direction);
  160. /// <summary>
  161. /// 停止运动(减速停止)
  162. /// </summary>
  163. /// <param name="axisNo">电机轴号</param>
  164. /// <returns>命令返回码</returns>
  165. short MoveStop(short axisNo);
  166. /// <summary>
  167. /// 暂停运动
  168. /// </summary>
  169. /// <param name="axisNo">电机轴号</param>
  170. /// <returns>命令返回码</returns>
  171. short MovePause(short axisNo);
  172. /// <summary>
  173. /// 恢复运动
  174. /// </summary>
  175. /// <param name="axisNo">电机轴号</param>
  176. /// <returns>命令返回码</returns>
  177. short MoveResume(short axisNo);
  178. /// <summary>
  179. /// 回零运动
  180. /// </summary>
  181. /// <param name="axisNo">电机轴号</param>
  182. /// <param name="homeParam"></param>
  183. /// <returns>命令返回码</returns>
  184. short Home(short axisNo, AxisHomeParam homeParam);
  185. /// <summary>
  186. /// 获取回零状态
  187. /// </summary>
  188. /// <param name="axisNo"></param>
  189. /// <returns>0: 回零成功, 1: 回零中, 2: 回零异常</returns>
  190. short GetHomeStatus(short axisNo);
  191. /// <summary>
  192. /// 退出回零运动
  193. /// </summary>
  194. /// <param name="axisNo"></param>
  195. /// <returns></returns>
  196. short EndHome(short axisNo);
  197. /// <summary>
  198. /// 获取编码器反馈值
  199. /// </summary>
  200. /// <param name="axisNo">电机轴号</param>
  201. /// <returns>反馈值</returns>
  202. double GetEncPos(short axisNo);
  203. /// <summary>
  204. /// 获取运动目标值
  205. /// </summary>
  206. /// <param name="axisNo">电机轴号</param>
  207. /// <returns>目标值</returns>
  208. double GetPrfPos(short axisNo);
  209. /// <summary>
  210. /// 设置当前编码器位置(慎用)
  211. /// 注意: 调用该方法时需要确认电机上使能并且是静止状态
  212. /// 绝对值编码器不推荐使用
  213. /// </summary>
  214. /// <param name="axisNo">电机轴号</param>
  215. /// <param name="encPos">编码器位置</param>
  216. /// <returns></returns>
  217. short SetEncPos(short axisNo, double encPos);
  218. /// <summary>
  219. /// 急停
  220. /// </summary>
  221. /// <param name="axisNo">电机轴号</param>
  222. /// <returns>命令返回码</returns>
  223. short EmgStop(short axisNo);
  224. /// <summary>
  225. /// 清除反馈值及目标值
  226. /// </summary>
  227. /// <param name="axisNo">电机轴号</param>
  228. void ClearCounter(short axisNo);
  229. /// <summary>
  230. /// 清除报错(是否有效取决于具体错误)
  231. /// </summary>
  232. /// <param name="axisNo">电机轴号</param>
  233. void ClearError(short axisNo);
  234. /// <summary>
  235. /// 映射IO点位与IO设备的关联
  236. /// </summary>
  237. /// <param name="motionIO"></param>
  238. void MapIO(MotionIO motionIO);
  239. /// <summary>
  240. /// 获取一个DI点位数值
  241. /// </summary>
  242. /// <param name="dno">DI序号</param>
  243. /// <returns>数值</returns>
  244. byte GetDnoDi(short dno);
  245. /// <summary>
  246. /// 获取一个DI逻辑组中的数值集
  247. /// </summary>
  248. /// <param name="grpno"></param>
  249. /// <returns>数值集</returns>
  250. short GetGrpDi(short grpno);
  251. /// <summary>
  252. /// 获取多个DI包的数值集合, 每个包有16位数据
  253. /// </summary>
  254. /// <param name="packIndex"></param>
  255. /// <param name="packCnt"></param>
  256. /// <returns></returns>
  257. ushort[] GetPackDi(short packIndex, short packCnt);
  258. /// <summary>
  259. /// 获取一个DO点位数值
  260. /// </summary>
  261. /// <param name="dno">DO序号</param>
  262. /// <returns>数值</returns>
  263. byte GetDnoDo(short dno);
  264. /// <summary>
  265. /// 获取一个DO逻辑组中的数值集
  266. /// </summary>
  267. /// <param name="grpno"></param>
  268. /// <returns>数值集</returns>
  269. short GetGrpDo(short grpno);
  270. /// <summary>
  271. /// 获取多个DO包的数值集合, 每个包有16位数据
  272. /// </summary>
  273. /// <param name="packIndex"></param>
  274. /// <param name="packCnt"></param>
  275. /// <returns></returns>
  276. ushort[] GetPackDo(short packIndex, short packCnt);
  277. /// <summary>
  278. /// 设置一个DO点位数值
  279. /// </summary>
  280. /// <param name="dno">DO序号</param>
  281. /// <param name="value"></param>
  282. /// <returns>命令返回码</returns>
  283. short SetDnoDo(short dno, short value);
  284. /// <summary>
  285. /// 获取一个AD点位数值
  286. /// </summary>
  287. /// <param name="dno">DO序号</param>
  288. /// <returns>数值</returns>
  289. short GetDnoAd(short dno);
  290. /// <summary>
  291. /// 批量获取多个AD点位数值
  292. /// </summary>
  293. /// <param name="adIndex"></param>
  294. /// <param name="adCnt"></param>
  295. /// <returns></returns>
  296. short[] GetGrpAd(short adIndex, short adCnt);
  297. /// <summary>
  298. /// 写入SDO数据
  299. /// </summary>
  300. /// <param name="motionSdo">Sdo对象</param>
  301. /// <returns>命令返回码</returns>
  302. short WriteSdoData(MotionSdo motionSdo);
  303. /// <summary>
  304. /// 写入SDO数据
  305. /// </summary>
  306. /// <param name="motionSdo">Sdo对象</param>
  307. /// <returns>读取的SDO数据长度</returns>
  308. int ReadSdoData(MotionSdo motionSdo);
  309. /// <summary>
  310. /// 初始化Pdo配置
  311. /// </summary>
  312. /// <returns></returns>
  313. short GetPdoConfig();
  314. /// <summary>
  315. /// 写入PDO数据
  316. /// </summary>
  317. /// <param name="motionPdo">Pdo对象</param>
  318. /// <returns></returns>
  319. short WritePdoData(MotionPdo motionPdo);
  320. /// <summary>
  321. /// 读取Pdo数据
  322. /// </summary>
  323. /// <param name="motionPdo">Pdo对象</param>
  324. /// <returns>读取的PDO数据长度</returns>
  325. int ReadPdoData(MotionPdo motionPdo);
  326. /// <summary>
  327. /// 写入自定义数据码
  328. /// </summary>
  329. /// <param name="data"></param>
  330. /// <returns></returns>
  331. uint WriteUserCode(string data);
  332. /// <summary>
  333. /// 验证自定义数据码
  334. /// </summary>
  335. /// <param name="data"></param>
  336. /// <returns></returns>
  337. uint CheckUserCode(string data);
  338. /// <summary>
  339. /// 写入自定义数据
  340. /// </summary>
  341. /// <param name="data"></param>
  342. /// <returns></returns>
  343. uint WriteUserData(string data);
  344. /// <summary>
  345. /// 读取自定义数据
  346. /// </summary>
  347. /// <param name="dataBuilder"></param>
  348. /// <param name="len"></param>
  349. /// <returns></returns>
  350. uint ReadUserData(ref StringBuilder dataBuilder, short len);
  351. }
  352. }