📄 commpc.c
字号:
i = 0;
for(j = 4; j < 18; j++)
{
i = i + g_chSendPCBuf[j] - 48;//要减48
}
i %= 1000;//最大 4 位
g_chSendPCBuf[18] = ((i / 100) % 10) + 48;//在这里要把它转为String!
g_chSendPCBuf[19] = ((i / 10) % 10) + 48;//在这里要把它转为String!
g_chSendPCBuf[20] = (i % 10) + 48;//在这里要把它转为String!
//加 尾 *
g_chSendPCBuf[21] = '*';
//尾巴指针
//肯定发送
g_chSendPCTail = 1;
g_chSendPCHead = 0;
g_chSendPCBuf_Stat = 1;//马上去发吧
}
return(1);
}
unsigned char AutoEnvSevenInsertSendPCBufNighteen(unsigned char * pData,unsigned char chClass)//2002-10-11 17:04 自动加 局号、流水号、检查和
{//报告---可以等待,
if((g_chSendPCBuf_Stat == 2) || (g_chSendPCBuf_Stat == 3))
{//在 RS 232 方式下 等待 4 毫秒 , 在 DTMF 下 应该不可能发生该问题
return(0);//只能 采用丢掉的办法
}
//if(4 < SendPcBufMAX - 20)
{
unsigned int i,j;
//加 头 #
g_chSendPCBuf[1] = '#';
//加 头 CC
g_chSendPCBuf[2] = 'C';
g_chSendPCBuf[3] = 'C';
//加 局号
for(i = 0; i < 4; i++)
{
g_chSendPCBuf[4 + i] = *(unsigned char *)(StationID_Info + i);//是ASC码
}
//加 流水号
g_chSendPCBuf[8] = g_chOderID;
//加 事件类别 告警盘数据上传 07
g_chSendPCBuf[9] = '0';
g_chSendPCBuf[10] = '7';
//加 监测通道 001---使用 g_chPushBit0to7
g_chSendPCBuf[11] = '0';
g_chSendPCBuf[12] = '0';
g_chSendPCBuf[13] = '1';//
//加 类型 chClass 10 工频数据
g_chSendPCBuf[14] = (chClass / 10) % 10 + 48;
g_chSendPCBuf[15] = (chClass % 10) + 48;
//加 信息 消息的状态字(19位)
for(i = 0; i < 19; i++)
{
g_chSendPCBuf[16 + i] = *(pData + i) + 48;
}
//加 检查和--不能按 ASCII 码 相加 4-----25
i = 0;
for(j = 4; j < 35; j++)
{
i = i + g_chSendPCBuf[j] - 48;//要减48
}
i %= 1000;//最大 4 位
g_chSendPCBuf[35] = ((i / 100) % 10) + 48;//在这里要把它转为String!
g_chSendPCBuf[36] = ((i / 10) % 10) + 48;//在这里要把它转为String!
g_chSendPCBuf[37] = (i % 10) + 48;//在这里要把它转为String!
//加 尾 *
g_chSendPCBuf[38] = '*';
//尾巴指针
//肯定发送
g_chSendPCTail = 38;
g_chSendPCHead = 0;
g_chSendPCBuf_Stat = 1;//马上去发吧
}
return(1);
}
unsigned char AutoEnvSevenInsertSendPCBufFourty(unsigned char * pData,unsigned char chGPID)//2002-10-11 17:04 自动加 局号、流水号、检查和
{//报告---可以等待,
if((g_chSendPCBuf_Stat == 2) || (g_chSendPCBuf_Stat == 3))
{//在 RS 232 方式下 等待 4 毫秒 , 在 DTMF 下 应该不可能发生该问题
return(0);//只能 采用丢掉的办法
}
//if(4 < SendPcBufMAX - 20)
{
unsigned int i,j;
//加 头 #
g_chSendPCBuf[1] = '#';
//加 头 CC
g_chSendPCBuf[2] = 'C';
g_chSendPCBuf[3] = 'C';
//加 局号
for(i = 0; i < 4; i++)
{
g_chSendPCBuf[4 + i] = *(unsigned char *)(StationID_Info + i);//是ASC码
}
//加 流水号
g_chSendPCBuf[8] = g_chOderID;
//加 事件类别 告警盘数据上传 07
g_chSendPCBuf[9] = '0';
g_chSendPCBuf[10] = '7';
//加 监测通道 001---使用 g_chPushBit0to7
g_chSendPCBuf[11] = '0';
g_chSendPCBuf[12] = '0';
g_chSendPCBuf[13] = (chGPID % 10) + 48;//
//加 类型 chClass 09 工频参数数据
g_chSendPCBuf[14] = '0';
g_chSendPCBuf[15] = '9';
//加 信息 消息的状态字(19位)
for(i = 0; i < 44; i++)
{
g_chSendPCBuf[16 + i] = *(pData + i);
}
//加 检查和--不能按 ASCII 码 相加 4-----25
i = 0;
for(j = 4; j < 35; j++)
{
i = i + g_chSendPCBuf[j] - 48;//要减48
}
i %= 1000;//最大 4 位
g_chSendPCBuf[60] = ((i / 100) % 10) + 48;//在这里要把它转为String!
g_chSendPCBuf[61] = ((i / 10) % 10) + 48;//在这里要把它转为String!
g_chSendPCBuf[62] = (i % 10) + 48;//在这里要把它转为String!
//加 尾 *
g_chSendPCBuf[63] = '*';
//尾巴指针
//肯定发送
g_chSendPCTail = 63;
g_chSendPCHead = 0;
g_chSendPCBuf_Stat = 1;//马上去发吧
}
return(1);
}
unsigned char AutoEnvSevenInsertSendPCBufError(void)//2002-10-11 17:04 自动加 局号、流水号、检查和
{//报告---可以等待,
if((g_chSendPCBuf_Stat == 2) || (g_chSendPCBuf_Stat == 3))
{//在 RS 232 方式下 等待 4 毫秒 , 在 DTMF 下 应该不可能发生该问题
return(0);//只能 采用丢掉的办法
}
//if(4 < SendPcBufMAX - 20)
{
unsigned int i,j;
//加 头 #
g_chSendPCBuf[1] = '#';
//加 头 CC
g_chSendPCBuf[2] = 'C';
g_chSendPCBuf[3] = 'C';
//加 局号
for(i = 0; i < 4; i++)
{
g_chSendPCBuf[4 + i] = *(unsigned char *)(StationID_Info + i);//是ASC码
}
//加 流水号
g_chSendPCBuf[8] = g_chOderID;
//加 事件类别 告警盘数据上传 07
g_chSendPCBuf[9] = '9';
g_chSendPCBuf[10] = '9';
for(j = 0; j < 7; j++)
{
g_chSendPCBuf[11 + j] = g_chReceivePCBuf[11 + j];
}
//加 检查和--不能按 ASCII 码 相加 4-----36
i = 0;
for(j = 4; j < 18; j++)
{
i = i + g_chSendPCBuf[j] - 48;//要减48
}
i %= 1000;//最大 4 位
g_chSendPCBuf[18] = ((i / 100) % 10) + 48;//在这里要把它转为String!
g_chSendPCBuf[19] = ((i / 10) % 10) + 48;//在这里要把它转为String!
g_chSendPCBuf[20] = (i % 10) + 48;//在这里要把它转为String!
//加 尾 *
g_chSendPCBuf[21] = '*';
//尾巴指针
//肯定发送
g_chSendPCTail = 21;
g_chSendPCHead = 0;
g_chSendPCBuf_Stat = 1;//马上去发吧
}
return(1);
}
unsigned char AutoEnvFiveInsertSendPCBuf(unsigned char *pData,unsigned char chClass)//2002-10-11 17:04 自动加 局号、流水号、检查和
{//报告---可以等待,
if((g_chSendPCBuf_Stat == 2) || (g_chSendPCBuf_Stat == 3))
{//在 RS 232 方式下 等待 4 毫秒 , 在 DTMF 下 应该不可能发生该问题
return(0);//只能 采用丢掉的办法
}
//if(4 < SendPcBufMAX - 20)
{
unsigned int i,j;
//加 头 #
g_chSendPCBuf[1] = '#';
//加 头 CC
g_chSendPCBuf[2] = 'C';
g_chSendPCBuf[3] = 'C';
//加 局号
for(i = 0; i < 4; i++)
{
g_chSendPCBuf[4 + i] = *(unsigned char *)(StationID_Info + i);//是ASC码
}
//加 流水号
g_chSendPCBuf[8] = g_chOderID;
//加 事件类别 告警盘主动上传 05
g_chSendPCBuf[9] = '0';
g_chSendPCBuf[10] = '5';
//加 监测通道 001
g_chSendPCBuf[11] = '0';
g_chSendPCBuf[12] = '0';
g_chSendPCBuf[13] = '1';
//加 类型 chClass 01=门禁状态,03=直流,,05=温度 12 可燃性气体
g_chSendPCBuf[14] = (chClass / 10) % 10 + 48;
g_chSendPCBuf[15] = (chClass % 10) + 48;
//加 时间 (格式:YYYYMMDDHHmmSS,14位) g_chYear
g_chSendPCBuf[16] = '2';
g_chSendPCBuf[17] = '0';
g_chSendPCBuf[18] = (g_chYear / 10) % 10 + 48;
g_chSendPCBuf[19] = (g_chYear % 10) + 48;
g_chSendPCBuf[20] = (g_chMonth / 10) % 10 + 48;
g_chSendPCBuf[21] = (g_chMonth % 10) + 48;
g_chSendPCBuf[22] = (g_chDay / 10) % 10 + 48;
g_chSendPCBuf[23] = (g_chDay % 10) + 48;
g_chSendPCBuf[24] = (g_chHour / 10) % 10 + 48;
g_chSendPCBuf[25] = (g_chHour % 10) + 48;
g_chSendPCBuf[26] = (g_chMinute / 10) % 10 + 48;
g_chSendPCBuf[27] = (g_chMinute % 10) + 48;
g_chSendPCBuf[28] = '4';
g_chSendPCBuf[29] = '4';
//加 信息 消息的状态字(7位)
for(i = 0; i < 7; i++)
{
g_chSendPCBuf[30 + i] = *(pData + i) + 48;//表明信息不是ASC码
}
//加 检查和--不能按 ASCII 码 相加 4-----36
i = 0;
for(j = 4; j < 36; j++)
{
i = i + g_chSendPCBuf[j] - 48;//要减48
}
i %= 1000;//最大 4 位
g_chSendPCBuf[37] = ((i / 100) % 10) + 48;//在这里要把它转为String!
g_chSendPCBuf[38] = ((i / 10) % 10) + 48;//在这里要把它转为String!
g_chSendPCBuf[39] = (i % 10) + 48;//在这里要把它转为String!
//加 尾 *
g_chSendPCBuf[40] = '*';
//尾巴指针
//肯定发送
g_chSendPCTail = 40;
g_chSendPCHead = 0;
g_chSendPCBuf_Stat = 1;//马上去发吧
}
return(1);
}
/**************************************
*功能: 处理接收缓冲区里的信息 从 PC 机来
*参数:
*返回:
*备注: 实时运行
**************************************/
void ReceivePCBuf(void)
{
switch(g_chReceivePCBuf_Stat)
{
//0---用来清理 计数器,唯一例外的是 DEBUG_STAT
case 0:
g_chReceivePCBuf_Stat = 1;
g_chReceivePCBuf_1s = 0;
g_chReceivePCTail = 0;
g_chReceivePCHead = 0;
break;
case 1://有信息
if(g_chReceivePCTail > 0)
{//收到了头!
g_chReceivePCBuf_Stat = 2;
g_chReceivePCBuf_1s = 0;
if(g_intMark & RS232PhysicsReceiveWorkToPCBuf_Mark)
{//RS232 在这里控制,DTMF要能够体现单个码的状态!
P2OUT &= ~Receive_LED;
}
}
//没有东西!
//控制 我要主动发!---另外在收到 测试 命令后 会 有切换----------------no----
if(g_intMark & RS232DTMFSendPC_Mark)
{//使用DTMF通信
//已经确认,在 BuildDTMF() 中 已经有处理了!
//会判断是否有东西要发,并且会主动去建立。。。清发送缓冲区及清主动发送
}
else
{//使用RS232通信
// 10 秒里没有 收到信息,必须转为主动发,与5秒超时重发没有冲突
if(g_chReceivePCBuf_1s > ReceivePCBuf_1sIPushMax)
{//10 秒还没有收到东西,(不可能在发送东西)---从被动发,到 10 秒没有收到东西,肯定可以转到主动发
g_chReceivePCBuf_1s = 0;
if(g_intMark & ICanPush_Mark)
{
//
}
else
{//无条件 要重新开始主动发
g_intMark |= ICanPush_Mark;
g_chMainPushReport_Stat = 0;//DEFAULT 中会有相关清理
}
}
}
break;
case 2://找尾巴,要超时处理,DTMF放置在BuildDtmf()的 case 4 中 5 秒后挂
//这样后,不需要考虑 ##1#,###3434552346*吧
if(g_chReceivePCTail > 2)//0 1 2 3 至少有三个,才算正常
{//收到了尾巴!
if(g_chReceivePCBuf[g_chReceivePCTail] == '#' || g_chReceivePCBuf[g_chReceivePCTail] == '*')
{//------------------还要判断 ##xxx 但 #2##453535#----no----------
g_chReceivePCBuf_Stat = 3;
}
}
//在这里 必须要有 超时处理!
if(g_intMark & RS232DTMFSendPC_Mark)
{//使用DTMF通信
//已经确认,在 BuildDTMF() 中 已经有超时处理了!
//这里也要加强处理,60 CHAR 不会 》 1 分钟!
if(g_chReceivePCBuf_1s > 60)
{//60 秒还没有收到 尾巴,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -