📄 netbios.cpp
字号:
else
return;
char * Buf=NetSend.TXBUF_addr+sizeof(GRAMHEAD);
class GRAMHEAD *pHead=(class GRAMHEAD *)NetSend.TXBUF_addr;
pHead->CmdCode=CHANNELPARA;
pHead->DestType='F';
pHead->DestId=mainfertid;
pHead->SourceType='F';
pHead->SourceId=ThisNodeId;
pHead->SourceNo=ThisNodeId-'A';
pHead->TxCount=TxCounts++;;
// pHead->FertStatus=9;
pHead->Length=22;
*(Buf++)=chno;
*(Buf++)=Channels[chno].Flag;//Flag
*(Buf++)=Channels[chno].SorA;//SorA
*(Buf++)=Channels[chno].Baud;//Baud
*(Buf++)=Channels[chno].EndBit;//
*(Buf++)=Channels[chno].ParityBit;
*(Buf++)=Channels[chno].CheckBit;
*(Buf++)=Channels[chno].DataBit;
*(Buf++)=Channels[chno].Protocol;
*(Buf++)=Channels[chno].ChRtuNum;
*((WORD*)Buf) = Channels[chno].SynWord;
Buf += 2;
// *((WORD*)Buf) =Channels[chno].BasePort;
// Buf += 2;
for (int i=0;i<8;i++)
*(Buf+i)=Channels[chno].ChRtuNo[i];
/* wp=(WORD *)(p+6);
*((WORD *)(Buf+6))=*wp;//BasePort
*(Buf+8)=*(p+8);//EndBit
*(Buf+9)=*(p+9);//ParityBit
*(Buf+10)=*(p+10);//CheckBit
*(Buf+11)=*(p+11);//DataBit
*(Buf+12)=*(p+12);//ChRtuNo[0]
*(Buf+13)=*(p+13);//ChRtuNum*/
XmitDataGram ();
}
//发送平安报文
void NetProcess::MakeATBFrame()
{
char * Buf=NetSend.TXBUF_addr+sizeof(GRAMHEAD);
class GRAMHEAD *pHead=(class GRAMHEAD *)NetSend.TXBUF_addr;
pHead->CmdCode=ATB;
pHead->DestType='G';
pHead->DestId=mainfertid;
pHead->SourceType='F';
pHead->SourceId=ThisNodeId;
pHead->SourceNo=ThisNodeId-'A';
pHead->TxCount=TxCounts++;
// pHead->FertStatus=9;
CREGISTER *cRegister = (CREGISTER far *)Buf;
cRegister->NodeId=ThisNodeId;
cRegister->NodeNo=ThisNodeId-'A';
cRegister->NodeType='F';
cRegister->NodeState='N';
pHead->Length=sizeof(CREGISTER);
// if (sockflag1)
// TcpXmitDataGram (0);
// if (sockflag2)
// TcpXmitDataGram (1);
XmitDataGram();
}
//发送登录信息
void NetProcess::MakeRegisterFrame()
{
char * Buf=NetSend.TXBUF_addr+sizeof(GRAMHEAD);
class GRAMHEAD *pHead=(class GRAMHEAD *)NetSend.TXBUF_addr;
pHead->CmdCode=REGISTER;
pHead->DestType='G';
pHead->DestId=mainhostid;
pHead->SourceType='F';
pHead->SourceId=ThisNodeId;
pHead->SourceNo=ThisNodeId-'A';
pHead->TxCount=TxCounts++;;
// pHead->FertStatus=9;
CREGISTER *cRegister = (CREGISTER *)Buf;
cRegister->NodeId=ThisNodeId;
cRegister->NodeNo=ThisNodeId-'A';
cRegister->NodeType='F';
cRegister->NodeState='N';
pHead->Length=sizeof(CREGISTER);
// if (sockflag1)
// TcpXmitDataGram (0);
// if (sockflag2)
// TcpXmitDataGram (1);
XmitDataGram ();
}
//发送所有事项
void NetProcess::MakeEventFrame()
{
while(Events.EventSendNum != Events.EventNum)
{
if (mainfertid==ThisNodeId)
{
char * Buf=NetSend.TXBUF_addr+sizeof(GRAMHEAD);
class GRAMHEAD *pHead=(class GRAMHEAD *)NetSend.TXBUF_addr;
pHead->CmdCode=SOE;
pHead->DestType='H';
pHead->DestId='A';
pHead->SourceType='F';
pHead->SourceId=ThisNodeId;
pHead->SourceNo=ThisNodeId-'A';
pHead->TxCount=TxCounts++;
// pHead->FertStatus=9;
memcpy(Buf,&(Events.EventBuf[Events.EventSendNum].cause),sizeof(FERTEVENT));
pHead->Length=sizeof(FERTEVENT);
for (int i=0;i<3;i++)
{
XmitDataGram ();
Sleep(10);
}
if (++Events.EventSendNum>=MAX_EVENT_NUM)
Events.EventSendNum=0;
}else Events.EventSendNum = Events.EventNum ;
}
}
//发送通道状态
void NetProcess::MakeChannelFrame()
{
// int Len=0,j=0;
BYTE RtuNo = 0;
char * Buf=NetSend.TXBUF_addr+sizeof(GRAMHEAD);
char * TempBuf;
TempBuf=Buf;
class GRAMHEAD *pHead=(class GRAMHEAD *)NetSend.TXBUF_addr;
pHead->DestType='F';
pHead->DestId='A';
pHead->SourceType='F';
pHead->SourceId=ThisNodeId;
pHead->SourceNo=ThisNodeId-'A';
// pHead->TxCount=TxCounts++;
// pHead->FertStatus=9;
pHead->CmdCode=COMMSTATE;
//Modify by lqs on 2000.12.21 10:20
//针对单个Rtu组织UDP报文进行发送
for (int i=0;i<SystemCount.RtuNum;i++)
{
// if (!Rtus[i].Flag) continue;
Buf=TempBuf;
*(long*)Buf = ProgramStartTime;
Buf += 4;
RtuNo = (BYTE)i;
*(Buf++) = RtuNo;
*(Buf++) = (BYTE)((Rtus[RtuNo].bFault)?0:1);
*(DWORD*)Buf = Rtus[RtuNo].FaultTime;
Buf += 4;
*(DWORD*)Buf=Rtus[RtuNo].RecFrameSum;
Buf += 4;
*(DWORD*)Buf = Rtus[RtuNo].ErrFrameSum;
Buf += 4;
for(int k=0;k<25;k++)
{
*(float*)Buf = Rtus[RtuNo].ErrRate[k];
Buf += 4;
}
pHead->Length = 118;
pHead->TxCount=TxCounts++;
if (mainfertid==ThisNodeId)
{
XmitDataGram ();
Sleep(10);
}
}
//Modify by lqs on 2000.12.21 10:20
// pHead->Length = Len * 14 + 4;
// if (mainfertid==ThisNodeId) {
// XmitDataGram ();
}
//发送所有遥测量
void NetProcess::MakeYcFrame()
{
int Len=0;
int SendLength=512-sizeof(GRAMHEAD);
char * Buf=NetSend.TXBUF_addr+sizeof(GRAMHEAD);
class GRAMHEAD *pHead=(class GRAMHEAD *)NetSend.TXBUF_addr;
pHead->CmdCode=YCDRF;
pHead->DestType='G';
pHead->DestId='A';
pHead->SourceType='F';
pHead->SourceId=ThisNodeId;
pHead->SourceNo=(char)(ThisNodeId-'A');
pHead->TxCount=TxCounts++;
while((YcSendRtuNo<SystemCount.RtuNum))
{
if (YcSendRtuNo == ZFRtuNo)
{
YcSendRtuNo++;
continue;
}
if ((Rtus[YcSendRtuNo].Flag & 1) && (Rtus[YcSendRtuNo].YcNum))
{ //use flag
if ((Len+2+1+2+2*Rtus[YcSendRtuNo].YcNum)<SendLength)
{
Len+=2+1+2+2*Rtus[YcSendRtuNo].YcNum;
*((WORD *)Buf) = (WORD)(Rtus[YcSendRtuNo].Freq[0] * 100);//FREQ 频率
Buf+=2;
*Buf++=YcSendRtuNo;
*((WORD *)Buf)=2*Rtus[YcSendRtuNo].YcNum;
Buf+=2;
for (int i=0;i<Rtus[YcSendRtuNo].YcNum;i++)
{
*((WORD *)Buf)=(WORD)Rtus[YcSendRtuNo].YcValue[i];
Buf+=2;
}
if (++YcSendRtuNo>=SystemCount.RtuNum)
{
YcSendRtuNo=0;
pHead->Length=Len;
if (mainfertid==ThisNodeId)
{
XmitDataGram ();
}
return;
}
}
else
{
if (++YcSendRtuNo>=SystemCount.RtuNum)
{
YcSendRtuNo=0;
pHead->Length=Len;
if (mainfertid==ThisNodeId)
{
XmitDataGram ();
}
}
continue;
}
}
else
{
if (++YcSendRtuNo>=SystemCount.RtuNum)
{
YcSendRtuNo=0;
if (Len>2)
{
pHead->Length=Len;
if (mainfertid==ThisNodeId)
{
XmitDataGram ();
}
}
return;
}
}
}
}
//发送所有电度量
void NetProcess::MakeKwhFrame()
{
int Len=0;
int SendLength=512-sizeof(GRAMHEAD);
char * Buf=NetSend.TXBUF_addr+sizeof(GRAMHEAD);
class GRAMHEAD *pHead=(class GRAMHEAD *)NetSend.TXBUF_addr;
pHead->CmdCode=KWHDRF;
pHead->DestType='G';
pHead->DestId='A';
pHead->SourceType='F';
pHead->SourceId=ThisNodeId;
pHead->SourceNo=ThisNodeId-'A';
pHead->TxCount=TxCounts++;
// pHead->FertStatus=9;
// *((WORD *)Buf)=Freq; //周波
while(KwhSendRtuNo<SystemCount.RtuNum)
{
if (KwhSendRtuNo == ZFRtuNo)
{
KwhSendRtuNo++;
continue;
}
if ((Rtus[KwhSendRtuNo].Flag & 1) && (Rtus[KwhSendRtuNo].KwhNum)) { //use flag
if ((Len+1+2+4*Rtus[KwhSendRtuNo].KwhNum)<SendLength) {
Len+=1+2+4*Rtus[KwhSendRtuNo].KwhNum;
*Buf++=KwhSendRtuNo;
*((WORD *)Buf)=4*Rtus[KwhSendRtuNo].KwhNum;
Buf+=2;
for (int i=0;i<Rtus[KwhSendRtuNo].KwhNum;i++) {
*((DWORD *)Buf)=Rtus[KwhSendRtuNo].KwhValue[i];
Buf+=4;
}
if (++KwhSendRtuNo>=SystemCount.RtuNum) {
KwhSendRtuNo=0;
pHead->Length=Len;
if (mainfertid==ThisNodeId) {
XmitDataGram ();
// if (sockflag1)
// TcpXmitDataGram (0);
// if (sockflag2)
// TcpXmitDataGram (1);
}
return;
}
}
else {
pHead->Length=Len;
if (mainfertid==ThisNodeId) {
XmitDataGram ();
// if (sockflag1)
// TcpXmitDataGram (0);
// if (sockflag2)
// TcpXmitDataGram (1);
}
return;
}
}
else {
if (++KwhSendRtuNo>=SystemCount.RtuNum) {
KwhSendRtuNo=0;
if (Len>2) {
pHead->Length=Len;
if (mainfertid==ThisNodeId) {
XmitDataGram ();
// if (sockflag1)
// TcpXmitDataGram (0);
// if (sockflag2)
// TcpXmitDataGram (1);
}
}
return;
}
}
}
}
//发送所有遥信量
void NetProcess::MakeYxFrame()
{
int Len=0;
int SendLength=512-sizeof(GRAMHEAD);
char * Buf=NetSend.TXBUF_addr+sizeof(GRAMHEAD);
class GRAMHEAD *pHead=(class GRAMHEAD *)NetSend.TXBUF_addr;
pHead->CmdCode=YXDRF;
pHead->DestType='G';
pHead->DestId='A';
pHead->SourceType='F';
pHead->SourceId=ThisNodeId;
pHead->SourceNo=ThisNodeId-'A';
pHead->TxCount=TxCounts++;
// pHead->FertStatus=9;
// YxwSendRtuNo=0;
while(YxwSendRtuNo<SystemCount.RtuNum)
{
if (YxwSendRtuNo == ZFRtuNo)
{
YxwSendRtuNo++;
continue;
}
WORD YxNum=Rtus[YxwSendRtuNo].YxNum;
if ((Rtus[YxwSendRtuNo].Flag & 1) && YxNum)// && (Rtus[YxwSendRtuNo].RecFullYx==1)) //use flag
{
WORD YxwNum=(Rtus[YxwSendRtuNo].YxNum + 15)/16; //? (Rtus[YxwSendRtuNo].YxNum-1)/16+1 : 0;
if ((Len+1+2+2*YxwNum)<SendLength)
{
Len+=1+2+2*YxwNum;
*Buf++=YxwSendRtuNo;
*((WORD *)Buf)=2*YxwNum;
Buf+=2;
for (int i=0;i<YxwNum*2;i++) Buf[i]=0;
for (i=0;i<YxNum;i++)
if(Rtus[YxwSendRtuNo].YxValue[i]) Buf[(int)i/8] += 1<<(i%8);
Buf += YxwNum*2;
if (++YxwSendRtuNo>=SystemCount.RtuNum) {
YxwSendRtuNo=0;
pHead->Length=Len;
if (mainfertid==ThisNodeId) {
XmitDataGram ();
// if (sockflag1)
// TcpXmitDataGram (0);
// if (sockflag2)
// TcpXmitDataGram (1);
}
return;
}
}
else {
pHead->Length=Len;
if (mainfertid==ThisNodeId) {
XmitDataGram ();
// if (sockflag1)
// TcpXmitDataGram (0);
// if (sockflag2)
// TcpXmitDataGram (1);
}
return;
}
}
else {
if (++YxwSendRtuNo>=SystemCount.RtuNum) {
YxwSendRtuNo=0;
if (Len>2) {
pHead->Length=Len;
if (mainfertid==ThisNodeId) {
XmitDataGram ();
// if (sockflag1)
// TcpXmitDataGram (0);
// if (sockflag2)
// TcpXmitDataGram (1);
}
}
return;
}
}
}
}
//发送所有水位
void NetProcess::MakeWaterFrame()
{
int Len=0;
int SendLength=512-sizeof(GRAMHEAD);
char * Buf=NetSend.TXBUF_addr+sizeof(GRAMHEAD);
class GRAMHEAD *pHead=(class GRAMHEAD *)NetSend.TXBUF_addr;
pHead->CmdCode=WTRDRF;
pHead->DestType='G';
pHead->DestId='A';
pHead->SourceType='F';
pHead->SourceId=ThisNodeId;
pHead->SourceNo=ThisNodeId-'A';
pHead->TxCount=TxCounts++;
// pHead->FertStatus=9;
while(WaterSendRtuNo<SystemCount.RtuNum)
{
if (WaterSendRtuNo == ZFRtuNo)
{
WaterSendRtuNo++;
continue;
}
if ((Rtus[WaterSendRtuNo].Flag & 1) && (Rtus[WaterSendRtuNo].WaterNum)) { //use flag
if ((Len+1+2+4*Rtus[WaterSendRtuNo].WaterNum)<SendLength) {
Len+=1+2+4*Rtus[WaterSendRtuNo].WaterNum;
*Buf++=WaterSendRtuNo;
*((WORD *)Buf)=2*Rtus[WaterSendRtuNo].WaterNum;
Buf+=2;
for (int i=0;i<Rtus[WaterSendRtuNo].WaterNum;i++) {
*((float *)Buf)=Rtus[WaterSendRtuNo].Water[i];
Buf+=4;
}
if (++WaterSendRtuNo>=SystemCount.RtuNum) {
WaterSendRtuNo=0;
pHead->Length=Len;
if (mainfertid==ThisNodeId) {
XmitDataGram ();
// if (sockflag1)
// TcpXmitDataGram (0);
// if (sockflag2)
// TcpXmitDataGram (1);
}
return;
}
}
else {
pHead->Length=Len;
if (mainfertid==ThisNodeId) {
XmitDataGram ();
// if (sockflag1)
// TcpXmitDataGram (0);
// if (sockflag2)
// TcpXmitDataGram (1);
}
return;
}
}
else {
if (++WaterSendRtuNo>=SystemCount.RtuNum) {
WaterSendRtuNo=0;
if (Len>2) {
pHead->Length=Len;
if (mainfertid==ThisNodeId) {
XmitDataGram ();
// if (sockflag1)
// TcpXmitDataGram (0);
// if (sockflag2)
// TcpXmitDataGram (1);
}
}
return;
}
}
}
}
//发送所有频率
void NetProcess::MakeFreqFrame()
{
int Len=0;
float *FreqBuf;
int SendLength=512-sizeof(GRAMHEAD);
char * Buf=NetSend.TXBUF_addr+sizeof(GRAMHEAD);
class GRAMHEAD *pHead=(class GRAMHEAD *)NetSend.TXBUF_addr;
pHead->CmdCode=FRQDRF;
pHead->DestType='G';
pHead->DestId='A';
pHead->SourceType='F';
pHead->SourceId=ThisNodeId;
pHead->SourceNo=ThisNodeId-'A';
pHead->TxCount=TxCounts++;
// pHead->FertStatus=9;
while(FreqSendRtuNo<SystemCount.RtuNum)
{
if (FreqSendRtuNo == ZFRtuNo)
{
FreqSendRtuNo++;
continue;
}
if ((Rtus[FreqSendRtuNo].Flag & 1) && (Rtus[FreqSendRtuNo].FreqNum)) { //use flag
if ((Len+1+2+4*Rtus[FreqSendRtuNo].FreqNum)<SendLength) {
Len+=1+2+sizeof(float)*Rtus[FreqSendRtuNo].FreqNum;
*Buf++=FreqSendRtuNo;
*((WORD *)Buf)=sizeof(float)*Rtus[FreqSendRtuNo].FreqNum;
Buf+=2;
FreqBuf = (float*)Buf;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -