精华内容
下载资源
问答
  • 报文格式化程序.zip

    2020-02-20 16:20:37
    主要是对杂乱无章的报文进行格式化整理。如整篇的串口数据,复制进报文格式化工具然后确定后。报文按照规律自动整理。
  • MODBUS RTU的报文格式

    千次阅读 2017-06-30 17:21:57
    如果是想通过串口调试助手给PLC发命令的话,假设PLC从站地址为1的情况下,比如要对Q0.0进行置位的话,可以发如下命令: 01 0F 00 00 00 08 01 01 3F 55 其中: 01:从站地址,指的就是PLC站地址 0F:功能码,用来...
    如果是想通过串口调试助手给PLC发命令的话,假设PLC从站地址为1的情况下,比如要对Q0.0进行置位的话,可以发如下命令:
    01 0F 00 00 00 08 01 01 3F 55
    其中:
    01:从站地址,指的就是PLC站地址
    0F:功能码,用来写多路位变量的功能码
    00:预写的寄存器起始地址高8位
    00:预写的寄存器起始地址低8位
    00:预写的寄存器个数的高8位
    08:预写的寄存器个数的低8位
    01:预写寄存器数据的字节计数,8个位变量组成一个字节,所以为01
    01:预写的寄存器数据内容,最低位为1,即就是给Q0.0置位
    3F:CRC校验的低8位
    55:CRC校验的高8位
    如果是想通过串口调试助手给PLC发命令的话,假设PLC从站地址为1的情况下,比如要对Q0.0进行置位的话,可以发如下命令:
    01 0F 00 00 00 08 01 01 3F 55
    其中:
    01:从站地址,指的就是PLC站地址
    0F:功能码,用来写多路位变量的功能码
    00:预写的寄存器起始地址高8位
    00:预写的寄存器起始地址低8位
    00:预写的寄存器个数的高8位
    08:预写的寄存器个数的低8位
    01:预写寄存器数据的字节计数,8个位变量组成一个字节,所以为01
    01:预写的寄存器数据内容,最低位为1,即就是给Q0.0置位
    3F:CRC校验的低8位
    55:CRC校验的高8位
    上述,如果只是对一个Q区的位进行置位、复位操作的话,也可以用05功能码,命令如下:
    01 05 00 00 FF 00 8C 3A
    解释如下:
    01:地址码
    05:功能码
    00 00:寄存器地址
    FF:对位变量置位的数据内容,如果复位的话则为00
    00:位变量的原状态
    8C 3A:CRC校验
    如果要对多路Q区执行写操作的话,则寄存器起始地址必须为Q0.0、Q1.0、Q2.0等开始,寄存器个数必须是8的整倍数!
    展开全文
  • 我用串口调试助手发送ASCII码数据,报文格式是 STX 0 F ETX L这些控制字符帧头帧尾STX,ETX应该怎么输入?
  • 报文2

    2019-07-15 21:42:24
    报文是将你要传输的数据,根据协议指定的格式组成的一个字节数组。它主要是用于传输数据的,可以是串口并口传输,也可以是TCP/IP传输. 报文的意义在于.可以告诉你要传输数据的对象,数据是什么,而且保证数据的完整性...

    报文是将你要传输的数据,根据协议指定的格式组成的一个字节数组。它主要是用于传输数据的,可以是串口并口传输,也可以是TCP/IP传输.
    报文的意义在于.可以告诉你要传输数据的对象,数据是什么,而且保证数据的完整性(根据协议).

    展开全文
  • 串口调试组手CommixAll

    2020-01-16 13:49:19
    CommixAll.exe 串口调试组手,主要用于发送和接收报文,报文格式为16进制 modbus
  • 串口助手工具

    2016-07-23 13:32:48
    具备四组报文定时轮发功能; 具备一组报文自动生成功能,可按照约定自动生成时间报文...支持ASCII、16进制两种报文格式,可在线切换; 支持前高后低、前低后高两种数据格式的在线切换; 可配置选择保存报文到TXT文件。
  • 为了提高串口数据通信的准确率、方便上层应用编程,...协议采用自定义报文格式封装串口数据帧的方式工作,利用报文应答机制保证传输正确性,该协议在线路故障出现时能有效检测并采取报文重发等措施保证数据准确传输。
  • 异常报文帧的处理问题描述在串口通信中,由于各种内外干扰的...问题复现正常情况下,下位机发送帧报文格式为:0xAA 0xAA 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0xFE模拟下位机发送异常报文(发送中丢失2个字...

    异常报文帧的处理

    问题描述

    在串口通信中,由于各种内外干扰的存在,可能会导致报文丢帧等异常情况。当出现这种情况时,上位机需要异常报文进行处理,否则可能会解析错报文,甚至影响后续正常报文的接收。

    问题复现

    正常情况下,下位机发送帧报文格式为:0xAA 0xAA 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0xFE

    模拟下位机发送异常报文(发送中丢失2个字节),上位机接收并解析报文。

    原始报文如下:

    82baf697467c1fe37b918a4b8840f9f7.png

    复现步骤:

    1. 总共发送1000帧报文,每帧报文的规律是一致的(异常帧除外)

    2. 在第100帧报文里,故意丢失2个字节形成异常帧

    3. 查看前后报文规律是否一致

    结果记录: 

    72a61e3791ec3fa570ab45ce70a2edcd.png

    任意通道,第100帧前后的数据规律不一样。问题得到复现。

    问题原因

    未对报文帧的帧头和帧尾做相应的校验处理,导致数据错位情况。后续报文也跟着错了。

    具体分析如下:AA AA 02 00 8D 01 90 03 20 FE AA AA

    02 00 8D为前3个byte类型,无影响;01 90 组成1个半字;03 20组成1个半字;FE AA组成1个半字;最后1个半字已经不对了,该帧应该被丢弃。后续的报文都被影响了。

    问题方案

    帧头

    格式:0XAA 0XAA ...

    只有符合定义的帧头才进行数据内容接收,

    帧尾

    格式:... 0XFE

    只有符合定义的帧尾才进行数据内容解析。关于帧尾,也可以加校验码(和校验或者CRC),这样出错概率更低。

    详细设计

    private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
    {
    SerialPort sp = (SerialPort)sender;
    int tmp = 0;
    int total_bytes = sp.BytesToRead;

    Console.WriteLine(total_bytes);
    //标准帧数据
    byte[] buf_serial = new byte[10]; // 串口缓冲区

    // 读取1个字节
    tmp = sp.ReadByte();
    if (tmp == 0xAA)
    {
    tmp = sp.ReadByte();
    if (tmp == 0xAA) // 帧头校验
    {
    sp.Read(buf_serial, 0, 10); // 读取后续10个字节
    if (buf_serial[9] == 0xFE) // 帧尾校验
    {
    for (int i = 0; i < 10; i++)
    {
    // 有效帧处理
    lock (apple)
    {
    switch (i % 10)
    {
    case 0:
    serialDataCh0Queue.Enqueue(buf_serial[i]);
    break;
    case 1:
    serialDataCh1Queue.Enqueue(buf_serial[i]);
    break;
    case 2:
    serialDataCh2Queue.Enqueue(buf_serial[i]);
    break;
    case 3:
    tmp = buf_serial[i];
    break;
    case 4:
    serialDataCh3Queue.Enqueue((tmp << 8) + buf_serial[i]);
    break;
    case 5:
    tmp = buf_serial[i];
    break;
    case 6:
    serialDataCh4Queue.Enqueue((tmp << 8) + buf_serial[i]);
    break;
    case 7:
    tmp = buf_serial[i];
    break;
    case 8:
    serialDataCh5Queue.Enqueue((tmp << 8) + buf_serial[i]);
    break;
    case 9:
    break;
    default:
    break;
    }
    }
    }

    }
    }
    }
    else
    {
    ;
    }
    }

    问题验证

    fbeb7a33897fba0f834ffc2297adfbaf.png

    修改后的版本,异常报文被直接丢弃,后续报文被正确处理

    后面的情况,也需验证,结果略。

    多N个字节

    正常发送前,多1~2个异常数据。已验证。

    少N个字节

    正常发送时,某一帧内容丢失多个字节,已验证。

    小结

    为了确保通讯内容的准确和可靠,每帧数据都需要进行帧头和帧尾校验,如果校验不通过,该帧应该丢弃。如果通过,才能作为正确数据接收并处理。

    此方法只能说解决了99%的问题,对于一些特殊报文,仍然存在丢失若干帧的可能,不过概率极低,当前这种处理够用了。

    deec45e9b87aa2c4f83132e010cae32d.png

    展开全文
  • GB32960报文分析工具

    2018-06-17 21:18:52
    新能源汽车国家标准GB32960报文分析工具能够将符合GB32960协议的报文日志通过EXCEL表格导出,用于分析车辆行驶过程中的数据变化过程。 TBOX 上传到服务器的数据, 在串口都有一个同步输出,串口输出的数据可读性差,...
  • 1、使用本软件前请先确认时间同步报文格式是否正常 RS232时间同步报文格式如下: #abcdYYYYMMDDhhmmssCC<CR><LF> (1)、a: 闰秒标识 (2)、b: 时区标识 (3)、c: 夏令时标识 (4)、d: 时间质量 (5)、...
  • 图3光电隔离抗干扰电路图2)串口服务器的应用模块。串口服务器是把单片机发出来的数据包转换为以太网数据报文格式,然后转发到Internet上,实现数据网上传输。串口服务器的输入口是单片机经过MAX232转换后的
  • GPS串口对时软件V2.2

    2020-02-29 15:20:30
    软件对GPS设备串口报文进行解析并完成本机自动对时。 5. 本软件适用于以ST开头的对时报文协议,数据格式定义如下: <S><T> D D D D D D D D D D D D D D D 同 帧 时时分分秒秒日日月月年年年年校 结 ...
  • 根据工作上遇到的有关串口调试的需求,编写一个简单的串口调试工具,非常适合嵌入式工作者的串口调试,支持自动回复,重复发送,数据校验等功能,更有小工具快捷呼出功能,如快速打开设备管理器、报文格式化、ASCII...
  • 串口调试助手

    2016-07-16 15:46:50
    本软件不进行报文帧校验处理,通过指定解析起点的模式,按照约定数据格式解析报文; 可自动生成一组报文,支持“和校验”、“异或和校验”和“CRC16校验”,可自动生成对时数据帧; 可手动解析当前报文,支持数据前...
  • 串口助手模拟

    2018-12-20 11:14:09
    模拟设备,发送串口数据 基于界面的串口监控工具 串口设备模拟使用方法如下: 1. 命令行启动 SerialportServer -port port -frm framfile 参数port: 所打开的串口,在windows下为诸如COM1 COM2的名字,在linux下则...
  • 根据工作上遇到的有关串口调试的需求,编写一个简单的串口调试工具,非常适合嵌入式工作者的串口调试,支持自动回复,重复发送,数据校验等功能,更有小工具快捷呼出功能,如快速打开设备管理器、报文格式化、ASCII...
  • 编写一个简单的串口调试工具,非常适合嵌入式工作者的串口调试,支持自动回复,重复发送,数据校验,关键字高亮等功能,更有小工具快捷呼出功能,如快速打开设备管理器、报文格式化、ASCII码速查等。 新功能介绍:...
  • VB串口通信源码210个

    千次下载 热门讨论 2013-10-15 11:32:27
    013、VB编写的RS232串口通信测试程序,以txt格式接受,可定义发送字符 014、VB编写的SouthStar串口测试与51串口烧写器V1.0版 015、VB编写的串口调试助手1.0的源码 016、VB编写的串口短信发送程序,需要数据线支持 017、...
  • 编写一个简单的串口调试工具,非常适合嵌入式工作者的串口调试,支持自动回复,重复发送,数据校验,关键字高亮等功能,更有小工具快捷呼出功能,如快速打开设备管理器、报文格式化、ASCII码速查等。 新功能介绍:...
  • 串口通讯控件MyComm使用手册

    千次阅读 2008-06-30 21:47:00
     报文格式 报文的格式通常为:前缀 + 数据长度 + 数据 + 后缀。MyComm参数含义 msgString:为发送到串口的数据(编码后的);lenDataStart为返回数据串中数据长度域起始位置(从1开始);lenDataEnd 为返回数据串中...

    串口通讯控件MyComm用于通过浏览器和串口通讯,目前主要用于和银行的POS机通讯。

     

    • 报文格式
      • 报文的格式通常为:前缀 + 数据长度 + 数据 + 后缀。
      • MyComm参数含义
        • msgString:为发送到串口的数据(编码后的);
        • lenDataStart为返回数据串中数据长度域起始位置(从1开始);
        • lenDataEnd 为返回数据串中数据长度域结束位置(从1开始);
        • appendLength 为附加数据长度(数据域之后的附加字符的长度)。
      • 报文示例:如返回报文~~00160400111111111111XXXXXXXX^^,其中~~为前缀,之后4位为数据长度域(数据0016),数据为400111111111111,XXXXXXXX^^为后缀。则对应的参数值为lenDataStart=3 ,lenDataEnd=6 ,appendLength=10
    • 使用方法
      • Request接口为:Public Function Request(ByVal msgString As String, ByVal lenDataStart As Integer, ByVal lenDataEnd As Integer, ByVal appendLength As Integer) As String
      • RequestWithLen接口为:Public Function RequestWithLen(ByVal msgString As String, ByVal lenDataStart As Integer, ByVal lenDataEnd As Integer, ByVal appendLength As Integer, ByVal customDataLen As Integer) As String
    • 控件设置方法
      • 超时设置:Public Sub SetMaxTimeOut(maxTimeOut As Integer)。在JavaScript调用request向串口发送数据前调用,MyComm从发送数据给串口时开始计时,如果超过规定时间还没有收到完整应答,则抛出超时错误。由于银行的POS机一般设置超时时间为90秒至120秒,如果这段时间内银行内部服务还没有处理完毕,则POS抛出异常。所以MyComm设置的默认超时为120秒。
      • 编码方法设置:Public Sub SetHexEncode(hexEncodeMode As Boolean)。传入true时设置为16进制编码,传入false设置为Base64编码。
      • 中断控制:Public Sub BreakComm()。调用此方法即可以直接中断接收。
      • 通讯设置:
        • 设置端口号:Public Sub SetCommPort(commPortNo As Integer)。默认为Com1口
        • 设置波特率:Public Sub SetCommSettings(commSettingsString As String)。默认为"9600,N,8,1",即使用9600 波特,无奇偶校验,8 位数据,一个停止位。
        • 设置输入长度:Public Sub SetCommInputLen(commInputLength As Integer)。默认为0,即读入整个缓冲区。
        • 设置传输数据类型:Public Sub SetCommInputMode(commInputModeType As Integer) 。默认为传输二进制数据。
    • FAQ
      • 无返回数据时如何调用?
        • 如向串口发送数据,无返回数据时调用方法为RequestWithLen("XXX",0,0,0,0);
      • 如何自行变更端口号?
        • 在页面上新增一个域,输入端口号,利用Javascript改变控件的端口号,如访问Com2口代码为:SetCommPort(2)
      • 版本兼容么?
        • MyComm目前存在多个版本:17版本采用Base64编码数据,19版本采用16进制编码数据,27版本及以后同时支持Base64编码和16进制编码。(因为用js传送数据时,如果数据中存在加号'+',则后台收到的时候会变为空格' ',如此则解码时出现一位的不同。故17版本变为19版本) 
      • Base64如何编码解码?
        • 编码:String valueString = new BASE64Encoder().encode(values);
        • 解码:byte[] data = new BASE64Decoder().decodeBuffer(msg);
      • 16进制如何编码解码?
        • 编码:String valueString = CodeUtils.byteArrayToHexString(values, false);
        • 解码:byte[] data = CodeUtils.hexStringToByteArray(msg);

     

    展开全文
  • 在与串口通信时,我需要给串口发送指定报文格式的命令,在接收到串口返回的数据后需要转换成浮点数并且显示出来。这里讲一下我自己碰到的问题,以及我发现的解决方法,如果大家有更好的方法可以在下方留言一起讨论。...
  • Arduino 通过串口给上位机发数据包研究前言数据传输协议需要根据实际情况制定传输协议填入报文上位机解析 前言 目前有个需求是要用Arduino从寄存器读传感器数据,然后把数据发送给Unity开发的上位机,在发送数据时,...
  • 同时,此文也适于其它通讯程序中艰数据报文的处理。 首先,应该指出的是,所有这些处理均在串口事件处理函数oncommunication()中进行。每当串口缓冲区中有一个或一个以上字符时触发串口通讯事件,该事件就驱动...
  • 这是基于串口通信的python源程序,亲自调试没有问题。将自己PC通过串口连接其他PC或者兼容串口通信的设备或者传感器,可以读取到对方发送的数据。注意第一次发送的cmd地址指令集中的数据要符合自己的报文通信格式
  • GPS串口自动对时软件

    2020-03-17 04:20:18
    软件适用于以下报文格式对时信息。 #GPS 数据格式: #$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12><CR><LF>...
  • 串口侦听器

    热门讨论 2008-08-01 17:16:17
    其原理是,利用计算机的两个串口分别与两台设备互联,通过SerialTrace进行设备间的报文中继转发,并在此基础上实现数据监控。 <br>SerialTrace的界面美观精致,侦听、显示、仿真功能简捷易用,符合用户的操作和...
  • 报文格式为FLV格式,不定长度的祯类型。 现在我需要如何处理才能让串口接收到的数据以十六进制方式存储为一个char 数组呢,因为后面还要根据数据的内容来做不同的处理。需要判断祯头祯尾 来吧里面的数据解析出来。 ...
  • 最近遇到一个需求,利用树莓派去采集一个串口设备的所有数据,设备会主动上报数据,但是呢这个设备是一个集合设备,会上报的报文头都不一样,比如灯亮度或者开关会上报21 12 ·········,风速会上报71 23 ·...

空空如也

空空如也

1 2 3 4 5 6
收藏数 107
精华内容 42
关键字:

串口报文格式