

摘要:自动配料系统通过与PC的有机结合,构成RS-232的总线式配料,用可视化的图形界面实现对整个配料过程的实时监控。
0引言
自动配料系统的多机实时通信提出了基于RS-232的多机通信总线。该总线设计了硬件逻辑电路,系统中的各个终端通过此逻辑电路查询得知总线状态,并在占用总线时通过该电路锁定总线以避免多机通信在RS-232串行通信中遇到的数据冲突问题,并以此为基础提出了合理的数据总线分配方法,不仅保证了总线的合理分配使用,并且满足了系统各优先级不同的通信任务的实时性。PC/CAS总线式自动配料系统,不仅硬件实现简单,而且软件实现可靠,较好地实现了系统中的多机实时通信,同时解决了数据冲突问题。长时间通信测试结果表明该系统的多机通信运行可靠,实时性好,较好地满足了系统的要求。
1多机实时通信的硬件实现
计算机与多台设备组成的自动喂料系统
称重配料系统采用RS-232串行通信方式实现了上位机对整个系统的实时监控,同时为了提高硬件稳定性,优化系统工作性能,本文采用硬件仲裁电路来实现数据总线的分配,并合理解决了数据冲突问题,简化了软件设计,提高了自动配料可靠性和抗干扰能力。
1.1RS-232多机通信机制
普通的RS-232采用点对点串行数据传输方式,无法满足多设备之间的实时通信,因此需要对其连接方式作一些改进。RS-232的点对点通信是将接口的数据发送端(TXD)连接到另一方的数据接收端(RXD),RXD与另一方的TXD相连,双方的地线端(GND)直接相连。但在计算机与多台设备相连时则发生了一些变化。计算机的数据发送端直接连接到各设备的数据接收端,地端直接与各设备的地端相连,但各设备的数据发送端不能同时连接到计算机的数据接收端,因为数据发送端在无数据发送时为高电平,而发送的数据为高低电平组成的脉冲序列,直接将两个或多个数据发送端连接到一起接入计算机,则会造成其数据接收端电平的不确定,产生了数据冲突问题。为了解决上述问题设计了专门的硬件仲裁电路,将各设备的TXD以及数据发送请求端(DTR)接入,再将仲裁电路输出端连接到计算机的数据接收端。
1.2仲裁电路结构与工作原理
由于上位机(PC)的发送端为一对多广播式发送,所以上位机发送的数据帧所有的下位机(CAS)均可以接收到,至于数据帧由哪一台下位机接收则由通信协议中的目的地址ID判定。但对于下位机,其发送端为多对一连接,如直接将其相连,则会发生数据冲突。图3所示的仲裁电路可以确保每次只有一台下位机能够发送数据到上位机的数据接收线上。应注意的是,RS-232接口使用的高低电平与TTL中的高、低电平不同,需进行电平转换。
各下位机初始化时均将其DTR设置为低电平,因为与门1、2、3均有低电平输入,所以初始化后A、B、C三点均为低电平,并且与门4、5、6也一直输出低电平。假设下位机1是第一台要发送数据的下位机,发送前先将自己的DTR端口设置为高电平,而此时B、C两点仍为低电平,经反相器后变为高电平输入与门1,所以与门1的输出A点电平也为高,此时数据发送服务程序读取数据发送查询端(DSR)电平状态(即A点电平状态)为“1”,说明总线未被占用,处于空闲状态。由于下位机1的DTR端口已被置高,且查询得知总线空闲,则其DTR端口不变仍然设置为高电平,这样下位机1就占用了总线,可以开始发送数据。数据由TXD端经过与门4后输入上位机的RXD端,由于此时A点电平为高,保证了数据经过与门4后没有失真直接上传至上位机,同时A点电平经反相器后变为低电平输入与门2、3,故B、C两点电平为低,与门5、6始终输出低电平,避免了数据冲突。当下位机1数据发送完毕后将其DTR端口置低,A点电平变低,释放了总线,又回到初始化后的状态,可以供给下一个要发送数据的下位机使用。假设下位机1发送数据的过程中,下位机2也要发送数据,同样先将自己的DTR端口置高,但此时A点电平为高,经反相器后输入与门2,所以与门2的输出B点仍为低电平,程序读取DSR端口电平(即B点电平)为“0”,说明总线已被占用,因此将DTR端口重新置低,等待下次查询,这样就避免了两台下位机同时上传数据。下一个查询周期未到时,程序持续查询是否有更高优先级的任务标志位置位,有则调用相应的任务服务程序,没有则重复查询各标志位直至下一个查询周期到来;下一个查询周期到来后,重复一次置高DTR端口、读取DSR端口的过程以判断总线状态,空闲则DTR端口保持高电平占用总线并发送数据,否则置低DTR端口,等待下次查询。下位机2重复上述过程直至查询到总线空闲并占用总线以发送数据。
不同类型的数据发送其优先级也不同,数据发送任务的优先级越高,查询周期就越短,保证了称重上料系统通信的实时性。由于各发送方在发送时间上存在差异,首先查询到总线空闲的下位机得以使用数据总线,在发送数据前已将其DTR由低电平转为高电平,仲裁电路将总线状态转为忙碌,避免其余下位机同时使用总线造成数据冲突。当数据传输结束则将DTR转为低电平,仲裁电路将总线状态转为空闲。由于PC为一对多发送,下位机通过仲裁机制锁死总线只是保证同一时刻数据上传总线上只有一台CAS向PC发送数据,并不会影响PC通过数据下行总线发送数据到各CAS,从而实现了总线的合理分配,解决了数据冲突问题。
2多机实时通信的软件实现
2.1RS-232的数据传输格式
RS-232的数据是以字节的形式发送的,一次发送一个字节
包含一个起始位、8个数据位以及一个校验位和停止位,数据位为所发送的对象,而数据帧则是多个字节按一定格式打包而成的一个字节序列,以字节流形式发送。
2.2帧驱动器
称重喂料系统帧驱动器是为实现与第三方设备之间进行通信而设计的软件工具箱,存放在CAS应用程序ROM中,完全控制了通信的硬件部分而不改变帧的形式。通常数据通信,对数据进行读写操作,用户必须对端口的细节了解很清楚,才能通过编程实现对接口各管脚进行操作。而帧驱动器将这些操作集中起来,用户只需要了解第三方产品的通信协议细节(包括信息帧格式的组成等),并用帧驱动器写出与第三方产品通信协议一样的通信规约,就可方便地实现CAS与第三方产品之间的通信。同时,帧驱动器支持RS-232、RS-422、RS-485、CAN等接口,因此软件中只要稍微作些改动,便可支持不同的接口进行数据通信,具有可扩展性和广泛的应用前景。
2.3通信协议制定
PC和设备以及计量模块之间能进行通信首先需要制定一个合理的通信协议,才能进行通信。为此本着充分利用资源、结构简单、可扩充性强的原则定义了数据帧的结构。
目的ID和源ID均分配一个字节,用于标志数据帧的接收设备和发送设备,以便接收设备判断接收和发生接收错误时呼叫发送设备重发。命令字给定数据帧的类型(数据或控制字),指明随后的DATA是数据内容还是控制字。这样系统中的各设备可根据事先制定的通信协议将欲发送的控制指令或数据打包写入DATA中,或者将接受的数据帧按协议解包为控制命令并执行或对接收到的数据进行处理。帧数指明了当前发送的是第几个数据帧,以便于接收设备判断是否有数据帧丢失以呼叫发送设备重发。最后判断接收的校验位与自行计算校验位结果是否一致,一致则进行相应操作,否则丢弃该帧并呼叫发送设备重发。
上料系统为了确保数据接收的可靠性,使用应答方式进行通信,接收机接收到数据后返回一个应答帧加以确认,发送机收到此帧再发送下一帧数据,如无应答则周期循环发送同一帧,如超时未应答则向上位机发送数据帧报错,上位机接收后显示发送与接收设备ID及错误类别并报警以提示监控人员排除错误。
2.4系统内各设备间的通信
①PC与设备之间的通信。PC向下位机发送数据帧采用广播式,但只有符合目标地址ID的下位机能够接受,而下位机采用仲裁机制向上位机发送数据。
②配料设备与称重之间的通信。设备与称重之间是通过PC以数据转发的形式进行数据帧传送的。当监控计算机收到不是以自己为目的地址的数据帧时,直接将其送入数据传送总线由目的CAS判断接受。
2.5基于C语言的CAS数据通信的实现
①下位机编程。使用提供的标准PC。
PC发送程序流程由于为一对多广播式发送,省略查询总线过程,直接发送即可。设备接收程序流程基本与PC接收程序流程一致,但在判断接收数据帧目的ID与本机ID不符后,设备直接退出事件触发服务程序返回,而PC则将得到的数据帧发送给各下位机以使目的设备接收该数据帧。
②上位机编程。称重上料系统使用VisualBasic,流程中需要发送数据或命令只要按定义好的通信协议进行数据装帧并调用数据发送程序将其通过串行口发送即可。为了实现数据的实时接收,在VB工程中导入了PCommPro(此软件借助WindowsAPI函数的调用来控制使用串行通信端口)的通信函数库和控件以实现接受数据的实时触发。事件的触发除了定时器或循环的轮询(Polling)方式外,还可以使用回调函数实现。PComm针对事件的处理就是采用回调函数的方式处理,欲建立事件,需给定一个函数的地址,当事件发生时,便到该回调函数所在地址去执行该程序代码。因此定义了回调函数作为接受数据的事件触发服务程序,当接受数据事件发生时便执行该事件触发程序,保存接受到的数据,并按协议进行数据帧的解包,将数据取出并作相应处理显示在监视器上,以便实时监控,或执行相应的命令。
3结束语
本文利用硬件仲裁电路巧妙地实现了数据总线分配,解决了数据冲突问题,简化了配料系统设计,优化了系统性能。自动配料系统通过与PC的有机结合,构成RS-232的总线式配料,用可视化的图形界面实现对整个配料过程的实时监控。实验证明,系统运行良好,监控准确无误,还可应用于其它分布式测控系统和类似系统,具有一定的工程应用价值。