SR7ApiOneTimeCallbackImpl.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using SR7Link;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Runtime.InteropServices;
  5. namespace SRAPI
  6. {
  7. /// <summary>
  8. /// SR7 API 一次性回调实现 / SR7 API one-time callback implementation
  9. /// </summary>
  10. public class SR7ApiOneTimeCallbackImpl : SR7ApiBase
  11. {
  12. private SR7IF_BatchOneTimeCallBack BatchOneTimeDelegate; //一次回调
  13. public override int Open(int lDeviceId, string strIP, int timeout, ErrConnectCallBack pfErrCallBack)
  14. {
  15. ControllerID = lDeviceId;
  16. string[] ipTmp = strIP.Split('.');
  17. if (ipTmp.Length != 4)
  18. {
  19. throw new SRAPIException($"Failed to resolve IP ");
  20. }
  21. SR7IF_ETHERNET_CONFIG ethernetConfig;
  22. ethernetConfig.abyIpAddress = new Byte[]
  23. {
  24. Convert.ToByte(ipTmp[0]),
  25. Convert.ToByte(ipTmp[1]),
  26. Convert.ToByte(ipTmp[2]),
  27. Convert.ToByte(ipTmp[3])
  28. };
  29. int openRet = SR7LinkFunc.SR7IF_EthernetOpenExt(ControllerID, ref ethernetConfig, 2000, pfErrCallBack);
  30. if (openRet != 0)
  31. return openRet;
  32. int nCameraB = SR7LinkFunc.SR7IF_GetOnlineCameraB(ControllerID);
  33. CameraAOnline = true;
  34. CameraBOnline = (nCameraB==0);
  35. return openRet;
  36. }
  37. public override int Init(int dwProfileCnt, uint ProfileBits, int nTimeout, SR7IFGetDataCallBack pfGetDataCallBack)
  38. {
  39. GetDataCallBack = pfGetDataCallBack;
  40. BatchOneTimeDelegate = new SR7IF_BatchOneTimeCallBack(BatchOneTimeCallBack);
  41. int ret = SR7LinkFunc.SR7IF_SetBatchOneTimeDataHandler(ControllerID, BatchOneTimeDelegate);
  42. if (ret != 0)
  43. return ret;
  44. ret = SR7LinkFunc.SR7IF_StartMeasureWithCallback(ControllerID, 1);
  45. return ret;
  46. }
  47. public override int Start(bool bIOTrigger, int timeout)
  48. {
  49. int ret = 0;
  50. if (!bIOTrigger)
  51. ret = SR7LinkFunc.SR7IF_TriggerOneBatch(ControllerID);
  52. return ret;
  53. }
  54. public override int Stop(int instantStop)
  55. {
  56. int ret = SR7LinkFunc.SR7IF_StopMeasure(ControllerID);
  57. return ret;
  58. }
  59. public SR7IF_STR_CALLBACK_INFO sR7IF_STR_CALLBACK;
  60. /// <summary>
  61. /// 一次回调函数 / One Time callback function
  62. /// </summary>
  63. /// <param name="info"></param>
  64. /// <param name="data"></param>
  65. public void BatchOneTimeCallBack(IntPtr info, IntPtr data)
  66. {
  67. Console.WriteLine("BatchOneTimeCallBack");
  68. SR7IF_STR_CALLBACK_INFO sR7IF_STR_CALLBACK = new SR7IF_STR_CALLBACK_INFO();
  69. sR7IF_STR_CALLBACK = (SR7IF_STR_CALLBACK_INFO)Marshal.PtrToStructure(info, typeof(SR7IF_STR_CALLBACK_INFO));
  70. if (sR7IF_STR_CALLBACK.returnStatus == (int)SR7IF_ERROR.SR7IF_OK)
  71. {
  72. int camIndex = sR7IF_STR_CALLBACK.HeadNumber;//Number of cameras
  73. for (int i = 0; i < camIndex; i++)
  74. {
  75. ImgBuff32[i] = SR7LinkFunc.SR7IF_GetBatchProfilePoint(data, i);//获取相机32bit高度数据 / Get the camera's 32-bit height data
  76. GrayBuff[i] = SR7LinkFunc.SR7IF_GetBatchIntensityPoint(data, i);//获取相机灰度数据 / Get camera grayscale data
  77. Encoder[i] = SR7LinkFunc.SR7IF_GetBatchEncoderPoint(data, i);//获取相机编码器数据 / Get camera encoder data
  78. }
  79. GetDataCallBack(sR7IF_STR_CALLBACK.xPoints, sR7IF_STR_CALLBACK.BatchPoints, 1, sR7IF_STR_CALLBACK.returnStatus,0);
  80. }
  81. else
  82. {
  83. GetDataCallBack(0, 0, 1, sR7IF_STR_CALLBACK.returnStatus,0);
  84. }
  85. }
  86. }
  87. }