OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
12
返回列表 发新帖

STM32 跟触摸屏modbus-rtu通信问题(485)

[复制链接]

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2016-2-23
在线时间
20 小时
发表于 2016-2-25 21:25:01 | 显示全部楼层
本帖最后由 wan-der 于 2016-2-25 21:27 编辑
翱翔云端的鸟 发表于 2016-2-25 21:05
具体是少了哪个字节?  你看看是不是回发的错误了!

具体应该少了中间一个00字节(起始地址或者数据)   应该是第三,四,五之间的一个,这段03功能码的测试程序是和你的程序一样的,就是回发错了,本来回发应该是 01 03 02 00 00 00 B8 44 现在是01 03 02 00 00  B8 44
if(aRxBuff[0] == SlaveID)  
        {        
                    sendnum = 5+(aRxBuff[4] * 256 + aRxBuff[5])*2;
                                                        usDataLen = sendnum - 2;
                                                        aTxBuff[0] = aRxBuff[0];
                                                        aTxBuff[1] = aRxBuff[1];
                                                        aTxBuff[2] = sendnum - 5;
                                                        for(count = 3;aRxBuff[5]>0;aRxBuff[5]--)
                                                        {
                                                                aTxBuff[count] =  XBuf[count - 3]/256;
                                                                aTxBuff[count+1] = XBuf[count - 3]%256;
                                                                count = count + 2;
                                                        }
                                                        crcData = crc16(aTxBuff,usDataLen);
                                                        crcDataLo = crcData/256;
                                                        crcDataHi = crcData%256;
                                                        aTxBuff[sendnum -1] = crcDataHi;
                                                        aTxBuff[sendnum -2] = crcDataLo;
                                                        for(i = 0;i < sendnum;i++)
                                                        {        
                                                                Set_485_Out();
                                                          USART2_SendByte(aTxBuff);
                                                                while(!(USART2->SR & USART_FLAG_TXE));
                                                        }
                                        Set_485_In();        
                                        sendnum = 0; //回发的这里稍微有点和你的不同,我用                                                     //的是USART2复用,回发函数是自己写了一个USART2_SendByte()
  }
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2016-2-23
在线时间
20 小时
发表于 2016-2-26 10:01:19 | 显示全部楼层
翱翔云端的鸟 发表于 2016-2-25 21:05
具体是少了哪个字节?  你看看是不是回发的错误了!

本来回发数据应该是01 03 02 00 00 00 B8 44  现在是01 03 02 00 00 B8 44,少了中间一个00字节,所以没有通讯上。
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2016-2-23
在线时间
20 小时
发表于 2016-2-29 09:34:43 | 显示全部楼层
翱翔云端的鸟 发表于 2016-2-25 21:05
具体是少了哪个字节?  你看看是不是回发的错误了!

感谢楼主!03功能码已经调出来了,现在我想试试10功能码,但是我的要写的数据参数较多(大概13个参数),我想问一下,调试助手给单片机发的数据帧格式应该是怎样的呢?(是01 10 00 00 00 0D 04 00 。。。最后再加校验码吗?)然后我回发的格式必须是01 10 00 00 00 ...这种吗?
回复

使用道具 举报

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
 楼主| 发表于 2016-3-1 08:58:40 | 显示全部楼层
wan-der 发表于 2016-2-29 09:34
感谢楼主!03功能码已经调出来了,现在我想试试10功能码,但是我的要写的数据参数较多(大概13个参数), ...

10功能码也是可以一次写多个的!!!
电子人生!
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2016-2-23
在线时间
20 小时
发表于 2016-3-1 20:49:05 | 显示全部楼层
翱翔云端的鸟 发表于 2016-3-1 08:58
10功能码也是可以一次写多个的!!!

这我知道,楼主,我问下现在用03功能码让PLC和单片机通信的话,PLC设置的读取地址该是多少?是40001吗?还是随便设置都行?
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2016-2-23
在线时间
20 小时
发表于 2016-3-2 08:28:38 | 显示全部楼层
翱翔云端的鸟 发表于 2016-3-1 08:58
10功能码也是可以一次写多个的!!!

单片机和调试助手现在已经通讯上了,但是和触摸屏以及PLC没有通讯上,出现问题是我设置的触摸屏数值读写地址是40001,发给单片机的数据帧是01 03 00 01 00 00 D5 CA 触摸屏回收到的数据帧是01 03 02 00 00 B8 44 然后触摸屏上显示0x43写错误,楼主这是怎么回事?是因为触摸屏发的数据帧不对吗?看你上面的解释说触摸屏发出来的数据帧是0103 00 00 00 01 84 0A,如果是这个原因为什么会出现这种发数据帧不对的情况呢?求楼主解释
回复

使用道具 举报

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
 楼主| 发表于 2016-3-2 18:04:47 | 显示全部楼层
wan-der 发表于 2016-3-2 08:28
单片机和调试助手现在已经通讯上了,但是和触摸屏以及PLC没有通讯上,出现问题是我设置的触摸屏数值读写 ...

PLC我不是很懂,要是想STM32跟PLC通讯上,估计你PLC得设为主机,因为我这个STM32的代码是从机程序.  
跟触摸屏通讯的话注意以下几点
1.触摸屏设置的通讯方式  是不是  MODUBUS-RTU-485
2.触摸屏HMI制作时的地址
3.有没有用485模块   一般是3485!
电子人生!
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2016-2-23
在线时间
20 小时
发表于 2016-3-2 18:55:53 | 显示全部楼层
翱翔云端的鸟 发表于 2016-3-2 18:04
PLC我不是很懂,要是想STM32跟PLC通讯上,估计你PLC得设为主机,因为我这个STM32的代码是从机程序.  
跟 ...

楼主回答问题都不在点上,触摸屏设置的是数值输入控件   地址是40001啊亲,现在我的单片机收到的数据是01 03 00 00 00 00 08 4A 标准的不应该是01 03 00 00 00 01 08 4A吗?为什么会出现其中一个字节不对呢  但是和调试助手居然能通讯上   这也是奇了怪了
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2016-2-23
在线时间
20 小时
发表于 2016-3-3 09:31:59 | 显示全部楼层
翱翔云端的鸟 发表于 2016-2-24 09:28
aRxBuff[4] 和 aRxBuff[5]  是寄存器数量的高位和低位   这样是将十六进制转为十进制
这里要乘以2是因为 ...

楼主03功能码里面的XBuf[]
是哪里给它赋值的,赋的是多少?
for(count = 3;aRxBuff[5]>0;aRxBuff[5]--)
{       
aTxBuff[count] =  XBuf[count - 3]/256;
aTxBuff[count+1] = XBuf[count - 3]%256;
count = count + 2;
}
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-3-21
在线时间
8 小时
发表于 2016-3-22 14:39:55 | 显示全部楼层
串口调试时发送了很多帧才有一帧接收怎么回事,请教!!!
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-3-21
在线时间
8 小时
发表于 2016-3-26 08:31:53 | 显示全部楼层
翱翔云端的鸟 发表于 2016-2-25 21:10
无符号16bit读应答函数--功能码03(可以一次性读多个)
[mw_shl_code=c,true]/************************** ...

请教楼主, for(i = 0;i < sendnum+1;i++)为什么sendnum要加1,如果我的sendnum为5,i<5,分别发送buf0,buf1,buf2,buf3,buf4
回复

使用道具 举报

2

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-3-29
在线时间
19 小时
发表于 2016-3-29 13:38:24 | 显示全部楼层
楼主,可否发一份代码给我学习学习,刚刚接触MODBUS,一头雾水中     邮箱1941975346@qq.com
回复

使用道具 举报

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
 楼主| 发表于 2016-3-29 13:52:19 | 显示全部楼层
ky33sw 发表于 2016-3-29 13:38
楼主,可否发一份代码给我学习学习,刚刚接触MODBUS,一头雾水中     邮箱

1楼有工程啊 !!
电子人生!
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2016-2-23
在线时间
20 小时
发表于 2016-4-17 09:09:53 | 显示全部楼层
楼主有没有05写单个线圈的功能码例程,我的10和03功能码都实现了, 后面发现还需要一个置位的功能码,谢谢啦
回复

使用道具 举报

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
 楼主| 发表于 2016-4-19 09:02:25 | 显示全部楼层
wan-der 发表于 2016-4-17 09:09
楼主有没有05写单个线圈的功能码例程,我的10和03功能码都实现了, 后面发现还需要一个置位的功能码,谢谢 ...

额,没有写,,,你可以照着自己写!!!
电子人生!
回复

使用道具 举报

2

主题

686

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
10569
金钱
10569
注册时间
2014-6-12
在线时间
1022 小时
发表于 2016-4-19 09:39:24 | 显示全部楼层
参考一下
//强制单个线圈 控制电磁阀  01 05 00 01 00 00
void forceSingleCoil(void)
{
               
        CurChanl=0;
       
         //以下指令处理
                 if(USART_RX_BUF[3]==0 && USART_RX_BUF[4]==0x0 )//电磁阀1关
                 {
                  
                        dj0 =1;
                     dcfc=dcfc|0x01;
                        bz=0;
                 }       
               
                if(USART_RX_BUF[3]==1 && USART_RX_BUF[4]==0x0 )//电磁阀2关
                {
                          dj1 =1;
                    dcfc=dcfc | 0x02;
                        bz=0;
                }       
               
                if(USART_RX_BUF[3]==2 && USART_RX_BUF[4]==0x0 )//电磁阀3关
                {
                  
                        dj2 =1;
                    dcfc=dcfc | 0x04;
                        bz=0;
                }

                if(USART_RX_BUF[3]==3 && USART_RX_BUF[4]==0x0 )//电磁阀4关
                {
                          dj3 =1;
                    dcfc=dcfc | 0x08;
                        bz=0;
                }
               
                if(USART_RX_BUF[3]==4 && USART_RX_BUF[4]==0x0 )//电磁阀5关
                {
                          dj4 =1;
                    dcfc=dcfc | 0x10;
                        bz=0;
                }
               
                if(USART_RX_BUF[3]==5 && USART_RX_BUF[4]==0x0 )//电磁阀6关
                {
                         dj5 =1;
                    dcfc=dcfc | 0x20;
                        bz=0;
                }
               
                if(USART_RX_BUF[3]==6 && USART_RX_BUF[4]==0x0 )//电磁阀7关
                {
                          dj6 =1;
                    dcfc=dcfc | 0x40;
                        bz=0;
                }
               
                if(USART_RX_BUF[3]==7 && USART_RX_BUF[4]==0x0 )//电磁阀8关
                {
                          dj7 =1;
                    dcfc=dcfc | 0x80;
                        bz=0;
                }
               
                if(USART_RX_BUF[3]==0 && USART_RX_BUF[4]==0xff)//电磁阀1开
                {
                          dj0 =0;
                    dcfc=dcfc & 0xfe;
                        bz=0;
                }       
               
                if(USART_RX_BUF[3]==1 && USART_RX_BUF[4]==0xff)//电磁阀2开
                {
                          dj1 =0;
                    dcfc=dcfc & 0xfd;
                        bz=0;
                }       
               
                if(USART_RX_BUF[3]==2 && USART_RX_BUF[4]==0xff)//电磁阀3开
                {
                          dj2 =0;
                    dcfc=dcfc & 0xfb;
                        bz=0;
                }

                if(USART_RX_BUF[3]==3 && USART_RX_BUF[4]==0xff)//电磁阀4开
                {
                          dj3 =0;
                    dcfc=dcfc & 0xf7;
                        bz=0;
                }
               
                if(USART_RX_BUF[3]==4 && USART_RX_BUF[4]==0xff)//电磁阀5开
                {
                          dj4 =0;
                    dcfc=dcfc & 0xef;
                        bz=0;
                }
               
                if(USART_RX_BUF[3]==5 && USART_RX_BUF[4]==0xff)//电磁阀6开
                {
                          dj5 =0;
                    dcfc=dcfc & 0xdf;
                        bz=0;
                }
               
                if(USART_RX_BUF[3]==6 && USART_RX_BUF[4]==0xff)//电磁阀7开
                {
                          dj6 =0;
                    dcfc=dcfc & 0xbf;
                        bz=0;
                }
               
                if(USART_RX_BUF[3]==7 && USART_RX_BUF[4]==0xff)//电磁阀8开
                {
                          dj7 =0;
                    dcfc=dcfc & 0x7f;
                        bz=0;
                }
               
                if(USART_RX_BUF[3]==9 && USART_RX_BUF[4]==0xff)//零码
                {
                          bz=0x00;
                }
               
                if(USART_RX_BUF[3]==10 && USART_RX_BUF[4]==0xff)//满码
                {
                          bz=0x00;
                }

}//void forceSingleCoil(void)
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2016-2-23
在线时间
20 小时
发表于 2016-4-19 12:27:32 | 显示全部楼层
翱翔云端的鸟 发表于 2016-4-19 09:02
额,没有写,,,你可以照着自己写!!!

我想问一下啊   你那个10功能码与显控触摸屏通讯的时候是不是把03也得加上?  因为我试了下显控触摸屏设置的数值设置控件给单片机发的数是读写读写按这种方式循环而不是只是写  我现在发现个新问题就是我配置10和03读写功能码之后   只能写入一次  后面就只是读了写不进去了  你的显控触摸屏能给单片机一直写数还能读吗  希望你把你那个03和10都有的能一直读写的那个程序的逻辑跟我说下
回复

使用道具 举报

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
 楼主| 发表于 2016-4-19 19:35:56 | 显示全部楼层
wan-der 发表于 2016-4-19 12:27
我想问一下啊   你那个10功能码与显控触摸屏通讯的时候是不是把03也得加上?  因为我试了下显控触摸屏设 ...

对,应为10是写一个或多个值,写成功之后,触摸屏会自动去读取上面的数值,也就是03.

相当于你在触摸屏HMI软件上 设置的是数值输入显示控件的话,就是当你在触摸屏上点击那个输入显示控件,并且修改其数值,触摸屏便会给单片机发送10帧,当你单片机成功响应了这个10帧,数值就修改成功了,接下来只要你不去修改其数值,触摸屏会不停的去读取当前页面上的显示控件的值,也就不停的发送03帧,去读取那个输入显示控件的当前值

不知道这么说你明白没有。。。
电子人生!
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2016-2-23
在线时间
20 小时
发表于 2016-4-20 07:59:32 | 显示全部楼层
翱翔云端的鸟 发表于 2016-4-19 19:35
对,应为10是写一个或多个值,写成功之后,触摸屏会自动去读取上面的数值,也就是03.

相当于你在触摸 ...

明白了  昨天做了测试  但是问题是数值修改不过来   是我单片机的响应帧不对吗?我现在程序是这样   单独调用一个功能块是没问题的  也就是说单独执行往单片机里写数或者读单片机的数用10和03的功能码响应程序是没有问题的   为什么一直读写循环就不行了?
回复

使用道具 举报

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
 楼主| 发表于 2016-4-20 14:17:45 | 显示全部楼层
wan-der 发表于 2016-4-20 07:59
明白了  昨天做了测试  但是问题是数值修改不过来   是我单片机的响应帧不对吗?我现在程序是这样   单独 ...

数值修改不过来有两种原因
1. 10帧响应不对

2. 还有一种情况:就是你10响应帧是对的,他会在触摸屏上瞬间显示你修改的数值,然后它发送03读值的时候,你反馈的03帧也是对的,但是反馈的是修改之前的值,它的值就变成原来没有修改的值了,这是程序上没有处理好,你必须在响应10帧的时候取出数值,然后在03帧的时候,把这个修改过的数值显示上去,这样看起来的效果才是修改成功
电子人生!
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2016-2-23
在线时间
20 小时
发表于 2016-4-20 14:43:26 | 显示全部楼层
翱翔云端的鸟 发表于 2016-4-20 14:17
数值修改不过来有两种原因
1. 10帧响应不对

请问大神有没有这两个功能码在一块的参考程序呢   我觉得可能是在屏幕一直读03的时候突然来个10写的功能码这中间是不是有个时间间隔?有可能在这里没处理好,希望大神指点一二。还有我用调试助手看单独写和读怎么不出错呢?
回复

使用道具 举报

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
 楼主| 发表于 2016-4-21 18:52:31 | 显示全部楼层
wan-der 发表于 2016-4-20 14:43
请问大神有没有这两个功能码在一块的参考程序呢   我觉得可能是在屏幕一直读03的时候突然来个10写的功能 ...

不会的,就算是10帧,也是在你修改数据后并且是触摸屏已经发送了一个完整的03帧才会发送10帧,不会出现你说的那种03帧只发到一半,间隔的话,需要你帧处理间隔必须低于小于2帧的间隔时间才行   
电子人生!
回复

使用道具 举报

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
 楼主| 发表于 2016-4-21 19:04:22 | 显示全部楼层
[mw_shl_code=c,true]/******************************************************************************
** 功能:   MODBUS 数据帧解析函数
** 参数:         void
** 返回值:   void
** 说明:    无
********************************************************************************/
void ParseRecieve(void)         
{       
        u8 crcDataHi;
        u8 crcDataLo;       
        u8 j;
        if(ReceBuf[0] == 0x01)   //设备地址是否匹配  站号 00
        {       
                crcData = crc16(ReceBuf,usDataLen);//从接收到的数据帧中获取CRC
                crcDataLo = crcData/256; //         132 84 crc低
                crcDataHi = crcData%256; //         10  0A crc
                if((crcDataHi == ReceBuf[usDataLen+1])&&(crcDataLo == ReceBuf[usDataLen] ))//CRC校验
                {
                        if(ReceBuf[1] == 0x03)//功能号0x03
                        {
                                start_addr = ReceBuf[3] | (ReceBuf[2] << 8);//起始寄存器地址
                                reg_num = ReceBuf[5] | (ReceBuf[4] << 8);//寄存器数量
                                Read_Answer(start_addr,XBUF,reg_num);

                        }
                        if(ReceBuf[1] == 0x10)//功能号0x10
                        {
                                start_addr = ReceBuf[3] | (ReceBuf[2] << 8);//起始寄存器地址
                                reg_num = ReceBuf[5] | (ReceBuf[4] << 8);//寄存器数量
                                if( start_addr <= 99)//
                                {
                                        for(j = 0; j < reg_num; j++)
                                        {
                                                XBUF[start_addr+j] = (ReceBuf[2*j+8] | (ReceBuf[2*j+7] << 8));
                                                xbuf[2*(start_addr+j)] = (XBUF[start_addr+j] >> 8);
                                                xbuf[2*(start_addr+j)+1] = (XBUF[start_addr+j] & 0x00FF);
                                                SPI_FLASH_Erase_Sector((start_addr+j)*4096);
                                                SPI_FLASH_PageWrite(xbuf+2*(start_addr+j),(start_addr+j)*4096,2);
                                        }
                                        WriteAnswer();
                                }[/mw_shl_code]
电子人生!
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2016-2-23
在线时间
20 小时
发表于 2016-4-21 20:59:50 | 显示全部楼层
翱翔云端的鸟 发表于 2016-4-21 18:52
不会的,就算是10帧,也是在你修改数据后并且是触摸屏已经发送了一个完整的03帧才会发送10帧,不会出现你 ...

请问大神帧处理间隔是什么意思   是处理完一个帧之后接收另一个帧的时间间隔?怎么设定这时间间隔呢   我感觉是这时间间隔没弄好我这才没通讯上  
回复

使用道具 举报

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
 楼主| 发表于 2016-4-22 08:57:26 | 显示全部楼层
wan-der 发表于 2016-4-21 20:59
请问大神帧处理间隔是什么意思   是处理完一个帧之后接收另一个帧的时间间隔?怎么设定这时间间隔呢   我 ...

modbus的帧时间差是大于3.5T    内部时间差<1.5T
电子人生!
回复

使用道具 举报

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
 楼主| 发表于 2016-4-22 08:59:05 | 显示全部楼层
wan-der 发表于 2016-4-21 20:59
请问大神帧处理间隔是什么意思   是处理完一个帧之后接收另一个帧的时间间隔?怎么设定这时间间隔呢   我 ...

你可以看下2楼  另外 你在自己看看定时器配置以及我在串口中断里面的机制就明白了
电子人生!
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2016-5-21
在线时间
2 小时
发表于 2016-5-21 11:30:34 | 显示全部楼层
楼主非常给力,人棒棒哒。在楼主的指点下终于完成Modbus调试,感谢楼主不厌其烦的解答我的问题。如果其他小伙伴有什么关于modbus(485或232方式)疑问我这只菜鸟也将尽力帮助解答。
回复

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2015-6-10
在线时间
16 小时
发表于 2016-6-23 11:06:02 | 显示全部楼层
楼主,你好,你的程序里面没有看到对帧内字符间的时间不能超过T1.5的处理,请问这一块你怎么处理呢?谢谢!
回复

使用道具 举报

1

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2016-3-8
在线时间
41 小时
发表于 2016-7-29 10:25:14 | 显示全部楼层
下载学习,谢谢楼主
回复

使用道具 举报

0

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2016-7-5
在线时间
43 小时
发表于 2016-8-2 10:15:32 | 显示全部楼层
学习了,谢谢楼主分享
回复

使用道具 举报

4

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2015-4-18
在线时间
17 小时
发表于 2016-8-2 21:09:39 | 显示全部楼层
好贴要收藏
回复

使用道具 举报

11

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2016-9-29
在线时间
24 小时
发表于 2016-10-6 10:08:07 | 显示全部楼层
void WriteAnswer(void)//预制多寄存器应答函数
void ReadAnswer(u8 data1,u8 data2)//读寄存器应答函数
void BMov_Answer(u16 index,u16 *p)
这几个函数是对应不同功能码的返回帧的函数吗
回复

使用道具 举报

4

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2016-10-27
在线时间
47 小时
发表于 2016-11-10 17:33:15 | 显示全部楼层
看来你的触摸屏是串口屏了。楼主!!
回复

使用道具 举报

42

主题

297

帖子

0

精华

高级会员

Rank: 4

积分
994
金钱
994
注册时间
2016-7-22
在线时间
318 小时
发表于 2017-4-14 11:14:47 | 显示全部楼层
学习学习
回复

使用道具 举报

15

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
444
金钱
444
注册时间
2017-7-11
在线时间
89 小时
发表于 2017-8-22 20:12:32 | 显示全部楼层
翱翔云端的鸟 发表于 2015-7-7 17:39
回复【23楼】菜鸟stm32:
---------------------------------
触摸屏与STM32对应的地址,&nbsp;&nbsp;比如你 ...

楼主你好,为什么设定写入和读取地址都是40001  ,就会发送 01 03 00 00  00 01 84 0A。这个是根据什么来的呢?我现在用的昆仑通态的触摸屏,mcgs上面的通道地址,连接变量之类的一直没搞明白什么意思?我也尝试着用串口来看发的数据,但是什么也没有,搞不懂这个组态软件的设置是什么意思?麻烦告知一下,谢谢。
回复

使用道具 举报

12

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2017-6-15
在线时间
17 小时
发表于 2020-10-7 11:34:11 | 显示全部楼层
翱翔云端的鸟 发表于 2015-4-25 22:40
鉴于大家都要看代码,由于程序是整体的,只能把一些C文件的代码全部删除了,上传的是Modbus框架和思想,编 ...

谢谢分享。。。。。谢谢
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2018-3-31
在线时间
7 小时
发表于 2021-8-31 14:48:43 | 显示全部楼层
学习啊啊啊啊啊啊
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 02:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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