HOME / TIME
广东深圳专业医疗设备工业产品设计基于ARM微处理器的多串口多协议网关设备设计
-基于ARM微处理器的多串口多协议网关设备设计
2019/03/05
为实现船舶电站监控系统中底层独立的发电机控制单元与上层工控机之间有效快速的数据传输及可靠的数据通信,采用ATMEL公司的AT91R40008高性能ARM处理器以及EXAR公司的多路UART扩展芯片ST16C654设计网关设备.此网关设备的作用是将发电机控制单元的数据以通信方式转发给船舶电站监控系统中的工控机,在工控机中实现数据共享,具有4路隔离的RS232/RS485通信接口,2路非隔离的RS232通信接口.该网关设备已在船舶监控系统中成功应用,实现与底层发电机控制单元多种协议的通信(包括Modbus协议、HostLink协议和自定义协议),符合工业控制现场应用要求,满足工程的需求.
  关键词:网关设备; 状态图; 多串口并发操作; 船舶电站; 微广东深圳专业万东DR产品设计公司医疗电子的技术挑战处理器
  中图分类号:N941.5; U697.1文献标志码:A
  
  A gateway device design with multi serial ports plus multi
  protocols based on ARM microprocessor
  ZHONG Mingquan, HUANG Xuewu, ZHENG Huayao
  (Logistics Engineering College, Shanghai Maritime Univ., Shanghai 200135, China)
  Abstract: In order to realize the fast and reliable data communication between the PLC of marine power station monitoring system and upward processors, AT91R40008 high-proficiency ARM processor by ATMEL and multi-line UART enlarged chip ST16C654 by EXAR are used to design the gateway device. Its function is general engine control units data to industry monitoring computer on marine power station monitoring system by the method of communication. The data is shared in industry monitoring computer and the common possession of the data which has 4 ports with isolating RS232/RS485 communication interfaces, and 2 ports with non-isolated RS232 communication interfaces. The gateway device has been sucessfully used in marine monitoring system to achieve multi-protocol communication (application requirement in Modbus protocol, HostLink protocol and user-definied protocol). It is complied with industry control field and satisfies the demand of engineering.
  Key words: gateway device; statechart diagram; concurrent operation of multi serial ports; marine power station; microprocessor
  
  0 引 言
  
  随着智能设备的不断发展,控制系统需要与其他智能设备(如PLC,变频器,称重仪表等)互连,进行有效快速的数据传输及可靠的数据通信.基于船舶电站监控系统中底层独立的发电机控制单元与上层工控机之间的通信而设计的网关设备,其作用是将发电机控制单元的数据通过通信方式转发给船舶电站监控系统中的工控机,在工控机中实现数据共享.通过ATMEL公司的AT91R40008高性能ARM处理器以及EXAR公司的多路UART扩展芯片ST16C654,实现4路隔离的RS232/RS485通信接口和2路非隔离的RS232通信接口.
  此外,多路串口通信需要等待时间,所以要实现多串口的并发操作,最好的选择是用多任务操作系统.但由于工业控制系统一般要求稳定性可靠,而操作系统移植可能会带来系统的不稳定性.因此,在多串口多协议功能模块的软件设计上采用单线程扫描方式结构,没有使用多任务操作系统,可以利用状态图方法(详见后面的分析)在单线程程序中实现有限的多任务机制,实现多个串口的并发操作.
  
  1 硬件电路设计
  
  船舶电站网关设备的多串口扩展部分硬件结构框图见图1.
  
  AT91R40008是1款ARM7内核的处理器,该CPU内部有256 KB的RAM,在存取32位指令和数据时只需要1个时钟周期,因此可以把对速度要求较高的程序放到内部RAM中运行.AT91R40008的外部数据总线为16位,因此外部存储器只能采用16位总线.[1]AT91R40008有两路UART接口,通过MAX232芯片扩展为两路RS232通信串口,分别为COME和COMF.
  多串口通信部分电路采用1片ST16C654扩展出4路RS232和RS485通信串口COMA,COMB,COMC和COMD,其中COMB和COMC未在图中表示,其结构与COMA和COMD相同.ST16C654与AT91R40008之间接口见图1,A0~A2是地址线选通,选择要进行读写的寄存器;D0~D8是数据线,进行数据、命令和状态的读写;INT0~INT3为4路UART的中断信号线,直接与AT91R40008的中断线相连,作为接收和发送的中断信号.ST16C654是1款4串口的带64字节FIFO的UART芯片.通过对寄存器的读写访问方便地实现通信数据方式(包括同步方式、数据格式、奇偶校验、波特率等)、中断处理、发送和接收FIFO大小等.[2]它与CPU通过中断和并行方式通信,提高通信速度;当需要发送与接收数据时,可将数据放入ST16C654的FIFO中,CPU的执行效率极大提高.
  ST16C654产生的发送、接收和控制信号通过6N137光耦和5V DC/DC隔离电源模块完全隔离,从而防止外部通信信号对CPU等核心电路的干扰.4路串口分别提供RS232和RS485通信方式,两者之间通过短路块方便地实现通信切换.
  
  2 软件设计
  
  2.1 多串口的并发操作原理
  由于通信过程有许多等待操作,而且发送和接收的操作过程相对于CPU运行速度非常慢.因此,发送和接收操作应该在中断中进行.按这样的方式,程序中只要建立1个内存变量与智能设备寄存器的映射关系表,后台(中断驱动)广东深圳专业医疗器械外观工业产品设计房屋结构设计中的建筑结构设计优化的协议通信流程负责操纵通信程序并不断刷新内存变量或把内存变量数据下载到智能设备中即可.这样,对智能设备的读写就变成程序中对这些内存变量的读写,解决了实时性问题.[3]
  这样的操作实际上是把串口通信等慢速操作转移到中断驱动的协议通信流程,该流程可以用状态图方式处理(以主机模式为例说明),见图2.图中,把1个串口的1次协议通信过程分成若干个步骤(状态)进行,每次只执行1个步骤(STEP),只有上个步骤(状态)执行完,才能转移到下个步骤(状态),而每个步骤没有任何等待操作,因此这样的流程是快速的.另外,该流程中的通信操作命令也是快速的,如启动发送只是将要发送的数据发往通信缓冲区(如ST16C654自带的FIFO,AT91R40008中开设的1片RAM空间),启动接收只是向通信硬件发启动接收的命令,而检查发送和接收是否完成等操作只是检查一下标志而已,具体的通信操作则由通信中断执行,因此操作速度极快.
  
  该流程解决了多串口的并发工作问题,只要每个串口各自保存自己的STEP分别运作即可.该通信过程与协议有关,不同的协议可能有不同的流程,但大部分情况下类似.以下为Modbus协议的串口通信程序.
  void MODBUS��-RTU(void)//Modbus协议通信过程
  {
   switch(STEP){ //(每个通信口保存着各自的STEP)
  caseIDLE:
   MBusRTU��-sendcmd(); // 向串口发送读写命令
   TEP=STEP1;
   break;
  caseSTEP1:
   if( IsSendOK() ){
  SetTimOut(500); //设置响应超时间
  StartReceive(); //启动接收
  STEP=STEP2; //转到下一步
   }
   break;
   caseSTEP2:
   if( IsTimOut() ){ //响应超时
   STEP=IDLE;
   break;
   }
   if( IsReceiveOK() ) { //判断接收是否完毕
  MBusRTU��-getmsg(); //收到1广东深圳专业医用设备工业产品设计工业设计与建筑设计的关系帧数据,进行解析
  STEP=IDLE; //数据解析完毕,串口转为空闲
   }
   break;
   default:
  STEP=IDLE;
  break;
   }
  }
  2.2 多串口并发协议的任务解析调度
  如图3所示,假定在程序中已定义变量与智能设备数据的映射关系,例如��V��1��对应挂在COMA口的PLC(运行Modbus协议)中的数据T1(如18号线圈状态),��V��2��对应PLC中的数据��T��2��,当然,COMA必须运行Modbus的通信过程.同样,��V��3��对应着挂在COMC口的PLC中的数据T3.在配置变量映射时,已把变量注册到相应串口的注册表中.如COMA的变量注册表中注册��V��1和V��2��,COMC的变量注册表中注册��V��3��,COMD的变量注册表中注册��V��4��.然后,建立扫描过程,依次扫描每个串口.注册在同一个串口下面的变量按注册表中的次序执行通信程序,不同串口则可同时运行通信程序.
  图3 多串口多协议并发通信实例
  举例说明:首先扫描COMA,如果COMA空闲(即STEP=IDLE),那么先执行��V��1��的协议通信过程,然后扫描COMB,执行定义的协议通信程序过程,然后扫描COMC,处理��V��3��的协议通信过程……下次再扫描COMA时,如果��V��1��的通信过程完成,即COMA又回到空闲,那么将执行��V��2��的通信程序……
  由图3的流程说明可见,不同串口变量的通信过程可以并发操作(例如��V��1,V��3,V��4��),使用同一个串口变量的通信过程必须轮流操作(如��V��1和V��2��),这样的关系是合理的,而且按照图3的流程分析,每个通信过程是无等待的,因此能够实现多串口的多协议并发实时通信.
  上述扫描方式的流程见图4.该流程被不断执行,很容易用定时器中断实现(利用AT91R40008的定时器2产生的2 ms中断实现).这样,基本解决多串口多协议的并发操作问题,每个串口每隔2 ms被分配到CPU使用权.这是网关设备在编程上需要解决的问题.
  
  2.3 软件工作流程
  首先定义主程序中每个串口的数据结构,包括接收和发送缓冲区、该串口所连PLC的协议处理函数指针、波特率等通信参数;再定义每个需要操纵的PLC位号数据(该数据可以是PLC的1个寄存器或连续的1片寄存器)的内存数据结构,该结构记录每个PLC数据的PLC地址、使用的串口号、数据在PLC中的地址、数据类型及该PLC数据在内存中的存放地址等.如下所示:
  BYTE coil[37];//存放线圈状态
  WORDinputreg[1];//存放设定输入寄存器的数值
  Floatai[10];//存放模拟量
  BYTE str[10];//存放字符串
  main ()
  {
   if(PHASE == 0)//配置通信口和变量映射
   {
   SetCom(COM0, 9600, 8, 1, PAR��-NO, RS232,&MODBUS��-RTU);
  SetCom(COM1, 19200, 8, 1, PAR��-NO, RS232,&HOSTLINK)广东深圳专业椎间盘突出治疗仪产品设计公司产品设计的灵魂――创新;
  SetCom(COM2, 9600, 8, 1, PAR��-NO, RS232,&SLAVE);
  SetCom(COM3, 1200, 8, 1, PAR��-NO, RS232,&WEIGHT);
  
   CfgVar(0, COM0, 17, COIL,19, 37, coil,READ);
  CfgVar(1, COM0, 17, INPUTREG,20,1,inputreg,WRITE);
  CfgVar(2, COM2, 17, AI, 196, 10,ai, READ);
  CfgVar(3, COM3, 17, CHR, 19,10,str, READ);
  ……
  PHASE=1;
   }
   ……
   ……// 以下可以用映射变量代替对智能设备的操作
   ��-TAG(“DI��-001”)=coil[1];
   ��-TAG(“T101”)=inputreg[0];
   ai[0]=TAG(“SV��-000”);
   ……
   ……
  }
  假定建立��V��1,V��2,V��3,V��4,V��5和V��6��这几个结构数据分别对应各个PLC中的数据(如线圈、输入寄存器、保持寄存器等),而且��V��1,V��2和V��3��使用同一个串口, ��V��4�� 属于1个串口,��V��5和V��6��同属于1个串口,每个串口使用的协议可能不同.
  那么,定时中断扫描程序如下:
  定时中断驱动的扫描(每隔10 ms或更短调用1次)
  void NetGate��-Loop(void)
  {
   WORD i,j,k;
   for( i=0; i    if(comptr->Protocol){ //[ZK(]如果该通信口指定通信协议[ZK)]
  if(comptr->Step ==IDLE ) {//通信口空闲,可以处理下一个变量
  k=comptr->PsInTab++; //指向注册表中下一个元素
  if( k>=comptr->NumOfTab ){
   k=comptr->PsInTab=0;//到了队尾
   j=comptr->RegTab[k]; //取出注册表中的变量序号
   varptr=&Var[j]; //全局变量指针指向该变量
   }
   if(varptr==NULL)
   varptr=&Var[MAX��-VARS-1]; //空指针不安
   comptr->Protocol();//执行该通信口通信协议
   };
   };
  }
  NetGate��-Loop()函数依次扫描��V��1…V��6. 处理V��1��时,如果发现对应的串口有空,则把相应的命令发到串口的发送缓冲区,至于发送缓冲区数据如何通过串口外发,则由另外的进程(中断)执行, 协议处理函数不必操心.接下去处理��V��2,由于V��1和V��2同处于1个串口,故此时串口标记为忙,V��2将被广东深圳专业医用设备外形工业产品设计医疗康复机械设计忽略,接下去处理V��3, 同样道理,V��3也被忽略.处理V��4时,由于V��4对应的串口有空,所以可以把相应的命令发到V��4对应串口的发送缓冲区,同样,也可以用V��5发送读写命令,V��6则同样被忽略.因此,本次扫描过程中,V��1,V��4和V��5��被允许与PLC通信.
  再次执行NetGate��-Loop()函数时,仍然依次扫描��V��1…V��6. 处理V��1时,发现V��1对应的串口忙,并且正在处理V��1��,那么就检查串口缓冲区是否已收到所有PLC回应数据,如果没有收全,则接下去处理��V��2, 同样,V��2仍然被忽略……假如查询V��1��,发现对应的串口缓冲区已经收满PLC的回应数据,即把1帧数据解包,把PLC数据送到��V��1�� 的保存地址供BUF读取.处理完��V��1以后,标记串口为空闲.处理V��2��时,发现串口为空闲,那么就把新的读写命令发给对应的串口缓冲区……
  以上过程不断执行,实现不同串口的数据同步传送、同一个串口的数据依次传送的工作流程,因此逻辑上是每个串口实际各有1个线程独立工作.
  至于串口收发缓冲区数据如何通过多串口芯片交互,则可以用定时查询或中断方式实现,该层软件不涉及具体的协议.至于NetGate��-Loop()被哪个模块驱动,可以有多种方法:(1)嵌入到主控卡大循环中;(2)定时执行.
  
  3 结束语
  
  所设计的网关设备已在船舶监控系统[4]中成功应用,实现与底层发电机控制单元的多种协议的通信(包括Modbus协议、HostLink协议和自定义协议).6个串口能够执行与发电机控制单元的并行通信任务,并能高效、快速地收发数据.而且,现在使用的多串口多协议网关设备,可针对特定协议的网关设备对原有单一串口进行升级,并节约成本、增加不同种类的协议、提高响应时间、实现主从机模式运行等.因此,所设计的网关设备符合工业控制现场应用,满足工程需求.
  
  参考文献:
  [1广东深圳专业医用产品外观工业产品设计智慧医疗将给医疗行业带来革新]ATMEL Corporation. AT91R40008. DataSheet[K]. 2002.
  [2]EXAR Corporation. ST16C654. DataSheet[K]. 2003.
  [3]BRUCE E. Thinking in C++[M]. 刘宗田, 译. 北京: 机械工业出版社, 2000.
  [4]郑华耀广东深圳专业 工业产品设计年度产品大奖:十大IT产品. 船舶电气设备及其系统[M]. 大连: 大连海事大学出版社, 2005.
  (编辑 廖粤新)
  
  注:“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

微信
粤ICP备16001253号-1