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
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()
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()
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()
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))
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()
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()
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()
#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
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
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: