精华内容
下载资源
问答
  • android 使用串口Modbus协议和单片机进行通信

    万次阅读 热门讨论 2016-01-07 09:53:00
     我所使用的232串口,使用485串口的请慎重,这232串口和485还是不一样的,这里所说的是232串口通信。 首先你需要导入架包和一些必要文件,在最后会附上图片和源码,这里简单说一下通信的步骤。   1、使用...

    android 使用串口Modbus协议和单片机进行通信

     我所使用的232串口,使用485串口的请慎重,这232串口和485还是不一样的,这里所说的是232串口通信。

    首先你需要导入架包和一些必要文件,在最后会附上图片和源码,这里简单说一下通信的步骤。

      1、使用SerialPortOpt创建对象,然后设置相关数据的初始值:串口号、波特率、数据位,校验位等(来这里看资料的,相信对这些名词有了一定了解,这里不做赘述);

      

    serialPort=new SerailPortOpt();
    		serialPort.mDevNum=0;
    		serialPort.mDataBits=8;
    		serialPort.mSpeed=9600;
    		serialPort.mStopBits=1;
    		serialPort.mParity='n';

     2、打开串口,设置相关参数,并获取输入输出流;

    serialPort.openDev(serialPort.mDevNum);
    			//需要先打开串口在设置相关参数
    			serialPort.setSpeed(serialPort.mFd, serialPort.mSpeed);
    			serialPort.setParity(serialPort.mFd,serialPort.mDataBits,
    					serialPort.mStopBits, serialPort.mParity);
    			//获得输入、输出流
    			mInputStream = serialPort.getInputStream();
    			mOutputStream = serialPort.getOutputStream();

    3、开启线程接收数据;

    /*
    	 * 开启线程接收数据
    	 */
    	private class ReadThread extends Thread{
    		byte[] buf = new byte[512];
    		@Override
    		public void run() {
    			// TODO Auto-generated method stub
    			super.run();
    			if (mInputStream == null){
    				return;
    			}//判断接收的数据是否为空,若为null之后返回继续接收
    			//	mTimer.stopThread();//接收到数据,循环发送的线程stop————————————————————————————
    			int size;
    			size = serialPort.readBytes(buf);
    			if(size>0){
    				byte[] dest = new byte[size];
    				byteLinkedList.offer(dest);//使用队列接收数据
    				/*System.arraycopy(buf, 0, dest, 0, size);//复制数组***********
    				System.out.println("在真正数据之前");
    				for(byte dest1:dest){
    					System.out.println("刚接手到的数据"+dest1);
    				}
    				 */
    				onDataReceived();
    			}
    		}

    4、开启线程发送数据;

    /*
    	 * 开启发送线程
    	 */
    	private class SendThread extends Thread{
    		@Override
    		public void run() {
    			// TODO Auto-generated method stub
    			super.run();
    			sendMsg();
    		}
    	}
    

    5、关闭串口。

    serialPort.closeDev(serialPort.mFd);

      串口中的循环发送线程

    /*
    	 * 定时连续发送的线程
    	 */
    	private class TimerSend extends Thread{
    		private long m_lTimer = 50;	//default 100ms
    		private boolean m_bRunFlag = true;
    		@Override
    		public void run() {
    			// TODO Auto-generated method stub
    			super.run();
    			while (m_bRunFlag){
    				sendMsg();
    				if (m_lTimer <= 0){			//must over 0ms
    					m_lTimer = 50;
    				}
    				try {
    					Thread.sleep(m_lTimer);
    				} catch (InterruptedException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}
    		}
    <span style="font-size:18px;">这些过程中涉及的方法并没有说明,不过可以知道了大体的思路,也算是对串口有了一定的了解,但是这些并没有涉及到Modbus协议,Modbus协议是很重要且很简单的协议,网上有很对介绍,若果有找不到的朋友,我这里附上一份Modbus协议的介绍,中文版的。对于modbus协议,收发机制要明白,一些东西都是和单片机规定好的,需要写死,具体做法我还在摸索中,不过我可以简单做到单片机发送的数据可以读取并解析,这里包括CRC的校验,对发送数据的CRC计算和返回数据的CRC校验,在串口助手中可以试验成功。这些可以看我的源码了。  下面附上开头所说的一些照片,很容易明白了</span>

    Modbus协议介绍中文版

    我的源码

    有错就找我

    这里的源码已经删除了,可以去看另一篇文章,里面也有源码,比这感觉更好一些。网址:http://blog.csdn.net/sky_918/article/details/52807436

    
    展开全文
  • 因此串口通信双方在通信前应制定好通信协议,规定好数据起始和结束标志,串口当读到完整起始和结束标志之后,才认定读完一条完整数据。 本例中用串口定时发送当前时间,用”#”表示数据结尾,定时时间为0...
  • 串口通信的基本参数

    千次阅读 2014-02-21 16:29:17
    6.6.2 串口通信的基本参数 串口一般用于ASCII码字符传输。最基本的串口通信只需3个引脚即可实现,分别是地线、接收和发送...图6.13示为使用Windows中超级终端进行串口通信时设置参数界面。参数具体说明如下:

    6.6.2  串口通信的基本参数

    串口一般用于ASCII码字符的传输。最基本的串口通信只需3个引脚即可实现,分别是地线、接收和发送。其他引脚用于握手协议。由于串口通信属于异步通信,可以在进行通信时不使用握手协议。

    为了正确实现串口间的通信,必须对串口的参数进行设置。图6.13所示为使用Windows中的超级终端进行串口通信时设置参数的界面。参数具体说明如下:

    图6.13  串口通信参数设置

    1.每秒位数
    即波特率。该参数表示每秒传输的比特数。例如,对于发送端,2400波特率表示每秒发送2400bit;对于接收端而言,2400波特率意味着串口通信在数据线上的采样率为2400Hz。由于波特率和距离之间成反比,距离相隔很近的设备间才可以实现高波特率通信。

    2.数据位
    表示通信中实际数据位的参数。在计算机发送的数据包中,实际的数据往往不会是8位。在串口通信中,可以选择5、6、7或8位,如图6.14所示。设定数据位主要考虑所要传输的数据内容。如果要传输的是标准的ASCII码,由于ASCII码的范围是0~127,因此使用7位就可以了。如果要传输的是扩展ASCII码,其范围是0~255,必须使用8位。当然,7位或8位数据位中不仅仅是数据,还包括开始/停止位、数据位以及奇偶校验位等。

    3.奇偶校验位
    该位用于串口通信中的简单检错。奇偶校验位主要有:偶校验、奇校验、标记、空格的方式,也可以不使用校验,如图6.15所示。奇/偶校验是通过统计数据中高位或低位的个数来实现校验的。而标记、空格并不真正检测数据,只是通过简单的置位来实现对数据的检测。通过置位方式,可以判断出是否存在噪声干扰数据通信或数据传输,以及接收是否存在不同步的现象。

              图6.14  数据位设置                      

    图6.15  奇偶校验位设置

    4.停止位
    停止位用于标志该数据包数据结束,可以取1位、1.5位或2位,如图6.16所示。停止位不仅仅用于数据包的传输结束标志,还提供了计算机之间校正同步时钟的机会。用于停止位的位数越多,不同时钟同步的容忍程度越大。但是由于停止位占用了数据空间,过多的停止位将导致数据传输速度的下降。

    5.数据流控制
    通过串口传输数据时,由于计算机之间处理速度或其他因素的影响,会造成丢失数据的现象。例如,台式机与单片机之间的通信,接收端数据缓冲区已满的情况下,继续收到数据,新发送来的数据就会由于无法处理造成丢失。数据流控制用于解决这个问题。通过控制发送数据的速度,确保数据不会出现丢失。

    数据流控制可以分为软件流控制(Xon/Xoff)和硬件流控制,如图6.17所示,也可以选择不使用数据流控制。软件流控制使用特殊的字符作为启动或停止的标志。而硬件流控制通过使用硬件信号(CTR/RTS)来实现。使用硬件流控制时,在接收端准备好接收数据后,设定CTS为1,否则CTS为0。同样,如果发送端准备好要发送数据,则设定RTS为1;如果还未准备好,设置CTS为0。

    图6.16  停止位设置                    

    图6.17  数据流控制设置

    展开全文
  • 我这里使用的版本是8.8。 利用两个元器件就可以建立VIRTUAL TERMINAL和COMPIM的连接。如上图示,两个VIRTUAL TERMINAL的RXD与COMPIM的RXD与TXD相连。单片机的RXD与TXD与COMPIM的TXD与RXD对应相连接。 VIRTUAL ...
  • 本文深入研究了使用单片机控制网卡,接入以太网Ethernet,即IEEE802.3协议网络,实现串口仪器网络化。  1 硬件结构和电路设计  1.1 总体设计  整个系统设计采用ATMEL公司8位通用微控制器AT89C51作为主...
  • Qt串口通信接收数据不完整解决方法

    万次阅读 多人点赞 2016-03-17 16:38:17
    使用串口接收数据时,当数据量大时候会出现...因此串口通信双方在通信前应制定好通信协议,规定好数据起始和结束标志,串口当读到完整起始和结束标志之后,才认定读完一条完整数据。 本例中用串口定时发...

        在使用串口接收数据时,当数据量大的时候会出现数据接收不完整的情况。因为串口数据获取函数readAll()由readyRead()信号触发,但readyRead()信号在串口读到起始标志时立即发送,并不保证一定是当前所发数据的起始部分。因此串口通信双方在通信前应制定好通信协议,规定好数据的起始和结束标志,串口当读到完整的起始和结束标志之后,才认定读完一条完整的数据。

        本例中用串口定时发送当前时间,用"#"表示数据的结尾,定时时间为0毫秒,即能发多快就发多快。

    发送

    void Widget::slotSendData()
    {
        QByteArray temp;
        temp.append(getCurrentTime());
        temp.append("#");
        serialPort->write(temp);
    }

    接收

    void Widget::slotReadData()
    {
        QByteArray temp = serialPort->readAll();
    
        if(!temp.isEmpty())
        {
            byteArray.append(temp);
            if(byteArray.contains("#"))
            {
                ui->textEditReceive->setText(byteArray.split('#').at(0));
                byteArray = byteArray.right(byteArray.length()-byteArray.indexOf('#')-1);
            }
        }
    }

    源码链接:http://download.csdn.net/detail/caoshangpa/9464700

     

    ===============2016.10.14更新==============

           补充一个通过串口传输图片的例子,这里假设波特率为9600,那么一秒钟就能传输9600/8=1200字节。代码中将定时器设置为1秒,所以选择的图片应该小于1200字节。这里为了演示如何完整接收数据,将图片按照指定大小分段发送,在每段之后紧接着发送字符串“###”。

    代码如下所示:

    void Widget::slotSendData()
    {
        matrix.rotate(90);
        QPixmap tempPixmap = pixmap.transformed(matrix);
        QBuffer buffer;
        tempPixmap.save(&buffer,"jpg");
        ui->labelImage->setPixmap(tempPixmap);
    
        char *data=(char*)buffer.data().data();
        int dataLength=buffer.data().length();
        //打印图片大小
        qDebug()<<"Image Size:"<<dataLength;
        int standPacketSize=120;
        int packetSize=0;
        int packetNum=ceil(dataLength/120.0);
    
        if(dataLength>120)
        {
            for(int i=0;i<packetNum;i++)
            {
                if(standPacketSize*(i+1)<dataLength)
                {
                    packetSize=standPacketSize;
                }
                else
                {
                    packetSize=dataLength-standPacketSize*i;
    
                }
    
                serialPort->write(data,packetSize);
                data=data+packetSize;
            }
        }
    
        serialPort->write("###",3);
    }

    运行效果如下图所示:

    操作顺序1——》2——》3,左边的实例就会加载目录中的1.JPG并发送给右边的实例,图片每秒钟旋转90°。

     

    源码链接:http://download.csdn.net/detail/caoshangpa/9653821

    原创不易,转载请标明出处:https://blog.csdn.net/caoshangpa/article/details/50915005

    展开全文
  • powerXray电总协议调试助手是一个简单易用智能设备串口通信调试利器,主要为用户提供排查通讯问题解决方案,大幅缩短通信故障现场排查时间,时间平均在5-10分钟即可完成故障定位,排除故障,而且界面漂亮美观,纯...

    简介:

    powerXray电总协议调试助手是一个简单易用的智能设备串口通信调试利器,主要为用户提供排查通讯问题解决方案,大幅缩短通信故障现场排查时间,时间平均在5-10分钟即可完成故障定位,排除故障,而且界面漂亮美观,纯绿色无任何插件,解压即可运行。


    软件说明:

    工作中我们时常被智能设备通讯是否正常这个问题所困扰,通讯问题往往是隐性的,尤其对于一线维护人员,更有种看不见摸不着,遇到问题瞎子摸象一样的感觉。怎样科学高效的排查通讯问题就是我们迫切需要解决的。今天跟大家介绍的就是这样一款解决这个问题的软件,使用无门槛,查找问题透明化,它就是传说中的powerXray电总协议调试助手,在与智能设备使用RS232或RS485物理接口进行通信的时候,由于我们经常会无法判断物理接口是否损坏,或者智能设备通讯主板有无故障,所以就非常需要这样的一款软件辅助我们的工作,据统计,最复杂的通信故障通常排查时间需要1-2小时。而有了powerXray电总协议串口通信调试助手,现场排查时间可以得到大幅缩短,时间平均在5-10分钟即可完成故障定位,排除故障。


    说明:

    powerXray电总协议调试助手简单易用有非常清晰的色彩指引使用,可以快速上手操作,软件可以长期免费使用。
    powerXray电总协议调试助手自带简易使用说明,方便查看CID1和CID2相关参数进行设置,同时还有RTN返回码定义供查看。
    该软件绝无病毒,如遇到误报病毒问题,可以截图发邮件至1587101588@qq.com反馈,或直接提交给相应的杀毒软件报错。


    下载地址:

    http://www.bytepan.com/4AMNOgeyBI2

    在这里插入图片描述

    展开全文
  • Uart串口通信的理解

    2017-07-22 16:33:17
    串口通信广义的概念有很多,我们这里主要讲RS232这一类型,首先RS232使用的电平是负逻辑电平,所以首先必须采取电平转换芯片,一般采用MAX3232这种芯片,具体的硬件连接图如图示 : 再来看串口传输的协议格式: ...
  • 单片机串口通信

    2017-10-12 10:27:27
    对于8位单片机并口通信一般是使用8条数据线将字节数据分为8位从8条数据线同时发送出去或接收进来,当然需要线并不止8条,一般还需要一些控制线,控制线功能可以自己定义控制协议;而串口通信一般需要两条...
  • Zigbee串口通信

    千次阅读 2015-05-22 08:45:39
    Zigbee串口通信 一、串口基本原理 串口是开发板和用户电脑交互一种工具,正确地...上述方法是使用串口常用方法,但是由于ZigBee协议存在,使得串口的使用略有不同,在ZigBee协议栈中已经对串口初始化需要
  • 串口通信参数

    2012-06-07 15:09:39
    今天有同事突然问起残口通讯问题,原来做过发现现在有点...由于串口通信属于异步通信,可以在进行通信时不使用握手协议。 为了正确实现串口间通信,必须对串口参数进行设置。图6.13示为使用Windows中超级终
  • RS232串口通信

    2014-08-11 10:23:00
    RS232串口经常使用在PC机与...而用FPGA实现控制器时只需要利用RXD和TXD两根线即可完成串口通信。 UART异步通信协议如下示: 1. 首先接受双方提前定义好通信速度和格式等信息; 2. 如果是空闲状态,发...
  • 摘 要 概述了PC机与单片机间进行串行口通信的基本原理,介绍了PC机与下位机之间的通信协议,并详述了在VisualC + +环境下上位机利用MSComm通信控件与单片机之间进行RS232异步串行口通信的实现,给出了实现通信的硬件...
  • 硬件 I2C: 对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率要远高于软件模拟的I2C;一般也较为稳定,但是程序较为繁琐。硬件(固件)I2C是直接调用内部寄存器进行配置;而软件I2C...
  • STM32串口通信、串口调试助手

    万次阅读 多人点赞 2018-12-05 14:09:23
    STM32学习之旅② 固件库的使用及工程模板建立 STM32学习之旅③ 从点灯到代码移植 STM32学习之旅④ USART串口和上位机通信 STM32学习之旅⑤ SPI控制TFT,从底层到底层设计 目录: 一、认识其本质 (一)串口 ...
  • STM32——串口通信

    2019-07-29 10:45:39
    ALIENTEK 精英 STM32 开发板所使用的 STM32F103ZET6 最多可提供 5 路串口,有分数波特率发生器、支持同步单线通信和半双工单线通讯、支持 LIN、 支持调制解调器操作、 智能卡协议和 IrDA SIR ENDEC 规范、具有 DMA...
  • ALIENTEK 探索者 STM32F4 开发板所使用的 STM32F407ZGT6 最多可提供 6 路串口,有分数波特率发生器、支持同步单线通信和半双工单线通讯、支持 LIN、支持调制解调器操作、智能卡协议和 IrDA SIR ENDEC 规范、具有 DMA...
  • 摘 要 概述了PC机与单片机间进行串行口通信的基本原理,介绍了PC机与下位机之间的通信协议,并详述了在VisualC + +环境下上位机利用MSComm通信控件与单片机之间进行RS232异步串行口通信的实现,给出了实现通信的硬件...
  • STM32F103 串口通信实验

    千次阅读 2020-06-04 09:54:47
    串口通信是一种设备很常用串口通讯方式,串口按位(bit)发送和接受字节,尽管比按字节(byte)并行通信慢,但是串口可以在使用一根线发送数据同时用另一根线接收数据,大部分电子设备都支持该通讯设备,作为...
  • 串口通信

    2019-07-11 23:31:15
    而想要准确地使用各个模块,通信协议无疑要掌握较为细致。 首先总结一下学,常用串行通信方式有UART、SPI和IIC UART利用单片机自带的串口模块和IO口进行通信,比较简单(算是),但是多用于两机通信,比如...
  • 串口通信 STM32 串口资源相当丰富,功能也相当强劲。ALIENTEK MiniSTM32 开发板所使用 STM32F103RCT6 最多可提供 5 路串口,有分数波特率发生器、支持同步单线通信和半双工单线通讯、支持 LIN、支持调制解调...
  • 学习了一篇好博客,特此转载 灿哥哥文章:原文链接 ...在使用串口接收数据时,当数据量大时候会出现数据接收不完整情况。...因此串口通信双方在通信前应制定好通信协议,规定好数据起始和结束标志,串口
  • ESP8266 WIFI串口通信

    2020-08-19 10:20:42
    AT 指令 ESP8266使用AT指令进行配置,即只需要通过串口向ESP8266发送AT指令即可。AT指令不区分大小写,均以回车、换行结尾。下面介绍常用AT指令: ...需要做就是A通过串口发数据,B通过串口收数据,
  • 端对端协议)和SLIP(Serial Line Interface Protocol, 非常老串行线路接口协议),这里"上网"是指把串口当成一个网络接口,通过封装网络数据包(如IP包)以达到无网卡终端可以通过串口进行网络通信。...
  • 通信软件TCP,串口

    2017-09-14 13:32:37
    通信软件,可以测试连接TCP,串口等。在计算机通信中,通信... 通信协议是指通信各方事前约定的通信规则,可以简单地理解为各计算机之间进行相互会话所使用的共同语言。两台计算机在进行通信时,必须使用的通信协议
  • FX5U系列的PLC本机是自带485接线端的,所以,我们使用的时候只需要将屏蔽双绞线接到485端子,同时设置终端电阻,如下图(1对配线将终端电阻切换开关打到110欧,2对配线打到330欧) 485引脚接线图(1对配线),如下...
  • (11)兼容NRF24L01无线设备,随意更改通信地址和串口通信波特率(可选波特率为:4800、9600、57600、115200)。 (12)全智能串口控制,发送特定指令,轻松实现各种IO高低电平、点动1s、IO口状态查询信号控制功能! ...
  • 关键词:CAN 波特率 流控制1 引言工业设备通信通常涉及到很多硬件和软件产品以及用于连通标准计算机平台(个人计算机或工作站)和 工业自动化应用设备的协议,而且所使用设备和协议的种类繁多。因此,大部分自动化...
  •  LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发的,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显着区别是:其他计算机语言都是采用基于文本的语言产生代码,而LabVIEW使用的是图形化...
  • 工业设备通信通常涉及到很多硬件和软件产品以及用于连通标准计算机平台(个人计算机或工作站)和工业自动化应用设备的协议,而且所使用设备和协议的种类繁多。因此,大部分自动化应用设备都希望执行简单的串行命令,...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 217
精华内容 86
关键字:

串口通信所使用的协议