在电气测量中,同步是精确匹配测量数据的过程,以便从基本相同的时刻开始。当有来自不同位置和不同时间间隔的数据以及在不同时间范围内测量的数据时,需要同步。LMG600定义了三种不同级别的同步:通道、仪器和系统级别。通道级别是指电压和电流通道以及各功率通道的同步。仪器级别描述了仪器与所施加信号的同步以及C值(在一个周期时间内测量的值)和H值(在谐波窗口测量的值)之间的同步。系统级别用于描述各种仪器的同步。
1. 仪器级别同步
仪器级别同步是指某组的所有通道与所施加信号的同步。 同样它也是指在测量C值和H值时的同步。第二种情况如下所述。
对于C值和H值,必需在整数个周期内进行测量。一方面,H值(谐波)是在固定数量的周期内测量的,不受周期时间的影响。另一方面,C值(RMS值和功率)通常在固定时间(周期时间)内测量。LMG600上有三种不同的选项(周期模式),用于确保显示的C值和H值与时间同步。
ü 在“Instrument仪器”菜单和“Measuring测量”选项卡下,按“cycle周期”并选择周期模式。选项“Fixed Interval固定间隔”、每组的谐波(例如“Harm1谐波组1”)、“Scope示波器”和“Flicker闪烁”可用。选项 “Extern外部”用于从外部设置周期时间。通过按屏幕底部状态栏上的周期,可以到达相同的菜单。
2.1 Fixed Interval固定间隔
在这种循环模式下,重点是计算基于周期的值(C值),手动设置周期时间。每组基于周期的值显示一组谐波。
§ 情况1:谐波值的计算速度快于基于周期的值
让我们假设周期时间等于一秒,这意味着每秒有一组C值。谐波窗口的数量是固定的,等于每秒5次谐波。为了使H值与C值同步,仅显示最后一次谐波计算。
图 2:固定间隔,H值>C值
§ 情况 2:谐波值的计算速度慢于基于周期的值
现在我们假设循环时间为50ms。然后,每秒计算20组C值,而谐波窗口的数量是固定的,等于每秒5个H值。将显示多个C值及同一组谐波值。
图 3:固定间隔,H值值<>
2.2 谐波
当选择谐波周期模式时,重点是关注某组(定义为主组)的谐波值。主组用于定义虚拟的周期时间。所有组的C值的计算都是使用此虚拟周期时间完成的。每组谐波值(主组)正好有一组C值(所有组)。其他组的谐波值则单独计算。下图说明了这些情况。
如在主组上每秒测量5组H值,则设备的所有组上测量相同数量的C值(5组C值/秒)。其他组的H值数量单独计算得出,如上所述。例如,另一组每秒测量1组H值,因此相同的测量值将显示五次。
图 4:谐波
有两种方法来决定哪个组是主组。要么选择信号频率最高的组作为主组,或选择信号频率最低的组。第一种情况下的问题是来自较慢组的大量重复数据。在第二种情况下时间分辨率最差。
ü 在周期模式选择中,选项Harm1~Harm7相对每个组都可用。如果选择其中之一,则周期时间不是用户定义的,而是根据相应谐波分析的周期长度自动调整的。
ü 在“Group组”菜单和“Harmonics谐波”设置下,“Spect.Mode频谱模式”可以设置为“Harmonics谐波”或“Frequency频率”,间隔长度分别取决于间谐波和频率或周期时间。仅当周期模式设置为“Fixed Interval固定间隔”时,“Freauency频率”选择才会生效 。
2.3 示波
LMG600具有一个特殊功能,即示波周期模式,可以设置UIP(电压、电流和功率)采样值的连续无间隙输出和C值的无间隙输出。对于前面的选项,重点是H值或C值,并存在重复或缺失的数据。现在,重点放在无间隙采样上,而C值和H值可以在每个周期输出。在固定间隔模式下,周期时间由用户定义,谐波模式上是基于谐波窗口次数的固定值。在示波模式下,周期时间仅取决于真实记录速率/记录频率。
周期时间=(1/真实记录频率)*缓存中的采样值总数=
用户可以通过GLCSR命令定义设定采样频率(以Hz为单位),在设定的频率和实际的频率之间,存在差异。原因是基于仪器的最大采样率,即LMG600的1.2MHz(A模块),有预定义的采样频率集。当用户选择一个采样频率时,仪器将选定下一个最大的预定义值。可以使用GLPSR命令读取真实记录频率。
周期时间是根据真实记录速率计算和每个周期的样本总数按等式(1.1)计算的,可以使用GLPTLEN命令获取样本总数。
当缓存满时,当前周期结束,新周期开始。
ü 通过选择“Scope示波”周期模式,重点是采样值的计算。所有其他的测量值(例如H值、C值、瞬态值、闪烁值)可以每个周期输出一次。
下面提供了有关如何使用此功能的Python代码示例。在本例中,设置了一个通道的电压、电流和功率的连续无间隙输出采样值。同一通道的电压和电流的真有效值以及功率通过使用Cont On命令每周期输出一次。最终,所有结果都存储在CSV文件中。请注意,此示例对于读取瞬态事件采样值或闪烁值无效。
#同一个通道的电压、电流和功率采样值和真有效值
cycleno=int(raw_input("nPlease specify the number of cycles: ")) #设置周期数
sampling_rate=int(raw_input("nPlease specify the sampling rate: ")) #设置采样速率
if (sampling_rate>1212121 or sampling_rate<=0):
print "nThe maximum sampling rate is 1,212121 MSamples per Second!nPlease restart and specify a valid sampling raten"
sys.exit()
IP=str(raw_input("nPlease specify the IP address of the device: ")) #定义仪器的IP地址
TestDevice = LMG600(10) #超过10秒之后连接超时
TestDevice.open("ethernet", IP)
TestDevice.write_opc("*zlang short") #选择短指令模式
TestDevice.write_opc("glctrac 0,'U1111'") #选择Track0轨迹0 的信号
TestDevice.write_opc("glctrac 1,'I1111'") #选择Track1轨迹1 的信号
TestDevice.write_opc("glctrac 2,'P1111'") #选择Track2轨迹2 的信号
TestDevice.write_opc("glcsr %d" % (sampling_rate))
TestDevice.write_opc("cyclmod SCOPE") #调整周期长度到采样速率模式
TestDevice.write_opc("inim") #实现采样值的缓存读取
samples_per_cycle = TestDevice.request("glptlen?") #读取每周期的采样值
ts = TestDevice.request("glpsr?") #读取真实采样速率
upper_border = int(samples_per_cycle) - 1
#读取每条轨迹的采样值
glpquery = "glpval? 0,(0:%d); glpval? 1,(0:%d); glpval? 2,(0:%d)" % (upper_border, upper_border, upper_border)
print glpquery
print ts
col_sep = ";" #列分隔符
dec_sep = "." #小数分隔符
answer = TestDevice.request(glpquery)
TestDevice.write("ACTN; DURNORM?; UTRMS?; ITRMS?; P?; %s" % glpquery) #指定所有的输出
TestDevice.write("CONT ON") #开始连续输出
#得到每周期的结果
x = 0
answer = ""
while x < cycleno:
current_answer = TestDevice.read()
current_answer_splitted = current_answer.split(";")
durnorm = current_answer_splitted[0]
utrms = current_answer_splitted[1]
itrms = current_answer_splitted[2]
p = current_answer_splitted[3]
glctrac_0 = current_answer_splitted[4]
glctrac_1 = current_answer_splitted[5]
glctrac_2 = current_answer_splitted[6]
glctrac_0_splitted = glctrac_0.split(",")
glctrac_1_splitted = glctrac_1.split(",")
glctrac_2_splitted = glctrac_2.split(",")
sample_count = 0
while sample_count < len(glctrac_0_splitted):
answer += ("%d" % (x)) + col_sep + durnorm + col_sep + ("%d" % (sample_count)) + col_sep + utrms + col_sep + glctrac_0_splitted[sample_count] + col_sep + itrms + col_sep + glctrac_1_splitted[sample_count] + col_sep + p + col_sep + glctrac_2_splitted[sample_count] + "r"
sample_count = sample_count + 1
x=x+1
TestDevice.write("CONT OFF") #停止连续输出
print answer
#输出结果到CSV文件
csv_handle = open("Gapless Scope.csv", "w") #创建文件对象
#生成CSV文件参数名栏
csv_header = "Cycle" + col_sep + "Measuring Time (sec)" + col_sep + "Samples Number" + col_sep + "Voltage Rms (V)" + col_sep + "Voltage Sample (V)" + col_sep + "Current Rms (A)" + col_sep + "Current Sample (A)" + col_sep + "Power (W)" + col_sep + "Power Sample (W)" + "n"
csv_handle.write(csv_header) #写参数名到文件
csv_handle.write(answer) #写测量结果到文件
TestDevice.write("GTL") #关闭通讯接口并设置到本地控制
TestDevice.close(False) #使用False避免重置仪器设置或移除它以重置仪器设置
print "Measurement finished!n"
csv_handle.close() #关闭记录文件#结束
使用GLCTRAC命令,您可以定义轨迹的信号并选择将要测量的信号的采样值。最多可提供16条轨迹(使用GLPNTR命令在无间隙示波期间读取可用轨迹的数量)。信号选择基于以下定义:
§ 使用ACTN命令,可以指定将输出的值。通过添加通道数字从特定通道中选择一个,例如,UTRMS2表示第二个通道的真有效值电压。如果不添加任何数字(例如UTRMS),则将输出第一个通道的真有效值电压。
§ 通过使用Cont On命令,选定的测量值将在每个周期连续输出 。