diff --git a/scripts/yems-g.gd b/scripts/yems-g.gd new file mode 100644 index 0000000..d5bced0 --- /dev/null +++ b/scripts/yems-g.gd @@ -0,0 +1,79 @@ +extends Node + +var ems_board: Dictionary = {} + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + check_dir() + var in_tbl: Array = [] + var out_tbl: Array = [] + for j in yemsconsts.NUM_INPUT_G: + in_tbl.append([j+1]) + out_tbl.append([j+yemsconsts.STATUS_OUT_OFFSET]) + for i in len(yemsconsts.EMS_G_BOARDS): + var unit_key = settings.get_unit_key(yemsconsts.EMS_G_BOARDS[i][0]) + var unit_ems = network.units[unit_key] + var ems_g: yemsboards.EmsBoard = yemsboards.EmsBoard.new(i+3, 0x120, in_tbl, out_tbl, unit_ems) + ems_board[i+3] = [ems_g, unit_ems] + ems_g.ems_g_fn = yemsconsts.EMS_G_BOARDS[i][1] + var params = ['','',0.0, 0,0] + for item in ems_g.in_tbl: + var in_dev: yemsdevs.InDev = yemsdevs.InDev.new(item[0], params, 0, 0x120) + ems_g.in_devs[in_dev.id] = in_dev + for item in ems_g.out_tbl: + var out_dev = yemsdevs.OutDev.new(item[0], params, 0, 0x120) + ems_g.out_devs[out_dev.id] = out_dev + ems_g.need_write = true + unit_ems.connect('data_received', Callable(self, 'on_data_ems_received').bind(ems_g)) + unit_ems.connect('command_done', Callable(self, 'on_command_done').bind(ems_g)) + unit_ems.connect('line_changed', Callable(self, 'on_line_changed').bind(ems_g)) + + +func on_line_changed(unit_ems, board): + if not unit_ems.online: + board.ems_load = false + board.state_board = board.WAIT + board.state_cmd = board.WAIT + board.need_write = true + + +func on_data_ems_received(unit_ems, board): + board.set_status(unit_ems.status) + if board.state_board == board.WAIT and board.state_cmd == board.WAIT: + if board.online: + if board.need_write: + start_load(board) + elif not board.ems_load: + board.set_load_done() + else: + board.need_write = true + + +func on_command_done(unit_ems, board): + board.on_command_done(unit_ems) + + +func start_load(board): + var file = FileAccess.open(yemsconsts.emsg_files_folder + board.ems_g_fn, FileAccess.READ) + if file == null: + board.state_board = board.LOAD_FAIL + return + var read = file.get_as_text() + file.close() + var json_conv: = JSON.new() + if Error.OK == json_conv.parse(read): + var json_data = json_conv.get_data() + board.btn_load(json_data) + board.state_board = board.WRITE + board.start_rw_kems(false) + else: + board.state_board = board.LOAD_FAIL + + +## Проверяет ниличие директории, если их нет, создаёт +func check_dir(): + var dir = DirAccess.open(yemsconsts.emsg_files_folder) + if dir: + return + else: + DirAccess.make_dir_absolute(yemsconsts.emsg_files_folder)