Мне удалось вообще избежать TelnetLib
и я создал tcp
клиента, используя python3
.У меня уже был размер полезной нагрузки из моей свалки Wireshark (22 байта), поэтому я продолжаю получать 22 байта информации. Очевидно, что модуль отправляет две различные полезные данные по 22 байта
- Первая (фрейм) полезная нагрузка имеет информацию
preamble
, serial
, article
, channel
- Вторая (фрейм) полезная нагрузка имеет такую информацию, как
bytes per frame
, measuring value counter
, measuring value Channel 1
, measuring value Channel 2
, measuring value Channel 3
Информация находится в int32
и поэтому нуждается вформула для преобразования в реальные показания (упомянутые в руководстве по эксплуатации)
(как упомянуто @J_H, распаковка была, как он упомянул в своем ответе с небольшими изменениями)
Код
import socket
import time
import struct
DRANGEMIN = 3261
DRANGEMAX = 15853
MEASRANGE = 50
OFFSET = 35
# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('169.254.168.150', 10001)
print('connecting to %s port %s' % server_address)
sock.connect(server_address)
def value_mm(raw_val):
return (((raw_val - DRANGEMIN) * MEASRANGE) / (DRANGEMAX - DRANGEMIN) + OFFSET)
if __name__ == '__main__':
while True:
Laser_Value = 0
data = sock.recv(22)
preamble, article, serial, x1, x2 = struct.unpack('<4sIIQH', data)
if not preamble == b'SAEM':
status, bpf, mValCounter, CH1, CH2, CH3 = struct.unpack('<hIIIII',data)
#print(CH1, CH2, CH3)
Laser_Value = CH3
print(str(value_mm(Laser_Value)) + " mm")
#print('RAW: ' + str(len(data)))
print('\n')
#time.sleep(0.1)
Конечно, это дает мне необходимую информацию, и я сравнил информацию с помощью программного обеспечения, которое компания предоставляет.