• 大小: 788KB
    文件类型: .zip
    金币: 2
    下载: 2 次
    发布日期: 2021-05-21
  • 语言: 其他
  • 标签: iec103  code  txt  

资源简介

南自以太网103规约文本说明及有效的上位机代码,供电力自动化爱好者下载应用!

资源截图

代码片段和文件信息


//南自PSL6000网络103协议处理

#include “stdafx.h“
#include “CreateTask.h“
#include “\fsa3000\dev\env\inc\fjRlibdef.h“


unsigned short   g_Net_Rec_Buf_Item_In_Pt_PSL =0;
STRUCT_NetRecv   g_Net_Recv_Buf_PSL[MAX_NET_RECV_ITEM_NUM];              

//BOOL g_PSL103_Udp_sent = FALSE;

//服务器端socket for PSL
UINT PSLInitTcp( LPVOID pParam )

    BYTE TaskId  = (BYTE)(DWORD)pParam; //第一个启动服务器socket的任务ID
//CChannelSignal *pChannel = Task[TaskId]->pChannel;

    int i TcpsockAddSizetmp=1;
    struct  sockaddr_in  TcpclientAddr;
    struct  sockaddr_in  TcpserverAddr;
    fd_set rd_fds;
    SOCKET  TcpSocketId=INVALID_SOCKETAcceptTcpId=INVALID_SOCKET;

    //只建一个tcp server  在外面判断了,这里不可以再判断
    //if(SrvSocketPSL.Server_Has_Create_PSL != 0) return 0;
//SrvSocketPSL.Server_Has_Create_PSL = 1; 

    TcpsockAddSize  = sizeof(struct sockaddr_in);   
    while(1)
    { 
if(bThreadExit)break;

     memset((char*)&TcpserverAddr0TcpsockAddSize);
        
TcpserverAddr.sin_family      = AF_INET;
        TcpserverAddr.sin_port        = htons(SrvSocketPSL.TcpPort_PSL);
        TcpserverAddr.sin_addr.s_addr = htonl(INADDR_ANY);

if((TcpSocketId = ::socket(AF_INETSOCK_STREAM0))==INVALID_SOCKET)
{
            Sleep(800);
continue;
        }
if(bind(TcpSocketId(struct sockaddr *)&TcpserverAddrTcpsockAddSize)==SOCKET_ERROR)
{
::closesocket(TcpSocketId);
Sleep(800);
continue;
}

if(listen(TcpSocketIdSOMAXCONN)==SOCKET_ERROR)
{
::closesocket(TcpSocketId);
Sleep(800);
continue;
}

        FD_ZERO(&rd_fds);
FD_SET(TcpSocketId&rd_fds);

//进入下面,就会接收多个远方发送的连接请求
        while(1)
        {
if(bThreadExit)break;
            if(select(TcpSocketId+1&rd_fds(struct fd_set *)0(struct fd_set *)0(struct timeval *)0)<=0)
            {
             if(bThreadExit)break;

                continue;
            }
            if(FD_ISSET(TcpSocketId&rd_fds))
            {
                tmp=1;
                if(ioctlsocket(TcpSocketIdFIONBIO(unsigned long*)&tmp) == SOCKET_ERROR) //非阻塞socket
                {
                    Sleep(20);
                    continue;
                }

                AcceptTcpId = accept(TcpSocketId(struct sockaddr *)&TcpclientAddr&TcpsockAddSize);
                if(AcceptTcpId != INVALID_SOCKET)
                {
for(i=0;i {
if(TcpclientAddr.sin_addr.s_addr == SrvSocketPSL.Client_PSL[i].ConnIp_PSL)
{
                if(SrvSocketPSL.Client_PSL[i].Socket_PSL != INVALID_SOCKET) 
             {
closesocket(SrvSocketPSL.Client_PSL[i].Socket_PSL);
SrvSocketPSL.Client_PSL[i].Socket_PSL = INVALID_SOCKET;
             }

//设置为非阻塞
if(ioctlsocket(AcceptTcpIdFIONBIO(unsigned long*)&tmp) == SOCKET_ERROR)
{
                    shutdown(AcceptTcpId2);
closesocket(AcceptTcpId);
}
                else
                {
                    SrvSocketPSL.Client_PSL

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件     2028983  2013-03-20 17:59  南自以太网103规约.zip
     文件       71258  2019-01-02 10:56  PSL103Net.cpp

评论

共有 条评论