迪文科技论坛

 找回密码
 立即注册
搜索
楼主: 夫子

【开发资料】T5L C版 modbus 协议通信-程序套用模版

  [复制链接]

1

主题

14

回帖

94

积分

注册会员

Rank: 2

积分
94
发表于 2023-3-30 14:14:19 | 显示全部楼层
modbus从机寄存器数据更改了,主机读取以后发现数据变了会用10指令从新写一次,这个可以更改一下么
回复

使用道具 举报

发表于 2023-5-5 16:25:47 | 显示全部楼层
编译报错了
Rebuild target 'Target 1'
assembling STARTUP_M5.A51...
compiling ModBusCVer1.0Main.c...
linking...
BL51 BANKED LINKER/LOCATER V6.22 - SN: Eval Version
COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2009
"STARTUP_M5.obj",
"ModBusCVer1.0Main.obj",
".\WenYuModBusCVer10LIB.LIB"
TO "WenYuModBusCVer10HEX"
RAMSIZE(256)
XDATA( 0X8000-0XFFFF )
******************************************************************************
* RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 0CF0H BYTE (161%) *
******************************************************************************
Program Size: data=9.5 xdata=3614 code=7367
LINK/LOCATE RUN COMPLETE.  0 WARNING(S),  0 ERROR(S)
*** FATAL ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED
    MODULE:  C:\KEIL_C51\C51\LIB\C51L.LIB (-----)
    LIMIT:   0800H BYTES
Target not created.
Build Time Elapsed:  00:00:00
回复

使用道具 举报

2

主题

1228

回帖

7916

积分

论坛元老

Rank: 8Rank: 8

积分
7916
发表于 2023-5-5 16:26:43 | 显示全部楼层
本帖最后由 zzs999k 于 2023-5-5 16:27 编辑
下载资料公用号 发表于 2023-5-5 16:25
编译报错了
Rebuild target 'Target 1'
assembling STARTUP_M5.A51...

看起来你使用的是Keil C51编译器,而且你的代码已经超出了限制的代码大小。根据错误消息,你使用的是限制版本,其代码大小限制为0x800字节(即2048个字节),但是你的程序的代码大小已经超过了这个限制,所以编译器无法生成目标文件。
可以考虑下搜索如何重新激活keil C51软件。
回复

使用道具 举报

发表于 2023-5-5 16:38:05 | 显示全部楼层
zzs999k 发表于 2023-5-5 16:26
看起来你使用的是Keil C51编译器,而且你的代码已经超出了限制的代码大小。根据错误消息,你使用的是限制 ...

谢谢,我重新下载过吧
回复

使用道具 举报

发表于 2023-5-11 10:53:08 | 显示全部楼层
一个界面就发送一条长的读取报文,回复就一条长报文,屏上的地址上获取的数据是对的,如下列第011条;但如果4条读取报文屏发送后,如下列第 012 013 014 015,回复的报文就有4条,会轮番变化的写入屏地址位上,数据是错位的且变化的。
0x5A, 0x01, 0x03, 0x07, 0x30, 0x01, 0x00, 0x01, 0x11, 0x01, 0x00, 0x01,        //011               
//0x5A, 0x01, 0x03, 0x01, 0x30, 0x01, 0x00, 0x01, 0x11, 0x02, 0x00, 0x03,        //012               
//0x5A, 0x01, 0x03, 0x01, 0x30, 0x01, 0x00, 0x01, 0x11, 0x03, 0x00, 0x07,        //013       
//0x5A, 0x01, 0x03, 0x01, 0x30, 0x01, 0x00, 0x01, 0x11, 0x04, 0x00, 0x30,        //014       
//0x5A, 0x01, 0x03, 0x01, 0x30, 0x01, 0x00, 0x01, 0x11, 0x05, 0x00, 0x32,        //015       
回复

使用道具 举报

0

主题

857

回帖

5005

积分

论坛元老

Rank: 8Rank: 8

积分
5005
发表于 2023-5-11 11:13:57 | 显示全部楼层
第011条指令是把从站0001-0007地址里面的数据读取到显示屏1101-1107地址显示,第012条指令又是把从站0003地址读到显示屏1102地址,跟第一条指令的地址不对应,数据会不一样,013 014 015也是一样的地址和第011条指令设置地址不对应了。
回复

使用道具 举报

发表于 2023-5-11 11:28:51 | 显示全部楼层
DWIN_LZ 发表于 2023-5-11 11:13
第011条指令是把从站0001-0007地址里面的数据读取到显示屏1101-1107地址显示,第012条指令又是把从站0003地 ...

我的意思这是两种方式,第11条和后面几条不会同时发的,12 13 14  15代码我注释掉了,单独发送第11条没有问题,这是一种方法,但是第二种方法是第 12 13 14 15条一起发,第11条不发的,然后就是回复4条数据,但数据在不断变化位置。
回复

使用道具 举报

0

主题

857

回帖

5005

积分

论坛元老

Rank: 8Rank: 8

积分
5005
发表于 2023-5-11 13:37:05 | 显示全部楼层
不发11条指令,发送12 13 14 15这4条指令,地址计划是怎么对应的
回复

使用道具 举报

发表于 2023-5-11 14:00:23 | 显示全部楼层
DWIN_LZ 发表于 2023-5-11 13:37
不发11条指令,发送12 13 14 15这4条指令,地址计划是怎么对应的

屏做主机,去读取逆变器的数据,第一个界面需要它的5个数据,上这5个数据的寄存器地址是 01 03 07 30 32,不是连续的,中间还其他的数据。如果我只按照第11条指令去发,就是要读取32条数据,后面有寄存器地址是01 03 100 的寄存器地址,那就是要读取100条数据,那这种方式是不是有点不合理。所以我想能不能一个数据发一条读取,比如 01 03 00 01 00 01 CRC 读地址01的数据,程序上屏幕地址1101 , 01 03 00 03 00 01 CRC读取03的数据 ,屏上的地址1102,01 03 00 07 00 01 CRC 读取地址07的数据,屏上地址1103。可是这种方法读取的数据会错位并且轮询变化。所以这个方式是不是在这个程序里面不行。
回复

使用道具 举报

0

主题

857

回帖

5005

积分

论坛元老

Rank: 8Rank: 8

积分
5005
发表于 2023-5-11 15:38:01 | 显示全部楼层
每天指令只设置读取一个地址,把显示屏的地址和逆变器地址对应好就行了,用011指令读取上来的数据是对的话,那就需要把 012 013 014 015的地址都对应一下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-4-27 17:25 , Processed in 0.057891 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表