elenzk 发表于 2020-11-15 06:32:08

【提问】DMG10768C104_03W电容触控屏只有一个串口2怎么做自定...

最近一个应急的项目在开发,从迪文TB选型了一个DMG10768C104_03W型号的电容触控屏(WTC),买回来看了一下,只有一个串口或可改为TTL通信的接口,心想外接一个485转换电路来支持485接口的通信,准备将屏作为485主机,通过MODBUS-RTU的规范来与客户提供的电源系统的485从机进行通讯,尽然发现了几个大坑,搞了半个月也没有搞出来。
项目进展汇报
1、界面开发:目前通过快速学习,对界面有需要的控件应用基本了解和掌握了,并且已完成了界面的整体设计,通过下载到屏里运行,感觉还不错,第一阶段相对较为顺利。
2、串口通信调试:因为这个屏只有一个串口,按理论来讲同时也问了售后支持,只有一个串口的屏,这个串口一定是串口2,所以直接支持迪文的MODBUS-RTU通信协议规范,试着通过XCOM串口调试软件,也证实了通信协议是前所述一样,这种情况目前不适合我的项目,因为如果要对接客户的电源系统通信,人家有标准的RTU协议,不会为了配合迪文屏的协议来改他的协议。
3、至此我直接掉坑里去了:据售后支持了解,这个屏只有串口2,如果要用自定义协议,就必需要重写OS汇编,或者要重写C51,做一个BIN文件,汇编俺是不会,C51还行,但怎么写呢?看了好多兄弟们的资料,试了很多也没有一个头绪,直接入坑!!!

问题来了,大师兄救我啊:
迪文屏:我需要定义为主机模式,波特率为19200bps,数据格式为8N1,电平转换需要用232转485后再接用户设备
客户电源设备:厂家出厂为从机模式,从机地址默认为01,波特率为19200bps,数据格式为8N1

1、客户电源系统的第一个485指令如下:
控制电源启动指令:寄存器地址1000(十六进制),MODBUS-RTU的功能码用06(十六进制) 即写数据,启动数据为向寄存器地址1000(十六进制)写入1(十六进制)
控制电源停机指令:寄存器地址1000(十六进制),MODBUS-RTU的功能码用06(十六进制) 即写数据,启动数据为向寄存器地址1000(十六进制)写入2(十六进制)

如果按标准MODBUS-RTU,我应该在屏上的【启动/停止】按钮向电源设备发送指令:
当图标点击后为【启动】时,发送【启动指令】:01 06 1000 0001 4CCA
解读:
01:从机地址
06:功能代码为“写入‘
1000:寄存器地址(高位在前 低位在后)
0001:需要向寄存器写入的数据(高位在前 低位在后)
4CCA:为CRC校验码

用户设备要求以这样的通信发送给它,它才会响应【启动】,此时电源将运行起来,同时会返回主机请求相同的数据给到屏主机。

可是,如果用迪文屏的串口2,如果按0X82/0X83的迪文协议发送,应该可以理解为向电源设备的寄存器地址1000写入1:
屏向串口发出来的指令是:5A A5 06 83 10 00 01 00 01
解读:
5A A5:迪文屏标准协议用的帧头
06:数据长度
83:读变量存储器指令0X83
10 00:存储器地址为1000
01:从存储器地址1000开始读1个字长度数据
00 01:存储器地址1000里的数据值为0001
那格式完全对不上啊,怎么办?

再来,如果从电源系统设备里读出当前的输入功率,按电源厂家的协议,应该发以下数据去请求:
01 03 d0 00 00 01 BC CA
解读:
01:从机地址
03:功能代码为读线圈
d0 00 :寄存器地址
00 01:读寄存器起始地址的1个数据
BC CA:CRC校验

从机设备将响应:01 03 02 00 00 B8 44
解读:
01:从机地址
03 :功能代码为读线圈
02 :读取的字节数共为2个
00 00 :第1个寄存器数据(一个数据占2个字节)
B8 44:CRC校验

无论是向从机写还是向从机读,两者的协议都完全对不上

直接问迪文的售后兄弟,说这需要重新做一个自定义协议,可查了论坛里,也没有针对串口2的自定义协议的视频教程啊。
初步了解,需要用汇编搞一个BIN,或用C51写一个BIN才能解决。
急啊,怎么办,头大啊,迪文的工程师尽快以这个例子,帮我们搞一个例程DEMO或视频讲解吧。


kehu20190527 发表于 2020-11-16 09:22:11

本帖最后由 kehu20190527 于 2020-11-17 13:07 编辑

这个是迪文屏T5L串口2配置Modbus程序源码 ,波特率为19200,C程序。配置命令方法无需去22文件里面配置,打开程序,在主程序里面配置相关命令,其实原理跟OS版本一样只是不需要在22文件配置,改到主程序配置modbus命令。配置命令完成之后,需要在Keil 51 软件编译一次,然后需要迪文转换工具将生成好的51HEX文件,转换成T5L51.BIN文件,再下载进迪文屏。

elenzk 发表于 2020-11-18 00:26:00

迪文技术支持就是给力,来深圳我给你加鸡腿!!!

elenzk 发表于 2020-11-19 19:03:16

请问迪文工程师,我的U盘下载文件,增加您提供的DEMO程序里的T5L51文件,现在有两个问题还要问一下:

1、增加了T5L51文件后,原来的22_Config.bin文件和22_ModbusMaster.bin还需要吗?现在我的U盘里的文件如下图片。


2、目前您提供的DEMO文件里,有没有已增加好我提问中提到的两个指令?具体指令如下:
【启动指令】:01 06 10 00 00 01 4C CA
【读出当前的输入功率指令】:01 03 d0 00 00 01 BC CA

3、如果第2个问题没有做,那我应该在程序代码的哪个位置加以上的指令?能否写进去截图给我一下

4、在填写相关指令到程序里时,要不要增加CRC校验码部分?

kehu20190527 发表于 2020-11-20 17:16:02

问题1下了 T5L51.bin文件之后 ,不需要再下载迪文22_ModbusMaster.bin这个文件了,这个文件是之前OS汇编的程序。现在只需要下载现在C51版本的C程序T5L.bin。就可以代替原来的22_ModbusMaster.bin啦现在单独下T5L.bin就OK.

问题2写01 06 10 00 00 01 4C CA 这个指令 就是在本程序里面的主程序区,填写modbus命令,方法就是跟os汇编原理是一样的,只是不需要22文件啦,需要在Keil 软件里面重新编译程序一次,再通过迪文转换工具,转换成T5L51.bin更新下载进去,

问题3程序是自动带CRC校验的。

elenzk 发表于 2020-11-21 08:26:18

能否就我说的这两个指令,搞个具体的,特别是问题2中提到的,您说的写在主程序区,能否写在里面截图参看一下?
另外,我按你的意思,把程序编译后下载到屏里,接上串口后,用XCOM连接上,发现屏一直在给串口下发指令如下,这是怎么回事?
收←◆00
收←◆01 03 00 00 00 02 C4 0B
收←◆01 03 00 00 00 02 C4 0B
收←◆01 10 10 44 00 03 06 00 00 00 00 00 00 F1 41
收←◆01 10 10 44 00 03 06 00 00 00 00 00 00 F1 41
收←◆01 03 00 00 00 02 C4 0B
收←◆01 03 00 00 00 02 C4 0B

kehu20190527 发表于 2020-11-21 10:27:30

本帖最后由 kehu20190527 于 2020-11-21 17:57 编辑

elenzk 发表于 2020-11-21 08:26
能否就我说的这两个指令,搞个具体的,特别是问题2中提到的,您说的写在主程序区,能否写在里面截图参看一 ...
配置方法
5A 01 06 01 30 04 00 00 10 000010    modbus发出命令是 01 0600100001 +CRC
上面的03 命令如果不想要可以修改的,可以不要那个是初始设置的报文,您自己根据情况设置参数
5A       启动标志 占用一个字节
01       从机ID 占一个字节
06       功能命令   占一个字节(支持03040610 )
01      读取长度   占用一个字节
30      响应时间   占用一个字节
04      发送模式   一个字节   配置 01(指定页面发送)   配置04 是 DGUS原地址,数据变化自动发送配置03是DGUS地址数据变化并清零。
00 00    配置04 时无需设置填写 00 00(两个字节)   假设配置发送模式为02 那么就是需要设置 发送的DGUS触发地址。假设为5000H,那么需要设置一个控件 按下才会触发完成命令 。
1000   是DGUS源地址两个字节。
0010   是下发设备从机地址   两个字节。


Bensenl 发表于 2021-5-7 11:05:37

插个眼:)

encounter 发表于 2022-7-27 10:12:47

用这个代码后,03指令,接受中断进不去,没有数据返回。06指令是正常的

18680356131 发表于 2023-3-27 11:18:48

kehu20190527 发表于 2020-11-16 09:22
这个是迪文屏T5L串口2配置Modbus程序源码 ,波特率为19200,C程序。配置命令方法无需去22文件里面配置,打 ...

您好,请问这个程序的波特率怎么修改?
页: [1] 2
查看完整版本: 【提问】DMG10768C104_03W电容触控屏只有一个串口2怎么做自定...