12
返回列表 发新帖
楼主: so-296918

[分享] 做工控的,K60做modbus怎么样

[复制链接]

该用户从未签到

3

主题

57

帖子

0

新手上路

Rank: 1

积分
11
最后登录
1970-1-1
发表于 2012-4-10 10:27:52 | 显示全部楼层

回复:做工控的,K60做modbus怎么样

完整的一楨数据接收,可以用UART的空闲中断来实现,不需要3.5个字符时间的超时中断,单独开个定时器的。至于DMA收到的数据长度,完全可以根据功能码来判断收到的数据桢的长度,再来解析CRC,至于发送的数据长度完全是由你自己来定的,所以K60做Modbus很easy!
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

37

帖子

0

注册会员

Rank: 2

积分
171
最后登录
2020-12-29
 楼主| 发表于 2012-4-10 11:04:13 | 显示全部楼层

回复:做工控的,K60做modbus怎么样

回复第 11 楼 于2012-04-10 10:27:52发表:
完整的一楨数据接收,可以用UART的空闲中断来实现,不需要3.5个字符时间的超时中断,单独开个定时器的。至于DMA收到的数据长度,完全可以根据功能码来判断收到的数据桢的长度,再来解析CRC,至于发送的数据长度完全是由你自己来定的,所以K60做Modbus很easy!
 
 
飞思卡尔的空闲中断,是连续十一个空闲位电平,是不是大概只是一个字符的长度,时间是不是很短啊,也就是对发送方的时序要求很严格?
 
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

99

帖子

0

中级会员

Rank: 3Rank: 3

积分
322
最后登录
1970-1-1
发表于 2012-4-10 13:35:06 | 显示全部楼层

回复:做工控的,K60做modbus怎么样

回复第 12 楼 于2012-04-10 11:04:13发表:
回复第 11 楼 于2012-04-10 10:27:52发表:
完整的一楨数据接收,可以用UART的空闲中断来实现,不需要3.5个字符时间的超时中断,单独开个定时器的。至于DMA收到的数据长度,完全可以根据功能码来判断收到的数据桢的长度,再来解析CRC,至于发送的数据长度完全是由你自己来定的,所以K60做Modbus很easy!
 
 
飞思卡尔的空闲中断,是连续十一个空闲位电平,是不是大概只是一个字符的长度,时间是不是很短啊,也就是对发送方的时序要求很严格?
 

 

都这么长时间了楼主怎么还在这纠结?你想一想modbus是1979年推出的,那时的单板机那么慢都能实现,现在近100M的单片机还有问题吗?
 
Modbus我做过几个版本,跟你交流一下吧:
 
如果你要严格遵守Modbus-RTU协议,那你用串口中断接收数据。每接收一个字节都读时钟计数器,监测1.5T(字符间隔) 和 3.5T(桢间隔)。另外在接收中断内,设置一个3.5T的超时时钟中断,如果3.5T时间内没有新的数据,超时中断被触发,设置桢结束标志。
在Modbus处理子程序内,当看到桢结束标志后,效验CRC值,同时验证地址,出错按Modbus协议处理。如果你的波特率在19.2K左右,该方法足够应付,几十台分机都没问题-- 因为每次中断服务也就是几微妙,而1。5--3。5T是毫秒级的。
 
如果你的波特率很高,那就用DMA只接收收据(不中断)。另外设一个周期计时中断,如每300uS中断一次,每次中断检查dma 有没有收到新的数据,如果间隔时间超过1.8mS就设置桢结束标志。后续的处理和上边一样。用这种方法我处理了波特率是115200的通讯。
 
我测过很多Modbus产品,包括一些著名的PLC和HMI,真正严格监测1.5T和3.5T的不多。和他们的开发人员也交流过,他们说判错主要靠CRC。
 
另外你用过带地址桢标志的单片机也不符合Modbus协议吧?如果上下位机都是自己做还可以打擦边球。
 
 
 
 
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

37

帖子

0

注册会员

Rank: 2

积分
171
最后登录
2020-12-29
 楼主| 发表于 2012-4-10 16:19:50 | 显示全部楼层

回复:做工控的,K60做modbus怎么样

回复第 13 楼 于2012-04-10 13:35:06发表:
回复第 12 楼 于2012-04-10 11:04:13发表:
回复第 11 楼 于2012-04-10 10:27:52发表:
完整的一楨数据接收,可以用UART的空闲中断来实现,不需要3.5个字符时间的超时中断,单独开个定时器的。至于DMA收到的数据长度,完全可以根据功能码来判断收到的数据桢的长度,再来解析CRC,至于发送的数据长度完全是由你自己来定的,所以K60做Modbus很easy!
 
 
飞思卡尔的空闲中断,是连续十一个空闲位电平,是不是大概只是一个字符的长度,时间是不是很短啊,也就是对发送方的时序要求很严格?
 

 

都这么长时间了楼主怎么还在这纠结?你想一想modbus是1979年推出的,那时的单板机那么慢都能实现,现在近100M的单片机还有问题吗?
 
Modbus我做过几个版本,跟你交流一下吧:
 
如果你要严格遵守Modbus-RTU协议,那你用串口中断接收数据。每接收一个字节都读时钟计数器,监测1.5T(字符间隔) 和 3.5T(桢间隔)。另外在接收中断内,设置一个3.5T的超时时钟中断,如果3.5T时间内没有新的数据,超时中断被触发,设置桢结束标志。
在Modbus处理子程序内,当看到桢结束标志后,效验CRC值,同时验证地址,出错按Modbus协议处理。如果你的波特率在19.2K左右,该方法足够应付,几十台分机都没问题-- 因为每次中断服务也就是几微妙,而1。5--3。5T是毫秒级的。
 
如果你的波特率很高,那就用DMA只接收收据(不中断)。另外设一个周期计时中断,如每300uS中断一次,每次中断检查dma 有没有收到新的数据,如果间隔时间超过1.8mS就设置桢结束标志。后续的处理和上边一样。用这种方法我处理了波特率是115200的通讯。
 
我测过很多Modbus产品,包括一些著名的PLC和HMI,真正严格监测1.5T和3.5T的不多。和他们的开发人员也交流过,他们说判错主要靠CRC。
 
另外你用过带地址桢标志的单片机也不符合Modbus协议吧?如果上下位机都是自己做还可以打擦边球。
 
 
 
 
 

谢谢你!我应该是受LPC影响太大了,他的串口功能实在是贴心,呵呵,lpc1700,所以就拿它做标准了,其实只要不是特别的完美主义,实现modbus也不是特别困难,我觉得您说的第二种方法比较适合我,这样也就不需要所谓的MARK位了,我是计划,第一位是带MARK位的这样下位机只接受带MARK位的,如果产生中断,判断是否与本机地址匹配,若匹配,则改变串口配置,接受不带mark位的数据,并打开10ms定时器,上位机的一帧,必须在10ms内传输完(当然,根数数据量可以更改),10ms后校验crc;否则不改变串口配置,不再产生中断,直到下一次接收到带mark位的数据,这是我目前的打算,应该中断也是比较少的,尽管频繁的中断可能没那么讨厌。
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

37

帖子

0

注册会员

Rank: 2

积分
171
最后登录
2020-12-29
 楼主| 发表于 2012-4-10 16:19:51 | 显示全部楼层

回复:做工控的,K60做modbus怎么样

回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

99

帖子

0

中级会员

Rank: 3Rank: 3

积分
322
最后登录
1970-1-1
发表于 2012-4-10 22:35:15 | 显示全部楼层

回复:做工控的,K60做modbus怎么样

回复第 14 楼 于2012-04-10 16:19:50发表:
回复第 13 楼 于2012-04-10 13:35:06发表:
回复第 12 楼 于2012-04-10 11:04:13发表:
回复第 11 楼 于2012-04-10 10:27:52发表:
完整的一楨数据接收,可以用UART的空闲中断来实现,不需要3.5个字符时间的超时中断,单独开个定时器的。至于DMA收到的数据长度,完全可以根据功能码来判断收到的数据桢的长度,再来解析CRC,至于发送的数据长度完全是由你自己来定的,所以K60做Modbus很easy!
 
 
飞思卡尔的空闲中断,是连续十一个空闲位电平,是不是大概只是一个字符的长度,时间是不是很短啊,也就是对发送方的时序要求很严格?
 

 

都这么长时间了楼主怎么还在这纠结?你想一想modbus是1979年推出的,那时的单板机那么慢都能实现,现在近100M的单片机还有问题吗?
 
Modbus我做过几个版本,跟你交流一下吧:
 
如果你要严格遵守Modbus-RTU协议,那你用串口中断接收数据。每接收一个字节都读时钟计数器,监测1.5T(字符间隔) 和 3.5T(桢间隔)。另外在接收中断内,设置一个3.5T的超时时钟中断,如果3.5T时间内没有新的数据,超时中断被触发,设置桢结束标志。
在Modbus处理子程序内,当看到桢结束标志后,效验CRC值,同时验证地址,出错按Modbus协议处理。如果你的波特率在19.2K左右,该方法足够应付,几十台分机都没问题-- 因为每次中断服务也就是几微妙,而1。5--3。5T是毫秒级的。
 
如果你的波特率很高,那就用DMA只接收收据(不中断)。另外设一个周期计时中断,如每300uS中断一次,每次中断检查dma 有没有收到新的数据,如果间隔时间超过1.8mS就设置桢结束标志。后续的处理和上边一样。用这种方法我处理了波特率是115200的通讯。
 
我测过很多Modbus产品,包括一些著名的PLC和HMI,真正严格监测1.5T和3.5T的不多。和他们的开发人员也交流过,他们说判错主要靠CRC。
 
另外你用过带地址桢标志的单片机也不符合Modbus协议吧?如果上下位机都是自己做还可以打擦边球。
 
 
 
 
 

谢谢你!我应该是受LPC影响太大了,他的串口功能实在是贴心,呵呵,lpc1700,所以就拿它做标准了,其实只要不是特别的完美主义,实现modbus也不是特别困难,我觉得您说的第二种方法比较适合我,这样也就不需要所谓的MARK位了,我是计划,第一位是带MARK位的这样下位机只接受带MARK位的,如果产生中断,判断是否与本机地址匹配,若匹配,则改变串口配置,接受不带mark位的数据,并打开10ms定时器,上位机的一帧,必须在10ms内传输完(当然,根数数据量可以更改),10ms后校验crc;否则不改变串口配置,不再产生中断,直到下一次接收到带mark位的数据,这是我目前的打算,应该中断也是比较少的,尽管频繁的中断可能没那么讨厌。
 

你在接收过程中更改串口设置会不会导致丢失数据?理论上当你处理第一个数据中断时第二个数据是正在往里串的。
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

37

帖子

0

注册会员

Rank: 2

积分
171
最后登录
2020-12-29
 楼主| 发表于 2012-4-11 14:15:23 | 显示全部楼层

回复:做工控的,K60做modbus怎么样

回复第 16 楼 于2012-04-10 22:35:15发表:
回复第 14 楼 于2012-04-10 16:19:50发表:
回复第 13 楼 于2012-04-10 13:35:06发表:
回复第 12 楼 于2012-04-10 11:04:13发表:
回复第 11 楼 于2012-04-10 10:27:52发表:
完整的一楨数据接收,可以用UART的空闲中断来实现,不需要3.5个字符时间的超时中断,单独开个定时器的。至于DMA收到的数据长度,完全可以根据功能码来判断收到的数据桢的长度,再来解析CRC,至于发送的数据长度完全是由你自己来定的,所以K60做Modbus很easy!
 
 
飞思卡尔的空闲中断,是连续十一个空闲位电平,是不是大概只是一个字符的长度,时间是不是很短啊,也就是对发送方的时序要求很严格?
 

 

都这么长时间了楼主怎么还在这纠结?你想一想modbus是1979年推出的,那时的单板机那么慢都能实现,现在近100M的单片机还有问题吗?
 
Modbus我做过几个版本,跟你交流一下吧:
 
如果你要严格遵守Modbus-RTU协议,那你用串口中断接收数据。每接收一个字节都读时钟计数器,监测1.5T(字符间隔) 和 3.5T(桢间隔)。另外在接收中断内,设置一个3.5T的超时时钟中断,如果3.5T时间内没有新的数据,超时中断被触发,设置桢结束标志。
在Modbus处理子程序内,当看到桢结束标志后,效验CRC值,同时验证地址,出错按Modbus协议处理。如果你的波特率在19.2K左右,该方法足够应付,几十台分机都没问题-- 因为每次中断服务也就是几微妙,而1。5--3。5T是毫秒级的。
 
如果你的波特率很高,那就用DMA只接收收据(不中断)。另外设一个周期计时中断,如每300uS中断一次,每次中断检查dma 有没有收到新的数据,如果间隔时间超过1.8mS就设置桢结束标志。后续的处理和上边一样。用这种方法我处理了波特率是115200的通讯。
 
我测过很多Modbus产品,包括一些著名的PLC和HMI,真正严格监测1.5T和3.5T的不多。和他们的开发人员也交流过,他们说判错主要靠CRC。
 
另外你用过带地址桢标志的单片机也不符合Modbus协议吧?如果上下位机都是自己做还可以打擦边球。
 
 
 
 
 

谢谢你!我应该是受LPC影响太大了,他的串口功能实在是贴心,呵呵,lpc1700,所以就拿它做标准了,其实只要不是特别的完美主义,实现modbus也不是特别困难,我觉得您说的第二种方法比较适合我,这样也就不需要所谓的MARK位了,我是计划,第一位是带MARK位的这样下位机只接受带MARK位的,如果产生中断,判断是否与本机地址匹配,若匹配,则改变串口配置,接受不带mark位的数据,并打开10ms定时器,上位机的一帧,必须在10ms内传输完(当然,根数数据量可以更改),10ms后校验crc;否则不改变串口配置,不再产生中断,直到下一次接收到带mark位的数据,这是我目前的打算,应该中断也是比较少的,尽管频繁的中断可能没那么讨厌。
 

你在接收过程中更改串口设置会不会导致丢失数据?理论上当你处理第一个数据中断时第二个数据是正在往里串的。
 

原来用的也是115200,偶尔会通信失败,还可以,中断的响应还是很快的,数据的实时性强,不要求每次都正确
回复 支持 反对

使用道具 举报

  • TA的每日心情
    无聊
    2021-11-8 23:15
  • 签到天数: 154 天

    连续签到: 1 天

    [LV.7]常住居民III

    8

    主题

    301

    帖子

    2

    金牌会员

    Rank: 6Rank: 6

    积分
    1052
    最后登录
    2025-8-20
    发表于 2012-4-11 23:58:19 | 显示全部楼层

    回复:做工控的,K60做modbus怎么样

    回复第 17 楼 于2012-04-11 14:15:23发表:
    回复第 16 楼 于2012-04-10 22:35:15发表:
    回复第 14 楼 于2012-04-10 16:19:50发表:
    回复第 13 楼 于2012-04-10 13:35:06发表:
    回复第 12 楼 于2012-04-10 11:04:13发表:
    回复第 11 楼 于2012-04-10 10:27:52发表:
    完整的一楨数据接收,可以用UART的空闲中断来实现,不需要3.5个字符时间的超时中断,单独开个定时器的。至于DMA收到的数据长度,完全可以根据功能码来判断收到的数据桢的长度,再来解析CRC,至于发送的数据长度完全是由你自己来定的,所以K60做Modbus很easy!
     
     
    飞思卡尔的空闲中断,是连续十一个空闲位电平,是不是大概只是一个字符的长度,时间是不是很短啊,也就是对发送方的时序要求很严格?
     

     

    都这么长时间了楼主怎么还在这纠结?你想一想modbus是1979年推出的,那时的单板机那么慢都能实现,现在近100M的单片机还有问题吗?
     
    Modbus我做过几个版本,跟你交流一下吧:
     
    如果你要严格遵守Modbus-RTU协议,那你用串口中断接收数据。每接收一个字节都读时钟计数器,监测1.5T(字符间隔) 和 3.5T(桢间隔)。另外在接收中断内,设置一个3.5T的超时时钟中断,如果3.5T时间内没有新的数据,超时中断被触发,设置桢结束标志。
    在Modbus处理子程序内,当看到桢结束标志后,效验CRC值,同时验证地址,出错按Modbus协议处理。如果你的波特率在19.2K左右,该方法足够应付,几十台分机都没问题-- 因为每次中断服务也就是几微妙,而1。5--3。5T是毫秒级的。
     
    如果你的波特率很高,那就用DMA只接收收据(不中断)。另外设一个周期计时中断,如每300uS中断一次,每次中断检查dma 有没有收到新的数据,如果间隔时间超过1.8mS就设置桢结束标志。后续的处理和上边一样。用这种方法我处理了波特率是115200的通讯。
     
    我测过很多Modbus产品,包括一些著名的PLC和HMI,真正严格监测1.5T和3.5T的不多。和他们的开发人员也交流过,他们说判错主要靠CRC。
     
    另外你用过带地址桢标志的单片机也不符合Modbus协议吧?如果上下位机都是自己做还可以打擦边球。
     
     
     
     
     

    谢谢你!我应该是受LPC影响太大了,他的串口功能实在是贴心,呵呵,lpc1700,所以就拿它做标准了,其实只要不是特别的完美主义,实现modbus也不是特别困难,我觉得您说的第二种方法比较适合我,这样也就不需要所谓的MARK位了,我是计划,第一位是带MARK位的这样下位机只接受带MARK位的,如果产生中断,判断是否与本机地址匹配,若匹配,则改变串口配置,接受不带mark位的数据,并打开10ms定时器,上位机的一帧,必须在10ms内传输完(当然,根数数据量可以更改),10ms后校验crc;否则不改变串口配置,不再产生中断,直到下一次接收到带mark位的数据,这是我目前的打算,应该中断也是比较少的,尽管频繁的中断可能没那么讨厌。
     

    你在接收过程中更改串口设置会不会导致丢失数据?理论上当你处理第一个数据中断时第二个数据是正在往里串的。
     

    原来用的也是115200,偶尔会通信失败,还可以,中断的响应还是很快的,数据的实时性强,不要求每次都正确
    我用的是S08, 如果用MARK的方式, 平常让串口 WAIT 进入模式, 这种情况下只有带MARK的数据会产生中断, 之后程序判断是否跟自己匹配, 如果不匹配则再进入WAIT模式, 这样的话中断会少很多.
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    37

    帖子

    0

    注册会员

    Rank: 2

    积分
    171
    最后登录
    2020-12-29
     楼主| 发表于 2012-4-12 16:23:27 | 显示全部楼层

    回复:做工控的,K60做modbus怎么样

    回复第 18 楼 于2012-04-11 23:58:19发表:
    回复第 17 楼 于2012-04-11 14:15:23发表:
    回复第 16 楼 于2012-04-10 22:35:15发表:
    回复第 14 楼 于2012-04-10 16:19:50发表:
    回复第 13 楼 于2012-04-10 13:35:06发表:
    回复第 12 楼 于2012-04-10 11:04:13发表:
    回复第 11 楼 于2012-04-10 10:27:52发表:
    完整的一楨数据接收,可以用UART的空闲中断来实现,不需要3.5个字符时间的超时中断,单独开个定时器的。至于DMA收到的数据长度,完全可以根据功能码来判断收到的数据桢的长度,再来解析CRC,至于发送的数据长度完全是由你自己来定的,所以K60做Modbus很easy!
     
     
    飞思卡尔的空闲中断,是连续十一个空闲位电平,是不是大概只是一个字符的长度,时间是不是很短啊,也就是对发送方的时序要求很严格?
     

     

    都这么长时间了楼主怎么还在这纠结?你想一想modbus是1979年推出的,那时的单板机那么慢都能实现,现在近100M的单片机还有问题吗?
     
    Modbus我做过几个版本,跟你交流一下吧:
     
    如果你要严格遵守Modbus-RTU协议,那你用串口中断接收数据。每接收一个字节都读时钟计数器,监测1.5T(字符间隔) 和 3.5T(桢间隔)。另外在接收中断内,设置一个3.5T的超时时钟中断,如果3.5T时间内没有新的数据,超时中断被触发,设置桢结束标志。
    在Modbus处理子程序内,当看到桢结束标志后,效验CRC值,同时验证地址,出错按Modbus协议处理。如果你的波特率在19.2K左右,该方法足够应付,几十台分机都没问题-- 因为每次中断服务也就是几微妙,而1。5--3。5T是毫秒级的。
     
    如果你的波特率很高,那就用DMA只接收收据(不中断)。另外设一个周期计时中断,如每300uS中断一次,每次中断检查dma 有没有收到新的数据,如果间隔时间超过1.8mS就设置桢结束标志。后续的处理和上边一样。用这种方法我处理了波特率是115200的通讯。
     
    我测过很多Modbus产品,包括一些著名的PLC和HMI,真正严格监测1.5T和3.5T的不多。和他们的开发人员也交流过,他们说判错主要靠CRC。
     
    另外你用过带地址桢标志的单片机也不符合Modbus协议吧?如果上下位机都是自己做还可以打擦边球。
     
     
     
     
     

    谢谢你!我应该是受LPC影响太大了,他的串口功能实在是贴心,呵呵,lpc1700,所以就拿它做标准了,其实只要不是特别的完美主义,实现modbus也不是特别困难,我觉得您说的第二种方法比较适合我,这样也就不需要所谓的MARK位了,我是计划,第一位是带MARK位的这样下位机只接受带MARK位的,如果产生中断,判断是否与本机地址匹配,若匹配,则改变串口配置,接受不带mark位的数据,并打开10ms定时器,上位机的一帧,必须在10ms内传输完(当然,根数数据量可以更改),10ms后校验crc;否则不改变串口配置,不再产生中断,直到下一次接收到带mark位的数据,这是我目前的打算,应该中断也是比较少的,尽管频繁的中断可能没那么讨厌。
     

    你在接收过程中更改串口设置会不会导致丢失数据?理论上当你处理第一个数据中断时第二个数据是正在往里串的。
     

    原来用的也是115200,偶尔会通信失败,还可以,中断的响应还是很快的,数据的实时性强,不要求每次都正确
    我用的是S08, 如果用MARK的方式, 平常让串口 WAIT 进入模式, 这种情况下只有带MARK的数据会产生中断, 之后程序判断是否跟自己匹配, 如果不匹配则再进入WAIT模式, 这样的话中断会少很多.
     

     

    对功耗不感冒 从来不考虑功耗问题,我们做的设备,基本上都是几十几百千瓦的,如何让提高能源利用率才是问题,这样才能给客户省电
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    4

    帖子

    0

    新手上路

    Rank: 1

    积分
    6
    最后登录
    1970-1-1
    发表于 2012-4-24 09:33:43 | 显示全部楼层

    回复:做工控的,K60做modbus怎么样

    你好,我也在做Modbus ,感觉有些问题,能一起沟通下么,交流下。
    我的电话13921193795 QQ:973391979 。或者留下您的电话,我和您联系。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-6 11:32 , Processed in 0.102530 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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