diff --git a/modbus/client-serial-modbus.py b/modbus/client-serial-modbus.py index bf4f6b13..b6ac4d44 100644 --- a/modbus/client-serial-modbus.py +++ b/modbus/client-serial-modbus.py @@ -57,6 +57,7 @@ def run_sync_client(udp_addr, udp_port_rx, udp_port_tx, serial_port, serial_baud udp_data = udp_data.decode('utf-8') message = json_decoder.decode(udp_data) # type: dict + if 'code' not in message: message['code'] = '' @@ -70,6 +71,7 @@ def run_sync_client(udp_addr, udp_port_rx, udp_port_tx, serial_port, serial_baud rc = rq.isError() elif message['code'] == 'read_holding': data = message['data'] + print('client_serial_modbus.py: data', data) rq = client.read_holding_registers(data[0], data[1:], unit=unit_num) rc = rq.isError() if not rc: diff --git a/project.godot b/project.godot index 9ca76b70..fa8a97d8 100644 --- a/project.godot +++ b/project.godot @@ -61,6 +61,7 @@ hotkeys="*res://scripts/hotkeys.gd" mercator="*res://scripts/mercator.gd" modbus="*res://scripts/modbus.gd" tcp5p28="*res://scripts/tcp5p28.gd" +sch3="*res://scripts/sch3.gd" [debug] diff --git a/scripts/hotkeys.gd b/scripts/hotkeys.gd index a01762c6..5a103964 100644 --- a/scripts/hotkeys.gd +++ b/scripts/hotkeys.gd @@ -2,19 +2,19 @@ class_name HotKeys extends Node func _ready() -> void: - signaller.connect('full_screen', Callable(self, 'toggle_full_screen').bind(0)) + signaller.connect('full_screen', Callable(self, 'toggle_full_screen').bind(0)) func _input(event: InputEvent) -> void: - if event is InputEventKey: - if event.pressed and event.physical_keycode == KEY_F11: - signaller.emit_signal('full_screen') + if event is InputEventKey: + if event.pressed and event.physical_keycode == KEY_F11: + signaller.emit_signal('full_screen') ## Переключает режим окна программы полный - обычный экран. func toggle_full_screen(id: int) -> void: - var mode = DisplayServer.window_get_mode(id) - mode = DisplayServer.WINDOW_MODE_WINDOWED \ - if mode == DisplayServer.WINDOW_MODE_FULLSCREEN \ - else DisplayServer.WINDOW_MODE_FULLSCREEN - DisplayServer.window_set_mode(mode, id) + var mode = DisplayServer.window_get_mode(id) + mode = DisplayServer.WINDOW_MODE_WINDOWED \ + if mode == DisplayServer.WINDOW_MODE_FULLSCREEN \ + else DisplayServer.WINDOW_MODE_FULLSCREEN + DisplayServer.window_set_mode(mode, id) diff --git a/scripts/interfer.gd b/scripts/interfer.gd index f04dd088..63208d84 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -97,7 +97,7 @@ func _ready(): var ecms: Dictionary = {} ## Словарь помех. for i in range(ID_INTERFERS_LEN): # Заполняет массив ID целей id_array.append(i + 1) - var unit_key = repsettings.get_unit_key('уарэп-капсрпб-отп') + var unit_key = repsettings.get_unit_key('уарэп-капсрпб') var unit = repnetwork.units[unit_key] var unit_5p28_key = repsettings.get_unit_key('уарэп-5п28') var unit_5p28 = repnetwork.units_tcp[unit_5p28_key] diff --git a/scripts/modbus.gd b/scripts/modbus.gd index fe3c1fe3..62139b3e 100644 --- a/scripts/modbus.gd +++ b/scripts/modbus.gd @@ -2,6 +2,7 @@ class_name mod_bus extends Node const ONLINE_TIMEOUT = 5.0 ## Время ожидания пакета от ячейки, секунды. + class ModbusClient: ## Состояние автомата выполнения команды. @@ -44,7 +45,7 @@ class ModbusClient: online = false emit_signal('line_changed') if (cmd_state == CmdState.WAIT) or (cmd_state == CmdState.SEND): - cmd_state = CmdState.FAIL + #cmd_state = CmdState.FAIL emit_signal('command_fail') var rc = Error.ERR_BUSY if cmd_state == CmdState.SEND: @@ -114,7 +115,7 @@ class ModbusClient: ## [param addr] - Начальный адрес регистров.[br] ## [param count] - Количество регистров от начального адреса.[br] func read_holdind(addr: int, count: int = 1) -> bool: - if cmd_state != CmdState.DONE: return false + #if cmd_state != CmdState.DONE: return false var json_dict = {'code': 'read_holding', 'data': [addr, count]} tx_data = JSON.stringify(json_dict).to_utf8_buffer() cmd_state = CmdState.SEND diff --git a/scripts/repnetwork.gd b/scripts/repnetwork.gd index 51bfef50..14408ad9 100644 --- a/scripts/repnetwork.gd +++ b/scripts/repnetwork.gd @@ -1,7 +1,7 @@ class_name rep_network extends Node -const PROTOCOL_TYPES: = {'yau07tx': yau07.YaU07, 'jsontx': capsrpb.CapsRpb, 'udp-json-mbcs': modbus.ModbusClient} +const PROTOCOL_TYPES: = {'yau07tx': yau07.YaU07, 'json-capsrpb': capsrpb.CapsRpb, 'udp-json-mbcs': modbus.ModbusClient} const TCP_PROTO: = {'5p28': tcp5p28.TCP5P28} class Socket extends PacketPeerUDP: @@ -13,7 +13,7 @@ class Socket extends PacketPeerUDP: class SocketTCP extends TCPServer: const RX_TIMEOUT: int = 1000 ## Время сброса счётчика принятия части пакета. var peerstream: = PacketPeerStream.new() - var unit_key: Array ## Клюс юнита. + var unit_key: Array ## Ключ юнита. var head_len: int = 8 ## Длинна заголовка команды. var len_place: int = 4 ## Номер начального байта с длинной блока данных. var type_len: int = 4 ## Количество байт в размере длинны. @@ -32,6 +32,8 @@ var poll_sockets: Array[Socket] var tcp_sockets: Array var units: Dictionary var units_tcp: Dictionary +var dst_ports: Dictionary +var unit_keys: Dictionary var sock_unicast: Socket var sock_capsrpb: Socket var logger_page: Node @@ -39,7 +41,7 @@ var logger_page: Node func create_socket(nm) -> Socket: var addr = repsettings.UnitProfiles[nm][1] - var port = repsettings.UnitProfiles[nm][2] + var port = repsettings.UnitProfiles[nm][2][0] var broad = repsettings.UnitProfiles[nm][3] var bind = repsettings.UnitProfiles[nm][4] var sock: = Socket.new() @@ -52,7 +54,7 @@ func create_socket(nm) -> Socket: func create_tcpsocket(nm) -> SocketTCP: var addr = repsettings.UnitProfiles[nm][1] - var port = repsettings.UnitProfiles[nm][2] + var port = repsettings.UnitProfiles[nm][2][0] var sock = SocketTCP.new() sock.unit_key = repsettings.get_unit_key(nm) sock.listen(port, addr) @@ -64,7 +66,7 @@ func _ready() -> void: log.info('Модуль работы с сетью готов') poll_sockets.append(create_socket('уарэп-яу07-частный')) poll_sockets.append(create_socket('уарэп-яу07-общий')) - poll_sockets.append(create_socket('уарэп-капсрпб-пол')) + poll_sockets.append(create_socket('уарэп-капсрпб')) sock_unicast = poll_sockets[0] sock_capsrpb = poll_sockets[2] @@ -78,7 +80,11 @@ func _ready() -> void: if logger_page: unit.connect('line_changed', Callable(logger_page, 'on_line_changed').bind(unit_key)) unit.connect('command_fail', Callable(logger_page, 'on_command_fail').bind(unit_key)) - + if len(settings[2]) > 1: + dst_ports[unit_key] = settings[2][1] + else: + dst_ports[unit_key] = settings[2][0] + if proto in TCP_PROTO: var unit = TCP_PROTO[proto].new(unit_name) var unit_key = repsettings.get_unit_key(unit_name) @@ -88,10 +94,11 @@ func _ready() -> void: unit.connect('command_fail', Callable(logger_page, 'on_command_fail').bind(unit_key)) tcp_sockets.append([create_tcpsocket('уарэп-5п28'), units_tcp[repsettings.get_unit_key('уарэп-5п28')]]) - + for key in units: log.info('%s %s:%d' % [units[key].name, key[0], key[1]]) for key in units_tcp: log.info('%s %s:%d' % [units_tcp[key].name, key[0], key[1]]) - + for key in dst_ports: + unit_keys[dst_ports[key]] = key func poll_receive(sock: Socket, tick: int) -> bool: while sock.get_available_packet_count() > 0: @@ -99,7 +106,11 @@ func poll_receive(sock: Socket, tick: int) -> bool: var addr: = sock.get_packet_ip() var port: = sock.get_packet_port() var addr_port: = [addr, port] - if addr_port in units: units[addr_port].parse(data, tick) + if addr_port in units: + units[addr_port].parse(data, tick) + return false + if port in unit_keys: + units[unit_keys[port]].parse(data, tick) return false @@ -154,7 +165,7 @@ func _process(_delta: float) -> void: for addr in units: var unit = units[addr] match unit.process(tick): - Error.OK: sock_unicast.send_to(addr, unit.tx_data) + Error.OK: sock_unicast.send_to([addr[0], dst_ports[addr]], unit.tx_data) Error.FAILED: emit_signal('socket_error', 'ошибка: %s %s:%d' % [unit, addr[0], addr[1]]) for sock_unit in tcp_sockets: var sock = sock_unit[0] diff --git a/scripts/repsettings.gd b/scripts/repsettings.gd index 9c944422..dced683f 100644 --- a/scripts/repsettings.gd +++ b/scripts/repsettings.gd @@ -4,30 +4,29 @@ class_name rep_settings extends Node @export var UnitProfiles: = { \ # Название | Протокол | Адрес | Порт | Широковещательное | Привязывать к адресу | Комментарий - 'уарэп-яу07-частный': ['yau07rx', '10.1.1.2', 50002, false, true, 'IP-адрес на котором принимают частные сообщения от ЯУ-07'], - 'уарэп-яу07-общий': ['yau07rx', '10.1.1.255', 50000, true, true, 'IP-адрес на котором принимают широковещательные сообщения от ЯУ-07'], - 'уарэп-капсрпб-пол': ['jsonrx', '127.0.0.1', 42023, false, true, 'IP-адрес на котором принимают сообщения от КАПС РПБ'], - 'уарэп-капсрпб-отп': ['jsontx', '127.0.0.1', 42022, false, false, 'IP-адрес на который отправляют сообщения для КАПС РПБ'], - 'уарэп-эмс': ['yau07tx', '10.1.1.27', 50027, false, false, 'IP-адрес ЯУ-07 прибора УФ'], - 'уарэп-яу07-2в': ['yau07tx', '10.1.1.34', 50034, false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], - 'уарэп-яу07-2н': ['yau07tx', '10.1.1.33', 50033, false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], - 'уарэп-яу07-2к': ['yau07tx', '10.1.1.35', 50035, false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'], - 'уарэп-яу07-4в': ['yau07tx', '10.1.1.66', 50066, false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], - 'уарэп-яу07-4н': ['yau07tx', '10.1.1.65', 50065, false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], - 'уарэп-яу07-4к': ['yau07tx', '10.1.1.67', 50067, false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'], - 'уарэп-яу07-1в': ['yau07tx', '10.1.1.18', 50018, false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], - 'уарэп-яу07-1н': ['yau07tx', '10.1.1.17', 50017, false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], - 'уарэп-яу07-1к': ['yau07tx', '10.1.1.19', 50019, false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'], - 'уарэп-яу07-3в': ['yau07tx', '10.1.1.50', 50050, false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], - 'уарэп-яу07-3н': ['yau07tx', '10.1.1.49', 50049, false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], - 'уарэп-яу07-3к': ['yau07tx', '10.1.1.51', 50051, false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], + 'уарэп-яу07-частный': ['yau07rx', '10.1.1.2', [50002], false, true, 'IP-адрес на котором принимают частные сообщения от ЯУ-07'], + 'уарэп-яу07-общий': ['yau07rx', '10.1.1.255', [50000], true, true, 'IP-адрес на котором принимают широковещательные сообщения от ЯУ-07'], + 'уарэп-капсрпб': ['json-capsrpb', '127.0.0.1', [42023, 42022], false, true, 'IP-адрес на котором принимают сообщения от КАПС РПБ'], + 'уарэп-эмс': ['yau07tx', '10.1.1.27', [50027], false, false, 'IP-адрес ЯУ-07 прибора УФ'], + 'уарэп-яу07-2в': ['yau07tx', '10.1.1.34', [50034], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], + 'уарэп-яу07-2н': ['yau07tx', '10.1.1.33', [50033], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], + 'уарэп-яу07-2к': ['yau07tx', '10.1.1.35', [50035], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'], + 'уарэп-яу07-4в': ['yau07tx', '10.1.1.66', [50066], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], + 'уарэп-яу07-4н': ['yau07tx', '10.1.1.65', [50065], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], + 'уарэп-яу07-4к': ['yau07tx', '10.1.1.67', [50067], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'], + 'уарэп-яу07-1в': ['yau07tx', '10.1.1.18', [50018], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], + 'уарэп-яу07-1н': ['yau07tx', '10.1.1.17', [50017], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], + 'уарэп-яу07-1к': ['yau07tx', '10.1.1.19', [50019], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'], + 'уарэп-яу07-3в': ['yau07tx', '10.1.1.50', [50050], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], + 'уарэп-яу07-3н': ['yau07tx', '10.1.1.49', [50049], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], + 'уарэп-яу07-3к': ['yau07tx', '10.1.1.51', [50051], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], # Название | Протокол | Адрес | Порт получения | Комментарий - 'уарэп-5п28': ['5p28', '127.0.0.1', 50000, 'IP-адрес комплекса 5П-28'], + 'уарэп-5п28': ['5p28', '127.0.0.1', [50000], 'IP-адрес комплекса 5П-28'], # Название | Протокол | Адрес | Порт получения | Порт отправки | Комментарий - 'уарэп-щ3': ['udp-json-mbcs', 'localhost', 48000, 44100, 'IP-адрес и порты через которые производят обмен сообщения с драйвером клиента Modbus Serial'], - + 'уарэп-щ3': ['udp-json-mbcs', '127.0.0.1', [48000, 44100], false, true, 'IP-адрес и порты через которые производят обмен сообщения с драйвером клиента Modbus Serial'], + # Название | Протокол | Имя порта | Скорость, бод | Чётность | Комментарий 'уарэп-спт25-1': ['uart', '/dev/tty2', 115200, false, 'Адрес прибора СПТ-25 (G1)'], 'уарэп-спт25-2': ['uart', '/dev/tty3', 115200, false, 'Адрес прибора СПТ-25 (G2)'], @@ -46,4 +45,4 @@ func _ready() -> void: log.info('Модуль настроек готов') func get_unit_key(unit_name: String) -> Array: assert(UnitProfiles.has(unit_name), 'ошибка: нет такого устройства \"%s\"' % unit_name) var item = UnitProfiles[unit_name] - return [item[1], item[2]] + return [item[1], item[2][0]] diff --git a/scripts/sch3.gd b/scripts/sch3.gd new file mode 100644 index 00000000..55eedb9b --- /dev/null +++ b/scripts/sch3.gd @@ -0,0 +1,14 @@ +extends Node + + +func _ready(): + var unit_key = repsettings.get_unit_key('уарэп-щ3') + var unit = repnetwork.units[unit_key] + var timer = Timer.new() + add_child(timer) + timer.connect('timeout', Callable(self, 'on_timer').bind(unit)) + timer.start(1.0) + + +func on_timer(unit): + unit.read_holdind(0x0000) diff --git a/scripts/threats.gd b/scripts/threats.gd index 2c47cd51..00ebf117 100644 --- a/scripts/threats.gd +++ b/scripts/threats.gd @@ -46,7 +46,7 @@ signal threats_resized(th: Dictionary) func _ready() -> void: log.info('Модуль обработки целей готов') var threats = {} ## Список целей. Индекс - <номер цели> - var unit_key = repsettings.get_unit_key('уарэп-капсрпб-отп') + var unit_key = repsettings.get_unit_key('уарэп-капсрпб') var unit = repnetwork.units[unit_key] var unit_5p28_key = repsettings.get_unit_key('уарэп-5п28') var unit_5p28 = repnetwork.units_tcp[unit_5p28_key] diff --git a/scripts/yems-consts.gd b/scripts/yems-consts.gd index f4d56ee1..0733c4d2 100644 --- a/scripts/yems-consts.gd +++ b/scripts/yems-consts.gd @@ -2,143 +2,143 @@ class_name yerms_consts extends Node ## Таблица с данными для входов, первое значение - индекс устройства в ячейке КЭМС. const INPUT_ROWS1 = [ - [12,['283333 МР-231S, Строб ЭМС', 'X52', '0.00', '0.00']], - [13,['29НРЛС МР-231-3, УИЗП', 'X54', '0.00', '0.00']], - [14,['30НРЛС МР-231-3, Строб ЭМС', 'X55', '0.00', '0.00']], - [15,['31ЦИСВС-1010, УИЗП', 'X23', '0.00', '0.00']], - [21,['32НРЛС МР-231S, УИЗП', 'X21', '0.00', '0.00']], - [22,['33НРЛС МР-231S, Строб ЭМС', 'X22', '0.00', '0.00']], - [23,['34НРЛС МР-231-3, УИЗП', 'X24', '0.00', '0.00']], - [32,['352222 МР-231S, Строб ЭМС', 'X32', '0.00', '0.00']], - [33,['36НРЛС МР-231-3, УИЗП', 'X34', '0.00', '0.00']], - [34,['37НРЛС МР-231-3, Строб ЭМС', 'X35', '0.00', '0.00']], - [35,['38ЦИСВС-1010, УИЗП', 'X43', '0.00', '0.00']], - [38,['394302-01, 4302-04, УИЗП', 'X46', '0.00', '0.00']], - [31,['40НРЛС МР-231S, УИЗП', 'X51', '0.00', '0.00']]] + [12,['283333 МР-231S, Строб ЭМС', 'X52', '0.00', '0.00']], + [13,['29НРЛС МР-231-3, УИЗП', 'X54', '0.00', '0.00']], + [14,['30НРЛС МР-231-3, Строб ЭМС', 'X55', '0.00', '0.00']], + [15,['31ЦИСВС-1010, УИЗП', 'X23', '0.00', '0.00']], + [21,['32НРЛС МР-231S, УИЗП', 'X21', '0.00', '0.00']], + [22,['33НРЛС МР-231S, Строб ЭМС', 'X22', '0.00', '0.00']], + [23,['34НРЛС МР-231-3, УИЗП', 'X24', '0.00', '0.00']], + [32,['352222 МР-231S, Строб ЭМС', 'X32', '0.00', '0.00']], + [33,['36НРЛС МР-231-3, УИЗП', 'X34', '0.00', '0.00']], + [34,['37НРЛС МР-231-3, Строб ЭМС', 'X35', '0.00', '0.00']], + [35,['38ЦИСВС-1010, УИЗП', 'X43', '0.00', '0.00']], + [38,['394302-01, 4302-04, УИЗП', 'X46', '0.00', '0.00']], + [31,['40НРЛС МР-231S, УИЗП', 'X51', '0.00', '0.00']]] ## Таблица с данными для выходов, первое значение - индекс устройства в ячейке КЭМС. const OUTPUT_ROWS1 = [ - [41,['41НРЛС МР-231S, БИ', 'X61', '0.00', '0.00']], - [42,['42НРЛС МР-231S', 'X62', '0.00', '0.00']], - [43,['43НРЛС МР-231-3, БИ', 'X64', '0.00', '0.00']], - [44,['44НРЛС МР-231-3', 'X65', '0.00', '0.00']], - [45,['45ЦИСВС-1010, БИ', 'X63', '0.00', '0.00']], - [46,['464302-01, 4302-04, БИ', 'X66', '0.00', '0.00']], - [48,['47НРЛС 11111111', 'X69', '0.00', '0.00']], - [62,['48НРЛС МР-231S', 'X62', '0.00', '0.00']], - [63,['49НРЛС МР-231-3, БИ', 'X64', '0.00', '0.00']], - [64,['50НРЛС МР-231-3', 'X65', '0.00', '0.00']], - [65,['51ЦИСВС-1010, БИ', 'X63', '0.00', '0.00']], - [66,['524302-01, 4302-04, БИ', 'X66', '0.00', '0.00']], - [68,['53НРЛС 11111111', 'X69', '0.00', '0.00']]] + [41,['41НРЛС МР-231S, БИ', 'X61', '0.00', '0.00']], + [42,['42НРЛС МР-231S', 'X62', '0.00', '0.00']], + [43,['43НРЛС МР-231-3, БИ', 'X64', '0.00', '0.00']], + [44,['44НРЛС МР-231-3', 'X65', '0.00', '0.00']], + [45,['45ЦИСВС-1010, БИ', 'X63', '0.00', '0.00']], + [46,['464302-01, 4302-04, БИ', 'X66', '0.00', '0.00']], + [48,['47НРЛС 11111111', 'X69', '0.00', '0.00']], + [62,['48НРЛС МР-231S', 'X62', '0.00', '0.00']], + [63,['49НРЛС МР-231-3, БИ', 'X64', '0.00', '0.00']], + [64,['50НРЛС МР-231-3', 'X65', '0.00', '0.00']], + [65,['51ЦИСВС-1010, БИ', 'X63', '0.00', '0.00']], + [66,['524302-01, 4302-04, БИ', 'X66', '0.00', '0.00']], + [68,['53НРЛС 11111111', 'X69', '0.00', '0.00']]] ## Таблица с данными для входов, первое значение - индекс устройства в ячейке КЭМС. const INPUT_ROWS = [ - [1,['УИЗП №1', 'Х7', '0.00', '0.00']], - [2,['УИЗПФ №1', 'Х8', '0.00', '0.00']], - [3,['УИЗП №2', 'Х10', '0.00', '0.00']], - [4,['УИЗПФ №2', 'Х11', '0.00', '0.00']], - [5,['УИЗП №3', 'Х13', '0.00', '0.00']], - [6,['УИЗПФ №3', 'Х14', '0.00', '0.00']], - [7,['УИЗП №4', 'Х16', '0.00', '0.00']], - [8,['УИЗПФ №4', 'Х17', '0.00', '0.00']], - [9,['УИЗП №5', 'Х19', '0.00', '0.00']], - [10,['УИЗПФ №5', 'Х20', '0.00', '0.00']], - [11,['УИЗП №6', 'Х22', '0.00', '0.00']], - [12,['УИЗПФ №6','Х23', '0.00', '0.00']], - [13,['УИЗП №7','Х25', '0.00', '0.00']], - [14,['УИЗПФ №7','Х26', '0.00', '0.00']], - [15,['СИ1 Л1','X31 : 2', '0.00', '0.00']], - [16,['СИ1 Л6','X31 : 5', '0.00', '0.00']], - [17,['СИ1 Л7','X31 : 8', '0.00', '0.00']], - [18,['СИ2 Л1','X32 : 2', '0.00', '0.00']], - [19,['СИ2 Л6','X32 : 5', '0.00', '0.00']], - [20,['СИ2 Л7','X32 : 8', '0.00', '0.00']], - [21,['СИ3 Л1','X33 : 2', '0.00', '0.00']], - [22,['СИ3 Л6','X33 : 5', '0.00', '0.00']], - [23,['СИ3 Л7','X33 : 8', '0.00', '0.00']], - [24,['СИ4 Л1','X34 : 2', '0.00', '0.00']], - [25,['СИ4 Л6','X34 : 5', '0.00', '0.00']], - [26,['СИ4 Л7','X34 : 8', '0.00', '0.00']], - [27,['СИ1 Л2','X38 : 2', '0.00', '0.00']], - [28,['СИ1 Л3','X38 : 5', '0.00', '0.00']], - [29,['СИ2 Л2','X39 : 2', '0.00', '0.00']], - [30,['СИ2 Л3','X39 : 5', '0.00', '0.00']], - [31,['СИ3 Л2','X40 : 2', '0.00', '0.00']], - [32,['СИ3 Л3','X40 : 5', '0.00', '0.00']], - [33,['СИ4 Л2','X41 : 2', '0.00', '0.00']], - [34,['СИ4 Л3','X41 : 5', '0.00', '0.00']], - [35,['СИ1 Л4','X42 : 2', '0.00', '0.00']], - [36,['СИ1 Л5','X42 : 5', '0.00', '0.00']], - [37,['СИ2 Л4','X43 : 2', '0.00', '0.00']], - [38,['СИ2 Л5','X43 : 5', '0.00', '0.00']], - [39,['СИ3 Л4','X44 : 2', '0.00', '0.00']], - [40,['СИ3 Л5','X44 : 5', '0.00', '0.00']], - [41,['СИ4 Л4','X45 : 2', '0.00', '0.00']], - [42,['СИ4 Л5','X45 : 5', '0.00', '0.00']], - [43,['БИ В Лб','Х49 : 37', '0.00', '0.00']], - [44,['БИ В ПрБ','Х49 : 31', '0.00', '0.00']], - [45,['БИ Г Лб','Х49 : 15', '0.00', '0.00']], - [46,['БИ Г ПрБ','Х49 : 8', '0.00', '0.00']], - [47,['БИ Д Лб','Х49 : 6', '0.00', '0.00']], - [48,['БИ Д ПрБ','Х49 : 10', '0.00', '0.00']], - [49,['БИ Е Лб','Х49 : 25', '0.00', '0.00']], - [50,['БИ Е ПрБ','Х49 : 40', '0.00', '0.00']], - [51,['СЗИ В Лб','Х49 : 42', '0.00', '0.00']], - [52,['СЗИ В ПрБ','Х49 : 32', '0.00', '0.00']], - [53,['СЗИ Г Лб','Х49 : 46', '0.00', '0.00']], - [54,['СЗИ Г ПрБ','Х49 : 32', '0.00', '0.00']], - [55,['СЗИ Д Лб','Х49 : 16', '0.00', '0.00']], - [56,['СЗИ Д ПрБ','Х49 : 47', '0.00', '0.00']], - [57,['СЗИ Е Лб','Х49 : 1', '0.00', '0.00']], - [58,['СЗИ Е ПрБ','Х49 : 50', '0.00', '0.00']]] + [1,['УИЗП №1', 'Х7', '0.00', '0.00']], + [2,['УИЗПФ №1', 'Х8', '0.00', '0.00']], + [3,['УИЗП №2', 'Х10', '0.00', '0.00']], + [4,['УИЗПФ №2', 'Х11', '0.00', '0.00']], + [5,['УИЗП №3', 'Х13', '0.00', '0.00']], + [6,['УИЗПФ №3', 'Х14', '0.00', '0.00']], + [7,['УИЗП №4', 'Х16', '0.00', '0.00']], + [8,['УИЗПФ №4', 'Х17', '0.00', '0.00']], + [9,['УИЗП №5', 'Х19', '0.00', '0.00']], + [10,['УИЗПФ №5', 'Х20', '0.00', '0.00']], + [11,['УИЗП №6', 'Х22', '0.00', '0.00']], + [12,['УИЗПФ №6','Х23', '0.00', '0.00']], + [13,['УИЗП №7','Х25', '0.00', '0.00']], + [14,['УИЗПФ №7','Х26', '0.00', '0.00']], + [15,['СИ1 Л1','X31 : 2', '0.00', '0.00']], + [16,['СИ1 Л6','X31 : 5', '0.00', '0.00']], + [17,['СИ1 Л7','X31 : 8', '0.00', '0.00']], + [18,['СИ2 Л1','X32 : 2', '0.00', '0.00']], + [19,['СИ2 Л6','X32 : 5', '0.00', '0.00']], + [20,['СИ2 Л7','X32 : 8', '0.00', '0.00']], + [21,['СИ3 Л1','X33 : 2', '0.00', '0.00']], + [22,['СИ3 Л6','X33 : 5', '0.00', '0.00']], + [23,['СИ3 Л7','X33 : 8', '0.00', '0.00']], + [24,['СИ4 Л1','X34 : 2', '0.00', '0.00']], + [25,['СИ4 Л6','X34 : 5', '0.00', '0.00']], + [26,['СИ4 Л7','X34 : 8', '0.00', '0.00']], + [27,['СИ1 Л2','X38 : 2', '0.00', '0.00']], + [28,['СИ1 Л3','X38 : 5', '0.00', '0.00']], + [29,['СИ2 Л2','X39 : 2', '0.00', '0.00']], + [30,['СИ2 Л3','X39 : 5', '0.00', '0.00']], + [31,['СИ3 Л2','X40 : 2', '0.00', '0.00']], + [32,['СИ3 Л3','X40 : 5', '0.00', '0.00']], + [33,['СИ4 Л2','X41 : 2', '0.00', '0.00']], + [34,['СИ4 Л3','X41 : 5', '0.00', '0.00']], + [35,['СИ1 Л4','X42 : 2', '0.00', '0.00']], + [36,['СИ1 Л5','X42 : 5', '0.00', '0.00']], + [37,['СИ2 Л4','X43 : 2', '0.00', '0.00']], + [38,['СИ2 Л5','X43 : 5', '0.00', '0.00']], + [39,['СИ3 Л4','X44 : 2', '0.00', '0.00']], + [40,['СИ3 Л5','X44 : 5', '0.00', '0.00']], + [41,['СИ4 Л4','X45 : 2', '0.00', '0.00']], + [42,['СИ4 Л5','X45 : 5', '0.00', '0.00']], + [43,['БИ В Лб','Х49 : 37', '0.00', '0.00']], + [44,['БИ В ПрБ','Х49 : 31', '0.00', '0.00']], + [45,['БИ Г Лб','Х49 : 15', '0.00', '0.00']], + [46,['БИ Г ПрБ','Х49 : 8', '0.00', '0.00']], + [47,['БИ Д Лб','Х49 : 6', '0.00', '0.00']], + [48,['БИ Д ПрБ','Х49 : 10', '0.00', '0.00']], + [49,['БИ Е Лб','Х49 : 25', '0.00', '0.00']], + [50,['БИ Е ПрБ','Х49 : 40', '0.00', '0.00']], + [51,['СЗИ В Лб','Х49 : 42', '0.00', '0.00']], + [52,['СЗИ В ПрБ','Х49 : 32', '0.00', '0.00']], + [53,['СЗИ Г Лб','Х49 : 46', '0.00', '0.00']], + [54,['СЗИ Г ПрБ','Х49 : 32', '0.00', '0.00']], + [55,['СЗИ Д Лб','Х49 : 16', '0.00', '0.00']], + [56,['СЗИ Д ПрБ','Х49 : 47', '0.00', '0.00']], + [57,['СЗИ Е Лб','Х49 : 1', '0.00', '0.00']], + [58,['СЗИ Е ПрБ','Х49 : 50', '0.00', '0.00']]] ## Таблица с данными для выходов, первое значение - индекс устройства в ячейке КЭМС. const OUTPUT_ROWS = [ - [11,['Бланк №1','Х6', '0.00', '0.00']], - [12,['Бланк №2','Х9', '0.00', '0.00']], - [13,['Бланк №3','Х12', '0.00', '0.00']], - [14,['Бланк №4','Х15', '0.00', '0.00']], - [15,['Бланк №5','Х18', '0.00', '0.00']], - [16,['Бланк №6','Х21', '0.00', '0.00']], - [17,['Бланк №7','Х24', '0.00', '0.00']], - [18,['СЗИ1 Л1','X31 : 11', '0.00', '0.00']], - [19,['СЗИ1 Л6','X31 :14', '0.00', '0.00']], - [20,['СЗИ1 Л7','X31 : 17', '0.00', '0.00']], - [21,['СЗИ2 Л1','X32 : 11', '0.00', '0.00']], - [22,['СЗИ2 Л6','X32 : 14', '0.00', '0.00']], - [23,['СЗИ2 Л7','X32: 17', '0.00', '0.00']], - [24,['СЗИ3 Л1','X33 : 11', '0.00', '0.00']], - [25,['СЗИ3 Л6','X33 :14', '0.00', '0.00']], - [26,['СЗИ3 Л7','X33: 17', '0.00', '0.00']], - [27,['СЗИ4 Л1','X34 : 11', '0.00', '0.00']], - [28,['СЗИ4 Л6','X34 :14', '0.00', '0.00']], - [29,['СЗИ4 Л7','X34: 17', '0.00', '0.00']], - [30,['СЗИ1 Л2','X38 : 11', '0.00', '0.00']], - [31,['СЗИ1 Л3','X38 : 14', '0.00', '0.00']], - [32,['СЗИ2 Л2','X39 : 11', '0.00', '0.00']], - [33,['СЗИ2 Л3','X39 : 14', '0.00', '0.00']], - [34,['СЗИ3 Л2','X40 : 11', '0.00', '0.00']], - [35,['СЗИ3 Л3','X40 : 14', '0.00', '0.00']], - [36,['СЗИ4 Л2','X41 : 11', '0.00', '0.00']], - [37,['СЗИ4 Л3','X41 :14', '0.00', '0.00']], - [38,['СЗИ1 Л4','X42 : 11', '0.00', '0.00']], - [39,['СЗИ1 Л5','X42 :14', '0.00', '0.00']], - [40,['СЗИ2 Л4','X43 : 11', '0.00', '0.00']], - [41,['СЗИ2 Л5','X43 : 14', '0.00', '0.00']], - [42,['СЗИ3 Л4','X44 : 11', '0.00', '0.00']], - [43,['СЗИ3 Л5','X44 :14', '0.00', '0.00']], - [44,['СЗИ4 Л4','X45 : 11', '0.00', '0.00']], - [45,['СЗИ4 Л5','X45 : 14', '0.00', '0.00']], - [46,['БИ РТР №1','X47 : 2', '0.00', '0.00']], - [47,['БИ РТР №2','X47 : 5', '0.00', '0.00']], - [48,['БИ РТР №3','X47 : 8', '0.00', '0.00']], - [49,['БИ РТР №4','X47 : 11', '0.00', '0.00']], - [50,['СИ В Лб','Х49 : 21', '0.00', '0.00']], - [51,['СИ В ПрБ','Х49 : 19', '0.00', '0.00']], - [52,['СИ Г Лб','Х49 : 28', '0.00', '0.00']], - [53,['СИ Г ПрБ','Х49 : 30', '0.00', '0.00']], - [54,['СИ Д Лб','Х49 : 13', '0.00', '0.00']], - [55,['СИ Д ПрБ','Х49 : 11', '0.00', '0.00']], - [56,['СИ Е Лб','Х49 : 26', '0.00', '0.00']], - [57,['СИ Е ПрБ','Х49 : 35', '0.00', '0.00']]] + [11,['Бланк №1','Х6', '0.00', '0.00']], + [12,['Бланк №2','Х9', '0.00', '0.00']], + [13,['Бланк №3','Х12', '0.00', '0.00']], + [14,['Бланк №4','Х15', '0.00', '0.00']], + [15,['Бланк №5','Х18', '0.00', '0.00']], + [16,['Бланк №6','Х21', '0.00', '0.00']], + [17,['Бланк №7','Х24', '0.00', '0.00']], + [18,['СЗИ1 Л1','X31 : 11', '0.00', '0.00']], + [19,['СЗИ1 Л6','X31 :14', '0.00', '0.00']], + [20,['СЗИ1 Л7','X31 : 17', '0.00', '0.00']], + [21,['СЗИ2 Л1','X32 : 11', '0.00', '0.00']], + [22,['СЗИ2 Л6','X32 : 14', '0.00', '0.00']], + [23,['СЗИ2 Л7','X32: 17', '0.00', '0.00']], + [24,['СЗИ3 Л1','X33 : 11', '0.00', '0.00']], + [25,['СЗИ3 Л6','X33 :14', '0.00', '0.00']], + [26,['СЗИ3 Л7','X33: 17', '0.00', '0.00']], + [27,['СЗИ4 Л1','X34 : 11', '0.00', '0.00']], + [28,['СЗИ4 Л6','X34 :14', '0.00', '0.00']], + [29,['СЗИ4 Л7','X34: 17', '0.00', '0.00']], + [30,['СЗИ1 Л2','X38 : 11', '0.00', '0.00']], + [31,['СЗИ1 Л3','X38 : 14', '0.00', '0.00']], + [32,['СЗИ2 Л2','X39 : 11', '0.00', '0.00']], + [33,['СЗИ2 Л3','X39 : 14', '0.00', '0.00']], + [34,['СЗИ3 Л2','X40 : 11', '0.00', '0.00']], + [35,['СЗИ3 Л3','X40 : 14', '0.00', '0.00']], + [36,['СЗИ4 Л2','X41 : 11', '0.00', '0.00']], + [37,['СЗИ4 Л3','X41 :14', '0.00', '0.00']], + [38,['СЗИ1 Л4','X42 : 11', '0.00', '0.00']], + [39,['СЗИ1 Л5','X42 :14', '0.00', '0.00']], + [40,['СЗИ2 Л4','X43 : 11', '0.00', '0.00']], + [41,['СЗИ2 Л5','X43 : 14', '0.00', '0.00']], + [42,['СЗИ3 Л4','X44 : 11', '0.00', '0.00']], + [43,['СЗИ3 Л5','X44 :14', '0.00', '0.00']], + [44,['СЗИ4 Л4','X45 : 11', '0.00', '0.00']], + [45,['СЗИ4 Л5','X45 : 14', '0.00', '0.00']], + [46,['БИ РТР №1','X47 : 2', '0.00', '0.00']], + [47,['БИ РТР №2','X47 : 5', '0.00', '0.00']], + [48,['БИ РТР №3','X47 : 8', '0.00', '0.00']], + [49,['БИ РТР №4','X47 : 11', '0.00', '0.00']], + [50,['СИ В Лб','Х49 : 21', '0.00', '0.00']], + [51,['СИ В ПрБ','Х49 : 19', '0.00', '0.00']], + [52,['СИ Г Лб','Х49 : 28', '0.00', '0.00']], + [53,['СИ Г ПрБ','Х49 : 30', '0.00', '0.00']], + [54,['СИ Д Лб','Х49 : 13', '0.00', '0.00']], + [55,['СИ Д ПрБ','Х49 : 11', '0.00', '0.00']], + [56,['СИ Е Лб','Х49 : 26', '0.00', '0.00']], + [57,['СИ Е ПрБ','Х49 : 35', '0.00', '0.00']]]