解决方案简介

天博综合体育中国官方网站bMax-Pro SSIM仪表的高速OEM集成指南,p powermax-pro in c#

简介

客户越来越多地使用天博综合体育中国官方网站bMax-Pro SSIM仪表进行深入集成,编写自定义代码以流式传输高速数据。除我们的技术指导外,这种类型的仪表接口还需要在客户方面具有很高的能力来实施。本文档旨在为成功提供工具。

确定集成所需的工具。

我们提供的相干仪表连接(CMC)软件程序可与天博综合体育中国官方网站bMax-Pro SSIM仪表一起使用,能够以20kHz / 50US示例率实时读取和流式传输高速数据并实时导出到文件。  该过程很复杂,并在用户/程序员方面拥有很多经验。过去,本文档中提供的数据已在过去的多个客户网站上获得成功。需要的资源…

1。  客户方面有经验的程序员或软件工程师编程接口。

2。  天博综合体育中国官方网站bMax-Pro SSIM用户手册(尤其是主机接口章)。

3。  CMC应用程序已安装并运行以查看I/O成绩单函数。

a。  显示可比较操作设置的SCPI命令。

b。  尽管不需要,但有些命令多次发送。

4。  此技术说明。

 

该过程的高级别概述 - 重要点。

编程SSIM仪表时,在整个过程中需要使用一些重要点。请参阅下面的过程项。

1。  数据采集可以通过两种方式进行:

a。  停止计数 - 发送n样品后自动停止

·强烈建议停止停止

b。  连续 - 运行直到明确命令被主机停下来

·更复杂,因为仪表在停止之前发送额外的记录

2。  数据采集可以通过两种方式进行编码:

a。  二进制

·二进制强烈建议!

b。  ascii

3。  这两个编码允许发送各种数据

a。  优化速度(不要发送您不需要的数据)与收集更多的速度,以防万一

b。  选项:

  • 主要(测量)
  • X,Y偏移(仅来自LM传感器)
  • 数据采集标志(始终建议)
  • 序列ID(仅用于能量)
  • 脉冲周期(仅用于能量)

c。  记录在SCPI参考中

d。  SSIM不会向数据样本发送时间戳信息

时间戳通常在接收端重建,通过按样本速率增加变量。

4。  握手

a。  与SCPI互动时,您将看不到响应是否关闭

b。  但通常禁用流数据

c。  发行之前发行为最后一个命令

数据采集概述。

DAQ可以在ASCII或二进制中完成 - 每个样本:

  • 二进制:只需读取适当的字节数,然后根据您请求的编码标志将其包装到目标结构中。不需要数字转换。
  • 二进制流USB占块,通常单个读取不会返回所需的所有字节。您需要重复读取字节,直到组装了所需的数字为止。
  • 推荐二进制,因为它更快,更紧凑,不需要昂贵的文本到数字转换
  • for ASCII:阅读一行文本并根据您的要求编码标志对其进行解析

我们的CMC软件在单独的线程中进行数据采集,以便在线程等待读取数据时不会阻止UI。线程是本文档范围之外的高级主题。

发送设置SCPI命令以配置您的特定测量值

1。  首先,您至少需要(按任何顺序)

  • 发送conf:mes:mode w选择电源或J用于能量测量
  • 发送conf:read:mode binary指定二进制模式(推荐)
  • 发送conf:item pri,f天博综合体育中国官方网站g指定您只需要测量和标记数据。二进制数据将包括
  1. 4个字节浮点(IEEE浮点数)测量值,其次是
  2. 2个字节未签名的整数标志
  • 许多其他命令可能与您的情况有关

2。  最后,按顺序执行以下步骤:

i。发送SYST:COMM:交叉关闭handshakiing

ii。刷新输入缓冲区 - 您需要丢弃发送上述命令时积累的任何握手,错误消息或其他无关输入数据,以便您的第一个读取将从第一个数据记录的开头开始。如何做到这一点高度取决于您的编译器,运行时系统和操作系统。

iii。发送开始100

  • 告诉仪表开始获取,在100个记录后停止
  • 包括记录计数,以便仪表发送固定数量的记录。最初只使用几个记录来测试/调试。
然后开始读取数据

1。一次记录

2。直到计数用尽

要注意的东西

每个数据记录通常都包含一个标志单词。这些测量标志中的几个应检查每个样本:

1. pertemp = 0x80- 指示传感器的过热和获取可能应终止,并且在任何情况下都应报告错误

2. 终止= 0x8000- 指示仪表检测到的致命误差(例如传感器断开连接),并且必须单方面终止采集;没有更多的数据即将到来

3. Missingsamples = 0x100- 主机无法从仪表,仪表的内部缓冲区Overran和某些数据记录中读取足够快的数据,从流中省略了一些数据记录。数据ACQ可以继续,但标志标记了数据中的不连续性

C#接口代码的示例。

最常见的客户请求是“我如何捕获此高速流并为自己的目的操纵它?”下一节涵盖了流式传输高速数据所需的数据采集循环。

线程- 数据获取的内部循环

线程的本质是一个循环,反复调用readonerecord获取每个数据样本。任何错误(例外)导致该功能退出。它还实现可选的opotoncount功能。

首次通过循环,ReadOnereCord调用是发送开始命令后的第一个读取的数据。循环一直持续到加载所有数据并添加到Capturebuffer.

数据是一个全局静态临时数组,足够大以处理任何记录。

isstopping是一个全局标志,它标志着所有采集代码过早终止。

terminedbymeter测试(record.f天博综合体育中国官方网站gs&MeasurementF天博综合体育中国官方网站gs.terminated)!= 0),,
其中终止= 0x8000//仪表声明单侧终止

可能会忽略以蓝色突出显示的部分。

 

受保护的覆盖void threadbody()尝试

              BoostThreadPriority();
              //能量模式必须实际等待一会儿才能实现
              ondaq_statechanged(daq_state.start);//带有所需字节数的数据阵列
              尽管( !isstopping && readonerecord()数据)) 
              //填充数据阵列带有所需的字节数
              while(!isstopping && readonerecord(data))

                          //如果我们在等待时获得数据,那么我们将不再等待
                          如果(iSwaiting)

                                        isWaiting = false;
                                       ondaq_statechanged(daq_state.tinged);

                          //复制二进制数据进入数据记录
#如果preallocate_data_records
                          record.read(数据);
#别的
                          record = new DataRecordSingle(数据);
#endif
#if trace_daq_hs_read && debug
                          tracelogger.traceRead($“ daq.hs.read:record.toString_ashex() // record.toStringex()');
#endif
                           //如果仪表设置了中止标志,那么我们必须停止 
                           //(不应添加此记录以捕获缓冲区)
                           if(terminedBymeter(记录))
               休息;//将数据记录添加到capturebuffer,分配了时间戳
                            capturebuffer.timestampandadd(记录);tracedata(“ add [0]:1”,recordsRead,record.tostring());;Count ++;
                            if(stoponcount && count> = apcation)
                                         break;捕获(异常EX)

                       //报告所有未被告求的例外并终止线程
                       ReportException(ex);

       // Try语句的所有退出都需要成功退出
       onthreadexits();

 

readonerecord- 数据采集的内部环路

readonerecord反复调用读取功能以将所需的字节加载到目标数据数组中。

读者的心脏是前两个循环。其他大多数代码与您系统上可能不会出现的特殊情况有关。

如果出于任何原因,ReadOneRecord无法获取所有数据,则返回false并因此终止线程循环。许多其他特殊条件可能会终止循环。

复杂性结果是因为COM端口上的读取功能不一定返回所请求的所有数据。如果它们的返回少于所需的返回,则内部循环会反复获取数据的剩余量。

Channel.Read本质上是.net serialport读取函数。

唯一的扭曲是整个目标数组作为参数传递,索引表示应放置新数据的位置,计数是请求多少个字节。读取返回实际读取了多少个字节的计数,这可能小于要求。

isstopping是一个全局标志,它向所有采集代码发出信号。


受保护的虚拟bool readonerecord(byte []数据)

     int count = data.length;
	 int index = 0;sampletime.start();//反复尝试读取1个记录,
	//超时重新启动不完整的内部循环
	while(计数> 0 &&!isstopping)

		尝试

			//内部循环读取一个记录,但是
			//可能会在完成该阅读之前出来
			while(计数> 0 &&!isstopping)

				int actual = channel.read(数据,索引,计数);
				如果(实际<= 0)

					// eof“无法发生”因此致命错误
					ReportUnpentefeof();
					返回false;

				计数 -  =实际;
				索引 +=实际;

			//如果我们到达这里,我们有一个完整的记录//统计数据仅用于完整记录
			bytesread += data.length;
			RecordsRead ++;

		//在能量模式下,我们有时会等待很长时间才能阅读, 
		//因此,阅读时超时是正常的 

		捕获(TimeOutException)

			//等待终止操作时停止

			if(Stopping)
				返回false;	//终止DAQ

			//否则如果我们不停止超时...

			//在电源模式下不允许超时
			if(!operationmode_istrueEnergy
			&& sampletime.e天博综合体育中国官方网站psedmilliseconds> powermodemaxe天博综合体育中国官方网站psed_ms)

				reportun etpectedTimeOut();
				返回false;   //终止DAQ

			//首次开始等待的信号triggerwait首次开始等待
			如果(!iSwaiting)

				isWaiting = true;
				ondaq_statechanged(daq_state.triggerwait);

			//如果不停止或PowerMode超时,请忽略超时
			继续;

		最后

			sampletime.stop();

	 //外部循环返回(count == 0);  //非零计数信号故障

 

联系人coherent

提供帮助或其他信息,访问我们的支持服务页面。例如,如果您找不到传感器的校准证书,我们可以发送替换。

要安排保修服务或年度重新校准,请先与您的区域连贯服务中心联系以获得退货材料授权(RMA)编号。使用您保留的运输盒和包装材料将传感器安全地运回工厂,然后运送到此地址:

Coherent,Inc。
attn:rma#
27650 SW 95th Ave.
Wilsonville,或97070

安排无成本咨询以讨论您的需求。