InovancePLC.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483
  1. using System.Runtime.InteropServices;
  2. namespace MainForm
  3. {
  4. class InovancePlc
  5. {
  6. /// <summary>
  7. /// H3U 软元件
  8. /// </summary>
  9. public enum Soft
  10. {
  11. REGI_H3U_Y = 0x20, //Y元件的定义
  12. REGI_H3U_X = 0x21, //X元件的定义
  13. REGI_H3U_S = 0x22, //S元件的定义
  14. REGI_H3U_M = 0x23, //M元件的定义
  15. REGI_H3U_TB = 0x24, //T位元件的定义
  16. REGI_H3U_TW = 0x25, //T字元件的定义
  17. REGI_H3U_CB = 0x26, //C位元件的定义
  18. REGI_H3U_CW = 0x27, //C字元件的定义
  19. REGI_H3U_DW = 0x28, //D字元件的定义
  20. REGI_H3U_CW2 = 0x29, //C双字元件的定义
  21. REGI_H3U_SM = 0x2a, //SM
  22. REGI_H3U_SD = 0x2b, //
  23. REGI_H3U_R = 0x2c, //
  24. //H5u
  25. REGI_H5U_Y = 0x30, //Y元件的定义
  26. REGI_H5U_X = 0x31, //X元件的定义
  27. REGI_H5U_S = 0x32, //S元件的定义
  28. REGI_H5U_M = 0x33, //M元件的定义
  29. REGI_H5U_B = 0x34, //B元件的定义
  30. REGI_H5U_D = 0x35, //D字元件的定义
  31. REGI_H5U_R = 0x36, //R字元件的定义
  32. }
  33. #region 声明
  34. /// <summary>
  35. /// 创建网络连接
  36. /// </summary>
  37. /// <param name="sIpAddr">以太网IP地址</param>
  38. /// <param name="nNetId">网络链接编号,用于标记是第几条网络链接,取值范围0~255,默认0 </param>
  39. /// <param name="IpPort">以太网端口号,默认502(modbusTcp协议默认端口号为502)</param>
  40. /// <returns>TRUE 成功 FALSE 失败</returns>
  41. [DllImport("StandardModbusApi.dll", EntryPoint = "Init_ETH_String", CallingConvention = CallingConvention.Cdecl)]
  42. public static extern bool Init_ETH_String(string sIpAddr, int nNetId = 0, int IpPort = 502);
  43. /// <summary>
  44. /// 关闭网络连接
  45. /// </summary>
  46. /// <param name="nNetId">网络链接编号,与Init_ETH()调用的ID一样</param>
  47. /// <returns>TRUE 成功 FALSE 失败</returns>
  48. [DllImport("StandardModbusApi.dll", EntryPoint = "Exit_ETH", CallingConvention = CallingConvention.Cdecl)]
  49. private static extern bool Exit_ETH(int nNetId = 0);
  50. /// <summary>
  51. /// 写入位状态(X,Y,M,C,T等软元件)
  52. /// 注意 : X和Y元件地址需为8进制;
  53. /// </summary>
  54. /// <param name="eType">软元件类型,使用SoftElemType枚举</param>
  55. /// <param name="nStartAddr">软元件起始位置</param>
  56. /// <param name="nCount">软元件个数</param>
  57. /// <param name="pValue">写入的数据数组,byte=0关闭软元件,byte=1打开软元件</param>
  58. /// <param name="nNetId">网络链接编号,与Init_ETH()调用的ID一样</param>
  59. /// <returns>1 成功 0 失败</returns>
  60. [DllImport("StandardModbusApi.dll", EntryPoint = "H3u_Write_Soft_Elem", CallingConvention = CallingConvention.Cdecl)]
  61. private static extern int H3u_Write_Soft_Elem_Bit(Soft eType, int nStartAddr, int nCount, byte[] pValue, int nNetId = 0);
  62. /// <summary>
  63. /// 写入16位有符号整形
  64. /// </summary>
  65. /// <param name="eType">软元件类型,使用SoftElemType枚举</param>
  66. /// <param name="nStartAddr">软元件起始位置</param>
  67. /// <param name="nCount">软元件个数</param>
  68. /// <param name="pValue">写入的数据数组</param>
  69. /// <param name="nNetId">网络链接编号,与Init_ETH()调用的ID一样</param>
  70. /// <returns>1 成功 0 失败</returns>
  71. [DllImport("StandardModbusApi.dll", EntryPoint = "H3u_Write_Soft_Elem_Int16", CallingConvention = CallingConvention.Cdecl)]
  72. private static extern int H3u_Write_Soft_Elem_Int16(Soft eType, int nStartAddr, int nCount, short[] pValue, int nNetId = 0);
  73. /// <summary>
  74. /// 写入32位有符号整形
  75. /// </summary>
  76. /// <param name="eType">软元件类型,使用SoftElemType枚举</param>
  77. /// <param name="nStartAddr">软元件起始位置</param>
  78. /// <param name="nCount">软元件个数</param>
  79. /// <param name="pValue">写入的数据数组</param>
  80. /// <param name="nNetId">网络链接编号,与Init_ETH()调用的ID一样</param>
  81. /// <returns>1 成功 0 失败</returns>
  82. [DllImport("StandardModbusApi.dll", EntryPoint = "H3u_Write_Soft_Elem_Int32", CallingConvention = CallingConvention.Cdecl)]
  83. private static extern int H3u_Write_Soft_Elem_Int32(Soft eType, int nStartAddr, int nCount, int[] pValue, int nNetId = 0);
  84. /// <summary>
  85. /// 写入16位无符号整形
  86. /// </summary>
  87. /// <param name="eType">软元件类型,使用SoftElemType枚举</param>
  88. /// <param name="nStartAddr">软元件起始位置</param>
  89. /// <param name="nCount">软元件个数</param>
  90. /// <param name="pValue">写入的数据数组</param>
  91. /// <param name="nNetId">网络链接编号,与Init_ETH()调用的ID一样</param>
  92. /// <returns>1 成功 0 失败</returns>
  93. [DllImport("StandardModbusApi.dll", EntryPoint = "H3u_Write_Soft_Elem_UInt16", CallingConvention = CallingConvention.Cdecl)]
  94. private static extern int H3u_Write_Soft_Elem_UInt16(Soft eType, int nStartAddr, int nCount, ushort[] pValue, int nNetId = 0);
  95. /// <summary>
  96. /// 写入32位无符号整形
  97. /// </summary>
  98. /// <param name="eType">软元件类型,使用SoftElemType枚举</param>
  99. /// <param name="nStartAddr">软元件起始位置</param>
  100. /// <param name="nCount">软元件个数</param>
  101. /// <param name="pValue">写入的数据数组</param>
  102. /// <param name="nNetId">网络链接编号,与Init_ETH()调用的ID一样</param>
  103. /// <returns>1 成功 0 失败</returns>
  104. [DllImport("StandardModbusApi.dll", EntryPoint = "H3u_Write_Soft_Elem_UInt32", CallingConvention = CallingConvention.Cdecl)]
  105. private static extern int H3u_Write_Soft_Elem_UInt32(Soft eType, int nStartAddr, int nCount, uint[] pValue, int nNetId = 0);
  106. /// <summary>
  107. /// 写入32位浮点数
  108. /// </summary>
  109. /// <param name="eType"></param>
  110. /// <param name="nStartAddr"></param>
  111. /// <param name="nCount"></param>
  112. /// <param name="pValue"></param>
  113. /// <param name="nNetId"></param>
  114. /// <returns></returns>
  115. [DllImport("StandardModbusApi.dll", EntryPoint = "H3u_Write_Soft_Elem_Float", CallingConvention = CallingConvention.Cdecl)]
  116. private static extern int H3u_Write_Soft_Elem_Float(Soft eType, int nStartAddr, int nCount, float[] pValue, int nNetId = 0);
  117. /// <summary>
  118. /// 读取位状态(X,Y,M,C,T等软元件)
  119. /// 注意 : X和Y元件地址需为8进制;
  120. /// </summary>
  121. /// <param name="eType">软元件类型,使用SoftElemType枚举</param>
  122. /// <param name="nStartAddr">软元件起始地址</param>
  123. /// <param name="nCount">软元件个数</param>
  124. /// <param name="pValue">读取的软元件状态数组,byte=0为关闭,byte=1为打开</param>
  125. /// <param name="nNetId">网络链接编号,与Init_ETH()调用的ID一样</param>
  126. /// <returns>1 成功 0 失败</returns>
  127. [DllImport("StandardModbusApi.dll", EntryPoint = "H3u_Read_Soft_Elem", CallingConvention = CallingConvention.Cdecl)]
  128. private static extern int H3u_Read_Soft_Elem_Bit(Soft eType, int nStartAddr, int nCount, byte[] pValue, int nNetId = 0);
  129. /// <summary>
  130. /// 读取16位有符号整形
  131. /// </summary>
  132. /// <param name="eType">软元件类型,使用SoftElemType枚举</param>
  133. /// <param name="nStartAddr">软元件起始地址</param>
  134. /// <param name="nCount">软元件个数</param>
  135. /// <param name="pValue">读取的数据数组</param>
  136. /// <param name="nNetId">网络链接编号,与Init_ETH()调用的ID一样</param>
  137. /// <returns>1 成功 0 失败</returns>
  138. [DllImport("StandardModbusApi.dll", EntryPoint = "H3u_Read_Soft_Elem_Int16", CallingConvention = CallingConvention.Cdecl)]
  139. private static extern int H3u_Read_Soft_Elem_Int16(Soft eType, int nStartAddr, int nCount, short[] pValue, int nNetId = 0);
  140. /// <summary>
  141. /// 读取32位有符号整形
  142. /// </summary>
  143. /// <param name="eType">软元件类型,使用SoftElemType枚举</param>
  144. /// <param name="nStartAddr">软元件起始地址</param>
  145. /// <param name="nCount">软元件个数</param>
  146. /// <param name="pValue">读取的数据数组</param>
  147. /// <param name="nNetId">网络链接编号,与Init_ETH()调用的ID一样</param>
  148. /// <returns>1 成功 0 失败</returns>
  149. [DllImport("StandardModbusApi.dll", EntryPoint = "H3u_Read_Soft_Elem_Int32", CallingConvention = CallingConvention.Cdecl)]
  150. private static extern int H3u_Read_Soft_Elem_Int32(Soft eType, int nStartAddr, int nCount, int[] pValue, int nNetId = 0);
  151. /// <summary>
  152. /// 读取16位无符号整形
  153. /// </summary>
  154. /// <param name="eType">软元件类型,使用SoftElemType枚举</param>
  155. /// <param name="nStartAddr">软元件起始地址</param>
  156. /// <param name="nCount">软元件个数</param>
  157. /// <param name="pValue">读取的数据数组</param>
  158. /// <param name="nNetId">网络链接编号,与Init_ETH()调用的ID一样</param>
  159. /// <returns>1 成功 0 失败</returns>
  160. [DllImport("StandardModbusApi.dll", EntryPoint = "H3u_Read_Soft_Elem_UInt16", CallingConvention = CallingConvention.Cdecl)]
  161. private static extern int H3u_Read_Soft_Elem_UInt16(Soft eType, int nStartAddr, int nCount, ushort[] pValue, int nNetId = 0);
  162. /// <summary>
  163. /// 读取32位无符号整形
  164. /// </summary>
  165. /// <param name="eType">软元件类型,使用SoftElemType枚举</param>
  166. /// <param name="nStartAddr">软元件起始地址</param>
  167. /// <param name="nCount">软元件个数</param>
  168. /// <param name="pValue">读取的数据数组</param>
  169. /// <param name="nNetId">网络链接编号,与Init_ETH()调用的ID一样</param>
  170. /// <returns>1 成功 0 失败</returns>
  171. [DllImport("StandardModbusApi.dll", EntryPoint = "H3u_Read_Soft_Elem_UInt32", CallingConvention = CallingConvention.Cdecl)]
  172. private static extern int H3u_Read_Soft_Elem_UInt32(Soft eType, int nStartAddr, int nCount, uint[] pValue, int nNetId = 0);
  173. /// <summary>
  174. /// 读取32位浮点数
  175. /// </summary>
  176. /// <param name="eType">软元件类型,使用SoftElemType枚举</param>
  177. /// <param name="nStartAddr">软元件起始地址</param>
  178. /// <param name="nCount">软元件个数</param>
  179. /// <param name="pValue">读取的数据数组</param>
  180. /// <param name="nNetId">网络链接编号,与Init_ETH()调用的ID一样</param>
  181. /// <returns>1 成功 0 失败</returns>
  182. [DllImport("StandardModbusApi.dll", EntryPoint = "H3u_Read_Soft_Elem_Float", CallingConvention = CallingConvention.Cdecl)]
  183. private static extern int H3u_Read_Soft_Elem_Float(Soft eType, int nStartAddr, int nCount, float[] pValue, int nNetId = 0);
  184. [DllImport("StandardModbusApi.dll", EntryPoint = "H5u_Write_Soft_Elem", CallingConvention = CallingConvention.Cdecl)]
  185. public static extern int H5u_Write_Soft_Elem(Soft eType, int nStartAddr, int nCount, byte[] pValue, int nNetId = 0);
  186. [DllImport("StandardModbusApi.dll", EntryPoint = "H5u_Read_Device_Block", CallingConvention = CallingConvention.Cdecl)]
  187. public static extern int H5u_Read_Device_Block(Soft eType, int nStartAddr, int nCount, byte[] pValue, int nNetId = 0);
  188. #endregion
  189. #region 字段
  190. // PLC 编号
  191. private int _card = 0;
  192. /// <summary>
  193. /// 获取或设置PLC的编号
  194. /// </summary>
  195. public int Card
  196. {
  197. get { return _card; }
  198. set { _card = value; }
  199. }
  200. // PLC IP地址
  201. private string _ip = "192.168.1.89";
  202. /// <summary>
  203. /// 获取或设置PLC的IP地址
  204. /// </summary>
  205. public string IP
  206. {
  207. get { return _ip; }
  208. set { _ip = value; }
  209. }
  210. // PLC 端口号
  211. private int _port = 502;
  212. /// <summary>
  213. /// 获取或设置PLC的端口号
  214. /// </summary>
  215. public int Port
  216. {
  217. get { return _port; }
  218. set { _port = value; }
  219. }
  220. // 打开状态
  221. private bool _openStatus = false;
  222. /// <summary>
  223. /// 获取PLC的打开状态
  224. /// </summary>
  225. public bool OpenStatus
  226. {
  227. get { return _openStatus; }
  228. }
  229. #endregion
  230. #region 公有字段
  231. #endregion
  232. /// <summary>
  233. /// 构造函数,设置PLC的编号、IP、端口属性
  234. /// </summary>
  235. /// <param name="card">PLC 编号</param>
  236. /// <param name="ip">PLC IP地址</param>
  237. /// <param name="port">PLC 端口号</param>
  238. public InovancePlc(int card, string ip, int port)
  239. {
  240. this._card = card;
  241. this._ip = ip;
  242. this._port = port;
  243. }
  244. #region 封装
  245. /// <summary>
  246. /// 打开连接
  247. /// </summary>
  248. /// <returns>TRUE 成功 FALSE 失败</returns>
  249. public bool Open()
  250. {
  251. if (!_openStatus)
  252. {
  253. _openStatus = Init_ETH_String(_ip, _card, _port);
  254. return _openStatus;
  255. }
  256. else
  257. return true;
  258. }
  259. /// <summary>
  260. /// 关闭连接
  261. /// </summary>
  262. /// <returns>TRUE 成功 FALSE 失败</returns>
  263. public bool Close()
  264. {
  265. _openStatus = false;
  266. return Exit_ETH(_card);
  267. }
  268. /// <summary>
  269. /// 写入位状态(位寄存器)
  270. /// 注意 : X和Y元件地址需为8进制
  271. /// </summary>
  272. /// <param name="softName">软元件类型</param>
  273. /// <param name="softNum">起始软元件编号</param>
  274. /// <param name="softCount">软元件数量</param>
  275. /// <param name="writeData">写入的数据</param>
  276. /// <returns>TRUE 成功 FALSE 失败</returns>
  277. public bool H3u_Write_Bit(Soft softName, int softNum, int softCount, bool[] writeData)
  278. {
  279. byte[] data = new byte[writeData.Length];
  280. for (int i = 0; i < writeData.Length; i++)
  281. {
  282. data[i] = writeData[i] == true ? (byte)1 : (byte)0;
  283. }
  284. int rtn = H3u_Write_Soft_Elem_Bit(softName, softNum, softCount, data, _card);
  285. return rtn == 1 ? true : false;
  286. }
  287. /// <summary>
  288. /// 写入16位有符号整形
  289. /// </summary>
  290. /// <param name="softName">软元件类型</param>
  291. /// <param name="softNum">起始软元件编号</param>
  292. /// <param name="softCount">软元件数量</param>
  293. /// <param name="writeData">写入的数据</param>
  294. /// <returns>TRUE 成功 FALSE 失败</returns>
  295. public bool H3u_Write_Int16(Soft softName, int softNum, int softCount, short[] writeData)
  296. {
  297. int rtn = H3u_Write_Soft_Elem_Int16(softName, softNum, softCount, writeData, _card);
  298. return rtn == 1 ? true : false;
  299. }
  300. /// <summary>
  301. /// 写入16位无符号整形
  302. /// </summary>
  303. /// <param name="softName">软元件类型</param>
  304. /// <param name="softNum">起始软元件编号</param>
  305. /// <param name="softCount">软元件数量</param>
  306. /// <param name="writeData">写入的数据</param>
  307. /// <returns>TRUE 成功 FALSE 失败</returns>
  308. public bool H3u_Write_UInt16(Soft softName, int softNum, int softCount, ushort[] writeData)
  309. {
  310. int rtn = H3u_Write_Soft_Elem_UInt16(softName, softNum, softCount, writeData, _card);
  311. return rtn == 1 ? true : false;
  312. }
  313. /// <summary>
  314. /// 写入32位有符号整形
  315. /// </summary>
  316. /// <param name="softName">软元件类型</param>
  317. /// <param name="softNum">起始软元件编号</param>
  318. /// <param name="softCount">软元件数量</param>
  319. /// <param name="writeData">写入的数据</param>
  320. /// <returns>TRUE 成功 FALSE 失败</returns>
  321. public bool H3u_Write_Int32(Soft softName, int softNum, int softCount, int[] writeData)
  322. {
  323. int count = softCount * 2;
  324. int rtn = H3u_Write_Soft_Elem_Int32(softName, softNum, count, writeData, _card);
  325. return rtn == 1 ? true : false;
  326. }
  327. /// <summary>
  328. /// 写入32位无符号整形
  329. /// </summary>
  330. /// <param name="softName">软元件类型</param>
  331. /// <param name="softNum">起始软元件编号</param>
  332. /// <param name="softCount">软元件数量</param>
  333. /// <param name="writeData">写入的数据</param>
  334. /// <returns>TRUE 成功 FALSE 失败</returns>
  335. public bool H3u_Write_UInt32(Soft softName, int softNum, int softCount, uint[] writeData)
  336. {
  337. int count = softCount * 2;
  338. int rtn = H3u_Write_Soft_Elem_UInt32(softName, softNum, count, writeData, _card);
  339. return rtn == 1 ? true : false;
  340. }
  341. /// <summary>
  342. /// 写入32位浮点型
  343. /// </summary>
  344. /// <param name="softName">软元件类型</param>
  345. /// <param name="softNum">起始软元件编号</param>
  346. /// <param name="softCount">软元件数量</param>
  347. /// <param name="writeData">写入的数据</param>
  348. /// <returns>TRUE 成功 FALSE 失败</returns>
  349. public bool H3u_Write_Float(Soft softName, int softNum, int softCount, float[] writeData)
  350. {
  351. int count = softCount * 2;
  352. int rtn = H3u_Write_Soft_Elem_Float(softName, softNum, count, writeData, _card);
  353. return rtn == 1 ? true : false;
  354. }
  355. /// <summary>
  356. /// 读取位状态(位寄存器)
  357. /// 注意 : X和Y元件地址需为8进制
  358. /// </summary>
  359. /// <param name="softName">软元件类型</param>
  360. /// <param name="softNum">起始软元件编号</param>
  361. /// <param name="softCount">软元件数量</param>
  362. /// <param name="readData">读取的数据</param>
  363. /// <returns>TRUE 成功 FALSE 失败</returns>
  364. public bool H3u_Read_Bit(Soft softName, int softNum, int softCount, ref bool[] readData)
  365. {
  366. byte[] data = new byte[readData.Length];
  367. int rtn = H3u_Read_Soft_Elem_Bit(softName, softNum, softCount, data, _card);
  368. for (int i = 0; i < readData.Length; i++)
  369. {
  370. readData[i] = data[i] == 1 ? true : false;
  371. }
  372. return rtn == 1 ? true : false;
  373. }
  374. /// <summary>
  375. /// 读取16位有符号整形
  376. /// </summary>
  377. /// <param name="softName">软元件类型</param>
  378. /// <param name="softNum">起始软元件编号</param>
  379. /// <param name="softCount">软元件数量</param>
  380. /// <param name="readData">读取的数据</param>
  381. /// <returns>TRUE 成功 FALSE 失败</returns>
  382. public bool H3u_Read_Int16(Soft softName, int softNum, int softCount, ref short[] readData)
  383. {
  384. int rtn = H3u_Read_Soft_Elem_Int16(softName, softNum, softCount, readData, _card);
  385. return rtn == 1 ? true : false;
  386. }
  387. /// <summary>
  388. /// 读取16位无符号整形
  389. /// </summary>
  390. /// <param name="softName">软元件类型</param>
  391. /// <param name="softNum">起始软元件编号</param>
  392. /// <param name="softCount">软元件数量</param>
  393. /// <param name="readData">读取的数据</param>
  394. /// <returns>TRUE 成功 FALSE 失败</returns>
  395. public bool H3u_Read_UInt16(Soft softName, int softNum, int softCount, ref ushort[] readData)
  396. {
  397. int rtn = H3u_Read_Soft_Elem_UInt16(softName, softNum, softCount, readData, _card);
  398. return rtn == 1 ? true : false;
  399. }
  400. /// <summary>
  401. /// 读取32位有符号整形
  402. /// </summary>
  403. /// <param name="softName">软元件类型</param>
  404. /// <param name="softNum">起始软元件编号</param>
  405. /// <param name="softCount">软元件数量</param>
  406. /// <param name="readData">读取的数据</param>
  407. /// <returns>TRUE 成功 FALSE 失败</returns>
  408. public bool H3u_Read_Int32(Soft softName, int softNum, int softCount, ref int[] readData)
  409. {
  410. int count = softCount * 2;
  411. int rtn = H3u_Read_Soft_Elem_Int32(softName, softNum, count, readData, _card);
  412. return rtn == 1 ? true : false;
  413. }
  414. /// <summary>
  415. /// 读取32位无符号整形
  416. /// </summary>
  417. /// <param name="softName">软元件类型</param>
  418. /// <param name="softNum">起始软元件编号</param>
  419. /// <param name="softCount">软元件数量</param>
  420. /// <param name="readData">读取的数据</param>
  421. /// <returns>TRUE 成功 FALSE 失败</returns>
  422. public bool H3u_Read_UInt32(Soft softName, int softNum, int softCount, ref uint[] readData)
  423. {
  424. int count = softCount * 2;
  425. int rtn = H3u_Read_Soft_Elem_UInt32(softName, softNum, count, readData, _card);
  426. return rtn == 1 ? true : false;
  427. }
  428. /// <summary>
  429. /// 读取32位有符号浮点型
  430. /// </summary>
  431. /// <param name="softName">软元件类型</param>
  432. /// <param name="softNum">起始软元件编号</param>
  433. /// <param name="softCount">软元件数量</param>
  434. /// <param name="readData">读取的数据</param>
  435. /// <returns>TRUE 成功 FALSE 失败</returns>
  436. public bool H3u_Read_Float(Soft softName, int softNum, int softCount, ref float[] readData)
  437. {
  438. int count = softCount * 2;
  439. int rtn = H3u_Read_Soft_Elem_Float(softName, softNum, count, readData, _card);
  440. return rtn == 1 ? true : false;
  441. }
  442. #endregion
  443. }
  444. }