如何构建串行(RS422或RS232)消息,通过PuTTy与Sick LMS200进行通信?

时间:2017-05-28 12:09:11

标签: networking serial-port

我使用RS422转USB转换器将一台串行设备(病态LMS200)连接到我的电脑。 LMS200和我的PC上的串行设置(波特率,停止位等)匹配并正在通信(使用LMS200附带的应用程序进行验证)。我需要编写一个与LMS通信的自定义应用程序。

在开始构建应用程序之前,我需要弄清楚如何在PC和LMS之间交换数据报。为了解决这个问题,我一直在尝试使用PuTTy手动发送数据报。 LMS手册(https://drive.google.com/open?id=0Byv4owwJZnRYVUJPMXdud0Z6Uzg)定义了数据报类型以及它们的构建方式。例如,在手册的第46页上,可以看到向该单元发送特定指令的数据报;它看起来像这样:02 00 02 00 30 01 31 18

然而,当我使用PuTTy发送字符串02 00 02 00 30 01 31 18时,LMS没有响应(它应该响应)。我相信它没有响应,因为数据报缺少某些串行头数据或我没有正确表示十六进制值(我试图使用000x00表示00h等字节但没有成功)。你能帮我用手册制作有效的串口信息吗?我已经在这很长一段时间了,我很难理解如何将手册中的信息转换为有效的数据报。

如果我能提供更多信息,请告诉我。提前谢谢。

2 个答案:

答案 0 :(得分:1)

完成这项工作的方法是:

(1)下载HexEdit软件,并创建一个包含HEX值的文件(不是ascii表的十进制reprsentations - 其中数字2被传输为32)

(2)使用Tera Term软件然后通过串行线发送文件。

答案 1 :(得分:1)

  

我没有正确表示十六进制值(我尝试使用0x00和00h表示字节,如00但没有成功)。

终端/ PC键盘上的Ctrl键可用于生成ASCII控制字符(即字节值为0x000x1F的不可打印字符)。
就像Shift键生成键的移位或大写字符(而不是其未移位或小写字符)一样,Ctrl键(带有字母或其他几个键)可以生成ASCII控制字符。

典型的美国PC键盘可以通过键入ctrl- @来生成ASCII“NUL”字符,即按住CTRLShift键,然后键入2(因为'@'字符是USA PC键盘上2键的移位字符。

对于'SOH'或0x01类型ctrl-A(即CTRL + A键,类似的方式,Shift不是必需的),对于'STX'或0x02键入ctrl-B,等等 对于'SUB'或0x1A键入ctrl-Z。
对于“ESC”或0x1B,请键入Esc键 对于“FS”或0x1C类型ctrl- \(或CTRL + \)。
对于“GS”或0x1D类型ctrl-](或CTRL + ])。
对于“RS”或0x1E类型ctrl- ^(或CTRL + Shift + 6)。
对于“美国”或0x1F类型ctrl-_(或CTRL + Shift + -)。

请注意,一些常用的ASCII控制代码具有专用键,例如
    'HT'具有Tab的{​​{1}}键,
    “BS”具有0x09的{​​{1}}键,
    'LF'在Backspace中有0x08密钥(在Linux中),以及
    “ESC”具有Enter的{​​{1}}键。

如果您不知道如何从键盘生成ASCII控制字符,则可以使用十六进制编辑器(不是文本编辑器)在文件中创建消息,然后发送文件。

实际上,二进制文件可能是手动生成二进制消息的最可靠方法。当shell或应用程序将代码作为特殊指令(例如ctrl-C或ctrl-Z中止程序)而不是将其视为数据时,控制代码的手动输入可能会失败。
转义输入数据是可以避免这种情况的一种方法 手机调制解调器在透明(也称为数据)模式下设法避免此问题,需要时间保护(即特定的空闲时间)来分离和区分数据命令。