串口调试方法

一、VP软件模拟调试

调试目的:模拟工程在串口屏上的运行,同时使用串口指令进行简单的显示操作

1、新建工程

1.1、打开vp软件,进入左上角文件菜单,新建一个任意型号的工程;

1.2、拖入一个文本控件到面板中,调整宽高到合适尺寸;

1.3、右下角页面栏点击图标‘ + ’新建一个页面。

如下图

2、编译、调试进入模拟界面

记住拖入的文本控件名称(这里是 text0),依次点击快捷栏按钮编译、调试,进入模拟界面

3、wset 指令模拟发送一个字符串

3.1、进图调试模拟界面后 ,在面板左下角输入框内,输入串口指令:wset text0.txt “2024.ABC”;

3.2、勾选输入框上方的 ‘追加换行符’ ,或者输入指令后手动敲enter键换行;

3.3、点击 ‘发送’按钮,将字符串显示到文本控件上。

如下图 注意:若发送的字符串为汉字,但控件显示为方框,则是控件的font属性绑定的字库没有对应的汉字,需要手动添加进字库。

4、page 指令模拟翻页

4.1、进图调试模拟界面后 ,在面板左下角输入框内,输入串口指令:page 1;

4.2、勾选输入框上方的 ‘追加换行符’ ,或者输入指令后手动敲enter键换行;

4.3、点击 ‘发送’按钮,页面将切换到另一页。

如下图

注意:翻页指令的格式固定为:page 页面id,这里工程的另一个页面id为1,若是一个不存在的页面id,则指令不执行。

5、说明

5.1、在没有串口屏的情况下,可VP软件内模拟显示情况;

5.2、模拟窗口发送串口指令,可看作 串口助手 或者 用户MCU 发送给串口屏;

5.3、还有更多串口指令,可实现对控件数据的设置和读取等操作;

5.4、除了可以发送串口指令,还可以在勾选hex后发送实际的数据帧。

二、串口屏与串口助手调试

串口屏的usb接口,仅用于下载工程或供电,不能用于和外部通信,通信只能接串口。

1、准备工作

1.1、一块串口屏(此处示例的型号是SANY-WV-S43-05M-C);

1.2、串口调试助手

1.3、通信转接工具USB转RS485(或者USB转TTL);

1.4、制作串口屏工程,工程中拖入文本控件,或者整数控件;

1.5、将制作好的工程下载到串口屏内。可直接用USB连接下载,或者用串口下载(注意波特率)。

工程界面和实物连接如下: img

  • 这里使用的是本公司生产的一块USB转ttl/485二合一转接工具(需单独购买)。

  • 上图:PC-转接工具-串口屏,如果出现串口屏无法启动(花屏/闪屏/无法触摸),则为功率或者电压不够,此时可采取额外供电:

    ① 使用手机充电器直接连接Type-C口(先插Type-C供电,再插串口);

    ② 用单独电源给4Pin接口的vcc、gnd供电(5-42V);

  • 如果出现供电导致卡死,应该断电之后,用足够功率的电源供电重启。

  • ttl或232接口通讯时,注意串口屏与转接工具的共地。

2、通讯调试

方法一:串口指令

  • 串口指令,可实现对串口屏的显示控制,是串口屏最基础的功能。

2.1、连接好串口屏后,打开串口助手,选择正确的端口(例如:COM12 USB-SERIAL CH340);

2.2、选择波特率,VP软件内可点击快捷键img 查看串口波特率(出厂工程为115200),并勾选ASCII显示与发送;

2.3、输入框内输入串口指令:version + 换行(此助手需shift + enter)

2.4、点击‘打开’连接串口屏,点击‘发送’,串口屏会返回对应字符串;

img

  • 此助手在左下角发送设置处,勾选了‘转义符自动解析’后,可直接输入:version\r\n ,点击发送。

  • 对于双串口的串口屏,指令方式测试通讯,只适用于调试主串口(Type-C 一侧的为主串口)。

2.5、串口屏有返回后,表示能正常通信;

2.6、再使用指令控制显示,输入串口指令:wset text0.txt “2024.ABC”,并手动换行,点击‘发送’,串口屏会显示设置的字符串;

2.7、输入串口指令:wget text0.txt,并手动换行,点击‘发送’,串口屏会返回屏幕控件显示的字符串。

img

  • wset指令中的双引号,必须为英文状态的引号。

  • 此处wget指令返回为“2024.ABC”,字符串前面的方框为数据的返回类型,切换为hex接收可查看。串口指令返回

方法二:自定义协议

字符串数据

  1. 在前面工程基础上,拖入一个‘协议解析器控件’;

  2. 选中‘协议解析器控件’并写入脚本,编译无误后下载到串口屏内;

img

  • 此处脚本text0.txt = stringDecode(protocol1.rxBuf , 0 , protocol1.rxLen); 用到了函数string stringDecode(byte array[ ], int start, int len),作用是将接收到的数据做字符串解码处理,函数3个参数为:

    数组名称(控件接收到的字符串以hex形式缓存于protocol1.rxBuf内);

    在数组中的起始位置;

    要解码的数据长度(控件接收到的实际数据长度,会存于protocol1.rxLen内);

  1. 打开串口助手,选择正确的端口,设置波特率,勾选ASCII发送接收,点击‘打开’连接串口屏;

  2. 发送区内输入字符串“ABC.123”,点击发送,串口屏文本控件text0会显示出发送的字符串。 img


HEX数据

  1. 在前面工程基础上,拖入一个‘协议解析器控件’;(同上面‘字符串数据’第一步,若已完成,则跳过此步骤)

  2. 制定一个简单的hex数据帧:AC BC 07 E8 31 32,其中AC BC 表示帧头,后面四字节都是数据;

  3. 拖入一个日志控件,勾选其属性hexMd,便于显示hex数据;

  4. 选中协议解析器控件,写入解析脚本;

    if((protocol1.rxBuf[0] == 0xAC)&&(protocol1.rxBuf[1] == 0xBC))//判断帧头
    {
       //将两个字节的数据拼接成一个整数,并用整数控件num2显示
       num2.val = (protocol1.rxBuf[2]<<8) | protocol1.rxBuf[3];
    }
    
    log3.clear();//先清空显示
    log3.addBytes(protocol1.rxBuf , 0 , protocol1.rxLen);//打印显示接收到的hex数据
    

    img

    • 屏幕接收的hex数据会缓存于protocol1.rxBuf内,数据从下标0开始。

    • 脚本支持:与(&&)、或(||)、非(!)运算,按位与(&)、或(|)、非(~),以及移位操作。

    • 日志控件,可显示hex或者字符串,勾选属性hexMd用于显示hex,不勾选则用于显示字符串。

  5. 将制作好的工程下载到串口屏内;

  6. 打开串口助手,选择正确的端口,设置波特率,勾选Hex发送接收,点击‘打开’连接串口屏;

  7. 发送区内输入hex数据:AC BC 07 E8 31 32,点击发送,串口屏整数控件num2会显示07 E8拼接的数据,日志控件log3会显示接收的完整数据帧。 img

  • 工程下载可以用USB或者串口下载,串口下载请注意波特率和线序连接。

  • 如果串口下载时出现“端口被拒绝访问字样”,原因是该端口被其他设备占用,需释放该端口。

  • 使用USB下载工程速度更快,但通信只能通过串口。

三、Modbus-RTU通讯调试

  • 串口屏支持标准的Modbus-RTU协议,可直接用串口屏和PLC、传感器、执行器等设备连接通信。

  • 此处介绍串口屏做主站时,读取传感器数据。串口屏做从站,可参考后续实验工程。

1、串口助手调试

1.1、传感器模块:此处使用的是本公司自研的一款温湿度传感器模块。 img

1.2、已知传感器通信ID:05,波特率:9600 bps,校验位:N,数据位:8,停止位:1。模块供电:DC-5V,温度范围:0-65°C,湿度范围(相对湿度) :0-100%RH。

1.3、这里先用USB转485工具,直接和模块连接,用串口助手调试通信; img

1.4、打开串口调试助手,根据下图设置读取温湿度数据: img

  • 返回的温度值:0B 08 即 2824 * 0.01 = 28.24 °C 湿度值:1A F0 即 6896 * 0.01 = 68.96 %RH。

  • 先使用串口助手读取模块数据,保证模块能正常使用,下一步才是接入串口屏。

2、串口屏调试

2.1、打开VP上位机,新建一个工程(需要支持modbus协议的串口屏,此处使用的型号:SANY-WV-S43-05M-C);

2.2、VP软件左上角:工具/项目设置,将通信波特率改为9600;

2.3、拖入两个浮点数控件,用于显示温湿度;拖入一个modbus解析器控件img,用于接收数据;拖入一个定时器控件img,用于循环发送读从站数据的报文;拖入一个日志控件,用于打印显示串口屏接收到的实际数据帧;

2.4、选中定时器控件,在控件属性栏勾选en属性,然后在脚本编辑器区写入脚本:

int Return;
int Value;

//用modbusRead函数读取寄存器值
Return = modbusRead(0x05,0x03,0x0000,2,50);
if(Return == 0) //检测返回值,返回为0,表示读取成功
{
   //温度
   Value = (modprotocol4.rxBuf[1]<<8) | modprotocol4.rxBuf[2];
   numf0.valf = Value/100.0;

   //湿度
   Value = (modprotocol4.rxBuf[3]<<8) | modprotocol4.rxBuf[4];
   numf1.valf = Value/100.0;
   
   log3.clear();//清空
   log3.addBytes(modprotocol4.rxBuf , 0 , modprotocol4.rxLen);//显示接收的数据帧
}

img

  • 脚本中定义的int变量,只能定义在最前面,否则编译会报错。

  • 此处的浮点数,是读取的一个寄存器(2Byte),然后通过偏移(乘0.01)实现;若是4Byte浮点数,则可用内置函数bytesToFloat()直接转换;

  • 脚本中需要跨页面设置某个控件的属性时,需要加上控件所在页面的页名称,如:page2.numf1.valf = 3.14;

2.5、上述步骤完成,编译无误后下载到串口屏内;

2.6、将传感器直接和串口屏连接,上电后即可读出传感器数据; img

  • 串口屏通过timer定时器外发的数据帧,可用进入VP调试模拟状态,勾选’模拟器串口输出’窗口的hex,查看工程的外发数据。

通讯失败简要排查手段

  • 检查通讯参数,波特率,数据位,停止位,校验位是否和设备一致。

  • 串口屏作为modbus主站时,如果已知从站设备响应时间较长,可以将modbusread()函数中的超时设置长一点,例如200ms或者更长。但是注意所有函数的超时时间总和,不能大于定时器的间隔时间。

  • 项目设置是针对主串口的设置,如果屏不能正常接收数据,请检查项目设置里面接收超时是否为0,在绝大多数波特率下此接收超时!! img

注意

  • Modbus通讯的设备,通常采用的接口为RS-485/RS-232,选型的时候要确保串口屏与其一致。

  • 在强电磁环境中,要将串口屏与设备共地,同时应该严格采用双绞屏蔽线,选取触摸类型时。

  • 强电磁环境下尽量选择电阻触摸,抗干扰能力更强,甚至在这些措施都没有效果的情况下,可以选择隔离485。

  • 当总线长度较长、节点数量较多、对信号质量要求较高、高速通信的情况下,请考虑使用终端电阻。在实际应用中,通常会在RS-485总线的两端各配置一个120Ω的终端电阻。例如,在一个典型的MODBUS RTU网络中,如果有多台设备通过RS-485总线进行通信,那么应在总线的两端各配置一个120Ω的终端电阻。

更多例程

查看典型应用实验3(主站) 实验4(从站)

四、扩展串口调试

  • 我们认定:带USB下载口的一侧为主串口,另一侧为扩展口。

  • 主串口可用接口:RS-485、LVTTL,扩展口可用接口:RS-485、RS-232、LVTTL、CAN。通过搭载模块,主串口可与扩展口任意搭配实现双接口。需要注意,串口屏的选型需要根据用户实际需求确定,出货时会更新对应接口功能的固件程序,一款屏幕一个型号,用户无法自行修改接口使用。

1、准备工作

1.1、一块带扩展口的串口屏(一般型号里面带 05 字样的,带有扩展口,此处使用的型号SANY-WV-S43-05M-C);

1.2、新建一个对应型号的工程,拖入一个‘扩展协议解析器’控件,用于接收串口数据;拖入一个日志控件,用于显示接收的数据帧;拖入两个整数控件用于显示数据;

1.3、选中‘扩展协议解析器’控件,在属性栏中,配置相关属性,此处属性设置:波特率 9600,接口 RS-485,工作模式 串口,其他属性默认即可;

1.4、在‘扩展协议解析器’控件下,写入脚本;

if((exptl1.rxBuf[0] == 0xAC)&&(exptl1.rxBuf[1] == 0xBC))//判断帧头
{
   //将两个字节的数据拼接成一个整数,并用整数控件num0显示
   num0.val = (exptl1.rxBuf[2]<<8) | exptl1.rxBuf[3];

   num1.val = exptl1.rxBuf[4];
}

log3.clear();//先清空显示
log3.addBytes(exptl1.rxBuf , 0 , exptl1.rxLen);//打印显示接收到的hex数据

img

  • 脚本中需要跨页面设置某个控件的属性时,需要加上控件所在页面的页名称,如:page2.numf1.valf = 3.14。

  • 想通过扩展串口外发数据,脚本中调用函数时,需要加上‘扩展协议解析器’控件名称,如:exptl1.uartSend()、exptl1.modbusRead()。

2、串口屏调试

2.1、串口屏和USB转485工具连接,然后接入计算机,注意区分主串口和扩展口,以及线序是否正确;

2.2、打开串口调试助手,选择通信端口,波特率设置9600,接收和发送区都勾选hex;

2.3、发送区内输入hex数据:AC BC 07 E8 64,点击发送,串口屏整数控件num0会显示07 E8拼接的数据,num1显示一个单字节0x64,日志控件log3会显示接收的完整数据帧。 img

  • 扩展串口做modbus主站,对从站轮询时,可以用定时器定时发送轮询报文。(和主串口发送报文方式一致)

注意

扩展串口无法使用串口指令通信,即不能用version查询版本号,只能使用自定义协议或者modbus-RTU协议进行通讯。

五、CAN接口调试

  • 带USB下载口一侧为主串口,另一侧则为CAN接口,CAN接口和扩展串口是复用的,接口类型只能是CAN、RS-485、RS-232、LVTTL中的一种。

  • 此处调试CAN接口通信,直接使用USB-CAN总线调试工具和串口屏连接;不同的CAN总线调试工具,都有对应的上位机软件,所以不能通用。

本次调试工程可在资源包下载,典型应用实验5CAN通讯实验,文档内容点此此处查看典型应用

六、VP软件/串口屏与单片机调试

1、准备工作

此处使用的是STM32F103C8T6芯片单片机开发板最小系统板核心板

img

2、接线

查询数据手册确定:PA9为TX,PA10为RX。 img

  • 串口屏的ttl通讯电平为3.3v。

  • 注意单片机连接时一定要共地。

3、测试

相关的例程资源包下载,查看典型应用实验1

七、补充说明

  • 三易串口屏有多种接口可供选择(lvttl、RS-485、RS-232、CAN),要注意这些接口不是兼容的,4pin接口处通常有两组丝印,但它只能作为一种接口来使用,客户要根据自己实际选择购买的型号判断具体接口类型。

  • Ttl或者232设备之间连接必须是一对一的连接,串口屏的R接设备的T,串口屏的T接设备的R,GND接GND;ttl或者232设备通讯连接一定要共地。

  • 485接口则可以组网,且多数场合不需要共地,485总线上若接了较多设备,建议在总线上焊接一个120欧的匹配电阻,串口屏主板上保留了焊盘但是没有默认焊接。

  • S系列,提供了隔离485选项,如有强电或者电源质量不好的环境建议使用隔离485,并且配电阻触摸(此环境不建议且不适用电容触摸)。

  • 另外,串口屏上也保留了485的上拉和下拉电阻焊盘,客户如果需要可自行匹配。

  • 使用双串口的串口屏,只能使用一端的4pin接口供电,如果两个接口都接了电源且存在压差,高压电源会烧坏低压电源。

  • 使用外部电源(5v除外)时不建议同时使用type-c。