/*
Modify Record
2002-11-16 Add Network Card Value Geting From nsc200.ini
2002-12-26 According Nedd,adding Send chang yc
*/
#include <socket.h>
#include <sockLib.h>
#include <stdlib.h>
#include <sysLib.h>
#include <logLib.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <time.h>
#include "wdLib.h"
#include "in.h"
#include "ioLib.h"
#include "constant.h"
#include "NsDataBase.h"
#include "NsExtTime.h"
#include "NsIoFunction.h"
#include "NsCommon.h"
#include "NsReadOnly.h"
#include "ExtDataBase.h"
#include "Project/NsIec104.h"
static NS_IEC104_MAIN NsIec104Struct;
void NsNetServerProcess(void);
static void NsIec104Process(void);
static void NsIec104Init(unsigned char Card,short Port);
static void NsIec104NetInit(void);
static void NsIec104Reset(void);
static void NsIec104ProcessFormatI(void);
static void NsIec104ProcessFormatS(void);
static void NsIec104ProcessFormatU(void);
static void NsIec104Interrogation(void);
static void NsIec104InterrogationGroup(void);
static void NsIec104InterrogationAll(void);
static void NsIec104ProcessYxGroup(unsigned char Group);
static void NsIec104ProcessYcGroup(unsigned char Group);
static void NsIec104ProcessCellGroup(unsigned char Group);
static void NsIec104ProcessTime(void);
static void NsIec104ProcessYkYt(void);
static void NsIec104ProcessPulse(void);
static void NsIec104DefaultGroup(unsigned char Group);
static void NsIec104ProcessPulseData(void);
static void NsIec104SendGroup(void);
static void NsIec104SendYkMessage(short Who,unsigned char Action);
static void NsIec104ReceiveYkReturn(void);
static void NsIec104SendYkSelectConfirm(void);
static void NsIec104SendYkExeConfirm(void);
static void NsIec104SendYkEscConfirm(void);
static unsigned char NsIec104SendCosSoe(void);
static void NsIec104InitYk(void);
static void NsIec104CycleCount(void);
static void NsIec104SendChangeYc(void);
/*
static void Iec104testCosSoe(void);
void debug104(void);
*/
static void NsIec104Init(unsigned char Card,short Port)
{
unsigned short i;
int Result;
char Buff[32];
char Ip0Buff[64],Ip0Route[64];
char Ip1Buff[64],Ip1Route[64];
NS_SYSTEM_DATA_MODE SysData;
NsIec104Struct.LinkState=NS_DISCONNECTED;
NsIec104Struct.NsNewSocketId=0;
getforsecond(&NsIec104Struct.LinkValidTime);
NsIec104Struct.ReceiveIndex=0;
NsIec104Struct.ReceiveIndexLength=0;
NsIec104Struct.SendMeNumber=0;
NsIec104Struct.HasSendNumber=0;
NsIec104Struct.NeedSendNumber=0;
NsIec104Struct.LeftSendNumber=0;
NsIec104Struct.Card=Card;
NsIec104Struct.Port=Port;
NsIec104Struct.YkStartSign=OFF;
NsIec104Struct.Table=0;
NsIec104Struct.NetRunSign=OFF;
NsIec104Struct.SetNetSign=OFF;
Result=ReadNsc200Ini("NsIec104","SetTimeFlag",Buff);
if(Result)
{
NsIec104Struct.SetTimeFlag=1;
}
for(i=0;i<NS_IEC104_USE_CYCLE;i++)
{
getforsecond(&NsIec104Cycle[i].LastTime);
NsIec104Cycle[i].TimeNap= NsIec104Nap[i];
NsIec104Cycle[i].TimeSign=OFF;
}
for(i=0;i<NS_IEC104_MAX_YC;i++)
NsIec104Struct.YcNap[i]=5;
NsIec104Struct.YcChangeCycle=0;
NsIec104Struct.TableNo = NsGetCommTable(Port);
GetSysDataMode(NsIec104Struct.TableNo,&SysData);
/*NsIec104Struct.XYxNum = SysData.NsYxTableNumber;
NsIec104Struct.XYmNum = SysData.NsYmTableNumber;*/
NsIec104Struct.XYcNum = SysData.NsYcTableNumber;
NsIec104Struct.XYcCycleNum = (NsIec104Struct.XYcNum + NS_IEC104_ONCE_YC_COUNT - 1) / NS_IEC104_ONCE_YC_COUNT;
}
static void NsIec104NetInit(void)
{
int Result;
char Buff[32];
char Ip0Buff[64],Ip0Route[64];
char Ip1Buff[64],Ip1Route[64];
NsTcpServerInit(NsIec104Struct.Card,NsIec104Struct.Port,"10.14.127.200");
switch(NsIec104Struct.Card)
{
case 0:
Result=ReadNsc200Ini("NsIec104","Route0Sign",Buff);
if(Result)
{
NsReadIpAddress("NsIec104","Route0Net",Ip0Buff);
NsReadIpAddress("NsIec104","Route0Ip",Ip0Route);
NsAddRoute(Ip0Buff,Ip0Route);
}
break;
case 1:
Result=ReadNsc200Ini("NsIec104","Route1Sign",Buff);
if(Result)
{
NsReadIpAddress("NsIec104","Route1Net",Ip1Buff);
NsReadIpAddress("NsIec104","Route1Ip",Ip1Route);
NsAddRoute(Ip1Buff,Ip1Route);
}
break;
default:
break;
}
}
static void NsIec104InitYk(void)
{
NsIec104Struct.YkStartSign=OFF;
NsIec104Struct.YkNowState=0xff;
NsIec104Struct.YkCellNumber=0xff;
NsIec104Struct.YkKgNumber=0xff;
}
void NsNetServerProcessv(void)
{
while(1)
{
taskDelay(88);
}
}
void NsNetServerProcess(void)
{
unsigned long Now,Nap;
unsigned short Card;
int Result;
char Buff[32];
Card=0;
Result=ReadNsc200Ini("NsTasks","NsServerCard",Buff);
if(Result)
{
Card=Result;
if(Card<=2&&Card>0)
{
Card-=1;
}
}
NsIec104Init(Card,2404);
for(;;)
{
NsIec104Struct.SystemState = NsGetSysParameter(NS_NSCC_STATE);
NsIec104Struct.NetRunSign = NsNetConfigState();
if(NsIec104Struct.NetRunSign==ON&&NsIec104Struct.SetNetSign==OFF&&NsIec104Struct.SystemState==DUTY)
{
NsIec104NetInit();
NsIec104Struct.SetNetSign=ON;
}
if(NsIec104Struct.NetRunSign==ON&&NsIec104Struct.SetNetSign==ON&&NsIec104Struct.SystemState==DUTY)
{
getforsecond(&Now);
Nap=DiffMsLong(Now,NsIec104Struct.LinkValidTime);
if(Nap>NS_IEC104_PERMIT_TIME)
{
NsIec104Struct.LinkState=NS_DISCONNECTED;
}
if(NsIec104Struct.YkStartSign==ON)
{
Nap=DiffMsLong(Now,NsIec104Struct.YkStartTime);
if(Nap>NS_IEC104_YK_PERMIT_TIME)
{
NsIec104InitYk();
}
}
if(NsIec104Struct.LinkState==NS_DISCONNECTED)
{
NsIec104Struct.NsNewSocketId=NsTcpConnect(NsIec104Struct.NsNewSocketId,NsIec104Struct.Card);
if(NsIec104Struct.NsNewSocketId>0)
{
NsIec104Struct.LinkState=NS_CONNECTED;
NsIec104Struct.SendMeNumber=0;
getforsecond(&NsIec104Struct.LinkValidTime);
}
else
{
/*NsIec104Init(NsIec104Struct.Card,NsIec104Struct.Port);*/
/* NsTcpServerInit(NsIec104Struct.Card,NsIec104Struct.Port,"10.14.8.23");*/
NsIec104Struct.LinkState=NS_DISCONNECTED;
NsIec104Reset();
taskDelay(866);
}
}
else
{
NsIec104Struct.ReceiveIndexLength=recv(NsIec104Struct.NsNewSocketId,&NsIec104Struct.ReceiveBuffer[NsIec104Struct.ReceiveIndex],198,0);
if(NsIec104Struct.ReceiveIndexLength>0)
{
NsIec104Struct.ReceiveLength+=NsIec104Struct.ReceiveIndexLength;
if(NsIec104Struct.ReceiveLength<NS_IEC104_RECEIVEBUFFER)
{
NsIec104Process();
实现104规约源代码
4星 · 超过85%的资源 需积分: 50 189 浏览量
2015-08-05
15:35:15
上传
评论 4
收藏 11KB RAR 举报
fs_wells
- 粉丝: 3
- 资源: 28
最新资源
- 最入门的爬虫代码 python.docx
- 爬虫零基础入门-爬取天气预报.pdf
- 最通俗易懂的 MongoDB 非结构化文档存储数据库教程.zip
- 以mongodb为数据库的订单物流小项目.zip
- 腾讯云-mongodb数据库, 项目部署.zip
- 腾讯 APIJSON 的 MongoDB 数据库插件.zip
- 理解非关系型数据库和关系型数据库的区别.zip
- 操作简单的Mongodb网页web管理工具,基于Spring Boot2.0支持mongodb集群.zip
- tms-mongodb-web,提供访问mongodb数据的REST API和可灵活扩展的mongodb web 客户端.zip
- SpringBoot整合mongodb学习MongoTemplate和MongoRepository两种方式CRUD使用.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈