מודפס אחרי שסיים
COM41 is open
14
(encode נותן מספר תווים-14)
לא מצליח שיקרא את הערך בHEX בserial :
‘$M056801487AE7’
להסבר יותר מפורט מה אני מנסה לעשות?
יש לי מערכת אמבדד שבה מוגדרים ערכים באופן סינטטי (’$M056801487AE7’)
התקשורת למערכת נעשת בחיבור ב RS422. מהצד השני למחשב שלי ה RS422 מחובר בUSB כך שנפתח לי COM41.
(איך אני קורא את הפלט זה נעשה בפורט ביפני עצמו)
עכשיו לבעיה:
איך כותבים ערך ב HEX כך שפייתון יקרא אותו ?
(בקוד שכתבתי למעלה הכל עובד רק שלא קורא את הערך שאני מכניס אלא סופר כמה אותיות רשמתי )
import serial
import logging
import re
import sys
logging_format = '%(levelname)s: %(asctime)s: %(message)s'
logging.basicConfig(level=logging.DEBUG, format=logging_format)
logger = logging.getLogger()
class _RegExLib:
"""Set up regular expressions"""
def __init__(self, regexp):
self._line = re.compile(regexp)
self.var_name = None
self.var_value = None
def match_line(self, line, verbose=False):
try:
match_line = self._line.match(line)
if match_line:
self.var_name = str(match_line.group(1))
self.var_value = str(match_line.group(2))
if verbose:
logger.info("matchObj.group() : " + str(match_line.group()))
return True
else:
return None
except UnicodeDecodeError as err:
logger.exception(err)
except Exception as e:
logger.exception(e)
if __name__ == "__main__":
input_port = "COM41"
baudrate = 921600
try:
url = "spy://" + input_port + "?file=test.txt"
logging.info("url:" + url + " Port:" + input_port + " baudrate:" + str(baudrate))
ser_handler = serial.serial_for_url(url, baudrate, timeout=10)
except serial.SerialException as e:
logging.critical(e)
sys.exit(-100)
#ser_handler = serial.Serial(port, baudrate, timeout=100)
input_file = open(r'C:\Users\ameitlis\PycharmProjects\pycurs\serial\script.42.txt','r')
# input_strings = input_file.read()
#logging.info("input_strings:\n")
#logging.info(input_strings)
# input_strings = input_strings.split("\n")
variables = {}
match = _RegExLib("(\w)=(.*)")
#for variable in input_strings:
#logger.info(variable)
# retval = match.match_line(variable)
# if retval:
#logger.info(match.var_name)
# variables[match.var_name] = match.var_value
logging.info(variables)
# logging.info(variables['a'])
a = b'$M054C01B6EB97\r\n'
try:
if ser_handler is not None:
#ser_handler.write(variables['a'].encode())
ser_handler.write(a)
ser_handler.flush()
except serial.SerialTimeoutException as e:
logging.critical(e)
sys.exit(-101)
except serial.SerialException as err:
logging.critical(err)
sys.exit(-102)
ser_handler.close()
רק אם אפשר בהמשך לזה… איך אני מושך את נתונים מקובץ חיצוני?
הכוונה שבתוכנה הזו קראתי ל “a” וביצעתי את תוכנו של “a”
נשאלת השאלה בשביל לבצע את מה שיש ב “a” ניתן לעשות זאת מקובץ חיצוני?