示例#1
2
class ModbusClientRS:
    def __init__(self):
        self.client = ModbusClient()

    def writeRegister(self, address, value):
        if self.client.is_open():
            return self.client.write_single_register(address, value)
        return None

    def readRegister(self, address, value):
        if self.client.is_open():
            self.client.read_holding_registers(address, value)

    def connect(self, host, port):
        # self.client.debug(True)
        self.client.host(SERVER_HOST)
        self.client.port(SERVER_PORT)

        if not self.client.is_open():
            if not self.client.open():
                print("unable to connect to " + SERVER_HOST + ":" + str(SERVER_PORT))

    def is_open(self):
        return self.client.is_open()

    def disconnect(self):
        return self.client.close()
 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)
示例#3
1
文件: modbus.py 项目: jiangce/tglib
class Modbus:
    def __init__(self, host, port, unit):
        self.client = ModbusClient(host, port, unit, timeout=3)

    def __enter__(self):
        self.client.open()
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.client.close()

    def toFloat(self, ushorts):
        bs = struct.pack('H', ushorts[0]) + struct.pack('H', ushorts[1])
        return struct.unpack('f', bs)

    def openConnect(self):
        try:
            if not self.isOpen:
                self.client.open()
        except:
            self.closeConnect()

    def closeConnect(self):
        self.client.close()

    @property
    def isOpen(self):
        return self.client.is_open()

    def getValue(self, addr):
        return self.toFloat(self.client.read_holding_registers(addr, 2))[0]

    def getValues(self, tags):
        return [(tag, self.getValue(tag)) for tag in tags]
示例#4
1
 def setUp(self):
     # modbus server
     self.server = ModbusServer(port=5020, no_block=True)
     self.server.start()
     # modbus client
     self.client = ModbusClient(port=5020)
     self.client.open()
示例#5
1
def test():
    c = ModbusClient()
    # uncomment this line to see debug message
    # c.debug(True)
    # define modbus server host, port
    c.host(SERVER_HOST)
    c.port(SERVER_PORT)
    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():
            print c.write_single_register(504, intToUint16(-216))

        # sleep 2s before next polling
        time.sleep(2)
示例#6
0
    def __enter__(self):
        # Create a ModbusTCP connection to be used for all our requests
        try:
            self._conn = ModbusClient(host=self._host,
                                      port=self._port,
                                      unit_id=self._unit_id,
                                      timeout=self._timeout,
                                      debug=self._debug,
                                      auto_open=False,
                                      auto_close=False)
        except Exception:
            logger.exception(
                "Attempting to create ModbusTCP client raised exception:")
            raise

        try:
            # Make sure we have an open connection to device
            if self.__open_connection(self._conn_retry):
                logger.debug(
                    f"Opened ModbusTCP connection to {self._host}:{self._port}/{self._unit_id}"
                )
            else:
                logger.error(
                    f"Unable to open ModbusTCP connection to {self._host}:{self._port}/{self._unit_id}"
                )
                return None
        except Exception:
            logger.error(
                "Exception while attempting to open ModbusTCP connection:")
            raise

        return self
示例#7
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))
示例#8
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)
示例#9
0
    def polling_thread(self):
        self.client = ModbusClient(host=SERVER_HOST, port=SERVER_PORT)
        isOpen = False
        # polling loop
        while True:
            # keep TCP open
            if not self.client.is_open():
                print("unable to connect to " + SERVER_HOST + ":" +
                      str(SERVER_PORT))
                self.client.open()

            if self.client.is_open():
                if not isOpen:
                    print("connected to " + SERVER_HOST + ":" +
                          str(SERVER_PORT))
                    isOpen = True

            # do modbus reading on socket
            reg_list = self.client.read_holding_registers(0, 10)
            # if read is ok, store result in regs (with thread lock synchronization)
            if reg_list:
                with regs_lock:
                    self.regList = list(reg_list)
            # 1s before next polling
            time.sleep(0.2)
示例#10
0
    def __init__(self, ip):
        self.host = ip
        self.port = 2121
        self.username = "******"
        self.password = "******"
        self.localpath = "./"
        self.modbus_xml = "/data/mgrid/sampler/modbus_map.xml"
        self.XmlCfg_ftp_path = "/data/mgrid/sampler/XmlCfg"

        self.__old_str = "&"
        self.__new_str = "-"

        # self.__client = ModbusClient(host=self.host, port=502)
        self.__client = ModbusClient(host=self.host, port=502, debug=True)
        self.modbus_map_list = []  # 存储modbus_map_list表数据[{},{},{}...]
        self.MonitorUnitVTU = []  # 存储MonitorUnitVTU表数据[{},{},{}...]

        self.__conn = connect(host='localhost',
                              port=3306,
                              database="MOTTA_data",
                              user="******",
                              password="******",
                              charset="utf8")
        self.__cur = self.__conn.cursor()

        self.__address = 0
        self.__register = 1
        self.i = 0

        self.ftp = None  # 设置self.ftp=None的时候 ftp才能自动重新连接上
示例#11
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)
示例#12
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'))
示例#13
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()        
 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 = []  # 检测获取到的数据
示例#15
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"
        })
示例#16
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):
        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'
        ]
示例#18
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"]))
示例#19
0
 def __init__(self, ip, system, port=502):
     self.c = ModbusClient(host=ip, port=502, auto_open=True)
     self.c.host(ip)
     self.c.port(port)
     self.c.open()
     self.system = system
     print("opened")
    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 = []
示例#21
0
class kulucka:
    def __init__(self):
        self.bekle = 1
        self.host = "212.154.74.164"
        self.port = 502
        self.timeout = 2000
        self.c = None
        self.sonuc = {}

    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 main(self):
        self.c.open()
        regs = self.c.read_holding_registers(12288, 6)
        if regs:
            self.parse(regs)
        else:
            print("read error")
        self.c.close()

    def parse(self, regs):
        k = 1
        for i in range(0, len(regs), 2):
            sicaklik = regs[i] / 10
            nem = regs[i + 1] / 10
            self.sonuc["kulucka" + str(k)] = {"sicaklik": sicaklik, "nem": nem}

            k += 1
        print()
 def setUp(self):
     # modbus server
     self.server = ModbusServer(port=5020, no_block=True)
     self.server.start()
     # modbus client
     self.client = ModbusClient(port=5020)
     self.client.open()
示例#23
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
示例#24
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
示例#25
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 = []
示例#26
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")
示例#27
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)
示例#28
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')
示例#29
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)
示例#30
0
 def __init__(self, wbu_ip):
     self.wbu_ip = wbu_ip
     self.wbu_conn_handle = None  # the handle made within the connection upon making the connection
     try:
         self.wbu_conn = ModbusClient(host=wbu_ip, port=502)
     except Error as e:
         logging.error(f"unable to make the connection to WBU: {e}")
         sys.exit()
示例#31
0
class Traffic:
    beschikbaar = 0

    adress = 0
    rood_aan = 0b000100
    geel_aan = 0b001000
    groen_aan = 0b010000
    gedoofd = 0b000000

    time1 = time.time()

    def __init__(self):
        self.stand = 3
        self.c = ModbusClient(host="192.168.3.135", port=502, auto_open=True)

    def getStatus(self):
        return self.beschikbaar

    def setStand(self, modus):
        self.stand = modus

    def update_light(self):
        if self.stand == 3:
            self.c.write_single_register(self.adress, self.rood_aan)
        elif self.stand == 1:
            self.c.write_single_register(self.adress, self.geel_aan)
        elif self.stand == 0:
            self.c.write_single_register(self.adress, self.groen_aan)
        elif self.stand == 4:
            self.c.write_single_register(self.adress, self.gedoofd)

    def afsluiten(self):
        while 1:
            time2 = time.time() - self.time1
            if time2 < 3:
                self.setStand("geel_knipperen")
            elif 6 > time2 > 3:
                self.setStand("geel")
            elif time2 > 6:
                self.setStand("rood")
                break

    def normaal(self):
        while 1:
            time2 = time.time() - self.time1
            if time2 < 3:
                self.setStand(2)  #rood
            elif 13 > time2 > 3:
                self.setStand(0)  #groen
            elif time2 > 13:
                self.setStand(4)
                break

    def checkError(self):
        if (self.c.close()):
            beschikbaar = 0
        elif (self.c.open()):
            beschikbaar = 1
示例#32
0
 def setUp(self):
     # modbus server
     self.server = ModbusServer(port=TestClientServer.port, no_block=True)
     self.server.start()
     # modbus client
     self.client = ModbusClient(port=TestClientServer.port)
     self.client.open()
     # to prevent address taken errors
     TestClientServer.port += 1
示例#33
0
def testPCL():
    c = ModbusClient(host=getIpPLC(), port=getPortPLC(), auto_open=True)
    print(c)
    is_ok = c.write_single_coil(0, 1)
    print(is_ok)
    if is_ok:
        return "is ok"
    else:
        return "is not ok"
示例#34
0
def doTest():
    # TCP auto connect on modbus request, close after it
    c = ModbusClient(host="192.168.1.1", auto_open=True, auto_close=True)

    regs = c.read_holding_registers(0, 100)
    if regs:
        print(regs)
    else:
        print("read error")
示例#35
0
 def __init__(self):
     rospy.init_node("RobotArm")
     ip = rospy.get_param("/robot_ip")
     self.resetService = rospy.Service('/reset_robot', reset_errors, self.resetErrors)
     self.powerService = rospy.Service('/power_robot', power, self.powerCallback)
     self.teachService = rospy.Service("/teach_position", teach_position, self.teachCurrentToolPose)
     self.c = ModbusClient(host=ip, auto_open=True, auto_close=False, port=502, debug=False, unit_id=2)
     self.bits = 0
     self.name = getpass.getuser()
示例#36
0
def polling_thread():
    global regs
    c = ModbusClient(host=SERVER_HOST, port=SERVER_PORT)
    # polling loop
    while True:
        # keep TCP open
        if not c.is_open():
            c.open()
        # do modbus reading on socket
        reg_list = c.read_holding_registers(0, 10)
        # if read is ok, store result in regs (with thread lock synchronization)
        if reg_list:
            with regs_lock:
                regs = list(reg_list)
        # 1s before next polling
        time.sleep(1)
示例#37
0
 def connect(self):
     self.modbus_c = ModbusClient()
     self.modbus_c.host(self.client_host)
     self.modbus_c.port(self.client_port)
     if not self.modbus_c.is_open():
         if not self.modbus_c.open():
             text="unable to connect to " + self.client_host + ":" + str(self.client_port)
             print(text)
示例#38
0
def polling_thd():
    global regs, cycle_count, good_count, error_count
    c = ModbusClient(host='localhost', auto_open=True)
    # polling loop
    while True:
        # do modbus reading on socket
        reg_list = c.read_holding_registers(0, len(regs))
        # if read is ok, store result in regs (with thread lock synchronization)
        with regs_lock:
            cycle_count += 1
            if reg_list:
                regs = list(reg_list)
                good_count += 1
            else:
                regs = [None] * 5
                error_count += 1
        # 1.0s before next polling
        time.sleep(1.0)
示例#39
0
def polling_thread():
    global regs, poll_cycle
    c = ModbusClient(host=args.host, port=args.port, unit_id=args.unit_id)
    # polling loop
    while True:
        # keep TCP open
        if not c.is_open():
            c.open()
        # do modbus reading on socket
        reg_list = c.read_holding_registers(20610,20)
        # if read is ok, store result in regs (with thread lock synchronization)
        with regs_lock:
            if reg_list:
                regs = list(reg_list)
                poll_cycle += 1
            else:
                poll_cycle = 0
        # 1s before next polling
        time.sleep(0.2)
示例#40
0
 def __init__(self):
     self.lock = RLock()
     self.calibgui = None
     self.client = ModbusClient()
     self.register_values_widgets = {}
     self.counter = 1
     self.find_thread = None
     self.obj_data = None
     self.stop_signal = False
     self.__build_ui()
示例#41
0
def reader(worker, job):
    c = ModbusClient(host="localhost", port=502)

    if not c.is_open() and not c.open():
        print("unable to connect to host")

    if c.is_open():

        holdingRegisters = c.read_holding_registers(1, 4)

        # Imagine we've "energy" value in position 1 with two words
        energy = (holdingRegisters[0] << 16) | holdingRegisters[1]

        # Imagine we've "power" value in position 3 with two words
        power = (holdingRegisters[2] << 16) | holdingRegisters[3]

        out = {"energy": energy, "power": power}
        return json.dumps(out)
    return None
示例#42
0
 def test_host(self):
     # test valid/invalid cases for host()
     c = ModbusClient()
     self.assertEqual(c.host(), 'localhost', 'default host is localhost')
     self.assertEqual(c.host('wrong@host'), None)
     self.assertEqual(c.host('my.good.host'), 'my.good.host')
     self.assertEqual(c.host('127.0.0.1'), '127.0.0.1')
     self.assertEqual(c.host('::1'), '::1')
示例#43
0
 def test_host(self):
     # test valid/invalid cases for host()
     c = ModbusClient()
     self.assertEqual(c.host(), "localhost", "default host is localhost")
     self.assertEqual(c.host("wrong@host"), None)
     self.assertEqual(c.host("my.good.host"), "my.good.host")
     self.assertEqual(c.host("127.0.0.1"), "127.0.0.1")
     self.assertEqual(c.host("::1"), "::1")
示例#44
0
 def __init__(self, smarthome, gateway_ip, gateway_port=502, gateway_id=1, update_cycle=60):
     logger.info("Modbus: init plugin")
     self._sh = smarthome
     self._gateway_id = int(gateway_id)
     self._update_cycle = int(update_cycle)
     self._keylist = {}
     #self._client = ModbusTcpClient(gateway_ip,port=gateway_port)
     self._client = ModbusClient(host=gateway_ip, port=gateway_port, auto_open=True, auto_close=True)
     self._client.unit_id(2)
     self._client.debug(True)
     if not self._client.is_open():
         if not self._client.open():
             logger.error("Modbus: connection to gateway can not be established")
         else:
             logger.info("Modbus: connection to gateway established")
             self._client.close()
示例#45
0
    def connect(self):
        """ (re-) establish a connection to the device. """

        if self.dev is None:
            self.dev = ModbusClient()
            self.dev.debug(self.debug)
            self.dev.host(self.host)
            self.dev.port(self.port)

        if self.dev.is_open():
            return True

        ret = self.dev.open()
        if not ret:
            raise RuntimeError("failed to connect to %s:%s" % (self.host,
                                                               self.port))

        return True
示例#46
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 = []
        for sensor in self._config.get('sensors', []):
            if 0 <= sensor['sensor_id'] < 32:
                self._sensors.append(sensor)
        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'))
示例#47
0
class TestClientServer(unittest.TestCase):

    def setUp(self):
        # modbus server
        self.server = ModbusServer(port=5020, no_block=True)
        self.server.start()
        # modbus client
        self.client = ModbusClient(port=5020)
        self.client.open()

    def tearDown(self):
        self.client.close()

    def test_read_and_write(self):
        # word space
        self.assertEqual(self.client.read_holding_registers(0), [0], 'Default value is 0 when server start')
        self.assertEqual(self.client.read_input_registers(0), [0], 'Default value is 0 when server start')
        # single read/write
        self.assertEqual(self.client.write_single_register(0, 0xffff), True)
        self.assertEqual(self.client.read_input_registers(0), [0xffff])
        # multi-write at max size
        words_l = [randint(0, 0xffff)] * 0x7b
        self.assertEqual(self.client.write_multiple_registers(0, words_l), True)
        self.assertEqual(self.client.read_holding_registers(0, len(words_l)), words_l)
        self.assertEqual(self.client.read_input_registers(0, len(words_l)), words_l)
        # write over sized
        words_l = [randint(0, 0xffff)] * 0x7c
        self.assertEqual(self.client.write_multiple_registers(0, words_l), None)
        # bit space
        self.assertEqual(self.client.read_coils(0), [False], 'Default value is False when server start')
        self.assertEqual(self.client.read_discrete_inputs(0), [False], 'Default value is False when server start')
        # single read/write
        self.assertEqual(self.client.write_single_coil(0, True), True)
        self.assertEqual(self.client.read_coils(0), [True])
        self.assertEqual(self.client.read_discrete_inputs(0), [True])
        # multi-write at min size
        bits_l = [getrandbits(1)] * 0x1
        self.assertEqual(self.client.write_multiple_coils(0, bits_l), True)
        self.assertEqual(self.client.read_coils(0, len(bits_l)), bits_l)
        self.assertEqual(self.client.read_discrete_inputs(0, len(bits_l)), bits_l)
        # multi-write at max size
        bits_l = [getrandbits(1)] * 0x7b0
        self.assertEqual(self.client.write_multiple_coils(0, bits_l), True)
        self.assertEqual(self.client.read_coils(0, len(bits_l)), bits_l)
        self.assertEqual(self.client.read_discrete_inputs(0, len(bits_l)), bits_l)
        # multi-write over sized
        bits_l = [getrandbits(1)] * 0x7b1
        self.assertEqual(self.client.write_multiple_coils(0, bits_l), None)
示例#48
0
class AmpSwitch(object):
    def __init__(self, host, port=502, switches=(), debug=False):
        """ """

        self.host = host
        self.port = port
        self.debug = debug
        self.switches = switches

        self.dev = None

        self.connect()

    def __str__(self):
        return "AmpSwitch(host=%s, port=%s, dev=%s>" % (self.host,
                                                        self.port,
                                                        self.dev)
    def setDebug(self, state):
        self.debug = state
        self.connect()
        
    def close(self):
        if self.dev is not None:
            self.dev.close()
            self.dev = None

    def connect(self):
        """ (re-) establish a connection to the device. """

        if self.dev is None:
            self.dev = ModbusClient()
            self.dev.debug(self.debug)
            self.dev.host(self.host)
            self.dev.port(self.port)

        if self.dev.is_open():
            return True

        ret = self.dev.open()
        if not ret:
            raise RuntimeError("failed to connect to %s:%s" % (self.host,
                                                               self.port))

        return True

    def readCoils(self):
        """ Return the state of all our switches. """

        self.connect()

        regs = self.dev.read_coils(0, 16)
        return regs

    def setCoils(self, on=(), off=()):
        """Turn on and off a given set of switches. 

        Argunents
        ---------

        on, off : list-like, or a single integer.

        Notes:
        ------

        The off set is executed first. . There is a command to change
        all switchees at once, but I have not made it work yet.

        """
        self.connect()

        if isinstance(on, int):
            on = on,
        if isinstance(off, int):
            off = off,

        regs0 = self.readCoils()
        regs1 = regs0[:]
        for c in off:
            ret = self.dev.write_single_coil(c, False)
            regs1[c] = False
        for c in on:
            ret = self.dev.write_single_coil(c, True)
            regs1[c] = True
        
        # ret = self.dev.write_multiple_registers(0, regs1)
        ret = self.readCoils()
        return ret

    def chooseCoil(self, n):
        return self.setCoils(on=n, off=list(range(16)))
示例#49
0
DEF_ID_ADDR = 26754

# parse args
parser = argparse.ArgumentParser()
parser.add_argument('ip_rtu', type=str,
                    help='RTU IPv4 address (like 127.0.0.1)')
parser.add_argument('-p', '--port_rtu', type=int, default=502,
                    help='RTU port (default is %d)' % DEF_MB_PORT)
parser.add_argument('id_str', type=str,
                    help='ID string')
parser.add_argument('-a', '--id_addr', type=int, default=DEF_ID_ADDR,
                    help='ID address (default is %d)' % DEF_ID_ADDR)
args = parser.parse_args()

# init modbus client
c = ModbusClient(host=args.ip_rtu, port=args.port_rtu)

# open TCP link
if not c.open():
    print("unable to connect to " + args.ip_rtu + ":" + str(args.port_rtu))
    sys.exit(1)

# format id list (8 chars max)
id_list = [ord(x) for x in args.id_str.ljust(8)][:8]

# do modbus write
print('write ID %s at @%d' % (id_list, args.id_addr))
regs = c.write_multiple_registers(args.id_addr, id_list)

# print status
if regs:
示例#50
0
class modBusWriteRead():
    def __init__(self,client_host):
        self.client_host = client_host
        self.client_port = 502
        self.err_list = []
        self.connect() #buradan bağlantı yapılacak;

    def connect(self):
        self.modbus_c = ModbusClient()
        self.modbus_c.host(self.client_host)
        self.modbus_c.port(self.client_port)
        if not self.modbus_c.is_open():
            if not self.modbus_c.open():
                text="unable to connect to " + self.client_host + ":" + str(self.client_port)
                print(text)

    def write_data_reg(self,address,list):
        if self.modbus_c.open():
            if len(list)>120:
                sent_list = self.hazirla_dizi_to_write(list)
                i = 0
                hedef_reg_taban = address
                for list_to_sent in sent_list:
                    hedef_reg = hedef_reg_taban + (i * 120)
                    a = self.modbus_c.write_multiple_registers(hedef_reg, list_to_sent)
                    if a == None or a == False:
                        self.err_list.append(False)
                    i += 1
            else:
                a = self.modbus_c.write_multiple_registers(address, list)
                if a == None or a == False:
                    self.err_list.append(False)
        if len(self.err_list) > 0:
            self.err_list = []
            pass
            # dikkat
            # print("data göndermede hata oluştu, tekrar deneyin !")

    def hazirla_dizi_to_write(self,d_list):
        # eğer gönderilecek değer 120 den büyük ise aşağıdaki fonksiyon 120 lik diziler döndürüyor
        r_list = []
        g_list = []
        i = 0
        for index in range(len(d_list)):
            g_list.append(d_list[index])
            i += 1
            if i > 119:
                i = 0
                r_list.append(g_list)
                g_list = []
            if (len(d_list) - 1) == index and i < 119:
                r_list.append(g_list)
        return r_list

    def read_data_reg(self,address,reg_count,read_float=False ):
        # burada 16 lık ya da float olarak okunabiliyor
        if self.modbus_c.is_open():
            if read_float == False:
                plc_list_int = self.modbus_c.read_holding_registers(address, reg_count)
                return plc_list_int
            elif read_float == True:
                plc_list_f_16=self.modbus_c.read_holding_registers(address,reg_count)
                if plc_list_f_16 is not None:
                    plc_list_float=self.long_to_float(plc_list_f_16)
                    return plc_list_float

    def long_to_float(self,list_16):
        list_float=[]
        list_16.reverse()
        list_long=utils.word_list_to_long(list_16)
        for any_long in list_long:
            list_float.append(utils.decode_ieee(any_long))
        list_float.reverse()
        return list_float
示例#51
0
from __future__ import division
import atexit
import time
import sys
from math import *
from multiprocessing import *
from mpu6050_process_1 import MPU6050_Process_1
from mpu6050_process_2 import MPU6050_Process_2
from pyModbusTCP.client import ModbusClient

with Manager() as manager:

    # Open a modbus client
    try:
        c = ModbusClient(host="140.116.82.50", port=7654)
    except ValueError:
        print("Error with host or port params")
    c.open()
    is_ok = c.write_single_register(0, 1)
    if not is_ok:
        print("open error")
        c.open()

    def exit_handler():
        is_ok = c.write_multiple_registers(0, [0, 0, 0, 0, 0])
        c.close()

    # registing exit handler
    atexit.register(exit_handler)
示例#52
0
 def __init__(self):
     self.client = ModbusClient()
示例#53
0
        print("\nWrote Register")
        time.sleep(0.5)


if __name__ == "__main__":

    host = input("\nPlease enter IP address [127.0.0.1]: ")
    port = input("Please enter port [502]: ")

    if not host:
        host = "172.16.143.146"

    if not port:
        port = 502

    c = ModbusClient(timeout=5)
    c.host(host)
    c.port(port)

    for attempt in range(3):
        print("\nTrying to connect to " + host + ":" + str(port) + "...   Attempt " + str(attempt+1))
        if c.open():
            print("\nSuccessful Connection")
            failedconnection =  False
            time.sleep(0.5)
            choice = ""
            while choice != "q":
                choice = input("\nPress \n[r] to Read  \n[w] to Write \n[q] to Quit: ")
                if choice == "r":
                    print("\nChose Read")
                    read_regs()
示例#54
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# write_bit
# write 4 bits to True, wait 2s, write False, restart...

from pyModbusTCP.client import ModbusClient
import time

SERVER_HOST = "localhost"
SERVER_PORT = 502

c = ModbusClient()

# uncomment this line to see debug message
#c.debug(True)

# define modbus server host, port
c.host(SERVER_HOST)
c.port(SERVER_PORT)

toggle = True

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, write coils (modbus function 0x01)
    if c.is_open():
示例#55
0
 def test_port(self):
     # test valid/invalid cases for port()
     c = ModbusClient()
     self.assertEqual(c.port(), 502, 'default modbus/TCP port is 502')
     self.assertEqual(c.port(-1), None)
     self.assertEqual(c.port(42), 42)
示例#56
0
 def test_debug(self):
     # test valid/invalid cases for debug()
     c = ModbusClient()
     self.assertEqual(c.debug(), False, 'debug default is off')
     self.assertEqual(c.debug(False), False)
     self.assertEqual(c.debug(True), True)
示例#57
0
文件: modbus.py 项目: jiangce/tglib
 def __init__(self, host, port, unit):
     self.client = ModbusClient(host, port, unit, timeout=3)
示例#58
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time

# min_read_bit
# minimal code for read 10 bits on IPv4 192.168.0.200 and print result on stdout

from pyModbusTCP.client import ModbusClient
c = ModbusClient(host="192.168.0.200", auto_open=True)

while True:
    # read 10 bits at address 20480
    bits = c.read_coils(20480, 10)
    print("bit ad #0 to 9: "+str(bits) if bits else "read error")
    # sleep 2s
    time.sleep(2)
示例#59
0
from pyModbusTCP.client import ModbusClient

import time

if __name__ == "__main__":

    host = input("\nPlease enter IP address [127.0.0.1]: ")
    port = input("Please enter port [502]: ")

    if not host:
        host = "172.16.143.146"

    if not port:
        port = 502

    c = ModbusClient(timeout=5)
    c.host(host)
    c.port(port)

    print("\nTrying to connect to " + host + ":" + str(port))

    if c.open():
        print("Opened")

    print(c.is_open())

    if c.close():
        print("Closed")

    print(c.is_open())
示例#60
0
from pyModbusTCP.client import ModbusClient
import time

SERVER_HOST = "192.168.0.104"
SERVER_PORT = 502

c = ModbusClient()

# uncomment this line to see debug message
#c.debug(True)

# define modbus server host, port
c.host(SERVER_HOST)
c.port(SERVER_PORT)

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():
        print c.write_single_register(544, 220)

    # sleep 2s before next polling
    time.sleep(2)