智能烧结配料控制系统技术说明书(通信)v1.1

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

烧结配料系统设计说明书
(单片机CAN通信及PC机VB的DDE服务接口部分)
内蒙古科技大学现场总线实验室
版本历史
备注:
目录
一、系统协议 (5)
1.1 系统概述 (5)
1.2配料控制器的协议 (5)
1.2.1 配料控制器发送的信息 (5)
1.2.2 配料控制器接收的信息 (7)
1.3主控制器的协议 (8)
1.3.1主控制器发送的信息 (8)
1.3.2主控制器接收的信息 (9)
二、单片机CAN协议程序设计 (11)
2.1 CAN控制器相关的程序 (11)
2.2 与协议相关的CAN程序 (13)
三、PC端VB的DDE服务接口程序 (15)
3.1 USBCAN模块的DLL加载与使用 (15)
3.2 USBCAN模块数据的接收与发送 (17)
一、系统协议
1.1系统概述
从通信系统考虑,整个系统由1个PC、1个主控制器、14个配料控制器组成。

PC机的功能是采用组态王接收并显示各个配料控制器的流量值及状态,并且能对配料控制器的参数进行设置;主控制器的功能是控制各个配料控制器的启动停止,并实时的接收配料控制器的状态及报警做出相应的判断和操作;配料控制器主要做用是按照给定流量控制各称均匀下料,并上报实时流量、状态及接收PC机下设的参数。

系统协议的定制是参照J1939-21制定的,采用CAN2.0B帧格式,把29位标识划为优先级、PGN、源地址、目的地址四个部分,对照关系见下图,具体的协议制定参看J1939-21。

图1.1 J1939和CAN2.0B关系
1.2配料控制器的协议
可以见协议表,在通信方面,配料控制器要做的工作有:
a.接收主控制器给它的选定命令,处于选中状态。

b.接收主控制器给它的启动(或停止)命令,发送应答信息,启动后进行称重,上报实时流量信息,并控制电机给料速度,按照给定流量给料。

c.接收PC机的查询命令(查询它的设定流量、PID参数值、报警及状态信息)。

d.接收PC机对它的配置信息:PID参数、给它流量。

1.2.1 配料控制器发送的信息
a.配料控制器启停应答信息
当主控制器发送启动停止信息给配料控制器后,配料控制器要返回一个启或停的应答,告知主控制器
是否正常的启动或停止。

b.实时流量的信息
配料控制器在工作的过程中要实时的上报当前称重的流量值,PC机接收到这个数据后进行显示及累加。

c.PID信息
当配料控制器接收到PC机的查询PID参数时,配料控制器要把自己当前设定的PID参数上报。

d.报警状态信息
当配料控制器工作状态改变时或是有报警的情况下要发送报警状态信息。

e.设定流量信息
当PC机要查询配料控制器当前的流量设定值时,配料控制器要发送这条信息,告知PC机当前设定流
量。

1.2.2 配料控制器接收的信息
a.配料控制器启停命令
当主控制器让配料控制器启动或停止工作以及在给配料控制器设定新的流量值后要启用新流量就要发送这条命令,配料控制器接收并执行。

b.查询命令
当PC机工作人员想得知配料控制器的参数设定值及工作状态时,发送查询命令。

c.流量设定命令
当PC机给配料控制器设定流量值时发送这条命令,发送内容为新的流量值。

d.PID设定
当PC机给配料控制器设定PID参数值时发送这条命令,内容为新的PID参数。

e.配料控制器选择设定
当决定使用14个配料控制器中相应的哪些工作时,就要给这些配料控制器发送相应的选中命令,没被选中的配料控制器不工作。

1.3主控制器的协议
见协议表,主控制器要做的工作有:
a.接收PC机发送的配料控制器的选中信息,发送选中命令选中配料控制器。

b.接收PC机发送的系统启动(停止)命令,启动(停止)各个选中的配料控制器,并接配料控制器的启(停)响应。

c.接收PC机的查询命令(配料控制器的选中信息、主控制器状态信息)。

d.接收配料控制器的报警状态信息,。

1.3.1主控制器发送的信息
a.配料控制器启停命令
当主控制器接收到系统的启停命令或是启用新流量命令后,就要给选中的配料控制器发送启停命令。

b.配料控制器选择命令
当主控制器决定哪些配料控制器准备工作时,就发送配料控制器选择命令。

(不是14个配料控制器一定都工作,有备用和不工作的情况)。

c.主控制器状态信息
1.3.2主控制器接收的信息
a.配料控制器的报警状态信息
主控制器要不停接收各个配料控制器发送的报警状态信息,并做出相应的处理。

b.配料控制器的启停响应
主控制器在给配料控制器发送启停命令后,要接收配料控制器的启停响应,来确认配料控制器是否成
c.配料控制器的选择设定
当要对某些配料控制器进行选定时,PC机会给主控制器发送选择设定命令。

当要让系统启动停止时,PC机会给主控制器发送一个系统启停命令,主控制器接收然后控制各个配料控制器启停。

e.查询命令
二、单片机CAN协议程序设计
2.1 CAN控制器相关的程序
CAN控制器采用AT90CAN128单片机自带的控制器,与控制器相关的程序主要有控制器的初始化、发送MOB配置、接收MOB的配置:
初始化的程序:初始化程序主要是对CAN控制器的复位、中断设置、CAN通信速率的设定。

初始化的函数为:
其中,GIE为总的中断控制,一般CAN发送的中断不做处理,所以开总中断和接收中断,MO_7IE和MO_14IE,为MOB0~14的中断使能。

接收MOB的配置函数:接收MOB的配置函数用于为接收某条(某类)CAN信息设置相应的MOB,包括ID,屏蔽字、帧类型。

由于系系统协议是仿照J1939协议进行制定的,J1939的ID要填到CAN控制器的ID寄存器,就要做一些对应转换。

为了使用方便,转换过程也在这个函数里实现,而函数提供的入口参数是接照J1939的格式给出的。

发送MOB的配置函数:发送MOB程序结构比接收MOB的简单一些,把J1939用的ID转换到CAN控制器的寄存器存放,不用设置屏蔽字,还要做的就是把数据字节填入CANMSG寄存器。

具体程序见CAN.c
接收MOB配制程序,接收配制程序主要设定接收某个ID号及DL长度的数据使用哪个MOB,针对这个工程,滤波屏蔽字设定为全部屏蔽。

在其它的应用中,可以增加屏蔽字参数。

2.2 与协议相关的CAN程序
协议相关的程序主要是调用接收、发送MOB配置两个函数,在使用时指定好相应该的MOB和ID,注意MOB的使用不要冲突。

另外采集器有更改ID的情况,在更改ID后,接收MOB里的ID也要进行更改,这就
需要执行一遍接收相关的MOB配置函数(USECAN_SOFT函数),MOB对应关系表如下:
主控制器遵照协议同样采用调用接收和发送MOB配置函数完成CAN总线的通信。

三、PC端VB的DDE服务接口程序
PC端的程序主要的功能是对USBCAN模块数据收发,并做为DDE服务端与组态王进行数据交换,组态王所有收发的CAN数据都要通过VB的程序传送。

另外要注意的问题是,由于组态王的6.52的DDE存在一BUG,所以在使用组态王DDE功能时要另外安装组态王所提供的补丁,DDE的建立的方法也与组态王手册所述不同,具体建立方法见设计说明书的组态部分。

VB程序这边要做的是把Form的LinkMode设置为Source,把LinkTopic设置一个话题名,这里取的是DDEform。

还有要注意的是由于交换必须采用text文本框控件完成,并且数据很多,会造成text控件数量超多256个(超过VB的允许),所以要采用控件数组来完成。

3.1 USBCAN模块的DLL加载与使用
CAN接口模块使用的是吉阳光电的USB2000(两路CAN接口、1个USB接口),数据帧缓存数是120帧,流量为3000帧/秒,提供的光盘里有相应的例程和DLL,可以使用VB、VC进行编程,自带了一个CANTOOL 软件。

用VB对期编程时要注意两个问题:
1资料所提供的VB例程是有问题的,里面所带的DLL版本较老,应该使用安装完的CANTOOL里的DLL,版本号为5.12.5.23;
2提供的Module1.bas模块文件里定义有错,代码红色部分Reserved(0 TO 2)原来错写为(0 to 3)
USBCAN模块的加载过程:首在在VB的工程里先要添加Modules1.bas模块,这样在程序里才能调用它
图3.1 添加模块示例
的收发结构。

然后在就用程序里加载设置模块,然后再定义收发结构就可以进行收发数据了。

加载设置模块的过程如下(代码3.2):
在进行完这步之后,只要定义收发结构体,再调用收发函数就能进行收发了。

3.2 USBCAN模块数据的接收与发送
根据模块的使用手册,USBCAN的数据接收要调用VCI_Receive函数进行接收,并且在接收数据充满缓冲区前接收并处理,因此接收要放在一个定时器(VB Timer控件)里不断的进行接收处理,定时器的中断时间根据数据量的大小进行设定,这里设定的是50。

数据接收的过程是先定义一个接收缓冲数组,然后调用接收函数,返回值是USBCAN模块里的数据帧条数,然后逐条接收ID,接收数据。

接收来的寄存器里的ID(ReceiveBuffer(n).ID(0)~ ReceiveBuffer(n).ID(3))和我们所用的ID存放格式是不同的,我们所用的ID是29位的,把这个ID左移3位,然后高字节存放在ReceiveBuffer(n).ID(0),低字节存放在ReceiveBuffer(n).ID(3)。

这里举个例子:
例如:配料控制器1号发送的流量数据,根据协议得到J1939格式(其ID为CF1C101):
化为二进制格式为(按颜色分5部分)
要把这个ID号存放在USBCAN模块的寄存里还要给后面补3个0,
然后按4个字节分别放入4个ID寄存器中。

(按颜色深浅分成4个字节)
最左端对应的是发发缓冲的ID(0),最右端的对应的是ID(3)
下面以查询1号控制器的设定流量为例,根据协议其ID为0xCEA0164,按照上述的ID转换这程,ID变为4个字节0x67,0x50,0x0B,0x20 ,发送的数据为0xF1,0xC3,见代码3.4。

相关文档
最新文档