连接多行串行字符串

Concatenate multiple row serial string

我已经成功地编写了一串 ASCII 命令以通过 RS232 发送到热敏标签打印机,代码执行得非常完美,尽管我想自动化代码以便在将值或字符串存储到变量中时它作为 ASCII 命令的一部分打印。

我做了一些研究并尝试查看旧帖子,但我无法检索到与我的问题相关的任何信息。

我遇到的第一个问题是字符串中存在多个引号,我相信已通过添加三引号语法解决了这个问题。 第二个问题是我想连接也在多行上的字符串。

用变量的值替换要在字符串中打印的值以便成功连接并发送多行数据的最佳方法是什么?

这是我的代码:

    serial_port.write  (b'SIZE 780,516\r\n'\
                        b'GAP 2 mm,0\r\n'\
                        b'DIRECTION 1\r\n'\
                        b'FOORMFEED\r\n'\
                        b'CLS\r\n'\
                        b'TEXT 25,50,"0",0,10,10,"Quality"\r\n'\
                        b'TEXT 25,50,"0",0,10,10,"Grade"\r\n'\
                        b'TEXT 25,75,"0",0,10,10,"Date and Time"\r\n'\
                        b'TEXT 25,100,"0",0,10,10,"Total Weight (Kg)"\r\n'\
                        b'PRINT 1,1\r\n')

我想替换字符串并实现类似这样的实现:

    quality = 'Quality No 1'
    text_1 = """ b'TEXT 25,25,"0",0,10,10," """
    text_end = """ "\r\n' """             

    serial_port.write  (b'SIZE 780,516\r\n'\
                        b'GAP 2 mm,0\r\n'\
                        b'DIRECTION 1\r\n'\
                        b'FOORMFEED\r\n'\
                        b'CLS\r\n'\
                        text_1 + quality + text_end\
                        b'TEXT 25,50,"0",0,10,10,"Grade"\r\n'\
                        b'TEXT 25,75,"0",0,10,10,"Date and Time"\r\n'\
                        b'TEXT 25,100,"0",0,10,10,"Total Weight (Kg)"\r\n'\
                        b'PRINT 1,1\r\n')

为了让打印机打印质量第一

到目前为止,我无法在不出现语法错误的情况下成功连接字符串,我已经尝试过:

text_1 + quality + text_end\

(text_1 + quality + text_end)\

str(text_1 + quality + text_end)\

而这个 returns 不能混合字节和没有字节文字:

""" b'TEXT 25,25,"0",0,10,10," """ + quality + """ "\r\n' "\

我有点不知所措,有人知道如何使这项工作有效吗? 我希望我已经正确解释了问题。

你想要做的是所谓的字符串格式化,有多种方法可以做到,例如f-strings。一个复杂的问题是字节串(我假设您的串行端口通信需要它)不支持这一点。因此,您可以使用常规字符串,然后在发送前对其进行编码。为此,您需要明确指定编码,例如ascii:

quality = 'Quality No 1'
commands = 'SIZE 780,516\r\n' + \
           'GAP 2 mm,0\r\n' + \
           'DIRECTION 1\r\n' + \
           'FOORMFEED\r\n' + \
           'CLS\r\n' + \
           f'TEXT 25,50,"0",0,10,10,"{quality}"\r\n' + \
           'TEXT 25,50,"0",0,10,10,"Grade"\r\n' + \
           'TEXT 25,75,"0",0,10,10,"Date and Time"\r\n' + \
           'TEXT 25,100,"0",0,10,10,"Total Weight (Kg)"\r\n' + \
           'PRINT 1,1\r\n'
serial_port.write(commands.encode('ascii'))