这是我的DHParam的代码
import ctypes
from ctypes import cdll, create_string_buffer, c_int, byref
from DeviceInfo import DeviceInfo, Channel, param_types, SHOW_CHN_NAME, SHOW_CHANNEL_USE
class DHParam:
def __init__(self, dllpath):
self.find_mac = False
self.mac_count = 0
self.lib = cdll.LoadLibrary(dllpath)
self.device_info_map = {}
self.device_team_map = []
# 初始化
def int_mac_control(self, dll_dir, language_type):
print('start int_mac_control')
self.lib.InitMacControl(dll_dir)
print('end int_mac_control')
# 退出控制
def quit_control(self):
self.lib.QuitMacControl()
# 查找所有仪器
def refindandconnecmac(self):
self.find_mac = bool(self.lib.RefindAndConnecMac())
print('是否查找到仪器' + str(self.find_mac))
# 获取在线仪器数量
def get_allmac_online_count(self):
return self.lib.GetAllMacOnlineCount()
# 获取所有仪器列表
def get_device_info(self):
if len(self.device_info_map) > 0:
return self.device_info_map
mac_online_count = self.get_allmac_online_count()
if mac_online_count <= 0:
print('获取在线仪器数量失败')
return self.device_info_map
freq_list = self.get_mac_sample_freq_list()
if not isinstance(freq_list, list):
print('获取采样频率列表失败')
return self.device_info_map
current_sample_freq = self.get_sample_frequency()
print('查找到仪器数量:' + str(mac_online_count))
for i in range(0, mac_online_count):
self.get_single_device(i, freq_list, current_sample_freq)
# 获取单台仪器&仪器所有通道
def get_single_device(self, mac_index, freq_list, current_sample_freq):
pmacid = c_int(0)
nmacbuffer = 256
temp = create_string_buffer(''.encode(), nmacbuffer)
nusebuffer = c_int(0)
res = self.lib.GetMacInfoFromIndex(mac_index, byref(pmacid), temp, nmacbuffer, byref(nusebuffer))
if res == -1:
print('get_single_device 未初始化')
elif res == -2:
print('get_single_device 序号超出总数')
elif res == -3:
print('get_single_device 内存不足')
else:
strmacip = temp.raw[0:nusebuffer.value]
single_device = DeviceInfo(pmacid.value, strmacip, current_sample_freq, freq_list)
self.get_single_device_all_channel(single_device)
self.device_info_map[single_device.device_id] = single_device
print('仪器索引:{0};仪器id:{1};仪器IP:{2};仪器通道数:{3}'.format(mac_index, single_device.device_id,
single_device.device_ip,
len(single_device.channel_map)))
# 获取单台仪器所有通道
def get_single_device_all_channel(self, single_device):
channel_count = self.lib.GetMacCurrentChnCount(single_device.device_id,
ctypes.c_char_p(single_device.device_ip))
all_channel = {}
if channel_count == 0:
print('仪器{0}({1})###############未读取到仪器通道#######################'.format((single_device.device_id,
single_device.device_ip)))
for i in range(0, channel_count):
nmacchnid = c_int(0)
online = c_int(0)
errorcode = self.lib.GetMacChnIdFromMacIndex(i, single_device.device_id,
ctypes.c_char_p(single_device.device_ip),
byref(nmacchnid), byref(online))
if errorcode < 0:
continue
channel = Channel(single_device.device_id, nmacchnid.value, online.value == 1, single_device.device_ip)
channel.chnname = '{0}-{1}'.format(single_device.device_id + 1, (i + 1))
self.get_channel_param(single_device, channel)
self.get_current_param(single_device, channel)
if channel.current_param[SHOW_CHANNEL_USE] != "ON":
continue
self.get_teaminfo(channel)
all_channel[channel.channel_id] = channel
if (channel.device_id, channel.m_nTeamId) not in self.device_team_map:
self.device_team_map.append((channel.device_id, channel.m_nTeamId))
single_device.channel_map = all_channel
# 获取通道 可设置参数列表
def get_channel_param(self, single_device, channel):
channel.param_map.clear()
temp = create_string_buffer(''.encode(), 1000)
usebuffer = c_int(0)
for i in range(0, len(param_types)):
result = self.lib.GetMacChnParamListValue(single_device.device_id, ctypes.c_char_p(single_device.device_ip),
channel.channel_id, param_types[i], temp, 1000, byref(usebuffer))
if result == 0:
continue
params = temp.raw[0:usebuffer.value].decode("GBK").split('|')
if len(params) > 0:
channel.param_map[param_types[i]] = params
# 获取通道所有参数信息
def get_current_param(self, single_device, channel):
channel.current_param.clear()
temp = create_string_buffer(''.encode(), 256)
usebuffer = c_int(0)
for i in range(0, len(param_types)):
self.lib.GetMacChnCurrentParam(single_device.device_id, channel.channel_id,
ctypes.c_char_p(single_device.device_ip),
param_types[i], temp, 256, byref(usebuffer))
if usebuffer.value == 0:
continue
param = temp.raw[0:usebuffer.value].decode("GBK")
if param_types[i] == SHOW_CHN_NAME:
channel.chnname = param
channel.current_param[param_types[i]] = param
# 更改单通道参数
def modify_mac_chn_param(self, nmacid, macip, macchnid, showparamid, strparamvalue):
self.lib.ModifyMacChnParam.restype = ctypes.c_bool
result = self.lib.ModifyMacChnParam(nmacid, ctypes.c_char_p(macip), macchnid,
showparamid, ctypes.c_char_p(strparamvalue))
print('更改参数结果:{0}'.format(result))
if result:
device = self.device_info_map[macip]
channel = device.channel_map[macchnid]
self.get_channel_param(device, channel)
self.get_current_param(device, channel)
# 获取当前采样频率
def get_sample_frequency(self):
self.lib.GetMacCurrentSampleFreq.restype = ctypes.c_float
sample_freq = self.lib.GetMacCurrentSampleFreq()
print('当前采样频率 {0}'.format(sample_freq))
return sample_freq
# 获取可设置的采样频率列表
def get_mac_sample_freq_list(self):
nfreqbuffer = 1000
pfreqlist = create_string_buffer(''.encode(), nfreqbuffer)
nusedbuffer = c_int(0)
result = self.lib.GetMacSampleFreqList(pfreqlist, nfreqbuffer, byref(nusedbuffer))
if result > 0:
result = pfreqlist.raw[0:nusedbuffer.value].decode("GBK").split('|')
elif result == -1:
print('获取采样频率 未初始化')
elif result == -2:
print('获取采样频率 序号超出总数')
else:
print('获取采样频率失败')
return result
# 设置采样频率
def set_mac_sample_freq(self, fltsamplefreq):
result = self.lib.SetMacSampleFreq(ctypes.c_float(fltsamplefreq))
if result > 0:
print('设置采样频率成功')
elif result == -1:
print('设置采样频率失败')
def start_mac_sample(self):
self.lib.ChangeGetDataStatus(True)
start_res = self.lib.StartMacSample()
print('启动采样结果>>>' + str(start_res))
def stop_mac_sample(self):
self.lib.StopMacSample()
# 获取单台仪器所有数据
def get_one_mac_chn_data(self, nmacid, nrecievecount, nchncount, ltotalpos, lbuffersize, pbufferaddr):
self.lib.GetOneMacChnData_New(nmacid, nrecievecount, nchncount, ltotalpos, lbuffersize, pbufferaddr)
# 获取静态数据
def get_rs485chn_data(self, nmacid, nchnid, lbuffersize, pbufferaddr, nrecievecount, signalcount):
self.lib.GetRS485ChnData_New(nmacid, nchnid, lbuffersize, pbufferaddr, nrecievecount, signalcount)
# 时域信号,获取数据位置
def get_onemac_dataindex(self, macid, chnid):
return self.lib.GetOneMacDataIndex(macid, chnid)
# 5972N/5974N仪器分组信息,用于获取数据位置
def get_teaminfo(self, channel):
ReturnValue = c_int(0)
teamid = c_int(0)
teamindex = c_int(0)
self.lib.GetChannelTeamID(channel.device_id, ctypes.c_char_p(channel.m_strDeviceIP), channel.channel_id,
byref(teamid))
channel.m_nTeamId = teamid.value
self.lib.GetDataIndexInTeam(channel.device_id, ctypes.c_char_p(channel.m_strDeviceIP), channel.channel_id,
channel.m_nTeamId,
byref(teamindex), byref(ReturnValue))
channel.m_nTeamIndex = teamindex.value
# 5972N/5974N仪器获取数据
def get_OneMacTeamChnData(self, nMacID, nTeamID, point, nBufferSize, nTotalDataPos, nReceiveCount, nChnCount,
ReturnValue):
return self.lib.GetOneMacTeamChnData_New(nMacID, nTeamID, point, nBufferSize, nTotalDataPos, nReceiveCount,
nChnCount, ReturnValue)
# 平衡所有通道
def balance_all_mac_chn(self):
result = self.lib.BalanceAllMacChn()
print('平衡结果>>>' + str(result))
# 清零所有通道
def clearzero_all_mac_chn(self):
result = self.lib.AllChannelClearZeroEx(c_int(0))
print('清零结果>>>' + str(result))
# 设置每次调用get_one_mac_chn_data receiveCount点数
def SetGetDataCountEveryTime(self, dataCount):
result = self.lib.SetGetDataCountEveryTime(dataCount)
# 导入参数,传入文件夹路径
def LoadMacParameter(self, paramDir):
return self.lib.LoadMacParameter(paramDir)
# 保存参数,传入文件夹路径
def SaveMacParameter(self, paramDir):
return self.lib.SaveMacParameter(paramDir)
# 获取平衡结果与零点值
def GetAllChannelBalanceAndZeroValue(self, paramDir):
return self.lib.GetAllChannelBalanceAndZeroValue(paramDir)
# 设置平衡结果与零点值
def SetAllChannelBalanceAndZeroValue (self, paramDir):
return self.lib.SetAllChannelBalanceAndZeroValue(paramDir)