示例#1
0
def execute_func():
    sensor_no = ModbusClient(host="192.40.50.107",
                             port=10010,
                             unit_id=1,
                             auto_open=True)
    sensor_no.open()
    regs = sensor_no.read_holding_registers(0, 100)
    if regs:
        print(regs)
    else:
        print("read error")

    n = 0
    data_count = 0

    for n in range(50):
        data_count = n * 2
        regs[data_count], regs[data_count + 1] = regs[data_count +
                                                      1], regs[data_count]

    dec_array = regs

    data_bytes = np.array(dec_array, dtype=np.uint16)
    data_as_float = data_bytes.view(dtype=np.float32)

    time_data = datetime.datetime.now()
    print(time_data)

    start = 1
    start_range = 50

    value = [[num for num in range(start, start + start_range)],
             [num for num in range(start, start + start_range)], data_as_float]

    data = np.array(value).T.tolist()
    # print(data)

    products = data
    arr = []
    for product in products:
        vals = {}
        vals["Sensor No"] = str(int(product[1]))
        vals["Temp"] = str(product[2])
        vals["Time"] = str(time_data)
        arr.append(vals)

    myclient = pymongo.MongoClient("mongodb://localhost:27017/")
    mydb = myclient["Modbus_Database"]

    mycol = mydb["collection1"]

    record_data = arr
    mycol.insert_many(record_data)
    global documents
    documents = list(mycol.find({}, {'_id': 0}))
    print(documents)

    # myclient.drop_database('Modbus_Database')
    mycol.delete_many({})
    time.sleep(60)
示例#2
0
async def async_setup(hass, config):
    """Set up the SolarEdge component."""
    conf = config.get(DOMAIN)

    _LOGGER.debug("creating modbus client begin")

    host = conf[CONF_HOST]
    port = conf["port"]

    client = ModbusClient(host, port=port, unit_id=1, auto_open=True)
    hass.data[DOMAIN] = client

    _LOGGER.debug("creating modbus client done")

    for component in ["sensor"]:

        # BEGIN 15/12/2020-16/12/2020: new battery meter

        #        discovery.load_platform(hass, component, DOMAIN, {CONF_NAME: DOMAIN, CONF_SCAN_INTERVAL: conf[CONF_SCAN_INTERVAL], "read_meter1": conf["read_meter1"]}, config)
        #        discovery.load_platform(hass, component, DOMAIN, {CONF_NAME: DOMAIN, CONF_SCAN_INTERVAL: conf[CONF_SCAN_INTERVAL], "read_meter1": conf["read_meter1"], "read_meter2": conf["read_meter2"]}, config)
        discovery.load_platform(
            hass, component, DOMAIN, {
                CONF_NAME: DOMAIN,
                CONF_SCAN_INTERVAL: conf[CONF_SCAN_INTERVAL],
                "read_meter1": conf["read_meter1"],
                "read_meter2": conf["read_meter2"],
                "read_battery": conf["read_battery"]
            }, config)

# END 15/12/2020-16/12/2020

    return True
示例#3
0
def read(ip):

    # Initialize modbus
    c = ModbusClient(host=ip, port=502, auto_open=True, timeout=0.1)

    # Read the outputs (Returns None if timeout)
    return(c.read_coils(16, 6))
示例#4
0
    def __init__(self, c=ModbusClient(), com=""):
        self.rwm = RWM.ReadWriteMethod(c)
        self.COM = com
        QtWidgets.QMainWindow.__init__(self)
        Ui_SecondWindow.__init__(self)
        self.setupUi(self)
        self.setWindowIcon(QtGui.QIcon(path + os.sep + 'MeVb.png'))
        self.lcd_volt.setDigitCount(5)

        mainMenu = self.menuBar()
        fileMenu = mainMenu.addMenu('File')
        exitButton = QAction('Exit', self)
        exitButton.setShortcut('Ctrl+Q')
        exitButton.setStatusTip('Exit application')
        exitButton.triggered.connect(self.close)
        fileMenu.addAction(exitButton)

        fileMenu = mainMenu.addMenu('Edit')
        autoButton = QAction('Auto_Mode', self)
        autoButton.setShortcut('Ctrl+A')
        autoButton.setStatusTip('Auto application')
        autoButton.triggered.connect(self.auto_mode)
        fileMenu.addAction(autoButton)

        self.lcd_volt.setMode(QLCDNumber.Dec)
        self.lcd_volt.setStyleSheet(
            "border: 2px solid black; color: red; background: silver;")
        self.initUI()
示例#5
0
    def _read_config(self):
        self._ip = self._config.get('modbus_server_ip')
        self._port = self._config.get(
            'modbus_port', ModbusTCPSensor.default_config['modbus_port'])
        self._debug = self._config.get('debug', 0) == 1
        self._sample_rate = self._config.get(
            'sample_rate', ModbusTCPSensor.default_config['sample_rate'])
        self._sensors = []
        # Load Sensors
        for sensor in self._config.get('sensors', []):
            if 0 <= sensor['sensor_id'] < 32:
                self._sensors.append(sensor)
        # Load Validation bits
        self._validation_bits = []
        for validation_bit in self._config.get('bits', []):
            if 0 <= validation_bit['validation_bit_id'] < 256:
                self._validation_bits.append(validation_bit)
        self._enabled = len(self._sensors) > 0

        try:
            from pyModbusTCP.client import ModbusClient
            self._client = ModbusClient(self._ip,
                                        self._port,
                                        auto_open=True,
                                        auto_close=True)
            self._client.open()
            self._enabled = self._enabled & True
        except Exception as ex:
            self.logger('Error connecting to Modbus server: {0}'.format(ex))

        self.logger('ModbusTCPSensor is {0}'.format(
            'enabled' if self._enabled else 'disabled'))
示例#6
0
def VICTRON_modbus_power():
    debug = debugVICTRON
    Modbus_Device_IP = "192.168.1.190"
    Modbus_Device_ID = "100"
    Modbus_Device_Port = 502
    modbus_read_address = 842
    debug = False
    value = 0.0
    try:
        c = ModbusClient(host=Modbus_Device_IP,
                         unit_id=Modbus_Device_ID,
                         port=Modbus_Device_Port,
                         debug=debug)
        c.open()
        collected = c.read_input_registers(modbus_read_address, 1)
        value = utils.get_2comp(collected[0],
                                16)  #utils.get_list_2comp to convert a list
        c.close()
        if debug:
            print("Modbus IP=", Modbus_Device_IP, "Modbus ID=",
                  Modbus_Device_ID, "Modbus address=", modbus_read_address,
                  "Value=", value, "Collected=", collected)
    except:
        print("Could not read power from Victron modbus")
    return value
示例#7
0
def onStart():
    Domoticz.Log("Domoticz SMA Inverter Modbus plugin start")

    if 1 not in Devices:
        Domoticz.Device(Name="Solar Yield", Unit=1, TypeName="kWh",
                        Used=0).Create()
    if 2 not in Devices:
        Domoticz.Device(Name="DC Power A", Unit=2, TypeName="Usage",
                        Used=0).Create()
    if 3 not in Devices:
        Domoticz.Device(Name="DC Power B", Unit=3, TypeName="Usage",
                        Used=0).Create()
    if 4 not in Devices:
        Domoticz.Device(Name="AC Power", Unit=4, TypeName="Usage",
                        Used=0).Create()
    if 5 not in Devices:
        Domoticz.Device(Name="Temperature",
                        Unit=5,
                        TypeName="Temperature",
                        Used=0).Create()

    global client
    client = ModbusClient(host=Parameters["Address"],
                          port=Parameters["Port"],
                          unit_id=Parameters["Mode1"])
    client.open()

    Domoticz.Heartbeat(int(Parameters["Mode2"]))
示例#8
0
def doWrite(goToPos):
    c = ModbusClient(host="192.168.1.1", auto_open=True, auto_close=True)

    if c.write_single_register(1, goToPos):
        print("write ok")
    else:
        print("write error")
示例#9
0
 def __init__(self):
     self.__client = ModbusClient(host="192.168.1.200", port=502, auto_open=True)
     self.__address = 0
     self.__register = 2
     self.__hex_str_list = []
     self.__hex_data = []
     self.float_list = []
示例#10
0
    def __init__(
            self,
            maxpower=3300,
            addr_command=63245,
            addr_time=63243,
            addr_disPower=63248,
            addr_chaPower=63246,
            timeBatt=36000,
            SERVER_HOST="192.168.0.51",
            SERVER_PORT=502,
            PWRNET_API_BASE_URL='http://pwrnet-158117.appspot.com/api/v1/'):
        self.maxPower = maxpower
        self.addr_command = addr_command
        self.addr_time = addr_time
        self.addr_disPower = addr_disPower
        self.addr_chaPower = addr_chaPower
        self.timeBatt = timeBatt  # How long to (dis)charge [s]: uint32
        self.SERVER_HOST = SERVER_HOST
        self.SERVER_PORT = SERVER_PORT
        self.tcpClient = ModbusClient(host=self.SERVER_HOST,
                                      port=self.SERVER_PORT,
                                      unit_id=247,
                                      timeout=2,
                                      auto_open=True)
        self.PWRNET_API_BASE_URL = PWRNET_API_BASE_URL

        self.logger = logging.getLogger(__name__)
        self.logger.setLevel(logging.DEBUG)
        self.handler = RotatingFileHandler('my_log.log',
                                           maxBytes=2000,
                                           backupCount=10)
        self.logger.addHandler(self.handler)
        self.logger.info('Storage class called')
示例#11
0
 def __init__(self, machine, name):
     builder.SetDeviceName(name)
     self.com = ModbusClient(host=machine, port=4000, auto_open=True)  #4000
     self.com.mode(constants.MODBUS_RTU)
     stat = self.com.open()
     self.pv_stat = builder.aIn("stat")
     self.pv_stat.PREC = 1
     self.pv_stat.LOPR = 0
     self.pv_stat.HOPR = 100
     self.pv_temp = builder.aIn("temp")
     self.pv_temp.PREC = 1
     self.pv_temp.LOPR = 0
     self.pv_temp.HOPR = 100
     self.pv_humi = builder.aIn("humidity")
     self.pv_humi.PREC = 1
     self.pv_humi.LOPR = 0
     self.pv_humi.HOPR = 100
     self.pv_humi.HSV = "MINOR"
     self.pv_humi.HHSV = "MAJOR"
     self.pv_humi.HIGH = 45
     self.pv_humi.HIHI = 50
     self.pv_flow = builder.aIn("flow")
     self.pv_flow.PREC = 0
     self.pv_flow.LOPR = 0
     self.pv_flow.HOPR = 600
     self.pv_flow.LOLO = 250
     self.pv_flow.LOW = 300
     self.pv_flow.HIGH = 480
     self.pv_flow.HIHI = 520
     self.pv_flow.LSV = "MINOR"
     self.pv_flow.LLSV = "MAJOR"
     self.pv_flow.HSV = "MINOR"
     self.pv_flow.HHSV = "MAJOR"
     self.stat_pv = builder.boolIn("status",
                                   ZNAM="off",
                                   ONAM="on",
                                   DESC=name)
     self.stat_pv.ZSV = "MAJOR"
     self.pv_on = builder.boolOut("on",
                                  ZNAM="0",
                                  ONAM="1",
                                  HIGH=0.1,
                                  on_update=self.turnOn)
     self.pv_off = builder.boolOut("off",
                                   ZNAM="0",
                                   ONAM="1",
                                   HIGH=0.1,
                                   on_update=self.turnOff)
     self.busy = False
     self.pv_act = builder.boolOut("activity", ZNAM="0", ONAM="1", HIGH=1)
     self.pv_was_on = builder.boolOut("was_on",
                                      ZNAM="0",
                                      ONAM="1",
                                      HIGH=1.5)
     self.pv_was_off = builder.boolOut("was_off",
                                       ZNAM="0",
                                       ONAM="1",
                                       HIGH=1.5)
     self.id_temp = 0
     self.id_stat = 1
示例#12
0
    def post(self, uid):
        '''
        POST to control module coil output states
        (Make the blinkey lights go blinkey)
        '''

        # Parse the form data
        parser = reqparse.RequestParser()
        parser.add_argument("type")
        parser.add_argument("output")
        parser.add_argument("state")
        parser.add_argument("ips", action='append')
        args = parser.parse_args()

        outputs = ['all_clear', 'emergency', 'lightning', 'a', 'b', 'c']

        # Iterate over the outputs and send the state for each one
        # True = On, False = Off
        for idx, output in enumerate(outputs):
            if output == args['output']:
                for ip in args['ips']:
                    c = ModbusClient(host=ip,
                                     port=502,
                                     auto_open=True,
                                     timeout=1)
                    coil = idx + 16
                    c.write_single_coil(coil, args['state'])

        return (200)
示例#13
0
    def onStart(self):
        Domoticz.Heartbeat(5)

        if Parameters["Mode2"] == "Debug":
            Domoticz.Debugging(1)
        else:
            Domoticz.Debugging(0)

        # 从Domoticz重新加载硬件和设备信息
        self.reloadFromDomoticz()

        debug = False
        if Parameters["Mode2"] == "Debug":
            debug = True
        if self.client and self.client.is_open():
            self.client.close()
        self.client = ModbusClient(host=Parameters["Address"],
                                   port=Parameters["Port"],
                                   auto_open=True,
                                   auto_close=False,
                                   timeout=1)
        self.messageThread.start()
        self.client.mode(2)

        self.messageQueue.put({
            "Type": "Log",
            "Text": "Heartbeat test message"
        })
示例#14
0
def modbus_devices(register, value):
    c = ModbusClient(host="164.8.11.147", port=502, auto_open=True)
    # regs=c.read_holding_registers(33)
    # print(regs)
    regs = c.write_single_register(register, value)
    regs1 = c.read_holding_registers(register)
    print(regs1)
    def __init__(self, *, queue=None, host='127.0.0.1', timeout=1):
        """
        Set up client.

        ::host:: str - By default client runs on localhost.
        ::port:: int - Port 502 is constant for ModdbusTCP.
        """
        self.queue = queue
        self.host = host
        self.port = 502
        self.timeout = timeout
        self.client = ModbusClient(host=self.host, port=self.port)
        self.func_read_dict = {
            'hr': self.client.read_holding_registers,
            'c': self.client.read_coils,
            'di': self.client.read_discrete_inputs,
            'ir': self.client.read_input_registers,
        }
        self.func_write_dict = {
            'hr': self.client.write_multiple_registers,
            'c': self.client.write_multiple_coils,
        }
        self.registers_dict = {}
        self.reg_current_value = {}
        self.name_stack = []
def modbus_com(SERVER_HOST, SERVER_PORT, function_code, start_register,
               amount_of_registers):
    c = ModbusClient()
    c.host(SERVER_HOST)
    c.port(SERVER_PORT)
    cnt = 0
    while True:
        # open or reconnect TCP to server
        if not c.is_open():
            if not c.open():
                print("unable to connect to " + SERVER_HOST + ":" +
                      str(SERVER_PORT))
        # if open() is ok, read register (modbus function 0x03)
        if c.is_open():
            if function_code == "3":
                # Read the amount_of_registers from start_register
                regs = c.read_holding_registers(int(start_register),
                                                int(amount_of_registers))
                # if success display registers
                if regs:
                    print("reg address" + str(start_register) + "to" + str(
                        int(start_register) + int(amount_of_registers) - 1) +
                          ":" + str(regs))
            elif function_code == "16":
                #Future support
                pass

        cnt += 1
        if cnt >= 2:
            print("クライアント通信終了")
            c.close()
            break
        # sleep 1s before next polling
        time.sleep(1)
示例#17
0
def VICTRON_modbus(Modbus_Device_ID, Modbus_read_address, factor):
    debug = debugVICTRON
    Modbus_Device_IP = "192.168.1.190"
    Modbus_Device_Port = 502
    value = 0.0
    collected = [0]
    collected_array = [0]
    collected_array.pop()
    if debug:
        print("Victron Modbus collecting from ID", Modbus_Device_ID,
              "register", Modbus_read_address)
    try:
        c = ModbusClient(host=Modbus_Device_IP,
                         unit_id=Modbus_Device_ID,
                         port=Modbus_Device_Port,
                         debug=debug)
        c.open()
        collected = c.read_input_registers(Modbus_read_address, 1)
        if debug: print("VICTRON collected from modbus=", collected)
        value = collected[0]
        value = value / factor
        if debug:
            print("Modbus IP=", Modbus_Device_IP, "Modbus ID=",
                  Modbus_Device_ID, "Modbus address=", Modbus_read_address,
                  "Value=", value)
        c.close()
    except:
        print("could not read from SMA Modbus IP=", Modbus_Device_IP,
              "Modbus ID=", Modbus_Device_ID, "Modbus address=",
              Modbus_read_address)
    return value
示例#18
0
 def test_unit_id(self):
     # test valid/invalid cases for debug()
     c = ModbusClient()
     self.assertEqual(c.unit_id(), 1, 'default unit_id is 1')
     self.assertEqual(c.unit_id(42), 42)
     self.assertEqual(c.unit_id(0), 0)
     self.assertEqual(c.unit_id(420), None)
    def __init__(self, modbus_address):
        self.areTopicsAlive = {}
        faultTime = rospy.get_time()

        #Initialise communication with ModbusClient
        adam = ModbusClient(host="192.168.1.3",
                            port=502,
                            auto_open=True,
                            auto_close=False)

        rospy.Subscriber("/1/failures", TopicState, self.callback)
        rospy.Subscriber("/2/failures", TopicState, self.callback)

        #While System has not been shutdown
        while not rospy.is_shutdown():
            #If for some reason the watchdogs or subscription fail tell PLCs
            if len(self.areTopicsAlive.keys()) == 0:
                adam.write_single_coil(int(modbus_address), False)
            #If watch dogs are functioning
            else:
                #Check current state of every topic
                for key in self.areTopicsAlive.keys():
                    #If there is a failure in one of the topics
                    if self.areTopicsAlive[key] == 0:
                        #Set pin to LOW
                        adam.write_single_coil(int(modbus_address), False)
                        faultTime = rospy.get_time()
                        rospy.logerr(
                            "System is not working. Topic %s has failed", key)
                #If there has been no fault for 2 secs set pin back to HIGH
                if rospy.get_time() - faultTime >= 2:
                    adam.write_single_coil(int(modbus_address), True)
            sleep(0.2)
def Collect_Modbus(Collect_Array):
    #todo: add try
    try:
        c = ModbusClient(host=Modbus_Device_IP,
                         unit_id=Modbus_Device_ID,
                         port=Modbus_Device_Port,
                         debug=False)
        c.open()

        for x in range(len(Collect_Array)):
            collected_array = [0]
            collected_array.pop()
            collected = c.read_input_registers(Collect_Array[x][0],
                                               Collect_Array[x][1])
            collected_merged = struct.pack('>HH', collected[0], collected[1])
            collected_array.append(struct.unpack('>i', collected_merged)[0])
            #store_url format : (sensor, description, value, metric, timestamp)
            if collected_array[0] < 100000 and collected_array[0] > -100000:
                store_url("SMA", Collect_Array[x][3], collected_array,
                          Collect_Array[x][2], datetime.now())
                print("SMA", Collect_Array[x][3], collected_array[0],
                      Collect_Array[x][2], datetime.now())
            else:
                store_url("SMA", Collect_Array[x][3], 0, Collect_Array[x][2],
                          datetime.now())
                print("unrealistic value detected set value to 0")

        c.close()
    except:
        print("Could not read from modbus")
    def __init__(self):
        ip = rospy.get_param("/robot_ip")
        self.c = ModbusClient(host=ip,
                              auto_open=True,
                              auto_close=False,
                              port=502,
                              debug=False,
                              unit_id=2)

        rospy.init_node("joint_pos_pub")
        self.p = rospy.Publisher('/joint_states', JointState, queue_size=1)

        name = getpass.getuser()
        f = open(
            '/home/%s/catkin_ws/src/delta/arm_driver/yaml/joint_limits.yaml' %
            name, 'r')
        d = yaml.load(f)
        f.close()

        self.dP = d["PUU_limits"]
        self.dA = d["Angle_limits"]

        self.joint_states = JointState()
        self.joint_states.name = [
            'shoulder', 'elbow', 'wrist1', 'wrist2', 'wrist3', 'wrist4'
        ]
示例#22
0
    def connect(self, ip=None):
        """
Verbinde dich mit einer Heliotherm Wärmepumpe (mit RCG2). Gib dazu die IP-Adresse/den Hostnamen an. Wenn die IP-Adresse schonmal konfiguriert wurde, lasse das Feld einfach leer.
        """
        if ip != None and ip != '' and type(ip) is str:
            self.IP_Adresse = ip
            self.savePersistentVariable('IP_Adresse', self.IP_Adresse)
        self.info('Connecting with {}'.format(self.IP_Adresse))
        if not self._connected:
            try:
                self.setPerpetualTimer(self._readModbusRegisters, samplerate=self.samplerate)
                self._c = ModbusClient(host=self.IP_Adresse, port=self.Port, auto_open=True, auto_close=True)
                if self._c is None:
                    self.error('Could not connect with {}'.format(self.IP_Adresse))
                    self.status = 'Could not connect with {}'.format(self.IP_Adresse)
                    return False
                self._c.timeout(10)
                self.status = 'Trying to connect...'
                self.start()
                self._connected = True
                return True
            except Exception as e:
                self.error('Could not connect with {}:\n{}'.format(self.IP_Adresse, e))
                self.status = 'Could not connect with {}:\n{}'.format(self.IP_Adresse, e)
                return False
        else:
            self.status = 'Already connected. Disconnect first'
            return False
示例#23
0
 def modbus_request(self, progress_callback):
     c = ModbusClient(host="localhost", auto_open=False)
     connection_ok = c.open()
     if connection_ok:
         try:
             self.holding_registers = c.read_holding_registers(0, 3)
             print(self.holding_registers)
             regs = [
                 int(10 * self.tcurrinsp.value()),
                 int(10 * self.tcurrexp.value()),
                 int(10 * self.currpress.value())
             ]
             c.write_multiple_registers(3, regs)
             print(regs)
             c.close()
         except:
             print("modbus exception")
             pass
         else:
             print("other")
             pass
         finally:
             #print("passed")
             pass
     else:
         print("could not open")
         pass
示例#24
0
 def read_all_tags(self):
     try:
         c = ModbusClient(host="192.168.2.11", port=502, debug=False)
         c.open()
         
         for name, tag in self.tag_db.items():
             mb0 = tag['modbus_start'] -1
             mb1 = tag['modbus_stop'] -1
             size = 1+mb1-mb0
             #print(name, mb0, mb1, size)
             #print(tag)
             if 0 <= mb0 < 100000:
                 val = c.read_coils(mb0)[0]
             elif 100000 <= mb0 < 200000:
                 val = c.read_discrete_inputs(mb0-100000)[0]
             elif 300000 <= mb0 < 400000:
                 val = c.read_input_registers(mb0-300000,  size)
                 if size == 1: val = val[0]
                 elif size == 2:
                     val = utils.word_list_to_long(val, big_endian=False)[0]
             elif 400000 <= mb0 < 500000:
                 val = c.read_holding_registers(mb0-400000,  size )
                 if size == 1: val = val[0]
                 elif size == 2:
                     val = utils.word_list_to_long(val, big_endian=False)[0]
             
             if tag['dtype'] == 'float32':
                 val = utils.decode_ieee(val)
             
             #print(name, val)
             self.settings[name] = val
                 
     except Exception as err:
         print("Error in read_all_tags", err)
         c.close()        
示例#25
0
文件: app.py 项目: shtir/W106-config
 def __init__(self, address, port):
     c = ModbusClient()
     c.host(address)
     c.port(port)
     c.unit_id(1)
     c.open()
     data = c.read_holding_registers(130, 12)
     self.data=data
     c.close()
     if data:
         self.LowT1Start = format(data[0], 'x')
         self.LowT1Stop = format(data[1], 'x')
         self.LowT2Start = format(data[2], 'x')
         self.LowT2Stop = format(data[3], 'x')
         
         self.NormT1Start = format(data[4], 'x')
         self.NormT1Stop = format(data[5], 'x')
         self.NormT2Start = format(data[6], 'x')
         self.NormT2Stop = format(data[7], 'x')
         self.PeakT1Start = format(data[8], 'x')
         self.PeakT1Stop = format(data[9], 'x')
         self.PeakT2Start = format(data[10], 'x')
         self.PeakT2Stop = format(data[11], 'x')
     else:
         print("Read Volt And Amper ERROR")
示例#26
0
 def baglan(self):
     self.c = ModbusClient(host=self.host,
                           unit_id=1,
                           timeout=self.timeout,
                           auto_open=True,
                           auto_close=True,
                           port=self.port)
 def __init__(self):
     # self.host = input("请输入IP地址:")
     # self.port = int(input("请输入端口号:"))
     # self.username = input("请输入用户名:")
     # self.password = input("请输入密码:")
     self.host = "192.168.1.30"
     self.port = 2121
     self.username = "******"
     self.password = "******"
     self.remote_path = "/data/mgrid/sampler/modbus_map.xml"
     self.__file = "./modbus_map.xml"
     self.__old_str = "&"
     self.__new_str = "-"
     self.equipid_list = []
     self.sigid_list = []
     self.reg_addr_list = []
     self.name_list = []
     self.__client = ModbusClient(host=self.host,
                                  port=502,
                                  debug=True,
                                  auto_open=True)
     self.__address = 0
     self.__register = 50
     self.i = 0
     self.__conn = connect(host='localhost',
                           port=3306,
                           database="MOTTA_data",
                           user="******",
                           password="******",
                           charset="utf8")
     self.__cur = self.__conn.cursor()
     self.float_data = []  # 检测获取到的数据
示例#28
0
def connect_to_UR():
    global modbus_conn
    modbus_conn = ModbusClient(host="192.168.153.136",
                               port=502,
                               auto_open=True)
    # modbus_conn = ModbusClient(host="192.168.1.19", port=502, auto_open=True)
    print("connected to UR modbus")
示例#29
0
    def __init__(self, host):
        self.client = ModbusClient(host=host, auto_open=True, auto_close=False)
        #self.client.debug(True)
        logger.info("Connecting to %s", self.client.host())

        status = self.check_status()
        if status & 1<<15:
            # Watchdog ellapsed, try to reset
            logger.info("Resetting watchdog")
            self.client.write_single_register(0x1121, 0xbecf)
            self.client.write_single_register(0x1121, 0xaffe)

        # Disable the watchdog, if enabled
        watchdog_timeout = self.client.read_holding_registers(0x1120)[0]
        if watchdog_timeout > 0:
            logger.debug("Watchdog timeout: %d", watchdog_timeout)
            logger.info("Disabling watchdog")
            self.client.write_single_register(0x1120, 0)

        (self.num_outputs, self.num_inputs) = self.client.read_holding_registers(0x1012, 2)
        logger.info("Number of outputs: %d", self.num_outputs)
        logger.info("Number of inputs: %d", self.num_inputs)
        self.client.close()
        # We use auto close for all subsequent calls after initialization
        self.client.auto_close(True)
示例#30
0
def routineLoop():
    global ac, dados, off

    for i in ip:  #Entra na lista de ip's
        for x in add[ip.index(i)]:  #entra na lista de endereços
            ac = ModbusClient(host=i, auto_open=True, unit_id=x)
            readTemp = ac.read_input_registers(
                0)  #Leitura da temperatura lida pelo ac
            dados = ac.read_holding_registers(2, 26)
            if bool(readTemp
                    ) == False:  #Se o valor for falso pula para o próximo ac
                break
            if dados[0] == 0: off = 1
            else: off = 0
            resposta = connect(
                off, int(readTemp[0]), str(i), str(x), str(dados[1]),
                str(dados[3]),
                str(dados[2]))  #Envia os dados para API e recebe a resposta
            resposta = json.loads(resposta)
            print('Recebido: ' + str(resposta))
            decisao = decision(dados, resposta)
            d = datetime.now()
            print(decisao + " | " + str(d.hour) + ":" + str(d.minute) + ":" +
                  str(d.second))
            ac.close()