当前位置:首页 > 工业控制 > 工业控制
[导读]摘要:介绍了分布式控制系统中上位PC机与下位单片机异步串行通信的通信协议;同时介绍了在VC++6.0环境下用PComm编写的PC机通信程序来实现上位机和下位机异步串行通信的方法,给出了PComm编程实例和下位机程序模块流程

摘要:介绍了分布式控制系统中上位PC机与下位单片机异步串行通信的通信协议;同时介绍了在VC++6.0环境下用PComm编写的PC机通信程序来实现上位机和下位机异步串行通信的方法,给出了PComm编程实例和下位机程序模块流程图。 关键词:分布式控制系统;异步;串行通信;PComm 在由一台PC机(上位机)和多台单片机(下位机)构成的分布式控制系统中,单片机主要负责实时数据采集,并将初步处理后的数据通过串行口传送给PC机?以便由PC机串行口的命令对单片机进行控制,同时通过打印机或显示器向用户随时提供各种统计报表和整个控制过程的具体数据。在这样的分布式控制系统中,单片机与微机之间的多路通信是整个系统的关键,本文将介绍在提高通信的准确性、可靠性和效率的前提下,用PComm开发PC机与单片机的通信程序的解决方案。 1 通信协议 为了保证可靠的通信,必须有一套完善的通信协议。分布式控制系统中的每台单片机均有唯一的番号。通信开始时,先由PC机呼叫被叫单片机的番号,单片机在接收到微机的呼叫后,首先判断是不是自己的番号,如果是,则发送呼叫应答信号,否则不予理睬。微机在接收到呼叫应答信号之后,将向单片机发出通信命令字符串。以下是上位PC机协议的格式: 单片机号单片机号命令码命令码停止标志 其中,单片机号代表现场第几台单片机,占用1个字节,发送两次的目的是为了防止干扰;命令码则代表上位机向下位机发布的工作命令,它也占用1个字节,发送两次的目的也是为了防止干扰。而停止标志则表明一次命令发送完毕。使用时可依据该标志判断上位机的命令是否发送完毕。 下位机协议格式如下: 数据块校验位该格式中,数据块为下位机上传到上位PC机的数据。校验位则用于PC机对收到的数据进行奇偶校验(占1个字节)。校验正确后,可将数据写入内存,否则发出数据传输错误信息,以要求单片机重新传输数据。 另外,作为一个完整的通信协议,只有上述约定还不够,还必须在发送和接收数据的时间间隔上加以限制。否则,很可能由于某些原因而造成无限制的等待对方应答,使整个系统处于工作不正常状态,或者延误其它动作的处理。具体时间限制可根据通信内容、CPU处理速度,再加上适当的余量来确定。 2 单片机通信程序设计


设计单片机通信程序时,必须充分发挥单片机的效率。由于单片机多应用于实时性较强的控制场合,因此,应将及时响应和控制对象的动作放在优先考虑的位置,以尽量减少通信等辅助性操作所占用的CPU时间。基于上述考虑,笔者在设计单片机通信程序时,将通信程序分为接收中断处理程序、发送中断处理程序和通信处理程序3部分,并将这3部分程序巧妙地进行组合,从而构成整个单片机的通信程序。 2.1 接收中断处理程序 接收中断处理程序主要负责接收微机发送到单片机接收缓冲区(不对数据进行处理,以减少中断占用的时间)的数据,当接收到规定的字符数或在一定等待时间内无后续数据之后,置接收完毕标志,以表明接收缓冲区中有待处理的数据并请求通信处理程序对其进行处理。其流程图如图1所示。 2.2 发送中断处理程序 发送中断处理程序主要负责向微机发送数据,发送中断一般处于禁止状态,只有在通信处理程序将需要发送的数据写入单片机的发送缓冲区,并将发送中断置为允许方式后,发送中断才开始工作,并将缓冲区数据逐一发送给微机。当发送完指定长度的数据后(发送缓冲区为空),发送中断处理程序将发送中断置为禁止(关闭)状态,直到通信处理程序将其再一次开放。其流程如图2所示。 2.3 通信处理程序 考虑到尽量减少通信中断程序所占用的CPU时间,通信处理程序被放在普通主循环中调用。只有在接收到上位机送来的一串数据,且接收完毕标志为“ON”时,才能真正进行处理,否则不进行处理。这样就可利用送信后等待微机回答的时间进行别的处理,从而消除了空等待时间,提高了CPU的利用率。通信处理程序可根据通信处理状态的不同来分别执行不同的路径。在进入相应路径后,首先对接收缓冲区的内容进行正确性检查,检查正确后再根据通信要求或协议规定对缓冲区的内容进行处理(包括内存的写入和读出),同时重新组织数据到发送缓冲区以向微机发送数据,最后退出通信处理程序以执行其它的程序。待接收中断程序重新接收到数据并将接收完标志置为“ON”后,可重新进入通信处理程序进行处理。 3 PC机通信程序设计 在VC++6.0环境下,利用PC机串口进行通信的常用方法有两种?第一是调用Windows API?Appli- cation Program Interface函数;第二是使用ActiveX的MSComm控件。第一种方法需声明及调用许多API函数,十分烦琐。而第二种方法是将API函数封装起来,这种方法虽较为简便,但不能满足复杂情况下的通信要求。本文将介绍另外一种用PComm处理PC机的串口通信方法。 PComm是一种用于处理多进程/多线程的串口通信软件开发工具,它提供了许多基于API函数的命令集来处理串口通信,可以在Visual C++、Visual Basic、Delphi 5.0等多种开发工具下使用,且具有传输速度快、使用灵活方便等特点,能够满足复杂情况下的串口通信要求。 3.1 Pcomm的主要命令码 PComm的主要命令码有以下几种: ● sio open(port); 用于设置并打开串口,其中port的1、2、3、4分别代表COM1、COM2、COM3、COM4。当返回值为0时,表示串口已经打开,否则为串口打开出错。 ● sio close(port); 关闭串口,当返回值为0时,表示串口已经关闭,否则为串口关闭出错。 ● sio ioctl(port?baud?mode); 用于设置串口波特率、校验位、数据位、停止位等参数。 ● sio getch(); 从串口输入缓冲区读出一个字符,返回值为0表示已收到数据。 ● sio-read(port?buf?len); 用于从串口输入缓冲区读出一串字符,buf代表字符串数组len代表数组长度,返回值为0表示未收到字符,大于0代表收到字符的个数。 ● sio-SetReadTimeouts?port?TotalTimeouts(Inter-valTimeouts); 在设定的等待时间内连续读串口输入缓冲区,TotalTimeouts代表设定的等待时间,IntervalTimeouts代表每次读出的间隔时间。 ● sio-flush(port?func); 用于清空缓冲区。当func为0时清空输入缓冲区,为1时清空输出缓冲区,为2时清空输入输出缓冲区。 ● sio-putch(port?term); 用于向串口缓冲区发送一个字符,返回值为0时表示发送正确,否则表示发送错误。 ● sio-write(port?buf?len); 用于从串口缓冲区发送一串字符,buf代表字符串数组,len代表数组长度。 3.2 实现过程 在用Pcomm处理PC机的串口通信时,其实现过程如下: (1)启动VC++ 6.0,新建一个基于对话框的应用程序TxRx。同时增加静态文本、编辑框和按钮控件,并为它们添加相应的变量。其属性见表1。 表1 TxRx应用程序的属性 控 件 ID 变量名类 型 按 钮 IDC_TRSMITT 发送按钮  Edit IDC_TXDATA M_TxData Cstring Edit IDC_RXDATA M_RxData Cstring (2) 将Pcomm.h和Pcomm.lib加入到工程中,并在TxRxDlg.cpp文件中加入#include “Pcomm.h”头文件,此后便可调用其提供的通信命令集。 (3)在TxRxDlg.cpp文件中添加有关程序代码,也就是在OnInitiDialog?函数中的TODO语句后加入以下代码: //TODO? Add extra initialization here int ret?port=1? ret=sio open?port? //打开串口1 sio DTR?port?0? //置DTR为低电平 sio ioctl?port?B19200?P NONE|BIT 8| STOP 1? //设置波特率为19200,8位数据位, 1位停止位,无校验位。 3.3 数据通信 下面举例说明PC机如何通过串口向单片机发送并接收数据。 void CTXRXDlg??SendRecv?//收发数据子函数 {


while?1 { int ret1? sio flush?port?2;//清空串口输入输出缓冲区 sio- write(port,1,5); 向串口缓冲区发送5个字符 sio- SetReadTimeouts(port,40,1); //在40ms内每隔1ms读一次串口 ret1=sio-read(port,RecvBuf,1); if (ret1>0) { sio- close(port); break; } //若收到数据,关闭串口,跳出循环 else; //若未收到数据,对串口再一次发数据并再次查询接收。 } } 4 结束语 本文给出了分布式控制系统中上位PC机与下位单片机之间进行异步串行通信的解决方案。此方案在实际运行过程中,运行稳定,通信性能良好,从而较好地解决了上位机与下位机之间的通信问题。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

慕尼黑2025年9月8日 /美通社/ -- 2025年9月8日德国国际汽车及智慧出行博览会(IAA MOBILITY)于慕尼黑开幕,广汽携旗下五款新能源明星车型亮相,正式发布未来移动出行的"广汽方案"...

关键字: 广汽 IO AI 移动

北京2025年8月19日 /美通社/ -- 美通社(PR Newswire)母公司,全球消费者与媒体情报领军企业Cision今日正式宣布,旗下CisionOne平台连续第二年荣获市场情报权威机构MarTech Break...

关键字: CIS THROUGH TE IO

加州圣地亚哥和北京2025年7月25日 /美通社/ -- CreateAI(OTC:TSPH)今日宣布,公司与枕刀歌动画团队联合出品的《绣春刀》短片在Collision Awards中一举斩获三枚金奖和一枚银奖,与Wal...

关键字: CREATE AI SI IO

上海 2025年7月4日 /美通社/ -- 本文阐述了汽车电子架构从分布式向集中化演进的趋势,黑芝麻智能分析了集中化带来的安全隔离、实时性等关键挑战,并指出车用虚拟化技术是实现域控融合的核心解决方案。该技术能...

关键字: 虚拟化技术 ECU 电子电气 IO

深圳 2025年7月3日 /美通社/ -- 2025 年 7 月 2 日,晶泰科技(2228.HK)宣布完成对生成式 AI 蛋白设计赋能抗衰产品与药物研发的技术平台 Fou...

关键字: FOUNDRY MIT 泰科 IO

新加坡 2025年6月11日 /美通社/ -- 在近日由新加坡资讯通信媒体发展局(IMDA)主办的2025年新加坡亚洲科技大会(ATxSG)核心活动—亚洲科技峰会(ATxS...

关键字: 新加坡 IO 生成式AI ST

苏州 2025年5月27日 /美通社/ -- 5月24日-26日,第26届全国医院建设大会暨国际医院建设、装备及管理展览会(CHCC 2025)在武汉举行。艺卓(EIZO)携手术室视觉显示解决方案参展,以科技...

关键字: HC 医学影像 IO 触摸屏

创新引领,畅销全球100多个国家和地区! 南昌 2025年5月26日 /美通社/ -- 5月22日,2025年(第42届)中国国际体育用品博览会在江西南昌盛大开启。作为国内领先的科学运动服务商,舒华体育(SH...

关键字: 矩阵 AI BSP IO

波士顿2025年3月27日 /美通社/ -- 晶泰科技(股份简称:晶泰控股-P,XTALPI-P,2228.HK)今日宣布,与美国可持续农业领域先锋企业 Kula Bio 在...

关键字: 泰科 IO AI 生物技术

上海2025年3月18日 /美通社/ -- 由中国电子音响行业协会、上海市浦东新区先进音视频技术协会共同主办,上海国展展览中心有限公司承办的2025中国国际音频产业大会将于3月26-27日在上海张江科学会堂盛大举办。...

关键字: 音频 IO AI 声学
关闭