二总线,替代传统485总线通讯,主动上报方案简易实现方法

2024-05-09 15:36

本文主要是介绍二总线,替代传统485总线通讯,主动上报方案简易实现方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 二总线通信设计专栏

  • 《二总线,替代传统485总线通讯,选型及应用-CSDN博客》
  • 《二总线,替代传统485总线通讯,低成本直流载波方案实现及原理-CSDN博客》
  • 《二总线,替代传统485总线通讯,调试避坑指南之最大的电流环路坑-CSDN博客》
  • 《二总线,替代传统485总线通讯,从站设计关注一个地方十倍提升-CSDN博客》
  • 《二总线,替代传统485总线通讯,主动上报方案简易实现方法-CSDN博客》
  • 《二总线,替代传统485总线通讯,地址自动分配或主动上报方案-CSDN博客》
  • 《二总线,替代传统485总线通信,商用高效从机掉线检测方案-CSDN博客》
  • 《二总线,替代传统485总线通信,线材选型及避坑-CSDN博客》
  • 《二总线,替代传统485总线通讯,主站设计-CSDN博客》
  • 《二总线,替代传统485总线通讯,直流载波主机设计方案-CSDN博客》
  • 《二总线,替代传统485总线通讯,低成本直流载波PCB设计要点总结-CSDN博客》
  • 《二总线,替代传统485总线通讯,在线地址分配商用方案解析-CSDN博客》
  • 《二总线,替代传统485总线通讯,高速直流载波通信应用-CSDN博客》

一、概述

    二总线通讯和传统485通讯类似,不能像CAN一样,在物理层面实现总线冲突检测,但在实际产品需求中,确实存在少量的偶发性上报,但又有即时性要求的需求,这种少量、偶发性主动上报功能利用软件也同样可以实现。

二、本文类容

    本文主要利用XM2BUS的从站芯片XM332芯片的CSMA端口引脚,配合软件逻辑来实现主动上报的原理讲解,本文所涉及的主动上报主要针对少量、偶发性的主动上报,比如电子围栏、货架、生产线传感器异常报警、车库系统车位传感器检测等。

三、XM332功能介绍

    在博文《二总线,选型及应用-CSDN博客》中以及介绍了XM620+XM332的基本原理,有需要可以先去了解,XM620为主站,XM332为从站,其通讯方式为半双工主从模式,即主站下发数据所有从站均可收到,从站上传数据,只有主站能够收到。

    XM332引脚说明如下所示,其中第4脚为CSMA载波监听引脚,主要监控总线当前数据(包括主站下发和其它从站上传),有数据(低电平),空闲(高电平);但是要注意的是由于二总线通讯波特率是2400bps/9600bps,本身单字节数据就超过1ms以上,所以仍然会产生数据冲突,需要理解这点,才能设计比较靠谱的冲突检测逻辑。

引脚

名称

输入

输出

说明

1

VCC

电压输入:(2.7~5.0)V

2

TX

芯片串口发送端

3

RX

芯片串口接收端,建议串联100Ω电阻

4

CSMA

载波监听,有数据(低电平);空闲(高电平)

5

PO

总线信号输出,外接三极管控制100欧电阻接入总线

6

NC2

预留,请悬空或者与7脚短接

7

PI

总线信号输入,需要外接分压电阻

8

GND

电源地

四、主动上报实现方法

    主从通讯中,由于主动上报的内容只是偶发性的,即时性要求高,更多的是对即时性要求不高的巡检操作,首先要区分轮询命令上报和主动上报;在主机轮询命令下,XM332的CSMA引脚有2~3byte的延迟释放时间,从机应改在这个时段内尽快回复,以抢占总线,这样就能避免主动上报和轮询上报的冲突,如果从机无法及时上报,那也可以先回复已经收到指令的上报内容,下次再轮询查询结果。

    主机轮询上报区分后,那么在主动上报中最大的坑就是切忌不要等CSMA一空闲马上上报,因为前面提到CSMA是有单字节延迟的,如果系统中若有2台设备同时需要上报,那么就必然会在这1ms内产生冲突;而是要等CSMA引脚释放后,随机等待N Byte,若还空闲则进行上报。

    如果做到随机数产生,一般简单的方案是采用的就是TIM定时器,不分频的计数值,在产生串口中断/人工触发中断来产生,也可以利用某个AD口采样的bit0,多次采样组合成8 bit形成一个随机值。

    疑问:若还是运气不好,产生了冲突怎么办?主动上报数据增加CRC校验即可;首先主机收到从机的主动上报数据,并进行CRC校验正确,则告知从机数据已经收到,避免从机多次重复上报,若从机未收到主机成功收到,那可以到下一轮再主动上报,并主动延长N Byte延时值减小冲突概率,这些细节问题可以根据产品实际情况而调整,也可以和我一起相互讨论。

五、总结

   本文主要针对XM2BUS二总线对偶发性的主动上报提供解决方案思路,而对于更复杂的多从机,大量并发性主动上报,如自动地址分配,采用的策略则完全不同,当然还有即时性的设备掉线检测等方案,后续也会发布出来,希望一起相互讨论学习,也希望大家多多关注和收藏,谢谢啦。

这篇关于二总线,替代传统485总线通讯,主动上报方案简易实现方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/973779

相关文章

java设计模式之工厂模式--普通工厂方法模式(Factory Method)

1.普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。 2.先定义一个接口: package com.zhong.pattern.factorymethod;/*** 发送接口* @author admin**/public interface Sender {/*** 发送消息方法* @param msg*/void send(String msg);} 3

Java设计模式之代理模式2-动态代理(jdk实现)

这篇是接着上一篇继续介绍java设计模式之代理模式。下面讲解的是jdk实现动态代理。 1.)首先我们要声明一个动态代理类,实现InvocationHandler接口 package com.zhong.pattern.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;/*** 演

使用Array实现Java堆栈

本教程给出了使用Array 实现Stack数据结构的示例。堆栈提供将新对象放在堆栈上(方法push())并从堆栈中获取对象(方法pop())。堆栈根据后进先出(LIFO)返回对象。请注意,JDK提供了一个默认的Java堆栈实现作为类java.util.Stack。 适用于所有堆栈实现的两个强制操作是: push():数据项放置在堆栈指针指向的位置。pop():从堆栈指针指向的位置删除并返回数据

具有加载时编织的非公共方法的Spring事务

具有加载时编织的非公共方法的Spring事务 在本教程中,我们将学习在任何spring应用程序中对非公共方法应用事务(通过deault spring AOP只能建议在IoC容器中声明的bean的公共方法)。使用此技术,您可以管理非公共方法的事务,或者将任何方法管理到在Spring IoC容器外部创建的对象(即不由IoC容器管理)。 使用AnnotationTransactionAspect管理

java之main方法

你有没有试过去解释为什么Java主要方法是public,static和void?为什么它的名字是main?调用main()方法时JVM内部会发生什么?主方法的目的是什么?我们来看看。 1. Java主要方法语法 首先提醒Java中main方法的语法。 Main.java public class Main {     public static void main(String[] ar

SpringApplication的run方法主要代码步骤

一、图片流程图 二、主要代码  /*** Run the Spring application, creating and refreshing a new* {@link ApplicationContext}.* @param args the application arguments (usually passed from a Java main method)* @return

Redis利用zset数据结构如何实现多字段排序,score的调整(finalScore = score*MAX_NAME_VALUE + getIntRepresentation(name) )

1、原文:   2、使用sql很容易实现多字段的排序功能,比如: select * from user order by score desc,name desc; 3、问题:用两个字段(score,name)排序。在redis中应该怎么做?   4、使用按分数排序的redis集合。你必须根据你的需要准备分数。 finalScore = score*MAX_NAME_VALUE +

字符串处理函数strchr和strstr的实现

1,strchr函数 函数功能:查找一个字符。在一个字符串中查找一个特定的字符。 函数原型:char *strchr(char const *str,int ch); 函数说明:strchr在字符串str中查找字符ch第一次出现的位置,找到后返回一个指向该位置的指针。如果该字符不存在于字符串中,则返回一个NULL指针。注意:第二个参数是一个整型值,但是,它包含了一个字符串值。

Android图片轮播的实现总结

前言: 在很多app中,我们都可以看到几张图片每隔一段时间就切换一下,这就是我们所称的图片轮播的功能,其主要实现就是用到了ViewPager, 下面我们来着重讲解一下其具体实现 效果图: 步骤一:在XML中添加ViewPager控件 比如: <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:a

Java的clone()方法使用详解

前言: 我们知道,在java的object类中,有这么一个方法clone(),这个方法有什么用呢?怎样才能正确地使用这个方法呢? 下面一一来进行阐述一下 clone()方法详解: 1>clone()方法的作用 顾名思义,clone()方法的作用就是克隆的意思,引入这个方法,这样就便于我们构建属于自己的一些本地对象副本。 这样我们就不用担心因为副本对象的引用而使原生的对象发生改变。