Merge remote-tracking branch 'origin/master'

This commit is contained in:
lepshiy
2024-10-14 09:46:27 +03:00
5 changed files with 27 additions and 29 deletions

View File

@@ -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__':

View File

@@ -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)

View File

@@ -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:

View File

@@ -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);
}