首页 上一页 1 2 下一页 尾页

工控系统串口通讯设计 点击:11666 | 回复:31



如火

    
  • 精华:172帖
  • 求助:0帖
  • 帖子:803帖 | 5249回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2005-08-10 12:16:00
楼主
工控系统串口通讯设计 工控系统通常由工控仪器和计算机终端组成,工控仪器和计算机终端之间通过符合RS-232协议的串口通讯,计算终端可以通过双方既定的数据协议,向工控仪器查询状态信号和发送控制信号。 一、硬件协议:定义了RS-232串口的电气规范。 1)DTE/DCE: 一般把工控仪器称为DCE,计算机终端称为DTE,设备之间通过RS-232电缆连接,DCE端采用母连接器(有槽),DTE端采用公连接器(有针)。但如果工控仪器和计算机终端都采用公连接器,则两者都是DTE设备,它们之间的连接应采用零调制解调器方式。 2)RS-232信号: 标准的RS-232管脚通常有D-25PIN和D-9PIN两种类型,常用的信号如下: 信号分类 D-9PIN D-25PIN 信号名称 信号缩写 信号方向 数据信号 3 2 数据传输 TD DTE->DCE 2 3 接收数据 RD DTE<-DCE 控制信号 7 4 请求发送 RTS DTE<-DCE 8 5 清除发送 CTS DTE<-DCE 6 6 数据发送就绪 DSR DTE<-DCE 1 8 载波检测 CD DTE<-DCE 4 20 数据终端就绪 DTR DTE->DCE 9 22 振铃指示 RI DTE<-DCE 接地信号 5 7 接地信号 GND 3)零调制解调连接(ZERO MODEM): ZERO MODEM处理DTE和DTE设备的对称连接,其连接原理为,一方的传送数据信号为另一方的接收数据信号,一方的控制请求信号为另一方的控制应答信号,接地信号互连。连接示意如下: 信号分类 DTE DTE 数据信号 TD-- RD RD-- TD 控制信号 RTS-- CTS CTS-- RTS (DSR-DCD-RI)-- DTR DTR-- (DSR-DCD-RI ) 接地信号 GND-- GND 二、软件协议:定义了DTE的串口配置,DTE和DCE之间连接协议和数据传输协议。 1)串口参数配置: 波特率(BaudRate):在CBR_110到CBR_256000之间指定,参照仪器指定 数据位(ByteSize):每个字节的位数,一般用7或8,默认为8 停止位(StopBits):停止位的位数,一般有:ONESTOPBIT、TOWSTOPBITS、ONE5STOPBITS,默认为ONESTOPBIT 奇偶校验(Parity): 定义了奇偶校验的模式,一般有:NO_PARITY、EVEN_PARITY、ODD_PARITY,默认NO_PARITY 流量控制(FlowCtrl):定义了流量控制方式,一般有:无控制、硬件方式、XON/XOFF方式,详见握手协议。 2)握手协议:常见有硬件方式RTS/CTS和DTR/DSR方式,软件方式有XON/XOFF和自定义的方式。 RTS/CTS:对于DTE来说,设置OutCtsFlow则CTS低水平位时停止输出,直至高水平位时恢复输出。设置RtsControl为HANDSHAKE则当输入缓冲区数据小于1/4时,DTE将RTS置为高水平位,通知DCE可以传输数据,当输入缓冲区数据大于3/4时,DTE将RTS置为低水平位,通知DCE停止传输数据。DTE(计算机)的缓冲区较大,通常都将RtsControl设置位ENABLE,即保持高水平位。 DTR/DSR:对于DTE来说,设置OutDsrFlow则DSR低水平位时停止输出,直至高水平位时恢复输出。设置DtrControl为HANDSHAKE则当DTR设置为高水平位时容许数据输入,当DTR为低水平位时阻止数据输入。DTE(计算机)的缓冲区较大,通常都将DtrControl设置位ENABLE,即保持高水平位。 XON/XOFF:对于DTE来说,设置OutX时,输出流在DTE收到XoffChar时停止,在收到XonChar时恢复。设置InX时,输入流在缓冲区空闲不足XoffLim时DTE发送XoffChar,通知DCE中止传输数据。当输入流达到缓冲区空闲超过XonLim时,DTE发送XonChar,通知DCE恢复传输数据。 三、编程模式: 在WIN32环境中,串口作为文件访问,但与其他文件不同,串口文件的操作是采用阻塞方式的,读写动作通常会在后台阻塞,用户可以通过响应串口事件,获知端口状态和控制读写动作。因此在WIN32环境中处理串口,应采用重叠I/0机制访问串口文件和在线程中完成读写操作,这样意味着当读写线程阻塞时,不会使主线程锁定而失去响应。 1、串口文件操作方式:根据如上要求,串口一般采用独占和重叠方式打开,如:CreateFile(_T("\\\\.\\COM1"),/*端口名称*/ GENERIC_READ|GENERIC_WRITE,/*文件可读写*/ 0,/*独占方式*/ NULL,/*无权限属性*/ OPEN_EXISTING,/*端口必须存在*/ FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,/*重叠的操作方式*/ NULL/*不支持临时文件*/)。 有效的串口文件打开后,可以进行重叠的读写操作,其中要使用一个重叠操作结构OVERLAPPED: struct { DWORD Internal; /*内部使用*/ DWORD InternalHigh; /*内部使用*/ DWORD Offset; /*操作开始的文件位置(低位),串口文件不支持*/ DWORD OffsetHigh;/* 操作开始的文件位置(高位),串口文件不支持*/ HANDLE hEvent; /*异步事件句柄,重叠操作完成或中断时被激发*/ } OVERLAPPED; 写串口的方式如下: WriteFile(hCom,/*串口文件句柄*/ (void*)data,/*数据指针*/ dwDataBytes,/*请求写的数据字节数*/ &dwOperaBytes,/*函数返回的已写的字节数,在重叠I/O中通常返回0*/ &ov/*重叠操作结构指针*/); 读串口的方式如下: ReadFile(hCom,/*串口文件句柄*/ (void*)buf,/*缓冲区指针*/ dwDataBytes,/*请求读的数据字节数*/ &dwOperaBytes,/*函数返回的已读的字节数,在重叠I/O中通常返回0*/ &ov/*重叠操作结构指针*/); 重叠方式调用读写函数后即返回,程序稍后调用等待事件函数进入阻塞状态,直至异步事件被激发,调用方式如下: WaitForSingleObject(hEvent,/*OVERLAPPED中异步事件句柄*/ dwTimeouts/*读写超时毫秒数*/) 读写超时设置可以由串口配置超时参数COMMTIMEOUTS获得,读超时数 =ReadTotalTimeoutMultiplier * 读字节数 + ReadTotalTimeoutConstant; 写超时数 =WriteTotalTimeoutMultiplier * 写字节数 + WriteTotalTimeoutConstant; 异步事件返回后,可以调用重叠I/O查询函数查看后台读写状况: GetOverlappedResult(hCom, /*端口文件句柄*/ &ov, /*重叠结构指针*/ &dwOperaBytes, /*重叠操作完成的字节数*/ FALSE/*是否需要等待重叠操作完成*/); 以上时串口文件的操作方式,需要注意的是,这些操作除了打开文件外,其他都应当在某个读写线程中调用,让线程在后台阻塞,主线程保持响应。 2、端口事件侦听:WIN32提供串口事件查询函数用以查看端口触发的事件,端口可侦听事件一般有: EV_BREAK :端口中断信号 EV_CTS :CTS信号改变 EV_DSR :DSR信号改变 EV_RXCHAR :收到一个或多个字符 EV_RXFLAG :收到特殊字符 EV_ERR :端口错误信号 EV_TXEMPTY:输出缓冲区数据发送完成 可以通过SetCommMask(hCom/*端口文件句柄*/,dwMask/*事件组合*/)来设置需要侦听的事件,然后应采用重叠模式调用查询事件函数: WaitCommEvent(



小小子

  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 124回
  • 年度积分:1
  • 历史总积分:380
  • 注册:2002年12月24日
发表于:2005-08-11 10:52:00
1楼
谢谢

廖超

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:1
  • 注册:2005年8月11日
发表于:2005-08-13 21:05:00
2楼

冰河

  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 236回
  • 年度积分:1
  • 历史总积分:577
  • 注册:2003年4月03日
发表于:2005-08-15 09:10:00
3楼
好文章。

amda

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 4回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2005-08-16 09:02:00
4楼
不错! 辛苦了!! 谢谢!!!

轻骑兵

  • 精华:0帖
  • 求助:0帖
  • 帖子:10帖 | 156回
  • 年度积分:0
  • 历史总积分:304
  • 注册:2004年8月06日
发表于:2005-08-18 12:13:00
5楼
学习中......谢谢!

caro313

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2005年8月01日
发表于:2005-08-22 09:19:00
6楼
谢谢,好东西了,多多发啊!

梦回原野

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 30回
  • 年度积分:0
  • 历史总积分:55
  • 注册:2005年1月05日
发表于:2005-08-22 16:52:00
7楼
学无止境!佩服!

编程盲

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:4
  • 注册:2005年8月08日
发表于:2005-08-22 22:46:00
8楼
我是一个编程盲,希望作者能将编程部分讲得更通俗易懂些,如:使用的是何种编程语言?每个语句代表何意?从哪句到哪句实现的是何功能?有无编写次序规定?编完程后如何使其自动正常运行?怎样检验其运行否?从计算机的哪几个口可检测到所需数据?如何将所须发送的资料从计算机的某个指定端口发送出去?等等...   可能的话,发E_mail赐教更好!   我的E_mail是:hnxtcj21@21cn.com 谢谢了!

时空之门

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 118回
  • 年度积分:0
  • 历史总积分:418
  • 注册:2004年9月21日
发表于:2005-08-22 23:13:00
9楼
想说看懂还真的不是一件容易的事,不过还是谢谢了

仪表DIY

  • 精华:2帖
  • 求助:0帖
  • 帖子:4帖 | 162回
  • 年度积分:0
  • 历史总积分:231
  • 注册:2005年7月08日
发表于:2006-01-06 13:16:00
10楼
我是新手,有两年多的搞现场仪表安装、调试的经验。
现在正在学习仪表自控
软件方面,没什么经验
还要多向高手学习,还望高手们、前辈不吝赐教

阿唐

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 5回
  • 年度积分:0
  • 历史总积分:70
  • 注册:2003年8月01日
发表于:2006-09-28 15:43:00
11楼
上面用的是VC.
我有用VB编写的MODBUS通讯协议.

www.cn

  • 精华:0帖
  • 求助:0帖
  • 帖子:48帖 | 1717回
  • 年度积分:0
  • 历史总积分:2433
  • 注册:2006年5月16日
发表于:2006-11-02 22:22:00
12楼
好东西
值得学习 

刘正刚

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 216回
  • 年度积分:0
  • 历史总积分:237
  • 注册:2006年11月10日
发表于:2006-11-12 15:05:00
13楼
永远支持激情如火。

ABCDEF

  • 精华:1帖
  • 求助:0帖
  • 帖子:17帖 | 138回
  • 年度积分:0
  • 历史总积分:1321
  • 注册:2006年9月16日
发表于:2006-11-27 10:20:00
14楼
 好东西谢谢

tqt

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 8回
  • 年度积分:0
  • 历史总积分:58
  • 注册:2005年12月20日
发表于:2006-12-24 22:44:00
15楼
好东西!顶!

新野

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 10回
  • 年度积分:0
  • 历史总积分:64
  • 注册:2006年10月15日
发表于:2007-01-09 17:00:00
16楼
真是好东西啊,谢谢!

新疆

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 17回
  • 年度积分:4
  • 历史总积分:202
  • 注册:2003年11月29日
发表于:2007-03-28 18:39:00
17楼
应该是好东西!请教个问题,一般带RS232或RS484通讯的工业仪器都配套有驱动程序和数据线,不知是否激情如火的这篇文章是针对驱动程序的一般解释?大家见笑了!

到口酥

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 50回
  • 年度积分:0
  • 历史总积分:54
  • 注册:2006年6月28日
发表于:2007-03-31 11:18:00
18楼
好文章.

i_cobra

  • 精华:0帖
  • 求助:0帖
  • 帖子:15帖 | 35回
  • 年度积分:0
  • 历史总积分:293
  • 注册:2003年7月18日
发表于:2007-04-02 10:15:00
19楼
不错,谢谢

支峰

  • 精华:0帖
  • 求助:0帖
  • 帖子:10帖 | 49回
  • 年度积分:0
  • 历史总积分:142
  • 注册:2005年12月02日
发表于:2007-05-11 14:52:00
20楼
好文章,正需要这方面的资料呢。收藏了~~~

热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 下一页 尾页