DAQAOClass.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.InteropServices;
  5. using System.Text;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8. using Sys;
  9. namespace Extensometer.BLL
  10. {
  11. public class DAQAOClass
  12. {
  13. #region 实例、变量
  14. static IntPtr taskHandle = (IntPtr)(0);
  15. static Int32 error = 0;
  16. /// <summary>
  17. /// 是否初始化标志量
  18. /// </summary>
  19. public static bool B_IsInit = false;
  20. #endregion
  21. #region 方法
  22. [DllImport("msvcrt.dll")]
  23. public static extern int _getch();
  24. [DllImport("msvcrt.dll")]
  25. public static extern int _kbhit();
  26. public static void GetErrorString(Int32 errorCode)
  27. {
  28. if (errorCode < 0)
  29. {
  30. byte[] errorInfo = new byte[2048];
  31. ArtDAQ.ArtDAQ_GetExtendedErrorInfo(errorInfo, 2048);
  32. string str = Encoding.Default.GetString(errorInfo);
  33. Console.WriteLine("错误信息为:{0}", str);
  34. }
  35. return;
  36. }
  37. public static void Init()
  38. {
  39. string errorInfo = new string('0', 2048);
  40. string strTaskName = string.Empty;
  41. string strCardName = string.Empty;
  42. string strChannelName = string.Empty;
  43. /*********************************************/
  44. // ArtDAQ Configure Code
  45. /*********************************************/
  46. error = ArtDAQ.ArtDAQ_CreateTask(Encoding.Default.GetBytes("task1"), out taskHandle);
  47. strChannelName = "Dev1/ao1";
  48. //step2: CreateChannel
  49. error = ArtDAQ.ArtDAQ_CreateAOVoltageChan(taskHandle, Encoding.Default.GetBytes(strChannelName), Encoding.Default.GetBytes(""), -10.0, 10.0, ArtDAQ.ArtDAQ_Val_Volts, null);
  50. GetErrorString(error);
  51. if (error < 0)
  52. {
  53. return;
  54. }
  55. //step3: Start Task
  56. error = ArtDAQ.ArtDAQ_StartTask(taskHandle);
  57. GetErrorString(error);
  58. if (error < 0)
  59. {
  60. return;
  61. }
  62. B_IsInit = true;
  63. _getch();
  64. return;
  65. }
  66. public static void WriteAnalog(double Value)
  67. {
  68. Double[] data = new double[2];
  69. data[0] = Value;
  70. Int32 nSamplePerChanWrite;
  71. //step4:Write Code
  72. error = ArtDAQ.ArtDAQ_WriteAnalogF64(taskHandle, 1, 0, 10.0, ArtDAQ.ArtDAQ_Val_GroupByChannel, data, out nSamplePerChanWrite, (IntPtr)0);
  73. GetErrorString(error);
  74. if (error < 0)
  75. {
  76. return;
  77. }
  78. return;
  79. }
  80. public static void Dispose()
  81. {
  82. B_IsInit = false;
  83. Exit();
  84. }
  85. private static void Exit()
  86. {
  87. ArtDAQ.ArtDAQ_StopTask(taskHandle);
  88. ArtDAQ.ArtDAQ_ClearTask(taskHandle);
  89. _getch();
  90. return;
  91. }
  92. #endregion
  93. }
  94. }