串口调试方法
一、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连接下载,或者用串口下载(注意波特率)。
工程界面和实物连接如下:
这里使用的是本公司生产的一块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软件内可点击快捷键 查看串口波特率(出厂工程为115200),并勾选ASCII显示与发送;
2.3、输入框内输入串口指令:version + 换行(此助手需shift + enter)
2.4、点击‘打开’连接串口屏,点击‘发送’,串口屏会返回对应字符串;
此助手在左下角发送设置处,勾选了‘转义符自动解析’后,可直接输入:version\r\n ,点击发送。
对于双串口的串口屏,指令方式测试通讯,只适用于调试主串口(Type-C 一侧的为主串口)。
2.5、串口屏有返回后,表示能正常通信;
2.6、再使用指令控制显示,输入串口指令:wset text0.txt “2024.ABC”,并手动换行,点击‘发送’,串口屏会显示设置的字符串;
2.7、输入串口指令:wget text0.txt,并手动换行,点击‘发送’,串口屏会返回屏幕控件显示的字符串。
wset指令中的双引号,必须为英文状态的引号。
此处wget指令返回为“2024.ABC”,字符串前面的方框为数据的返回类型,切换为hex接收可查看。串口指令返回。
方法二:自定义协议
字符串数据
在前面工程基础上,拖入一个‘协议解析器控件’;
选中‘协议解析器控件’并写入脚本,编译无误后下载到串口屏内;
此处脚本
text0.txt = stringDecode(protocol1.rxBuf , 0 , protocol1.rxLen);
用到了函数string stringDecode(byte array[ ], int start, int len),作用是将接收到的数据做字符串解码处理,函数3个参数为:数组名称(控件接收到的字符串以hex形式缓存于protocol1.rxBuf内);
在数组中的起始位置;
要解码的数据长度(控件接收到的实际数据长度,会存于protocol1.rxLen内);
打开串口助手,选择正确的端口,设置波特率,勾选ASCII发送接收,点击‘打开’连接串口屏;
发送区内输入字符串“ABC.123”,点击发送,串口屏文本控件text0会显示出发送的字符串。
HEX数据
在前面工程基础上,拖入一个‘协议解析器控件’;(同上面‘字符串数据’第一步,若已完成,则跳过此步骤)
制定一个简单的hex数据帧:AC BC 07 E8 31 32,其中AC BC 表示帧头,后面四字节都是数据;
拖入一个日志控件,勾选其属性hexMd,便于显示hex数据;
选中协议解析器控件,写入解析脚本;
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数据
屏幕接收的hex数据会缓存于protocol1.rxBuf内,数据从下标0开始。
脚本支持:与(&&)、或(||)、非(!)运算,按位与(&)、或(|)、非(~),以及移位操作。
日志控件,可显示hex或者字符串,勾选属性hexMd用于显示hex,不勾选则用于显示字符串。
将制作好的工程下载到串口屏内;
打开串口助手,选择正确的端口,设置波特率,勾选Hex发送接收,点击‘打开’连接串口屏;
发送区内输入hex数据:AC BC 07 E8 31 32,点击发送,串口屏整数控件num2会显示07 E8拼接的数据,日志控件log3会显示接收的完整数据帧。
工程下载可以用USB或者串口下载,串口下载请注意波特率和线序连接。
如果串口下载时出现“端口被拒绝访问字样”,原因是该端口被其他设备占用,需释放该端口。
使用USB下载工程速度更快,但通信只能通过串口。
三、Modbus-RTU通讯调试
1、串口助手调试
1.1、传感器模块:此处使用的是本公司自研的一款温湿度传感器模块。
1.2、已知传感器通信ID:05,波特率:9600 bps,校验位:N,数据位:8,停止位:1。模块供电:DC-5V,温度范围:0-65°C,湿度范围(相对湿度) :0-100%RH。
1.3、这里先用USB转485工具,直接和模块连接,用串口助手调试通信;
1.4、打开串口调试助手,根据下图设置读取温湿度数据:
返回的温度值: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解析器控件,用于接收数据;拖入一个定时器控件,用于循环发送读从站数据的报文;拖入一个日志控件,用于打印显示串口屏接收到的实际数据帧;
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);//显示接收的数据帧
}
脚本中定义的int变量,只能定义在最前面,否则编译会报错。
此处的浮点数,是读取的一个寄存器(2Byte),然后通过偏移(乘0.01)实现;若是4Byte浮点数,则可用内置函数bytesToFloat()直接转换;
脚本中需要跨页面设置某个控件的属性时,需要加上控件所在页面的页名称,如:page2.numf1.valf = 3.14;
2.5、上述步骤完成,编译无误后下载到串口屏内;
2.6、将传感器直接和串口屏连接,上电后即可读出传感器数据;
串口屏通过timer定时器外发的数据帧,可用进入VP调试模拟状态,勾选’模拟器串口输出’窗口的hex,查看工程的外发数据。
通讯失败简要排查手段
检查通讯参数,波特率,数据位,停止位,校验位是否和设备一致。
串口屏作为modbus主站时,如果已知从站设备响应时间较长,可以将modbusread()函数中的超时设置长一点,例如200ms或者更长。但是注意所有函数的超时时间总和,不能大于定时器的间隔时间。
项目设置是针对主串口的设置,如果屏不能正常接收数据,请检查项目设置里面接收超时是否为0,在绝大多数波特率下此接收超时!!
注意
Modbus通讯的设备,通常采用的接口为RS-485/RS-232,选型的时候要确保串口屏与其一致。
在强电磁环境中,要将串口屏与设备共地,同时应该严格采用双绞屏蔽线,选取触摸类型时。
强电磁环境下尽量选择电阻触摸,抗干扰能力更强,甚至在这些措施都没有效果的情况下,可以选择隔离485。
当总线长度较长、节点数量较多、对信号质量要求较高、高速通信的情况下,请考虑使用终端电阻。在实际应用中,通常会在RS-485总线的两端各配置一个120Ω的终端电阻。例如,在一个典型的MODBUS RTU网络中,如果有多台设备通过RS-485总线进行通信,那么应在总线的两端各配置一个120Ω的终端电阻。
更多例程
四、扩展串口调试
我们认定:带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数据
脚本中需要跨页面设置某个控件的属性时,需要加上控件所在页面的页名称,如: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会显示接收的完整数据帧。
扩展串口做modbus主站,对从站轮询时,可以用定时器定时发送轮询报文。(和主串口发送报文方式一致)
注意
扩展串口无法使用串口指令通信,即不能用version查询版本号,只能使用自定义协议或者modbus-RTU协议进行通讯。
五、CAN接口调试
带USB下载口一侧为主串口,另一侧则为CAN接口,CAN接口和扩展串口是复用的,接口类型只能是CAN、RS-485、RS-232、LVTTL中的一种。
此处调试CAN接口通信,直接使用USB-CAN总线调试工具和串口屏连接;不同的CAN总线调试工具,都有对应的上位机软件,所以不能通用。
本次调试工程可在资源包下载,典型应用实验5CAN通讯实验,文档内容点此此处查看典型应用
六、VP软件/串口屏与单片机调试
1、准备工作
此处使用的是STM32F103C8T6芯片单片机开发板最小系统板核心板
2、接线
查询数据手册确定:PA9为TX,PA10为RX。
串口屏的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。