我的应用程序发送以[CR] + [LF]终止的NMEA字符串。 NMEA标准规定了这种格式(例如来自陀螺罗盘的航向信息):'$ HEHDT,2.0,T * 2D [CR] [LF]'。 在接收端,字符串被丢弃为不完整。 如何附加和发送这些字符?
发送很简单,只有几行代码(对象是Cp1tx:TIdUDPServer;):
...
Cp1tx.Active:= true;
Cp1tx.Broadcast(InStr,8051,'',IndyTextEncoding_8Bit);
Cp1tx.Active:= false;
...
顺便说一下,我正在使用Delphi 10.1柏林。
答案 0 :(得分:5)
假设InStr是您要发送的字符串:
Cp1tx.Broadcast(InStr + #13#10, 8051, '', IndyTextEncoding_8Bit);
答案 1 :(得分:0)
表达CRLF的方法有多种:
Instr := '$HEHDT,2.0,T*2D'#13#10;
Instr := '$HEHDT,2.0,T*2D'#$D#$A;
// CR and LF are defined in the IdGlobal unit
Instr := '$HEHDT,2.0,T*2D'+CR+LF;
// EOL is defined in the IdGlobal unit
Instr := '$HEHDT,2.0,T*2D'+EOL;
答案 2 :(得分:0)
感谢大家。 我想我自欺欺人了。无论我如何添加CRLF字符,它现在运行正常。
历史评论: CRLF(并按此顺序!)被发明用于由1/2 HP电机驱动的旧机械电传机器。将滑架移回左侧位置需要一些时间。这就是CR首先发送然后发送LF的原因,所以所有机制都有时间对齐并准备好在新线上打印第一个字符。
新手电传操作员很难学到它。发送LF和CR然后键入文本将托架困在向左的路上,类型的臂缠结,通常驱动轴卡住或断开。记住这是惊人的50波特的高速传输!我花了无数个小时修理破坏的电传机器。嗯,现在情况有所不同,但我们仍然坚持旧的CRLF惯例。
答案 3 :(得分:-1)
当我需要经常发送CR + LF时,我声明一个Const并根据需要引用它。
Const
CRLF = #13+#10;
{ To use this do the following }
MyString := 'This string ends with a Carriage Return / Line Feed'+CRLF;
您还可以使用Chr(10)+ Chr(13)添加回车/换行;
例如;
MyString := 'This string also ends with a CRLF' + Chr(10) + Chr(13)
+ 'But it could equally end with an Escape Code' + Chr(27) // or #27
我已经编辑了我的答案,因为有人指出我的CR LF输入顺序错误。