📄 dc_aotexun.c.svn-base
字号:
/*******************************************************************************************
* MODBUS Master/Slaver Module (For Test)
* Coded by celeron
* 2007/11/02
*******************************************************************************************/
#include "MODBUS_REG.h"
#include "MODBUSFDL.H"
#include "DPRam.h"
#include "modbus.h"
#include "console.h"
#include "dc_aotexun.h"
/**********************************************************************************************/
volatile unsigned char SCC_TASK_PARA1[MAXPORT][MAXTASKS];
volatile unsigned char SCC_TASK_PARA2[MAXPORT][MAXTASKS];
volatile unsigned char SCC_TASK_PARA3[MAXPORT][MAXTASKS];
volatile unsigned short SCC_TASK_RAddr[MAXPORT][MAXTASKS];
void SCC_comproc_DC(int port_number)
{
unsigned short i,NRegs,NBytes,RAddr,CHK,bias,byteN;
NBytes=SCC_RBUF[port_number][0];
CHK=0;
for(i=0;i<(NBytes-1);i++)
CHK+=SCC_RBUF[port_number][i];
DBDataPrint(*SCC_RX_BD0_LN[port_number], port_number, SCC_RBUF[port_number], DIAG_RECV_MSG);
if (SCC_BUSY[port_number]!=1) goto intbk;
SCC_BUSY[port_number]=2;
if (SCC_RBUF[port_number][1]!=SCC_TASK_MAddr[port_number][SCC_TASKID[port_number]]) goto intbk;
if (SCC_RBUF[port_number][2]!=SCC_TASK_STNO[port_number][SCC_TASKID[port_number]]) goto intbk;
RAddr=SCC_TASK_RAddr[port_number][SCC_TASKID[port_number]];
if (SCC_RBUF[port_number][NBytes-1]!=(CHK&0xff)||SCC_RBUF[port_number][NBytes]!=(CHK>>8)) goto intbk;//lo hi
if (SCC_RBUF[port_number][3]==0x30)//采集直流系统模拟量
{
NBytes=SCC_RBUF[port_number][0];//116
READY_DATA=0;
while(READY_DATA);
//存数据 不包括日期, 4个字节头 6字节日期
for (i=0;i<(NBytes-11);i++)
{
g_HRDATA[RAddr+i]=SCC_RBUF[port_number][10 + i];
}
HRDATA_NEWFLAG = NEW_WRITE;
READY_DATA=1;
SCC_BUSY[port_number]=0xff;
goto intbk;
}
if (SCC_RBUF[port_number][3]==0x31)//采集直流系统运行状态
{
//RAddr=0;
NBytes=SCC_RBUF[port_number][0];
READY_DATA=0;
while(READY_DATA);
for (i=0;i<15;i++)//固定帧长数据
{
g_HRDATA[RAddr+i]=SCC_RBUF[port_number][10+i];
}
for (i=0;i<16;i++)//清零
{
g_HRDATA[RAddr+15+i]=0;
}
for (i=0;i<(NBytes-26);i++) //变帧长数据(故障支路)
{
if(SCC_RBUF[port_number][25+i] >= 128)
{
continue;
}
byteN=SCC_RBUF[port_number][25+i]/8;
bias=SCC_RBUF[port_number][25+i]%8;
g_HRDATA[RAddr+15+byteN]|=1<<bias;
}
HRDATA_NEWFLAG = NEW_WRITE;
READY_DATA=1;
SCC_BUSY[port_number]=0xff;
goto intbk;
}
if (SCC_RBUF[port_number][3]==0x38)//取电池巡检仪采样数据(命令码为:38H)
{
//RAddr=0;
NBytes=SCC_RBUF[port_number][0];
READY_DATA=0;
while(READY_DATA);
for (i=0;i<(NBytes-11);i++)
{
g_HRDATA[RAddr+i]=SCC_RBUF[port_number][10 + i];
}
HRDATA_NEWFLAG = NEW_WRITE;
READY_DATA=1;
SCC_BUSY[port_number]=0xff;
goto intbk;
}
if (SCC_RBUF[port_number][3]==0x39)// 取绝缘监测仪数据(命令码为:39H)
{
//RAddr=0;
NBytes=SCC_RBUF[port_number][0];
READY_DATA=0;
while(READY_DATA);
for (i=0;i<(NBytes-11);i++)
{
g_HRDATA[RAddr+i]=SCC_RBUF[port_number][10 + i];
}
HRDATA_NEWFLAG = NEW_WRITE;
READY_DATA=1;
SCC_BUSY[port_number]=0xff;
goto intbk;
}
intbk:
(*SCC_RX_BD0_ST[port_number])=0xb000;
(*SCC_RX_BD0_LN[port_number])=0x0;
return;
}
/**********************************************************************************************/
void SCC_task_start_DC(int port_number)
{
unsigned short i,RAddr,NRegs,MAddr,SAddr;
MAddr=SCC_TASK_MAddr[port_number][SCC_TASKID[port_number]];
RAddr=SCC_TASK_RAddr[port_number][SCC_TASKID[port_number]];
SCC_TBUF[port_number][1]=SCC_TASK_STNO[port_number][SCC_TASKID[port_number]];
SCC_TBUF[port_number][3]=SCC_TASK_RW[port_number][SCC_TASKID[port_number]];
(*SCC_TX_BD0_LN[port_number])=0;
if ((SCC_TASK_RW[port_number][SCC_TASKID[port_number]]==0x30)||(SCC_TASK_RW[port_number][SCC_TASKID[port_number]]==0x31))
{
SCC_TBUF[port_number][0]=5;
SCC_TBUF[port_number][2]=MAddr;
SCC_TBUF[port_number][3]=SCC_TASK_RW[port_number][SCC_TASKID[port_number]];
i=(SCC_TBUF[port_number][0]+SCC_TBUF[port_number][1]+SCC_TBUF[port_number][2]+SCC_TBUF[port_number][3]);
SCC_TBUF[port_number][4]=i&0xff; //lo
SCC_TBUF[port_number][5]=i>>8; //hi
((struct GSMR_L*)GSMR_L[port_number])->ENT=0;
(*SCC_TX_BD0_LN[port_number])=6;
(*SCC_TX_BD0_ST[port_number])=0xB000;
((struct GSMR_L*)GSMR_L[port_number])->ENT=1;
}
else if(SCC_TASK_RW[port_number][SCC_TASKID[port_number]]==0x38)
{
SCC_TBUF[port_number][0]=8;
SCC_TBUF[port_number][2]=MAddr;
SCC_TBUF[port_number][3]=SCC_TASK_RW[port_number][SCC_TASKID[port_number]];
SCC_TBUF[port_number][4]=SCC_TASK_PARA1[port_number][SCC_TASKID[port_number]]; //电池巡检仪编号:1-4
SCC_TBUF[port_number][5]=SCC_TASK_PARA2[port_number][SCC_TASKID[port_number]]; //单节电池起始编号:1 ~ 120
SCC_TBUF[port_number][6]=SCC_TASK_PARA3[port_number][SCC_TASKID[port_number]]; //单节电池终止编号:1 ~ 120
i=(SCC_TBUF[port_number][0]+SCC_TBUF[port_number][1]+SCC_TBUF[port_number][2]+SCC_TBUF[port_number][3]+SCC_TBUF[port_number][4]+SCC_TBUF[port_number][5]+SCC_TBUF[port_number][6]);
SCC_TBUF[port_number][7]=i&0xff; //lo
SCC_TBUF[port_number][8]=i>>8; //hi
((struct GSMR_L*)GSMR_L[port_number])->ENT=0;
(*SCC_TX_BD0_LN[port_number])=9;
(*SCC_TX_BD0_ST[port_number])=0xB000;
((struct GSMR_L*)GSMR_L[port_number])->ENT=1;
}
else if(SCC_TASK_RW[port_number][SCC_TASKID[port_number]]==0x39)
{
SCC_TBUF[port_number][0]=6;
SCC_TBUF[port_number][2]=MAddr;
SCC_TBUF[port_number][3]=SCC_TASK_RW[port_number][SCC_TASKID[port_number]];
SCC_TBUF[port_number][4]=SCC_TASK_PARA1[port_number][SCC_TASKID[port_number]]; //绝缘监测仪编号 取值:1 ~ 8
i=(SCC_TBUF[port_number][0]+SCC_TBUF[port_number][1]+SCC_TBUF[port_number][2]+SCC_TBUF[port_number][3]+SCC_TBUF[port_number][4]);
SCC_TBUF[port_number][5]=i&0xff; //lo
SCC_TBUF[port_number][6]=i>>8; //hi
((struct GSMR_L*)GSMR_L[port_number])->ENT=0;
(*SCC_TX_BD0_LN[port_number])=7;
(*SCC_TX_BD0_ST[port_number])=0xB000;
((struct GSMR_L*)GSMR_L[port_number])->ENT=1;
}
DBDataPrint(*SCC_TX_BD0_LN[port_number], port_number, SCC_TBUF[port_number], DIAG_SEND_MSG);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -