精华内容
下载资源
问答
  • 串口通信是常见的通信方式,串口接口是大部分工控器件标配的通信接口。在项目开发的过程中,也经常遇到进行串口通信的处理。这里就串口通信的部分问题分享给大家。1、TTL、RS232、RS422、RS458这几种通信接口有什么...

    c84bdd8c7beac1f0594013d5f585d676.png

      串口通信是常见的通信方式,串口接口是大部分工控器件标配的通信接口。在项目开发的过程中,也经常遇到进行串口通信的处理。这里就串口通信的部分问题分享给大家。

    658341311c559b6dc6445c165e54ff69.png

    1、TTL、RS232、RS422、RS458这几种通信接口有什么区别?

      TTL:TTL是一种芯片的电平信号,其电平电压一般为5V或3.3V;

      RS232:RS232通信有三根线,分别为发送TX、接收RX、信号参考GND;发送与接收信号的电平范围为±15V;

      因TTL和RS232信号之间的电平差异,故TTL信号不能与RS232信号之间连接。TTL与RS232之间连接时需要通过接口芯片转接。

      RS422:RS422是一种全双工、差分的通信方式,硬件接线需要接有四根线,分别为TXD+、TXD-、RXD+、RXD-;

      RS485:RS485是一种半双工、差分的通信方式,硬件接线有两种方式,一种有2根线分别为A、B;另一种有4根线;

      除了以上的区别,这几种接口还有很多方面的差异,具体的这里就不再展开。

    2、“波特率、数据位、停止位、校验位”和通信协议的区别?

      波特率、数据位、停止位、校验位,这些参数是通信的基本参数,署于硬件层面的参数匹配;而通信协议是在通信线路上建立的具有具体含义的规约。

    3、串口自定义协议通信时候,起始字符和停止字符的含义及使用方法?

      起始字符:用于指定串口通信的过程中,判定通信字符串是否开始的标志。比如以“A5h”作为通信的起始字符,则表示当串口接收数据,当出现“A5h”时,则代表通信数据包开始;“A5h”之前接收到的数据被自动抛弃。

    a4b47c299c174462c0637b997f4e90dd.png

    自定义协议示例

      停止字符:用于指定串口通信的过程中,判定通信数据包结束的标志。比如以“F5h”结束作为通信数据包的结束字符,则表示当开始接收数据包后,当接收数据出现“F5h”时,则认为数据接收完成,即完成了一次数据包数据的接收。

      在使用的过程中,若使用了起始字符和停止字符,则串口仅在接收到起始字符到结束字符之间的数据时,才会被认为接收到一组完整的数据包。

    4、接收字符长度的使用方法?

      进行串口通信配置的过程中,若设置了串口接收字符长度,则串口通信的过程中,若接收到的数据长度达到设置的接收字符长度,即判定一次串口数据接收完成。

    3cf0bec6fb0beffecfecb39c6925cf7d.png

      图中所示的协议,以A5h作为通信的开始字符;以接收字符长度16作为数据接收结束条件。

    5、串口通信读取是数据的过程中,下发了读取命令但未接收到读取数据这个如何处理?

      这种情况,首先应确认通信线路是否连接正常;其次检查通信参数设置是否正确;再次检查通信地址、起始位、结束位、数据长度等设置是否正确;再次确认下发命令是否正确……依照此过程逐步排查。

    1ce6c69746586ac59d76fef08cce2fa5.png
    展开全文
  • 用C语言做物联网网关开发时,经常需要通过串口、485接口等从一些传感器读取数据,由于网关设备和传感器所处的环境复杂多样,电磁干扰等常常会破坏传输的数据,为了确保传输数据的可靠性,通常会采取一些策略,常用的...

    用C语言做物联网网关开发时,经常需要通过串口、485接口等从一些传感器读取数据,由于网关设备和传感器所处的环境复杂多样,电磁干扰等常常会破坏传输的数据,为了确保传输数据的可靠性,通常会采取一些策略,常用的策略:数据校验+超时重传,具体过程如下:

    1. 发送方在发送数据时,在元数据的基础上增加校验数据形成请求数据包(data pack),然后将请求数据包发送出去,并启动守卫计时器(Guard Timer)。
    2. 接收方在收到请求数据包后,以跟发送方相同的算法对元数据进行计算得到校验数据,然后跟收到的校验数据进行比较,若相同,则说明数据可靠,可以使用;反之,说明数据被破坏,直接丢弃掉。若数据可靠,接收方以同样的格式做成响应数据包回复给发送方;若发现数据被破坏,接收方不回复任何数据。
    3. 如果发送方在守卫计时器超时前正确地接收到了接收方回复的响应数据包,则停止守卫计时器,并进行后续的处理;若发送方在守卫计时器超时时仍未收到接收方回复的响应数据包,则重新发送“1.”中的数据包,如此反复,直到正确发送或达到了重传次数。

    步骤1~3重点为了讲述如何确保数据可靠传输,真实情景中为了能正确地断包(识别数据包),通常会按照如下结构来定义数据包:

    18d8eaeb6a27f3ef02502678dfcf87ba.png
    • 包起始标识:通常使用固定数据,比如0xFA, 0xAA, 0xA5等;
    • 元数据长度:根据元数据长度可断包。比如:元数据长度占1字节,校验数据占2字节,当元数据长度取值为10时,则数据包大小为14字节;
    • 元数据:发送的或接收的,有一定格式或意义的应用数据;
    • 校验数据:按照某种校验算法计算得到的值。

    通常以如下的C语言结构体来描述数据包:

    #define MAX_DATA_LEN  100     /* 假设元数据的最大长度为100字节 */
    typedef struct tag_data_pack {
        uint8_t sop;                     /* 包起始标识,(Start Of Pack) */
        uint8_t len;                     /* 元数据长度,假设为1字节 */
        uint8_t datas[MAX_DATA_LEN + 2]; /* 元数据 + 2字节的校验数据 */
    }data_pack_t;

    总线式的通信中,通常还会在数据包中加入目标设备的地址,以便于确定数据是发往总线上的哪个设备,数据包的参考结构如下:

    62d1aaaa279075c896866a5fcadb51d7.png

    用C语言描述如下:

    #define MAX_DATA_LEN  100     /* 假设元数据的最大长度为100字节 */
    typedef struct tag_data_pack {
        uint8_t sop;                     /* 包起始标识,(Start Of Pack) */
        uint8_t addr;                    /* 目标设备地址,假设为1字节 */
        uint8_t len;                     /* 元数据长度,假设为1字节 */
        uint8_t datas[MAX_DATA_LEN + 2]; /* 元数据 + 2字节的校验数据 */
    }data_pack_t;

    文中涉及的概念:

    发送方、接收方、元数据、校验数据、请求数据包、响应数据包、守卫计时器。

    展开全文
  • 如何手工注册MSComm控件及其串口编程详解 - yunbo - 博客园大家知道,当我们安装VC++6.0/VB6.0时,如果选择了ACtiveX控件项(自定义安装),MSComm控件就会自动安装在计算机上了,并在系统文件夹下多了3个文件:...

    如何手工注册MSComm控件及其串口编程详解 - yunbo - 博客园

    大家知道,当我们安装VC++6.0/VB6.0时,如果选择了ACtiveX控件项(自定义安装),MSComm控件就会自动安装在计算机上了,并在系统文件夹下多了3个文件:Mscomm.srg, Mscomm32.ocx,Mscomm32.dep

       注意,操作系统不同,则系统文件夹不同:
           Win98: windows/system
           Win2000: winnt/system32

    那么用了MSComm控件的程序在发布时或者在DELPHI开发环境下如何来注册MSComm控件呢?发布程序时可以用安装程序,我们这里不介绍,只谈谈如何手工来注册安装MSComm控件。

      第一步:将Mscomm.srg, Mscomm32.ocx,Mscomm32.dep三个文件复制到系统文件夹中。要注意的是,MSComm控件是要授权的,所以必须将其使用“执照”Licence 在注册表中登记注册,下一步就是注册方法。至于为什么要这样做,可以看看下面的网页:http://support.microsoft.com/support/kb/articles/q151/7/71.asp

      第二步:用Windows下的注册工具regsvr32注册该OCX控件,点击“开始”->"运行",再在中填入(假设操作安装在C盘,WIN2000):

    Regsvr32 C:winntsystem32Mscomm32.ocx

     第三步:在注册表中手工新建一个主键项:先在点击“开始”->"运行",再在中填入regedit命令打开注册表,找到HKEY_CLASSES_ROOTLicenses,在其中添加主键
    4250E830-6AC2-11cf-8ADB-00AA00C00905 并将内容设置为:

           kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun

       (注:这项内容也可以用记事本程序打开Mscomm.srg文件看到)

    在MFC下的32位串口应用程序 回到页顶
    32位下串口通信程序可以用两种方法实现:利用ActiveX控件;使用API 通信函数。
    使用ActiveX控件,程序实现非常简单,结构清晰,缺点是欠灵活;使用API 通信函数的优缺点则基本上相反。
    以下介绍的都是在单文档(SDI)应用程序中加入串口通信能力的程序。㈠ 使用ActiveX控件:
    VC++ 6.0提供的MSComm控件通过串行端口发送和接收数据,为应用程序提供串行通信功能。使用非常方便,但可惜的是,很少有介绍MSComm控件的资料。  ⑴.在当前的Workspace中插入MSComm控件。
       Project菜单------>Add to Project---->Components and Controls----->Registered
       ActiveX Controls--->选择Components: Microsoft Communications Control,
       version 6.0 插入到当前的Workspace中。
    结果添加了类CMSComm(及相应文件:mscomm.h和mscomm.cpp )。  ⑵.在MainFrm.h中加入MSComm控件。
    protected:
       CMSComm m_ComPort;
    在Mainfrm.cpp::OnCreare()中:
      DWORD style=WS_VISIBLE|WS_CHILD;
       if (!m_ComPort.Create(NULL,style,CRect(0,0,0,0),this,ID_COMMCTRL)){
    TRACE0("Failed to create OLE Communications Controln");
    return -1;   // fail to create
        }  ⑶.初始化串口
    m_ComPort.SetCommPort(1);  //选择COM?
    m_ComPort. SetInBufferSize(1024); //设置输入缓冲区的大小,Bytes
    m_ComPort. SetOutBufferSize(512); //设置输入缓冲区的大小,Bytes//
    if(!m_ComPort.GetPortOpen()) //打开串口
    m_ComPort.SetPortOpen(TRUE);
    m_ComPort.SetInputMode(1); //设置输入方式为二进制方式
    m_ComPort.SetSettings("9600,n,8,1"); //设置波特率等参数
    m_ComPort.SetRThreshold(1); //为1表示有一个字符引发一个事件
         m_ComPort.SetInputLen(0);⑷.捕捉串口事项。

    MSComm控件可以采用轮询或事件驱动的方法从端口获取数据。我们介绍比较使用的事件驱动方法:有事件(如接收到数据)时通知程序。在程序中需要捕获并处理这些通讯事件。
    在MainFrm.h中:
    protected:
    afx_msg void OnCommMscomm();
    DECLARE_EVENTSINK_MAP()
    在MainFrm.cpp中:
    BEGIN_EVENTSINK_MAP(CMainFrame,CFrameWnd )  
    ON_EVENT(CMainFrame,ID_COMMCTRL,1,OnCommMscomm,VTS_NONE)
               //映射ActiveX控件事件
    END_EVENTSINK_MAP()⑸.串口读写.

    完成读写的函数的确很简单,GetInput()和SetOutput()就可。两个函数的原型是:
    VARIANT GetInput();及 void SetOutput(const VARIANT& newValue);都要使用VARIANT类型(所有Idispatch::Invoke的参数和返回值在内部都是作为VARIANT对象处理的)。
    无论是在PC机读取上传数据时还是在PC机发送下行命令时,我们都习惯于使用字符串的形式(也可以说是数组形式)。查阅VARIANT文档知道,可以用BSTR表示字符串,但遗憾的是所有的BSTR都是包含宽字符,即使我们没有定义_UNICODE_UNICODE也是这样! WinNT支持宽字符, 而Win95并不支持。为解决上述问题,我们在实际工作中使用CbyteArray,给出相应的部分程序如下:
        void CMainFrame::OnCommMscomm(){
         VARIANT vResponse;   int k;
    if(m_commCtrl.GetCommEvent()==2) {      
    k=m_commCtrl.GetInBufferCount(); //接收到的字符数目
    if(k>0) {
    vResponse=m_commCtrl.GetInput(); //read
    SaveData(k,(unsigned char*) vResponse.parray->pvData);
    } // 接收到字符,MSComm控件发送事件 }
       。。。。。 // 处理其他MSComm控件
    }
    void CMainFrame::OnCommSend() {
    。。。。。。。。 // 准备需要发送的命令,放在TxData[]中
    CByteArray array;
    array.RemoveAll();
    array.SetSize(Count);
    for(i=0;i<Count;i++)
    array.SetAt(i, TxData[i]);
       m_ComPort.SetOutput(COleVariant(array)); // 发送数据
    }
    请大家认真关注第⑷、⑸中内容,在实际工作中是重点、难点所在。

    ㈡ 使用32位的API 通信函数: 回到页顶
    可能很多朋友会觉得奇怪:用32位API函数编写串口通信程序,不就是把16位的API换成32位吗?16位的串口通信程序可是多年之前就有很多人研讨过了……
    此文主要想介绍一下在API串口通信中如何结合非阻塞通信、多线程等手段,编写出高质量的通信程序。特别是在CPU处理任务比较繁重、与外围设备中有大量的通信数据时,更有实际意义。⑴.在中MainFrm.cpp定义全局变量
    HANDLE    hCom; // 准备打开的串口的句柄
    HANDLE    hCommWatchThread ;//辅助线程的全局函数⑵.打开串口,设置串口
    hCom =CreateFile( "COM2", GENERIC_READ | GENERIC_WRITE, // 允许读写
             0,          // 此项必须为0
             NULL,         // no security attrs
             OPEN_EXISTING,    //设置产生方式
             FILE_FLAG_OVERLAPPED, // 我们准备使用异步通信
             NULL );
    请大家注意,我们使用了FILE_FLAG_OVERLAPPED结构。这正是使用API实现非阻塞通信的关键所在。
    ASSERT(hCom!=INVALID_HANDLE_VALUE); //检测打开串口操作是否成功
    SetCommMask(hCom, EV_RXCHAR|EV_TXEMPTY );//设置事件驱动的类型
    SetupComm( hCom, 1024,512) ; //设置输入、输出缓冲区的大小
    PurgeComm( hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR
               | PURGE_RXCLEAR ); //清干净输入、输出缓冲区
    COMMTIMEOUTS CommTimeOuts ; //定义超时结构,并填写该结构
       …………
    SetCommTimeouts( hCom, &CommTimeOuts ) ;//设置读写操作所允许的超时
    DCB    dcb ; // 定义数据控制块结构
    GetCommState(hCom, &dcb ) ; //读串口原来的参数设置
    dcb.BaudRate =9600; dcb.ByteSize =8; dcb.Parity = NOPARITY;
    dcb.StopBits = ONESTOPBIT ;dcb.fBinary = TRUE ;dcb.fParity = FALSE;
    SetCommState(hCom, &dcb ) ; //串口参数配置
    上述的COMMTIMEOUTS结构和DCB都很重要,实际工作中需要仔细选择参数。⑶启动一个辅助线程,用于串口事件的处理。
    Windows提供了两种线程,辅助线程和用户界面线程。区别在于:辅助线程没有窗口,所以它没有自己的消息循环。但是辅助线程很容易编程,通常也很有用。
    在次,我们使用辅助线程。主要用它来监视串口状态,看有无数据到达、通信有无错误;而主线程则可专心进行数据处理、提供友好的用户界面等重要的工作。
    hCommWatchThread=
         CreateThread( (LPSECURITY_ATTRIBUTES) NULL, //安全属性
             0,//初始化线程栈的大小,缺省为与主线程大小相同
             (LPTHREAD_START_ROUTINE)CommWatchProc, //线程的全局函数
             GetSafeHwnd(), //此处传入了主框架的句柄
             0, &dwThreadID );
      ASSERT(hCommWatchThread!=NULL);⑷为辅助线程写一个全局函数,主要完成数据接收的工作。

    请注意OVERLAPPED结构的使用,以及怎样实现了非阻塞通信。
    UINT CommWatchProc(HWND hSendWnd){
      DWORD dwEvtMask=0 ;
      SetCommMask( hCom, EV_RXCHAR|EV_TXEMPTY );//有哪些串口事件需要监视?
      WaitCommEvent( hCom, &dwEvtMask, os );// 等待串口通信事件的发生
      检测返回的dwEvtMask,知道发生了什么串口事件:
      if ((dwEvtMask & EV_RXCHAR) == EV_RXCHAR){ // 缓冲区中有数据到达
      COMSTAT ComStat ; DWORD dwLength;
      ClearCommError(hCom, &dwErrorFlags, &ComStat ) ;
      dwLength = ComStat.cbInQue ; //输入缓冲区有多少数据?
      if (dwLength > 0) {
    BOOL fReadStat ;  
      fReadStat = ReadFile( hCom, lpBuffer,dwLength, &dwBytesRead,
                &READ_OS( npTTYInfo ) ); //读数据
    注:我们在CreareFile()时使用了FILE_FLAG_OVERLAPPED,现在ReadFile()也必须使用
      LPOVERLAPPED结构.否则,函数会不正确地报告读操作已完成了.
        使用LPOVERLAPPED结构, ReadFile()立即返回,不必等待读操作完成,实现非阻塞
        通信.此时, ReadFile()返回FALSE, GetLastError()返回ERROR_IO_PENDING.
    if (!fReadStat){
       if (GetLastError() == ERROR_IO_PENDING){
         while(!GetOverlappedResult(hCom,
           &READ_OS( npTTYInfo ), & dwBytesRead, TRUE )){
           dwError = GetLastError();
           if(dwError == ERROR_IO_INCOMPLETE) continue;
                 //缓冲区数据没有读完,继续
           …… ……      
       ::PostMessage((HWND)hSendWnd,WM_NOTIFYPROCESS,0,0);//通知主线程,串口收到数据  }
      所谓的非阻塞通信,也即异步通信。是指在进行需要花费大量时间的数据读写操作(不仅仅是指串行通信操作)时,一旦调用ReadFile()、WriteFile(), 就能立即返回,而让实际的读写操作在后台运行;相反,如使用阻塞通信,则必须在读或写操作全部完成后才能返回。由于操作可能需要任意长的时间才能完成,于是问题就出现了。
    非常阻塞操作还允许读、写操作能同时进行(即重叠操作?),在实际工作中非常有用。
    要使用非阻塞通信,首先在CreateFile()时必须使用FILE_FLAG_OVERLAPPED;然后在 ReadFile()时lpOverlapped参数一定不能为NULL,接着检查函数调用的返回值,调用GetLastError(),看是否返回ERROR_IO_PENDING。如是,最后调用GetOverlappedResult()返回重叠操作(overlapped operation)的结果;WriteFile()的使用类似。⑸.在主线程中发送下行命令。
    BOOL  fWriteStat ; char szBuffer[count];
           …………//准备好发送的数据,放在szBuffer[]中
    fWriteStat = WriteFile(hCom, szBuffer, dwBytesToWrite,
               &dwBytesWritten, &WRITE_OS( npTTYInfo ) ); //写数据
    注:我们在CreareFile()时使用了FILE_FLAG_OVERLAPPED,现在WriteFile()也必须使用   LPOVERLAPPED结构.否则,函数会不正确地报告写操作已完成了.
       使用LPOVERLAPPED结构,WriteFile()立即返回,不必等待写操作完成,实现非阻塞 通信.此时, WriteFile()返回FALSE, GetLastError()返回ERROR_IO_PENDING.
    int err=GetLastError();
    if (!fWriteStat) {
       if(GetLastError() == ERROR_IO_PENDING){
        while(!GetOverlappedResult(hCom, &WRITE_OS( npTTYInfo ),
               &dwBytesWritten, TRUE )) {
          dwError = GetLastError();
          if(dwError == ERROR_IO_INCOMPLETE){
               // normal result if not finished
            dwBytesSent += dwBytesWritten; continue; }
    综上,我们使用了多线程技术,在辅助线程中监视串口,有数据到达时依靠事件驱动,读入数据并向主线程报告(发送数据在主线程中,相对说来,下行命令的数据总是少得多);并且,WaitCommEvent()、ReadFile()、WriteFile()都使用了非阻塞通信技术,依靠重叠(overlapped)读写操作,让串口读写操作在后台运行。
    依托vc6.0丰富的功能,结合我们提及的技术,写出有强大控制能力的串口通信应用程序。就个人而言,我更偏爱API技术,因为控制手段要灵活的多,功能也要强大得多。

    展开全文
  • 当需要进行远程管理和配置串口通信设备时,需要用到串口服务器。串口服务器提供串口转网络功能,能够将RS-232/485/422串口转换成TCP/IP网络接口,实现RS-232/485/422串口与TCP/IP网络接口的数据双向透明传输,使得...

    基于兼容和可靠性考虑,大量的工业、自控、仪表等设备仍然采用传统可靠的RS232/485/422接口进行通信。当需要进行远程管理和配置串口通信设备时,需要用到串口服务器。串口服务器提供串口转网络功能,能够将RS-232/485/422串口转换成TCP/IP网络接口,实现RS-232/485/422串口与TCP/IP网络接口的数据双向透明传输,使得串口设备能够立即具备TCP/IP网络接口功能,连接网络进行数据通信,极大的扩展串口设备的通信距离和应用领域。

    串口服务器是一台含CPU、操作系统和网络接入功能的工业计算机,其架构原理如下,本方案CPU通过并行总线或者SPI总线连接多个WK2168,并通过接口电平转换芯片实现与多个RS-232/485/422设备的连接。

    d4775d7daed56bc51068e8d0bc153f71.png

    应用方案优势:

    • 扩展接口数量和功能可配置:通过译码器可以方便的连接32个WK2168,实现最多128个串口通道的扩展,扩展串口均为可配置为带硬件流控(RS232)或者自动收发(RS485)的增强型串口,可以方便连接不同外设。
    • 高速稳定:并行主接口总线速度可达10MB/s,SPI总线总线可达10Mbps,扩展串口的速度可达2Mbps,满足多路高速串行通信需要。
    • 实时高效:WK2168是目前业内唯一提供256收发FIFO的4通道UART器件,具备任意级别可设置触发中断和超时中断,相对于现在的普遍的16-64级FIFO的UART器件,可以降低CPU的管理负担,有效提高系统实时性。
    • 驱动成熟:WK2168提供了稳定成熟的Linux驱动,广泛应用于工控,电力等对稳定性要求较高的行业。

    典型应用案例:

    中嵌科技,海豚科技,东瑞电气,西物智能,荣泰电气,艾恩格电气等

    展开全文
  • boost - 串口通信 超时处理

    千次阅读 2016-08-15 17:51:07
    超时处理
  • 学单片机的大概最先、最常写的通信程序应该就是串口程序了,但是如何写出一个健壮且高效的串口接收程序呢?接下来鱼鹰将根据多年的开发经验教你如何编写串口接收程序(可在公众号获取个人编写的串口接收源码)。本篇...
  • 串口可以说是我们最容易见到,也最容易接触到的一种总线,台式机上一般都有二个,而现在很多下位机、仪器等很多都还是使用串口通信的。1,串口扩展的问题先说一下串口的扩展问题,一般的台式机或工控机上都至少有二...
  • 如果网络内没有与查询地址相一致的从站或从站接收时CRC校验出错,主站将不会接收到返回桢,这时主站根据超时设定判断是否超时,如超时,作出重发或弹出异常错误窗口动作。 协议桢定义如下: 从站地址:地址必须在1--...
  • HC-4GA-PTP模块一款485接口+4G无线通信透传的远程通信模块,可以实现最多组网5个147-PTP模块 + 485接口设备间的广域通信互联,达到的效果好比将处于不同地区的PLC或485串口设备用485电缆连接起来实现数据通信功能。...
  • 超时分串口超时串口超时,主要是读超时,即ReadTimeout与Read方法之间的超时。下面谈谈他们之间的意义和实现。Read方法是阻塞的,它一直在读串口接收缓冲区中的数据,如果接收缓冲区有数据,Read方法则返回一...
  • S7-1200 串行通信S7-1200支持的串行通讯方式点对点(PtP)通信Modbus 主从通信USS 通信名称CM 1241 RS232CM 1241 RS422/485CB 1241 RS485订货号6ES7241-1AH32-0XB06ES7241-1CH32-0XB06ES7241-1CH30-1XB0通讯口类型...
  • 串口通信超时

    2012-05-07 14:55:00
    超时分串口超时串口超时,主要是读超时,即ReadTimeout与Read方法之间的超时。下面谈谈他们之间的意义和实现。  Read方法是阻塞的,它一直在读串口接收缓冲区中的数据,如果接收缓冲区有数据,Read方法则...
  • 本文主要讲了关于51单片机串口通信需要加超时中断这个问题,下面来看一下
  • 串口通信模块由 CPU 供电,不必连接外部电源端口经过隔离,最长距离1000 米有诊断 LED 及显示传送和接收活动 LED支持点对点协议通过扩展指令和库功能进行组态和编程RS485 与 RS232 通信模块的LED诊断 LED 灯红...
  • 一、串口的概念串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口(SerialInterface)是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就...
  • 本文主要讲了51单片机串口通信是否需要加超时中断这个问题,下面一起来学习一下
  • 串口转换器,也常被称作接口转换器,用来转换不同串口协议, 以实现多个串口设备的互联。串口转换器通常由两个双向接口组成,分别对应被转换的两种协 议,如RS232(全双工/半双工)以及RS422 / 423 / 485(半双工)。 这...
  • 【定义】RS485:多台控制器,通过RS485通讯总线(必须用双绞线,或者网线的其中一组),将控制器通过手牵手串联的方式,一根总线接到RS485转换器(集线器)上,再接到计算机串口上,实现一台计算机(软件)多台控制...
  • 一、以太网通信的概念和认识 200 SMART PLC 上自带了一个RJ45的通讯网口,还有一个RS485(以太网)的串口,在这两个通讯口中,均能实现设备与设备之间的通信,以太网我们常用的有给CPU上下载程序及固件升级等。...
  • Stm32f407串口2通信超时重发学习记录二级目录三级目录 学习记录 在 二级目录 三级目录
  • 一、以太网通信的概念和认识 200 SMART PLC 上自带了一个RJ45的通讯网口,还有一个RS485(以太网)的串口,在这两个通讯口中,均能实现设备与...以太网的通信传输速度比自由口等其他串口通信速率要快,一次最多可传输2...
  • 串口通信中ReadFile和WriteFile的超时详解
  • 串口通信中ReadFile和WriteFile的超时详解! 转载 weixin_30448685 最后发布于2013-01-07 10:17:00 阅读数 236 收藏 展开 在用ReadFile和WriteFile读写串行口时,需要考虑超时问题。如果在指定的时间内没有读出...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 238
精华内容 95
关键字:

串口通信超时