Основной из них — симуляция зашумленной последовательной линии с помощью socat (сейчас у меня есть версия 1.7.4)
Я уточню:
У меня есть программное обеспечение, которое связано с протоколами через последовательный порт. Мне нужно проверить его надежность и производительность на наличие ошибок и проблем со связью, короче говоря, на наличие зашумленных каналов.
С помощью socat я могу создать «чистый» виртуальный канал:
Код: Выделить всё
socat -d -d -v -x pty,raw,echo=0,link=/tmp/ttyV1 pty,raw,echo=0,link=/tmp/ttyV2
Я думал о скрипте Python, который каким-то образом получает данные, отправленные в ttyV1, обрабатывает их, а затем передает в ttyV2.
Я попробовал это, запустив 3 экземпляра socat:
- socatX: это то, что создает pty с помощью socat -d - d -v -x pty,raw,echo=0,link=/tmp/ttyV1 pty,raw,echo=0,link=/tmp/ttyV2
- socat1: is socat -d -d -v -x /tmp/ttyV1,raw,echo=0 EXEC: "python3 беспокой_script.py",pty,raw,echo=0
socat2: is socat -d -d -v -x /tmp/ttyV2,raw,echo=0 EXEC: "python3 беспокоить_script.py",pty,raw, echo=0
Я попробовал завершить socat1 и socat2, не трогая socatX, и данные продолжаются течь. Поэтому я подумал, что отправка данных в /tmp/ttyV1 включает только socatX.
затем я кое-что изменил:
- socat1: создайте первый pty с помощью socat -d -d -v -x pty,raw,echo=0,link=/tmp/ttyV1 EXEC: "python3 беспокой_script.py", pty,raw,echo=0
- socat2: создайте второй pty с помощью socat -d -d -v -x pty,raw,echo =0,link=/tmp/ttyV2 EXEC: "python3 беспокой_script.py",pty,raw,echo=0
- socatX: I хотелось бы связать два pty с помощью socat -d -d -v -x /tmp/ttyV1,raw,echo=0 /tmp/ttyV2,raw,echo=0
скрипт Python такой:
Код: Выделить всё
import sys
import random
import os
def disturb(data):
""" Disturb data by altering or deleting characters. """
result = bytearray()
for byte in data:
if random.random() < 0.1: # 10% chance to change a bit in a byte
byte ^= 1 0.05: # 95% chance to keep the byte
result.append(byte)
return bytes(result)
def main():
while True:
data = sys.stdin.buffer.read(128)
if not data:
break
print(f"Received data: {data}") # Debug print
disturbed_data = disturb(data)
print(f"Sending data: {disturbed_data}") # Debug print
sys.stdout.buffer.write(disturbed_data)
sys.stdout.buffer.flush()
if __name__ == '__main__':
main()
PS:
В начале я рассказал вам о других сценариях.
Другой сценарий — это тот, где у меня есть настоящий серийный номер; Я должен создать виртуальный последовательный порт, подключенный к нему, и между ними поместить скрипт, который обрабатывает (шифрует/расшифровывает) данные
Подробнее здесь: https://stackoverflow.com/questions/784 ... erial-line