Board logo

标题: 基于Modem的单片机与PC机远程数据传输设计 [打印本页]

作者: szmodem    时间: 2008-5-6 10:26     标题: 基于Modem的单片机与PC机远程数据传输设计

1、系统总体结构及原理
  本系统的结构采用中央控制型星型结构及自动拨号连接方式,中央管理PC机通过公共电话网络或程控交换机与多个现场单片机连通。现场单片机完成对各物理参量的数据采集,进行数字滤波、数据处理、比值告警、现场显示及对现场设备进行控制等,并定时或随机地向中央管理PC机报告过程情况。中央管理PC机定时或随机地汇集各测试点的信息,进行数据处理、显示打印、声光报警,并负责全局的综合控制、管理调度和策划指挥等任务。中央PC机可通过电话网依次自动拨号呼叫下属各现场单片机,单片机收到呼叫并建立联接后发送数据到中央管理PC机,各现场单片机之间则不能进行呼叫联络。由于单片机应用系统的安装数量和分布范围不同,与中心站的距离一般为几公里到几十公里,在单片机与PC机之间需要传送的数据量不是很大的情况下,采用调制解调器通过电话线路进行通信较为适用。下位单片机以其所在单位的电话号码作为其唯一的地址,并由单片机控制电话的使用,可以实现无人值守自动通信。每当电话响铃一定次数后仍无人接听,则单片机自动接入线路,通过不同标志来判断是主机呼叫还是人打电话。若是主机呼叫,表示中心站要求通信,单片机将保持与上位PC机连接,将各种测量数据发送出去并接收主机发来的命令;若是人打电话,则断开连接继续进行数据采集,并接通模拟响铃电路,提醒人们接听。
  2、Modem通信接口硬件设计
  由于89C51单片机串口的电平为TTL电平,必须先转换为RS-232电平才能与Modem通信。一般采用MAX232芯片实现单片机和Modem的连接,进行电平转换。   
  单片机虽然有串行输入、输出口,但不具有RTS、CTS、DTR、DSR等标准接口握手信号线。考虑到单片机与上位机的通信量并不大,所以在连接时采用简单的“三线式”,即只通过TXD、RXD和地线GND进行连接,其他信号在对Modem初始化时发送AT命令将其忽略。如果单片机和上位机之间的通信量很大,并且需要精确、可靠的控制时,可以在89C51与MAX232之间再扩展一个8250。
   3、关键技术及实现
  3.1、对Modem控制及初始化
  要使Modem正常通信,必须对Modem进行初始化,必须用到HAYES-AT命令集。AT命令是一套控制Modem拨号、应答、链接等操作的约定。对Modem(包括上、下位机)的初始化,可以写在主程序里,这样每次启动应用程序时都会重新对Modem进行初始化,也可以把初始化程序写进Modem非易失存储器里,这样就不用每次都对Modem进行初始化。在这里,利用上位机VB程序对串口操作的方便性,把初始化命令配置固化到Modem里面。利用VB的MSComm控件的OUTPUT属性发送AT命令到Modem对其进行初始化。若对与单片机相连的Modem进行初始化,可以先后发送以下命令:
  (1)发送“AT&D0&S0&R1”,设置为忽略DTR,DSR,CTS信号。
  (2)发送“ATE0X0S0=2”,将Modem设置为不回应所收到的指令以及返回结果码的类型,S0=2表示在响铃2次之后Modem自动摘机并试图连接。
  (3)发送“AT&C1”,设置载波侦测信号随线上实际状态变化。
  (4)发送“ATV0”,设置以数字方式返回结果码。
  (5)最后发送“AT&W”,将以上配置存放到非易失存储器中。
  以上每个AT命令之后必须加上CR(也就是键盘上的ENTER键)字符,否则Modem将不认识此命令。与PC机相连接的Modem初始化与上面大致一样,区别在于不用忽略DTR、DSR、CTS和设置成字符串返回结果码,这样对调试程序比较方便。
  3.2、下位机的通信实现
  上位机Modem(与PC机相连)拨号后,等待下位机Modem(与单片机相连)送来的载波信号;下位机Modem检测到铃声(响了预定的次数)后便自动摘机,然后与上位机进行载波连接。双方如果在预定时间没有检测到载波信号,Modem则自动释放线路,同时返回NOCARRIER结果码;一旦载波建立成功,Modem返回CONNECT结果码,表明双方连接成功,可进行数据通信。下位机通信程序必须对串行口进行正确的设置,使跟上位机的通信方式和波特率保持一致;通过测试单片机串行口的RI标志位,判断是否有串口数据的有效输入来完成检测PC机的呼叫任务。如果串口接收到数据“32H”(结果代码2)则开始计时,并继续查询串口,若15秒内串口接收到数据“31H”(结果代码1),表示载波建立成功,保持单片机与PC机连接,开始与PC机进行通信。数据传送完成后,再发送“+++”序列,使调制解调器从联机状态返回到命令状态,延时一段时间后发送“ATH0”命令挂机,一次数据通信结束。若第一次响铃15秒后还未接收到结果代码1,则表示载波无效,上次响铃为人打电话或者是联接出现错误,单片机不与PC机连接而继续运行现场检测程序。
  3.3、基于VB的调制解调器编程
  VB6.0的MSComm通信控件提供了一系列标准通信命令的接口,它允许建立串口连接,可以连接到其他通信设备(如Modem)、还可以发送命令、进行数据交换以及监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工的、事件驱动的、高效实用的通信程序。对MSComm通信控件属性了解后,就可以进行通信软件的编制。首先要在程序的初始化阶段对通信参数进行设置,主要是初始化串口和Modem(前面已经介绍),包括选择通信端口、设置串口波特率、打开串口等。在主控PC机中建立一个电话号码集,按照N个下属下位机的采集序号依次将它们的电话号码编号。在定时通讯时按照软件记录器记录的采集序号,通过查表指令获得相应的电话号码,再调用自动拨号程序进行呼叫联络;若呼叫成功,则通信链路建立,可以与现场下位机进行通信。
  鉴于传输过程中会产生数据的丢失,可采用求和校验法保证串行通讯数据的准确性。发送方将所传数据累加求和,仅保留和的最低位字节作为校验字符放在传送数据串的末尾,发往对方。对方将接收到的数据累加,取和的最低位字节与校验字符相比较,若相等,则向发送方送正确通知码,否则发错误通知码,通知发送方重传数据,直至接收正确为止。由于分布式远程测控系统有大量的采集及控制数据要进行传递,因此可在中央PC中利用VB6.0建立动态数据库,用以存放现场采集的数据,上/下限报警值等,该数据库按照N个下属现场单片机的约定序号,依次分区,在各种通讯处理中根据不同序号分别从相应数据库区中读/写数据。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0