Beispiel #1
0
def ModSvrFactory(args):
    """ modFactory : rtu or tcp server holding several slaves """

    logger = logging.getLogger("modbus_tk")

    _svr = None

    if args[0]=='-tcp':
        logger.info("Build TCP Server - {0}:{1}".format(args[2],args[1]))
        try :
            # remove extra zeros from ip addr
            _ip = args[2]
            _ip = _ip.split('.')
            _ip = str(int(_ip[0])) + "." + str(int(_ip[1])) + "." + str(int(_ip[2])) + "." + str(int(_ip[3]))
            _svr = modbus_tcp.TcpServer(int(args[1]), _ip)
        except Exception as err:
            logger.error("Error while building TCP Server : {0}".format(err))
    elif args[0]=='-rtu':
        logger.info("Build RTU Server - Port: {0}, Baudrate: {1}, Bytesize: {2}, Parity: {3}, Stopbits : {4}"
                    .format(args[1],args[2],args[3],args[4],args[5]))
        try:
            _svr = modbus_rtu.RtuServer(serial.Serial(port=args[1],
                                                        baudrate=int(args[2]),
                                                        bytesize=int(args[3]),
                                                        parity=args[4],
                                                        stopbits=float(args[5]),
                                                        xonxoff=0))
        except Exception as err:
            logger.error("Error while building RTU Server : {0}".format(err))
    else:
        logger.error("Wrong arguments")

    return _svr
Beispiel #2
0
def main():
    """main"""
    logger = modbus_tk.utils.create_logger(name="console",
                                           record_format="%(message)s")

    #Create the server
    server = modbus_rtu.RtuServer(serial.Serial(PORT))

    try:
        logger.info("running...")
        logger.info("enter 'quit' for closing the server")

        server.start()

        slave_1 = server.add_slave(1)
        slave_1.add_block('0', cst.HOLDING_REGISTERS, 0, 100, data_format=">b")
        while True:
            cmd = sys.stdin.readline()
            args = cmd.split(' ')

            if cmd.find('quit') == 0:
                sys.stdout.write('bye-bye\r\n')
                break

    finally:
        server.stop()
Beispiel #3
0
def main():
    try:
        logger = modbus_tk.utils.create_logger(name="console",
                                               record_format="%(message)s")

        config = configuration.load()

        ser = init_serial(config)

        server = modbus_rtu.RtuServer(ser)
        server.start()

        slaves.create(server, logger)

        while True:
            try:
                time.sleep(1)
            except Exception as e:
                print(e)
                break
    except Exception as e:
        print(e)
    finally:
        ser.close()
        server.stop()
        logger.error('Slave stopped.')
 def _get_server(self):
     port = serial.Serial(port=SERVER_PORT,
                          baudrate=9600,
                          bytesize=8,
                          parity='N',
                          stopbits=1,
                          xonxoff=0)
     server = modbus_rtu.RtuServer(port)
     #server.set_verbose(True)
     return server
def main():
    print("Creating modbus server")
    port = functions.get_port("Modbus Server Port")
    con = serial.Serial(port=port,
                        baudrate=57600,
                        bytesize=8,
                        parity='N',
                        stopbits=1,
                        xonxoff=0)
    server = modbus_rtu.RtuServer(con)
    server.set_timeout(0.1)
    server.set_verbose(False)

    print("Starting Server on port: " + port)
    server.start()

    print("Adding Slave")
    slave1 = server.add_slave(1)

    print("Adding Blocks")
    n = 2
    slave1.add_block("c", cst.COILS, 0, n)
    slave1.add_block("d", cst.DISCRETE_INPUTS, 0, n)
    slave1.add_block("b", cst.HOLDING_REGISTERS, 0, n)

    print("Running Server\n")
    time.sleep(1)

    try:
        t_start = time.time()
        signal = WaveSignal()

        while True:
            t = time.time() - 0
            new_signal = signal.get_signal(t)
            slave1.set_values("b", 0x00, new_signal)
            print(new_signal)

            time.sleep(0.1)

    except KeyboardInterrupt as e:
        print(e)

    finally:
        print("Stopping server.")
        server.stop()
Beispiel #6
0
def main():
    """main"""
    logger = modbus_tk.utils.create_logger(name="console",
                                           record_format="%(message)s")

    #Create the server
    server = modbus_rtu.RtuServer(serial.Serial(PORT))

    try:
        logger.info("running...")
        logger.info("enter 'quit' for closing the server")

        server.start()

        slave_1 = server.add_slave(1)
        slave_1.add_block('0', cst.HOLDING_REGISTERS, 0, 100)
        while True:
            cmd = sys.stdin.readline()
            args = cmd.split(' ')

            if cmd.find('quit') == 0:
                sys.stdout.write('bye-bye\r\n')
                break

            elif args[0] == 'add_slave':
                slave_id = int(args[1])
                server.add_slave(slave_id)
                sys.stdout.write('done: slave %d added\r\n' % (slave_id))

            elif args[0] == 'add_block':
                slave_id = int(args[1])
                name = args[2]
                block_type = int(args[3])
                starting_address = int(args[4])
                length = int(args[5])
                slave = server.get_slave(slave_id)
                slave.add_block(name, block_type, starting_address, length)
                sys.stdout.write('done: block %s added\r\n' % (name))

            elif args[0] == 'set_values':
                slave_id = int(args[1])
                name = args[2]
                address = int(args[3])
                values = []
                for val in args[4:]:
                    values.append(int(val))
                slave = server.get_slave(slave_id)
                slave.set_values(name, address, values)
                values = slave.get_values(name, address, len(values))
                sys.stdout.write('done: values written: %s\r\n' %
                                 (str(values)))

            elif args[0] == 'get_values':
                slave_id = int(args[1])
                name = args[2]
                address = int(args[3])
                length = int(args[4])
                slave = server.get_slave(slave_id)
                values = slave.get_values(name, address, length)
                sys.stdout.write('done: values read: %s\r\n' % (str(values)))

            else:
                sys.stdout.write("unknown command %s\r\n" % (args[0]))
    finally:
        server.stop()
Beispiel #7
0
    fcntl.ioctl(ser2, TIOCSRS485, buf)


#end of def rs485_enable():

if __name__ == '__main__':

    logger = modbus_tk.utils.create_logger("console")

    rs485_enable()

    logger = modbus_tk.utils.create_logger(name="console",
                                           record_format="%(message)s")

    #Create the server
    server = modbus_rtu.RtuServer(serial.Serial('/dev/ttySC1'))

    try:
        logger.info("running...")
        logger.info("enter 'quit' for closing the server")

        server.start()

        slave_1 = server.add_slave(1)
        slave_1.add_block('0', cst.HOLDING_REGISTERS, 0, 100)
        while True:
            cmd = sys.stdin.readline()
            args = cmd.split(' ')

            if cmd.find('quit') == 0:
                sys.stdout.write('bye-bye\r\n')
 def _get_server(self):
     return modbus_rtu.RtuServer(
         serial.Serial(port=SERVER_PORT, baudrate=9600))
Beispiel #9
0
def main():
    logger = modbus_tk.utils.create_logger(name="console", record_format="%(message)s")
    server = modbus_rtu.RtuServer(serial.Serial(PORT))

    try:
        logger.info("running...")
        logger.info("enter 'quit' for closing the server")

        server.start()
        
        # self-registering as Slave ID# = 1
        slave_1 = server.add_slave(1)
        # creating a block starting at address:0 w/ length=1
        # add_block(self, block_name, block_type, starting_address, size):
        # Add a new block identified by its name; new block shouldn't overlap an existing
        # it means that only 1 block per type must correspond to a given address
        # for example: it must not have 2 holding registers at address 0
        slave_1.add_block('0', cst.HOLDING_REGISTERS, 0, 1)

        while True:
            cmd = sys.stdin.readline()
            args = cmd.split(' ')
            if cmd.find('quit') == 0:
                sys.stdout.write('bye-bye\r\n')
                break
            elif args[0] == 'add_slave':
                slave_id = int(args[1])
                server.add_slave(slave_id)
                sys.stdout.write('done: slave %d added\r\n' % (slave_id))
            elif args[0] == 'get_slave':
                slave_id = int(args[1])
                slave = server.get_slave(slave_id)
                sys.stdout.write('done: got slave\r\n' % (str(slave)))
            elif args[0] == 'add_block':
                slave_id = int(args[1])
                name = args[2]
                block_type = int(args[3])
                starting_address = int(args[4])
                length = int(args[5])
                slave = server.get_slave(slave_id)
                slave.add_block(name, block_type, starting_address, length)
                sys.stdout.write('done: block %s added\r\n' % (name))
            elif args[0] == '_get_block':
                slave_id = int(args[1])
                name = args[2]
                slave = server.get_slave(slave_id)
                block = slave._get_block(name)
                sys.stdout.write('done: got block\r\n' % (str(block)))
            elif args[0] == 'remove_block':
                slave_id = int(args[1])
                name = args[2]
                slave = server.get_slave(slave_id)
                slave.remove_block(name)
                sys.stdout.write('done: block %s removed\r\n' % (name))
            elif args[0] == 'remove_all_blocks':
                slave_id = int(args[1])
                slave = server.get_slave(slave_id)
                slave.remove_all_blocks()
                sys.stdout.write('done: all blocks are removed\r\n')
            elif args[0] == 'set_values':
                slave_id = int(args[1])
                name = args[2]
                address = int(args[3])
                values = []
                for val in args[4:]:
                    values.append(int(val))
                slave = server.get_slave(slave_id)
                slave.set_values(name, address, values)
                values = slave.get_values(name, address, len(values))
                sys.stdout.write('done: values written: %s\r\n' % (str(values)))
            elif args[0] == 'get_values':
                slave_id = int(args[1])
                name = args[2]
                address = int(args[3])
                length = int(args[4])
                slave = server.get_slave(slave_id)
                values = slave.get_values(name, address, length)
                sys.stdout.write('done: values read: %s\r\n' % (str(values)))

            else:
                sys.stdout.write("unknown command %s\r\n" % (args[0]))
    finally:
        server.stop()
Beispiel #10
0
portSerial = config['Serial_Slave']['PORT']
baudrateSerial = int(config['Serial_Slave']['Baudrate'])

numD = int(config['Database']['NumDigital'])
numA = int(config['Database']['NumAnalog'])
url = config['Database']['URL']
offset = int(config['Database']['Offset'])
slaveAdr = int(config['ModBus485']['SlaveAdr'])

# tao doi tuong database
db = readDB.ReadDB(numA, numD, url, offset)

# tao doi duong modBus
modbusServ = modbus_rtu.RtuServer(serial.Serial(portSerial),
                                  baudrate=baudrateSerial,
                                  bytesize=8,
                                  parity='N',
                                  stopbits=1,
                                  xonxoff=0)
# start modBus
modbusServ.start()
# tao slave
slave = modbusServ.add_slave(slaveAdr)
# tao memory cho slave vs doc regs: bat dau dia chi 0, co numA thanh ghi
slave.add_block("1", modbus_tk.defines.HOLDING_REGISTERS, 0, numA)
# tao memory cho slave vs doc coils: bat dau dia chi 0, co numD thanh ghi
slave.add_block("2", modbus_tk.defines.COILS, 0, numD)

# slave_1.set_values("1",0,aa)
print("start")
while True:
    db.updateData()
Beispiel #11
0
def main():
    logger = modbus_tk.utils.create_logger(name="console",
                                           record_format="%(message)s")
    #Create the server
    server = modbus_rtu.RtuServer(serial.Serial(PORT))
    try:
        logger.info("running...")
        logger.info("enter 'quit' for closing the server")
        # 开始服务
        server.start()
        # 乘法寄存器
        #slave_1 = server.add_slave(1)
        #slave_1.add_block('0', cst.HOLDING_REGISTERS, 0, 100)
        '''
        COILS = 1 线圈
        DISCRETE_INPUTS = 2 离散输入(数字量输入)
        HOLDING_REGISTERS = 3 乘法寄存器
        ANALOG_INPUTS = 4 模拟量输入
        '''
        while True:
            # 命令
            cmd = sys.stdin.readline()
            # 空格拆分成列表
            args = cmd.split(' ')
            # 退出
            if cmd.find('quit') == 0:
                sys.stdout.write('bye-bye\r\n')
                break
            # 创建从机:add_s 机号
            elif args[0] == 'add_s':
                slave_id = int(args[1])
                server.add_slave(slave_id)
                sys.stdout.write('成功添加从机: %d \r\n' % (slave_id))
            # 初始化从机:add_b 机号 hold 类型 初始地址 数据长度
            # 只可操作一次
            elif args[0] == 'add_b':
                slave_id = int(args[1])
                name = args[2]
                block_type = int(args[3])
                starting_address = int(args[4])
                length = int(args[5])
                slave = server.get_slave(slave_id)
                slave.add_block(name, block_type, starting_address, length)
                sys.stdout.write(
                    '设置从机 %d 类型为 %d 起始地址为 %d 数据长度为 %d \r\n' %
                    ((slave_id), block_type, starting_address, length))
            # 数据写入:add_v 机号 hold 地址 数据
            # 注意地址和数据大小不要超出初始化范围
            elif args[0] == 'set_v':
                slave_id = int(args[1])
                name = args[2]
                address = int(args[3])
                values = []
                for val in args[4:]:
                    values.append(int(val))
                slave = server.get_slave(slave_id)
                slave.set_values(name, address, values)
                values = slave.get_values(name, address, len(values))
                sys.stdout.write('成功向从机 %d 在地址 %d 处写入数据: %s \r\n' %
                                 (slave_id, address, (str(values))))
            # 获得数据从机数据:get_v 机号 hold 地址 数据长度
            elif args[0] == 'get_v':
                slave_id = int(args[1])
                name = args[2]
                address = int(args[3])
                length = int(args[4])
                slave = server.get_slave(slave_id)
                values = slave.get_values(name, address, length)
                sys.stdout.write('done: values read: %s\r\n' % (str(values)))
            else:
                sys.stdout.write("unknown command %s\r\n" % (args[0]))
    finally:
        server.stop()
Beispiel #12
0
#add logging capability
import logging
import threading

import modbus_tk
import modbus_tk.defines as cst
import modbus_tk.modbus as modbus
import modbus_tk.modbus_rtu as modbus_rtu
import serial

logger = modbus_tk.utils.create_logger(name="console",
                                       record_format="%(message)s")

if __name__ == "__main__":
    #Create the server
    server = modbus_rtu.RtuServer(serial.Serial(0))

    try:
        logger.info("running...")
        logger.info("enter 'quit' for closing the server")

        server.start()

        slave_1 = server.add_slave(1)
        slave_1.add_block('0', cst.HOLDING_REGISTERS, 100, 100)
        while True:
            cmd = sys.stdin.readline()
            args = cmd.split(' ')
            if cmd.find('quit') == 0:
                sys.stdout.write('bye-bye\r\n')
                break
Beispiel #13
0
def main():
    #main function
    logger = modbus_tk.utils.create_logger(name="console",
                                           record_format="%(message)s")
    ServerStatus = 0
    logger.info("running...")
    logger.info("enter 'quit' for closing the server")
    Run_Command = 'Run_Server Port=([a-zA-Z0-9]+)\n'
    Add_Slave_Command = 'add_slave ([0-9]+)\n'
    Add_Block_Command = 'add_block ([0-9]+) (\'[a-zA-Z0-9]+\') ([1234]) ([0-9]+) ([0-9]+)\n'
    Set_Values = "set_values ([0-9]+) (\'[a-zA-Z0-9]+\') ([0-9]+) values=\'([0-9][0-9,]*)\'\n"
    try:
        while True:
            cmd = sys.stdin.readline()
            if re.match("quit", cmd):
                sys.stdout.write('bye-bye\r\n')
                break
            elif re.match(Run_Command, cmd, re.I):
                Port = re.match(Run_Command, cmd, re.I).group(1)
                logger.info("Port={}".format(Port))
                Server = modbus_rtu.RtuServer(serial.Serial(Port))
                Server.start()
                ServerStatus = 1
            elif re.match(Add_Slave_Command, cmd, re.I):
                if ServerStatus >= 1:
                    AddSlave_ID = int(
                        re.match(Add_Slave_Command, cmd, re.I).group(1))
                    Server.add_slave(AddSlave_ID)
                    ServerStatus = 2
                    logger.info("Add Slave={}".format(AddSlave_ID))
                else:
                    logger.info("Server not running.")
            elif re.match(Add_Block_Command, cmd, re.I):
                if ServerStatus >= 2:
                    Math_Objects = re.match(Add_Block_Command, cmd, re.I)
                    Slave = Server.get_slave(int(Math_Objects.group(1)))
                    name = Math_Objects.group(2)
                    block_type = int(Math_Objects.group(3))
                    starting_address = int(Math_Objects.group(4))
                    length = int(Math_Objects.group(5))
                    Slave.add_block(name, block_type, starting_address, length)
                    ServerStatus = 3
                    logger.info(
                        "add_block in Slave={} name={} block_type={} starting_address={} length={}"
                        .format(Math_Objects.group(1), Math_Objects.group(2),
                                Math_Objects.group(3), Math_Objects.group(4),
                                Math_Objects.group(5)))
                else:
                    logger.info("no slave.")
            elif re.match(Set_Values, cmd, re.I):
                if ServerStatus >= 3:
                    Math_Objects = re.match(Set_Values, cmd, re.I)
                    Slave = Server.get_slave(int(Math_Objects.group(1)))
                    name = Math_Objects.group(2)
                    address = int(Math_Objects.group(3))
                    values = []
                    valuesString = Math_Objects.group(4).split(',')
                    for val in valuesString[0:]:
                        values.append(int(val))
                    Slave.set_values(name, address, values)
                    values = Slave.get_values(name, address, len(values))
                    logger.info(
                        "set_values in Slave={} name={} address={} values={}".
                        format(Math_Objects.group(1), Math_Objects.group(2),
                               Math_Objects.group(3), str(values)))
                else:
                    logger.info("no block.")
            else:
                sys.stdout.write("unknown command %s" % (cmd))

    finally:
        if ServerStatus == 1:
            sys.stdout.write("Server release")
            Server.remove_all_slaves()
            Server.stop()
            ServerStatus = 0
Beispiel #14
0
parser.add_argument('--slaves_init', type=float,
                    help='The file name of a CSV file containing slave server info. I hope there is an example file somewhere to reference.')
args = parser.parse_args()

if args.slaves_init != None:
    print('The slave initialization function is not yet supported\n')



logger = modbus_tk.utils.create_logger(name="console", record_format="%(message)s")

if __name__ == "__main__":
    portName = '/dev/tty.SLAB_USBtoUART'
    baudrate = 11520
    #Create the server
    server = modbus_rtu.RtuServer(serial.Serial(port=portName, baudrate=baudrate))

    server_hist={}
    try:
        logger.info("running...")
        logger.info("enter 'quit' to close the server or 'help' to view available commands")
         
        server.start()
#    
#        slave_1 = server.add_slave(1)
#        slave_1.add_block('0', cst.HOLDING_REGISTERS, 100, 100)
        
        while True:
            cmd = sys.stdin.readline()
            args = cmd.split(' ')
            if cmd.find('quit')==0: