raise AttributeError(name)AttributeError:LCC_GetChannelHandle

时间:2018-05-15 09:13:06

标签: python python-2.7 spyder python-cffi

我是python cffi的新手。我必须使用其索引或其通道名称来访问我的温度模块。正如你在QmixTC课上看到的那样,我正在尝试这两种方法。我收到了属性错误。在其他课程中,没有错误。有人可以帮我理解问题所在。我正在处理我的代码以及错误跟踪。谢谢。

main code with name qmix.py (importing it in to sample code): 

class QmixTC (object): 
"""

"""
def __init__(self, index=0, handle=None,name=''):

    self.dll_dir = DLL_DIR
    self.dll_file = os.path.join(self.dll_dir,
                             'labbCAN_Controller_API.dll')
    self._ffi = FFI()
    self._ffi.cdef(CONTROLLER_HEADER)

    self._dll = self._ffi.dlopen(self.dll_file)
    self._handle = self._ffi.new('dev_hdl *', 0)

    if handle is None:
        self.index = index
        self._handle = self._ffi.new('dev_hdl *', 0)
        self._call('LCC_GetChannelHandle', self.index, self._handle)
    else:
        self.index = None
        self._handle = handle



    self._ch_name="QmixTC_1_DO0_INA"
    self._channel = self._ch_name + str(index) 
    self._call('LCC_LookupChanByName',
               bytes(self._channel,'utf8'),
               self._handle)

    self.name = name

def _call(self, func_name, *args):
    func = getattr(self._dll, func_name)
    r = func(*args)
    r = CHK(r, func_name, *args)
    return r  

def Setpoint_write (self, setpoint): 
    """
    Write setpoint value to controller device.
    Parameters
        [in]    ChanHdl Valid handle of open controller channel
        [in]    fSetPointValue  The setpoint value to write
    Returns
        Error code - ERR_NOERR indicates success
    """
    self._call('LCC_WriteSetPoint', self._handle[0], setpoint) 

def enable_controllLoop (self, enable): 
      """
      Enables / disables a control loop.
      If the control loop is enabled, then the output value is calculated periodically.
      Parameters
          ChanHdl   Valid handle of a controller channel
          Enable    1 = enable, 0 = disable
      Returns
          Error code - ERR_NOERR indicates success
     """
      self._call('LCC_EnableControlLoop', self._handle[0], enable) 

def read_temp_value  (self, actualvalue):
     """
     Read actual value from device.
     Parameters
         [in]   ChanHdl Valid handle of open controller channel
         [out]  pfActualValue   Returns the actual controller value
     Returns
        Error code - ERR_NOERR indicates success
     """
     self._call('LCC_ReadActualValue', self._handle[0], actualvalue)  

if __name__ == '__main__':
import os.path as op

dll_dir = op.normpath('C:\\Users\\Ravikumar\\AppData\\Local\\QmixSDK')
config_dir = op.normpath('C:\\Users\\Public\\Documents\\QmixElements\\Projects\\QmixTC_Pump\\Configurations\\QmixTC_pump')

bus = QmixBus(config_dir=config_dir)
bus.open()
bus.start()

controller_0 = QmixTC(index=0) 
controller_0.enable_controllLoop(1)  

示例程序:

from __future__ import division, print_function
from win32api import GetSystemMetrics
import numpy as np
import os
import qmix
import pandas as pd

#%% CHANNEL INITIALIZATION
if __name__ == '__main__':
dll_dir = ('C:\\Users\\Ravikumar\\AppData\\Local\\QmixSDK')
config_dir = ('C:\\Users\\Public\\Documents\\QmixElements\\Projects\\QmixTC_test1\\Configurations\\QmixTC_test1')

qmix_bus = qmix.QmixBus(config_dir=config_dir,dll_dir=dll_dir)
qmix_bus.open()
qmix_bus.start()

controller_0 = qmix.QmixTC(index=0)


controller_0.Setpoint_write(50)

错误:     回溯(最近一次调用最后一次):

File "<ipython-input-5-40d4a3db9493>", line 17, in <module>
controller_0 = qmix.QmixTC(index=0)

File "qmix.py", line 921, in __init__
self._call('LCC_GetChannelHandle', self.index, self._handle)

File "qmix.py", line 937, in _call
func = getattr(self._dll, func_name)

 File "C:\Users\Ravikumar\Anaconda2\lib\site-packages\cffi\api.py", line 875, in __getattr__
make_accessor(name)

 File "C:\Users\Ravikumar\Anaconda2\lib\site-packages\cffi\api.py", line 870, in make_accessor
raise AttributeError(name)

AttributeError: LCC_GetChannelHandle

0 个答案:

没有答案