Код:
# ---------------instrument settings--------------------------------
try:
COM = MySerial.ComPort(portName, baudRate, timeout=0.07)
except:
raise Exception('Error openning port!')
try:
MVA = Owen.OwenDevice(COM, 16)
print MVA
except Owen.OwenProtocolError:
print 'Модуль ввода отсутствует'
s_log(u'Модуль ввода отсутствует')
try:
MU = Owen.OwenDevice(COM, 8)
print MU
except Owen.OwenProtocolError:
print 'Модуль вывода отсутствует'
s_log(u'Модуль вывода отсутствует')
MMU = minimalmodbus.Instrument(portName, slaveaddress=8, mode='rtu') # port name, slave address (in decimal)
MMU.debug = False
MMU.serial.baudrate = baudRate
try:
if MMU.read_register(pwmPeriodReg + SSRPwm0) <> Freq:
MMU.write_register(pwmPeriodReg + SSRPwm0, Freq)
print 'Корректный период ШИМ'
mModInitStr += u'Корректный период ШИМ,'
else:
mModInitStr += u'Корректировка ШИМ не нужна,'
except IOError, ValueError:
try:
if MMU.read_register(pwmPeriodReg + SSRPwm0) <> Freq:
MMU.write_register(pwmPeriodReg + SSRPwm0, Freq)
print 'Корректный период ШИМ'
mModInitStr += u'Корректный период ШИМ,'
else:
mModInitStr += u'Корректировка ШИМ не нужна,'
except IOError, ValueError:
print 'Ошибка установки периода ШИМ'
mModInitStr += u'Ошибка установки периода ШИМ,'
try:
MMU.write_register(SSRPwm0, 0)
MMU.write_register(Fan1, 0)
MMU.write_register(Cont1, 0)
MMU.write_register(Bell1, 0)
print 'Порты в нуле'
mModInitStr += u' Порты в нуле'
except IOError, ValueError:
try:
MMU.write_register(SSRPwm0, 0)
MMU.write_register(Fan1, 0)
MMU.write_register(Cont1, 0)
MMU.write_register(Bell1, 0)
print 'Порты в нуле'
mModInitStr += u' Порты в нуле'
except IOError, ValueError:
print 'Ошибка установки портов'
mModInitStr += u' Ошибка установки портов'
Код:
class TempThread(QtCore.QThread): # работа с АЦП в потоке
def __init__(self, temp_signal, parent=None):
super(TempThread, self).__init__(parent)
self.temp_signal = temp_signal
self.isRun = False
self.counter=0 # ошибки
self.counter2=0 # операции чтения
self.temp_array = np.array([[0.0, 0],
[0.0, 0],
[0.0, 0],
[0.0, 0],
[0.0, 0],
[0.0, 0],
[0.0, 0]])
def run(self):
global portIsBusy
while self.isRun:
a = datetime.datetime.now()
s = time.localtime()
Ch = 1
while portIsBusy:
print 'temp busy', portIsBusy
time.sleep(0.05)
while Ch <= 3:
try:
portIsBusy = True
terr = self.temp_array[Ch][0]
# читаем с адреса базовый-1
result = MVA.GetIEEE32('rEAd', Ch-1, withTime=True)
print 'Ch', Ch, 'res:', result
self.temp_array[Ch][0] = round(result['value'],1)
self.temp_array[Ch][1] = int(0)
except Owen.OwenUnpackError as e:
self.error_unpack(e, terr, Ch, s) # обрабатываем ошибку раскодировки данных
except Owen.OwenProtocolError:
try: # пробуем еще раз
terr = self.temp_array[Ch][0]
# читаем с адреса базовый-1
result = MVA.GetIEEE32('rEAd', Ch - 1, withTime=True)
print 'Ch', Ch, 'res:', result
self.temp_array[Ch][0] = round(result['value'], 1)
self.temp_array[Ch][1] = int(0)
except Owen.OwenUnpackError as e:
self.error_unpack(e, terr, Ch, s) # обрабатываем ошибку раскодировки данных
except Owen.OwenProtocolError:
print 'Модуль ввода не ответил, канал: ' + str(Ch)
s_log(u'Модуль ввода не ответил, канал: ' + str(Ch) + ' ' + str(
s.tm_hour) + ':' + str(s.tm_min) + ':' + str(s.tm_sec))
self.counter += 1
if COM.isOpen():
COM.close()
COM.open()
print self.temp_array[Ch]
Ch+=1
portIsBusy = False
print '-------------------',str(s.tm_hour), ':', str(s.tm_min), ':', str(s.tm_sec), '-------------------'
self.temp_signal.emit(self.temp_array)
self.counter2 +=1
error_buffer[0] = u'Ошибки = ' + str(self.counter) + u', ' + u'Вызовы = ' + str(self.counter2)
print error_buffer[0]
sleepparam = float(str(datetime.datetime.now() - a)[-6:]) / 1000000
print '-------------------', sleepparam, '-------------------'
time.sleep(5 - sleepparam)
def stop(self):
self.isRun = False
def error_unpack(self, e, terr, Ch, s):
if len(e.data) == 1:
self.temp_array[Ch][1] = int(1)
self.temp_array[Ch][0] = terr
# это код ошибки
if ord(e.data[0]) == 0xfd:
print 'Обрыв датчика'
s_log(u'Обрыв датчика, канал: ' + str(Ch) + ' ' + str(s.tm_hour) + ':' + str(
s.tm_min) + ':' + str(s.tm_sec))
elif ord(e.data[0]) == 0xff:
print 'Некорректный калибровочный коэффициент'
s_log(u'Некорректный калибровочный коэффициент, канал: ' + str(Ch) + ' ' + str(
s.tm_hour) + ':' + str(s.tm_min) + ':' + str(s.tm_sec))
elif ord(e.data[0]) == 0xfb:
print 'Измеренное значение слишком мало'
s_log(u'Измеренное значение слишком мало, канал: ' + str(Ch) + ' ' + str(
s.tm_hour) + ':' + str(s.tm_min) + ':' + str(s.tm_sec))
elif ord(e.data[0]) == 0xfa:
print 'Измеренное значение слишком велико'
s_log(u'Измеренное значение слишком велико, канал: ' + str(Ch) + ' ' + str(
s.tm_hour) + ':' + str(s.tm_min) + ':' + str(s.tm_sec))
elif ord(e.data[0]) == 0xf7:
print 'Датчик отключен'
s_log(u'Датчик отключен, канал: ' + str(Ch) + ' ' + str(
s.tm_hour) + ':' + str(s.tm_min) + ':' + str(s.tm_sec))
elif ord(e.data[0]) == 0xf6:
print 'Данные температуры не готовы'
s_log(u'Данные температуры не готовы ' + str(Ch) + ' ' + str(
s.tm_hour) + ':' + str(s.tm_min) + ':' + str(s.tm_sec))
elif ord(e.data[0]) == 0xf0:
print 'Значение заведомо неверно'
s_log(u'Значение заведомо неверно, канал: ' + str(Ch) + ' ' + str(
s.tm_hour) + ':' + str(s.tm_min) + ':' + str(s.tm_sec))
else:
print 'wtf it needs?'
s_log(u'Неизвестная ошибка ввода, канал: ' + str(Ch) + ' ' + str(
s.tm_hour) + ':' + str(s.tm_min) + ':' + str(s.tm_sec))
if COM.isOpen():
COM.close()
COM.open()