智能烧结配料控制系统技术说明书通信v11Word格式文档下载.docx
《智能烧结配料控制系统技术说明书通信v11Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《智能烧结配料控制系统技术说明书通信v11Word格式文档下载.docx(22页珍藏版)》请在冰点文库上搜索。
![智能烧结配料控制系统技术说明书通信v11Word格式文档下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/8/13dee4dc-804f-4f79-854a-367606836b3a/13dee4dc-804f-4f79-854a-367606836b3a1.gif)
d.接收PC机对它的配置信息:
PID参数、给它流量。
1.2.1配料控制器发送的信息
a.配料控制器启停应答信息
当主控制器发送启动停止信息给配料控制器后,配料控制器要返回一个启或停的应答,告知主控制器是否正常的启动或停止。
命令/消息
PGN
SA
DA
使用MOB
Function
ID
1.配控启停响应
0xF1B1
配控
广播
6
CF1B1**
字节内容
1字节,控制器号\255,255为全部控制器
2字节,启动\停止响应,CF表示启动成功,EF表示停止成功
b.实时流量的信息
配料控制器在工作的过程中要实时的上报当前称重的流量值,PC机接收到这个数据后进行显示及累加。
2.发送实时流量信息
0xF1C1
1
CF1C1**
1字节,流量数据的第1字节(低)
2字节,流量数据的第2字节
3字节,流量数据的第3字节(高)
c.PID信息
当配料控制器接收到PC机的查询PID参数时,配料控制器要把自己当前设定的PID参数上报。
3.PID信息
0xF1C2
CF1C2**
1字节,PID数据的P参数
2字节,PID数据的I参数
3字节,PID数据的增量参数
4字节,PID数据的积分参数
d.报警状态信息
当配料控制器工作状态改变时或是有报警的情况下要发送报警状态信息。
4.报警状态信息
0xF1A0
8F1A0**
1字节第0位,同时加手自动信号(0x01故障,0x00正常)
1字节第1位,过热报警(1报警,0正常)
1字节第2位,变频器故障(1故障,0正常)
1字节第3位,堆料(1堆,0正常)
1字节第4位,卡料报警(1报警,0正常)
1字节第5位,运行状态(1运行,0未运行)
1字节第6位,运行指示故障(1故障,0正常)
e.设定流量信息
当PC机要查询配料控制器当前的流量设定值时,配料控制器要发送这条信息,告知PC机当前设定流量。
5.发送设定流量信息
0xF1C3
CF1C3**
3字节,流量数据的第3字节(高)1s
1.2.2配料控制器接收的信息
a.配料控制器启停命令
当主控制器让配料控制器启动或停止工作以及在给配料控制器设定新的流量值后要启用新流量就要发送这条命令,配料控制器接收并执行。
1.配控启停命令
0xF1B0
主控
2
CF1B00F
2字节,启动\停止,FC表示启动成功,FE表示停止,FB表示变频器复位,FA表示启用新流量
b.查询命令
当PC机工作人员想得知配料控制器的参数设定值及工作状态时,发送查询命令。
2.查询命令
0xEA00
PC
3
CEA**64
第1,2字节组合,F1C2表示查询PID参数信息;
F1C3表示查询设定流量信息;
F1A0表示查询报警状态信息
c.流量设定命令
当PC机给配料控制器设定流量值时发送这条命令,发送内容为新的流量值。
3.流量设定
0xE500
4
CE5**64
4字节,累计流量数据的第1字节(低)
5字节,累计流量数据的第2字节
6字节,累计流量数据的第3字节(低)
d.PID设定
当PC机给配料控制器设定PID参数值时发送这条命令,内容为新的PID参数。
4.PID设定
0xE400
5
CE4**64
3字节,PID数据的增量限幅参数
4字节,PID数据的积分投入带宽参数
e.配料控制器选择设定
当决定使用14个配料控制器中相应的哪些工作时,就要给这些配料控制器发送相应的选中命令,没被选中的配料控制器不工作。
5.配控选择设定
0xF1D1
7
CF1D464
1字节,1~8#配料控制器选中信息(1选中,0未选中,低位代表小号控制器)
2字节,9~14#配料控制器被选中
1.3主控制器的协议
见协议表,主控制器要做的工作有:
a.接收PC机发送的配料控制器的选中信息,发送选中命令选中配料控制器。
b.接收PC机发送的系统启动(停止)命令,启动(停止)各个选中的配料控制器,并接配料控制器的启(停)响应。
c.接收PC机的查询命令(配料控制器的选中信息、主控制器状态信息)。
d.接收配料控制器的报警状态信息,。
1.3.1主控制器发送的信息
当主控制器接收到系统的启停命令或是启用新流量命令后,就要给选中的配料控制器发送启停命令。
2字节,启动\停止,FC表示启动成功,FE表示停止
b.配料控制器选择命令
当主控制器决定哪些配料控制器准备工作时,就发送配料控制器选择命令。
(不是14个配料控制器一定都工作,有备用和不工作的情况)。
2.配控选择命令
广播/PC
CF1D10F
c.主控制器状态信息
当主控制器状态改变或是有PC机查询主控制器状态时,主控制器要发送状态信息。
3.主控制器状态
0xF1D0
CF1D00F
1字节第0位,主控制器工作状态(1代表工作,0代表不工作)
1字节第1位,外电路故障过热保护(0正常,1故障)
1字节第2位,大皮带运行状态(0停,1运行)
1字节第3位,急停状态(0正常,1急停)
1字节第4位,系统启动状态(0未启动,1启动)这个是针对PC发送的系统启动停止的响应
1.3.2主控制器接收的信息
a.配料控制器的报警状态信息
主控制器要不停接收各个配料控制器发送的报警状态信息,并做出相应的处理。
1.报警状态信息
1字节第0位,同时加手自动信号(1故障,0正常)
b.配料控制器的启停响应
主控制器在给配料控制器发送启停命令后,要接收配料控制器的启停响应,来确认配料控制器是否成功启停。
2.配控启停响应
c.配料控制器的选择设定
当要对某些配料控制器进行选定时,PC机会给主控制器发送选择设定命令。
3.配控选择设定
0xF1D4
广播/主控
d.系统启停命令
当要让系统启动停止时,PC机会给主控制器发送一个系统启停命令,主控制器接收然后控制各个配料控制器启停。
4.系统启停命令
0xF1DD
8
CF1DD64
1字节,FC为启动,FE为停止,FA启用新流量
e.查询命令
PC端想得知各个配料控制器的选中状态和主控制器的状态时,发送这条查询命令。
5.查询命令
0xE700
9
CE70F64
第1,2字节组合,F1D1表示查询配料控制器选择信息;
F1D0表示查询主控制器状态
二、单片机CAN协议程序设计
2.1CAN控制器相关的程序
CAN控制器采用AT90CAN128单片机自带的控制器,与控制器相关的程序主要有控制器的初始化、发送MOB配置、接收MOB的配置:
初始化的程序:
初始化程序主要是对CAN控制器的复位、中断设置、CAN通信速率的设定。
初始化的函数为:
代码2.1:
控制器初始化程序(CAN.c)
voidCAN_Init(ucharGIE,ucharM0_7IE,ucharM8_14IE)
{
CANGCON=0x02;
/*启用CAN控制器进入到普通模式*/
while(ENFG==0)/*判断CAN控制嚣是否启用,当ENFG=1时启用*/
{
}
CANGIE=GIE;
/*设置通用中断使能的各个标志*/
CANIE2=M0_7IE;
/*设定MOB0~7的中断使能位*/
CANIE1=M8_14IE;
/*设定MOB8~14的中断使能位*/
CANBT1=TBT1;
CANBT2=TBT2;
/*设定CAN的波特率为250K*/
CANBT3=TBT3;
/*设定值可以参考AT90CAN128手册*/
}
其中,GIE为总的中断控制,一般CAN发送的中断不做处理,所以开总中断和接收中断,MO_7IE和MO_14IE,为MOB0~14的中断使能。
接收MOB的配置函数:
接收MOB的配置函数用于为接收某条(某类)CAN信息设置相应的MOB,包括ID,屏蔽字、帧类型。
控制器接收MOB配置程序(CAN.c)
voidTMob_Config(ucharMOB,ucharPRI,ucharJPF,ucharPS,ucharSA,ucharDA,ucharDL,ucharData[])
ucharTmp=0x00;
/*定义一个临时变量*/
CANPAGE=MOB<
<
4;
/*选中MOB参数所指的MOB*/
CANCDMOB=0x10|DL;
/*设定要发送数据长度及帧格式为扩展*/
Tmp=JPF;
CANIDT1=((PRI<
5)|(Tmp>
>
5));
/*CAN的ID1寄存器存放优先级和PF的高5位
if(PS==0)/*如果PS=0,为点对点通讯,则ID寄存器PS处填DA
{
CANIDT2=((JPF<
3)|(DA>
/*CAN的ID2寄存器处填PF的低5位和DA的高3位*/
CANIDT3=((DA<
3)|(SA>
/*ID3寄存器填DA的低5位和SA的高3位*/
CANIDT4=(SA<
3);
/*ID4寄存器高5位填SA的低5位RTRRAG、RB1TAG、RB2TAG填0*/
}
else/*如果PS<
0,为广播通讯,则ID寄存器PS处填PS值
3)|(PS>
/*ID2填PF的低5位和PS的高3位*/
CANIDT3=((PS<
/*ID3填PS的低5位和SA的高3位*/
/*ID4填SA的高5位和RTRRAG、RB1TAG、RB2TAG填0*/
for(Tmp=0;
Tmp<
DL;
Tmp++)/*给CANMSG寄存器DL个字节的发送值*/
{/*CANMSG的指针会自动加1*/
CANMSG=Data[Tmp];
if(PS==0)/*如果PS=0,为点对点信息则PS处填DA*/
{
CANIDT2=((JPF<
CANIDT3=((DA<
CANIDT4=(SA<
}
else/*如果PS不为0,为广播信息则PS处填PS的值*/
CANIDT3=((PS<
CANIDM1=((MPRI<
5)|(MPF>
5));
/*填写优先级PRI、保留位和PF高三位的屏蔽码第1字节*/
CANIDM2=((MPF<
3)|(MPS>
/*填写PF低5位、PS或DA的高三位屏蔽码第2字节*/
CANIDM3=((MPS<
3)|(SA>
/*填写PS或DA的低5位和SA的高3位的屏蔽第3字节*/
Tmp=(SA<
3)&
0xFD;
/*填写SA的低5位和第2位(保留位)的屏蔽,第2位必须填0*/
Tmp|=0x04;
/*屏蔽第4字节RTRMASK位*/
Tmp|=0x01;
/*屏蔽第4字节IDEMASK位*/
CANIDM4=Tmp;
/*填第4字节的屏蔽*/
由于系系统协议是仿照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对应关系表如下:
数据或命令(配料控制器)
函数
发送
配料控制器启停响应
0xCF1B1**
T_RHAck
实时流量信息
0xCF1C1**
T_Flow
PID信息
0xCF1C2**
T_PID
报警状态信息
0x8F1A0**
T_Alarm
发送设定流量信息
0xCF1C3**
T_FlowConfig
接收
配控启停命令
0xCF1B00F
R_RHConfig
查询命令
0xCEA**64
R_Query
流量设定
0xCE5**64
R_Composite
PID设定
0xCE4**64
R_PID
配料控制器选择设定
0xCF1D10F
R_Select
主控制器遵照协议同样采用调用接收和发送MOB配置函数完成CAN总线的通信。
数据或命令(主控制器)
T_Start
配控选择命令
T_Select
主控制器状态
0xCF1D00F
T_Status
R_AlarmStatus
配控启停响应
R_StartAck
配控选择设定
0xCF1D4**
系统启停命令
0xCF1D0**
R_SysStart
0xCE70F64
R_PCQuery
三、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.1USBCAN模块的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(0TO2)原来错写为(0to3)
代码3.1:
Module1.bas
PublicTypePVCI_CAN_OBJ'
VCI_CAN_OBJ结构体在VCI_Transmit和VCI_Receive函数中被用来传送CAN信息帧。
ID(0To3)AsByte'
报文ID,共4字节。
TimeStampAsLong'
目前不支持。
TimeFlagAsByte'
SendTypeAsByte'
保留未用。
RemoteFlagAsByte'
是否是远程帧。
ExternFlagAsByte'
是否是扩展帧。
DataLenAsByte'
数据长度(<
=8),即Data的长度。
Data(0To7)AsByte'
报文的数据。
Reserved(0To2)AsByte'
系统保留。
(0TO2)是对的。
EndType
USBCAN模块的加载过程:
首在在VB的工程里先要添加Modules1.bas模块,这样在程序里才能调用它
图3.1添加模块示例
的收发结构。
然后在就用程序里加载设置模块,然后再定义收发结构就可以进行收发数据了。
加载设置模块的过程如下(代码3.2):
代码3.2:
DimiAsInteger
DimTmpDeviceAsLong
DimTmpInitAsLong
DimTmpStartAsLong
DimpDataInfoAsPVCI_INIT_CONFIG'
定义一个CAN模块初始化结构体,下面初始化
pDataInfo.AccCode=&
H10000001'
设置接收码
pDataInfo.AccMask=&
HFFFFFFFF'
设置滤波字,全不滤波模式
pDataInfo.Filter=0
pDataInfo.Mode=0'
模式设定0普通1自收发
pDataInfo.kCanBaud=10'
波特率索引250K10
pDataInfo.Timing0=&
H1'
pDataInfo.Timing1=&
H1C'
TmpDevice=VCI_OpenDevice(3,0,0)'