Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -27,12 +27,12 @@ EXCEPT_MSGS = {
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||||
parser.add_argument('-modbus-unit', default=1, type=int, help='Номер устройства Modbus')
|
||||
parser.add_argument('-serial-baud', default=115200, type=int, help='Скорость последовательного порта, бод')
|
||||
parser.add_argument('-serial-port', default=DEF_SERIAL, type=str, help='Последовательный порт для подключения к Modbus серверу')
|
||||
parser.add_argument('-udp-addr', default='localhost', type=str, help='Адрес для отправки сообщений приложению')
|
||||
parser.add_argument('-udp-port-rx', default=44100, type=int, help='Порт для приёма сообщений от приложения')
|
||||
parser.add_argument('-udp-port-tx', default=48000, type=int, help='Порт для отправки сообщений приложению')
|
||||
parser.add_argument('--modbus-unit', default=1, type=int, help='Номер устройства Modbus')
|
||||
parser.add_argument('--serial-baud', default=115200, type=int, help='Скорость последовательного порта, бод')
|
||||
parser.add_argument('--serial-port', default=DEF_SERIAL, type=str, help='Последовательный порт для подключения к Modbus серверу')
|
||||
parser.add_argument('--udp-addr', default='localhost', type=str, help='Адрес для отправки сообщений приложению')
|
||||
parser.add_argument('--udp-port-rx', default=44100, type=int, help='Порт для приёма сообщений от приложения')
|
||||
parser.add_argument('--udp-port-tx', default=48000, type=int, help='Порт для отправки сообщений приложению')
|
||||
opts, opts_unk = parser.parse_known_args()
|
||||
print_opts_error(opts_unk)
|
||||
run_sync_client(opts.udp_addr, opts.udp_port_rx, opts.udp_port_tx, opts.serial_port, opts.serial_baud, opts.modbus_unit)
|
||||
@@ -41,7 +41,7 @@ def main():
|
||||
def run_sync_client(udp_addr, udp_port_rx, udp_port_tx, serial_port, serial_baud, unit_num):
|
||||
sock = socket(AF_INET, SOCK_DGRAM)
|
||||
sock.bind((udp_addr, udp_port_rx))
|
||||
log.debug(f'привязан к адресу {udp_addr}:{udp_port_rx}')
|
||||
log.info('привязан к адресу %s:%d' % (udp_addr, udp_port_rx))
|
||||
|
||||
json_decoder = json.JSONDecoder()
|
||||
json_encoder = json.JSONEncoder()
|
||||
@@ -50,7 +50,7 @@ def run_sync_client(udp_addr, udp_port_rx, udp_port_tx, serial_port, serial_baud
|
||||
while not client.connect(): # Ждать подключения к серверу
|
||||
time.sleep(3)
|
||||
|
||||
log.debug(f'подключен к серверу через {serial_port} на скорости {serial_baud} бод')
|
||||
log.info('подключен к серверу через \"%s\" на скорости %d бод' % (serial_port, serial_baud))
|
||||
|
||||
while True:
|
||||
udp_data = sock.recv(2048) # Ждать команду от приложения
|
||||
@@ -91,14 +91,14 @@ def run_sync_client(udp_addr, udp_port_rx, udp_port_tx, serial_port, serial_baud
|
||||
rc_msg = EXCEPT_MSGS[code]
|
||||
tx_data = json_encoder.encode({'code': 'exception', 'data': rc_msg})
|
||||
sock.sendto(bytes(tx_data), (udp_addr, udp_port_tx))
|
||||
log.debug(
|
||||
log.error(
|
||||
'ошибка при выполнении команды: \"%s\". данные: \"%s\", порт: \"%s\", скорость: %s'
|
||||
% (code, data, serial_port, serial_baud))
|
||||
% (code, data, serial_port, serial_baud))
|
||||
|
||||
|
||||
def print_opts_error(opts: list) -> None:
|
||||
for opt in opts:
|
||||
log.debug('внимание: неизвестный аргумент: \"%s\"\n' % opt)
|
||||
log.warning('внимание: неизвестный аргумент: \"%s\"' % opt)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
@@ -8,7 +8,7 @@ def get_logger(source_file, log_dir='logs'):
|
||||
log_format = '[%(asctime)s] %(module)s:%(lineno)s %(message)s'
|
||||
logging.basicConfig(format=log_format)
|
||||
log = logging.getLogger()
|
||||
log.setLevel(logging.DEBUG)
|
||||
log.setLevel(logging.INFO)
|
||||
file_handler = logging.FileHandler(f'{log_dir}/{source_file}.log')
|
||||
file_handler.setFormatter(logging.Formatter(log_format))
|
||||
log.addHandler(file_handler)
|
||||
|
||||
@@ -37,7 +37,7 @@ class CallbackModbusSlaveContext(ModbusSlaveContext):
|
||||
"""
|
||||
super(CallbackModbusSlaveContext, self).setValues(fx, address, values)
|
||||
fx = FX_CODES[fx] if fx in FX_CODES else '**error**'
|
||||
log.debug(f'setValues() fx:{fx} address:{address} values:{values}')
|
||||
log.debug('setValues() fx:%s address:%s values:%s' % (fx, address, values))
|
||||
|
||||
def getValues(self, fx, address, count=1):
|
||||
""" Устанавливает требуемые значения хранилища данных.
|
||||
@@ -47,24 +47,21 @@ class CallbackModbusSlaveContext(ModbusSlaveContext):
|
||||
"""
|
||||
values = super(CallbackModbusSlaveContext, self).getValues(fx, address, count)
|
||||
fx = FX_CODES[fx] if fx in FX_CODES else '**error**'
|
||||
log.debug(f'getValues() fx:{fx} address:{address} values:{values}')
|
||||
log.debug('getValues() fx:%s address:%s values:%s' % (fx, address, values))
|
||||
return values
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||||
parser.add_argument('-serial-baud', default=115200, type=int, help='Скорость последовательного порта, бод')
|
||||
parser.add_argument('-serial-port', default=DEF_SERIAL, type=str, help='Последовательный порт для подключения клиента Modbus ')
|
||||
parser.add_argument('--serial-baud', default=115200, type=int, help='Скорость последовательного порта, бод')
|
||||
parser.add_argument('--serial-port', default=DEF_SERIAL, type=str, help='Последовательный порт для подключения клиента')
|
||||
parser.add_argument('--timeout', default=0.005, type=str, help='Таймаут последовательного порта')
|
||||
opts, opts_unk = parser.parse_known_args()
|
||||
print_opts_error(opts_unk)
|
||||
run_server(opts.serial_port, opts.serial_baud)
|
||||
|
||||
|
||||
def run_server(serial_port, serial_baud):
|
||||
store = CallbackModbusSlaveContext()
|
||||
context = ModbusServerContext(slaves=store, single=True)
|
||||
# timeout=.005 - нужно обязательно указать, иначе не работает
|
||||
StartSerialServer(context=context, framer=ModbusRtuFramer, port=serial_port, timeout=.005, baudrate=serial_baud)
|
||||
log.info("серевер-заглушка Modbus serial работает: %s:%d" % (opts.serial_port, opts.serial_baud))
|
||||
StartSerialServer(context=context, framer=ModbusRtuFramer, port=opts.serial_port, timeout=opts.timeout, baudrate=opts.serial_baud)
|
||||
|
||||
|
||||
def print_opts_error(opts: list) -> None:
|
||||
|
||||
@@ -4,23 +4,24 @@ shader_type canvas_item;
|
||||
|
||||
/* Закрашенная окружность */
|
||||
uniform float tick_update = 0.0; /* Время последнего обновления, мс */
|
||||
const float red_channel = 0.972549;
|
||||
const float green_channel = 0.12549;
|
||||
const float blue_channel = 0.411765;
|
||||
const float time_delta = 0.5; /* Время вспышки при обновлении, c */
|
||||
const float ds = 0.01; /* Относительное расстояние на котором выполняется сглаживание краёв */
|
||||
const vec2 center = vec2(0.125, 0.125); /* Центр должен быть в (0.5, 0.5), но это не так */
|
||||
const float radius = 0.075 - ds * 2.0; /* Радиус должен быть 0.5, но это не так */
|
||||
const float alpha_offset = 0.25; /* Изменние скорости альфа канала */
|
||||
const float alpha_offset = 0.5; /* Изменние скорости альфа канала */
|
||||
const float alpha_main = 1.0;
|
||||
|
||||
void fragment()
|
||||
{
|
||||
float time_now = TIME;
|
||||
float alpha = 1.0;
|
||||
float alpha = 0.0;
|
||||
if ((time_now - tick_update) < time_delta)
|
||||
{
|
||||
alpha = (time_delta - (time_now - tick_update)) * alpha_offset;
|
||||
alpha = time_delta - (time_now - tick_update) * alpha_offset;
|
||||
}
|
||||
else{
|
||||
alpha = 0.0;
|
||||
}
|
||||
vec4 color = vec4(0.972549, 0.12549, 0.411765, 1.0 - alpha);
|
||||
vec4 color = vec4(red_channel, green_channel, blue_channel, alpha_main - alpha);
|
||||
COLOR = color * smooth_px(length(UV - center), radius, ds);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user