27.2023年10月11日10:03:07---小型化通信调试
2023年10月11日
10:03
通信调试总结:
1.已解决问题:
主从104连不上,是没有建立TCP?!!!抓包没有见主机发TCP请求报。
RE:1)管理机T3 公共单元数据库 板件类型需要选(SR1201-10串口的)(4个串口的放进去,主从连不上);
2)10串口的,对下12NET2,网络端口2404也需要设置,否则无法建立TCP.
问题:1)主站读录波目录,没有反应!
RE:
1)原因: 按录波名称召唤录波。 保留参数8需设置为1 或0xFF(自适应);
15.Ulog目录召唤失败:
RE:打开DeviceID.cfg失败,需求在C/cfg中放入此文件;
1.界面通信参数,IP设置后,内容显示错乱。之后192.168.253.3 就无法PING通!
1>.恢复默认后,IP变为了 222.111.112.3;
2>.192.168.253.3 可以正常Ping通;
3>.问题:界面网络1,2,3 和物理上网口对应关系;
RE:make distclean 重新编译后ok!
3.装置报软压板CRC自检异常;装置参数CRC自检异常;。
RE:重新编译后烧录还是报。所有的项目重新恢复默认后,又ok了!
7.界面无法需遥信;虚遥测ok ;(ok,程序编译问题)
9.装置虚出口无.虚信号也没有了:无保护和遥控虚出口,前版本软件有。
RE:make distclean后,重新编译了管理核,sync, 再恢复默认就可以了。
8.三遥上送测试:
10.遥控异常。接收到遥控命令后,通信断掉,通信重连。
2.第一个网口 222.111.112.3 ping不通, 第2个网口和第3个网口ok(2,3是扩展,192.168.253.3也可以)
RE:直连的网口 硬件有问题,换一个OK!
数据库中NET1 和NET2 和装置3个网口的对应关系
RE:按网络IP来区分。和物理网口没关系
13.直流量, 功率界面显示错误,不是功率相关项目;
RE:增加了GOOSE相关遥测,导致位置错误。
14.召唤录波相关问题:;
问题:1)主站读录波目录,没有反应! RE: 1)原因: 按录波名称召唤录波。 保留参数8需设置为1 或0xFF(自适应); 2)设置后,否认回复: 录波中 文件数为0;原因:() sprintf(cStrFileName,"/D/COMTRADE/wave.bin"); 原因:宏定义问题: //#ifdef CONST_COMM_DISTRICT_FJ #ifdef CONST_COMM_CLASS_DTU_C // 启动通信录波列表更新任务,需在保护测控装置通信任务之后调用 WaveCfgUpdataTaskStart(); #endif
问题:2)主从召唤录波,主机未更新录波数据!(相关流程,对着代码讲解;) RE:宏定义错误,导致任务没启动!//#ifdef CONST_COMM_DISTRICT_FJ // 启动对应端口录波列表维护任务 //#ifdef CONST_COMM_DISTRICT_FJ #ifdef CONST_COMM_CLASS_DTU_C if(g_twaveTaskFlg[byPortNo] == 0) Rly_ISA104WaveCallTaskStart(byPortNo); #endif //#endif return 0; |
T3 读固有参数否认回复
RE:OK!定值区号不为0时,否认回复(取消此判断)
管理单元用户界面信息显示格式和间隔单元不同;
Re:
1)间隔单元调用的是Display_128_64_NW, 在工程文件里配置: ZA90_0MCPU.pro
../Display_128_64_NW/Drv \
../Display_128_64_NW/Dsp \
../Display_128_64_NW/Pub \
../Display_128_64_NW/Metafile \
../../3rdparty/mxml
2)管理机调阅的是: 在工程文件里配置: ZA90_0MCPU.pro
../Display_128_64/Drv \
../Display_128_64/Dsp \
../Display_128_64/Pub \
../Display_128_64/Metafile \
../../3rdparty/mxml
9.自测问题回归及总结;
1.哪些是管理核,哪些是保护核,哪些是2核都有
MobaXterm-->SSH 如何自动保存log???
2.CONST_COMM_DISTRICT_FJ 宏定义的作用:
#ifdef CONST_COMM_DISTRICT_FJ
#ifdef CONST_COMM_CLASS_DTU_C
定义福建:啥功能???
疑问:
1)界面网络1,2,3 和物理上网口对应关系;
2)小熊猫抓包;
H:\000.CODE\00.PlatFormCode\02_DTDS_V3\DASCTT\bin\Debug\配网模拟主站.exe
待完成、待解决问题:
南网定值按保护投退隐藏功能;
南网控制字设置为0,1,2功能模块更改;
1)定值投退类型, 改为数值型;---定值从投退里 到了数值;
2)定值类型:功能模块显示;
3)总投退表:函数,加原数,
CN_RLYConTab
就地FA按南网规范增加相关信号或事件;
通信模板自动生成功能增加。
11.虚拟及104通信 遥控合无出口;---攀龙已改,需核实;
12.把手远方情况下,不允许整定定值,此功能需取消!
RE:南网版本不需要此功能,配宏定义即可。---更改后不生效
#define CN_VERSION_NW ( 1 ) // 1:南网版本;0:国网版本
6.从机会间隔时间发大量变位突发遥信
7.间隔单元1A/5A关联 设置---代码更改;---xiegaoh 更改测试;
管理机通信点灯,遥信上送;
1)主机里8-10个通信正常 ;
2)合成遥信:主从通信故障()
串口调试;
待完成工作:
主机管理核一直打印:---------临时注释掉打印;什么影响?
Sendto Error!. 查看是UDP发显示报文?!!!
有疑问 和待研究:
18.小型化 如何查看主从是否通信上,如何抓报文?
1>.SSH里有打印,如主机和主站连接,outset:
root@SR1236:/C# outset
root@SR1236:/C# 23-10-19 09:02:47 285
CloseOldConnect finished nTcpNo=1,Fd:-1,iReadTaskID=-1668287408,iSendTaskID=-1659898800,wline=714
23-10-19 09:02:47 285
Exit Read Task From Connection 1,Fd:-1
23-10-19 09:02:47 296
Exit Send Task From Connection 1,Fd:-1
accept client: 192.168.1.200
23-10-19 09:02:49 163
Server[1]:Connected by 192.168.1.200:2404,newFd:17
23-10-19 09:02:49 163
Start Read Task From Connection 1,Fd:17
23-10-19 09:02:49 164
Start Send Task From Connection 1,Fd:17
19.小型化T3 如何查看路由信息表,常用指令有哪些?
20.小型化串口打印;
4.通过定值修改软压板功能;
5.下通信配置,管理核outset,会不断打印:open eth1/carrier error!
T3远程运维功能测试:
T3小型化定值调阅测试;
T3小型化录波上送测试;
1)几个间隔录波目录怎么命名?
2)间隔单元有录波是否有遥信,主机主动召唤。主站下发目录时是不是直接召唤主机,不用理会从机;
3)主从录波调阅上送;
4)主站和主机录波调阅;
问题:
1)当前读录波目录,直接不回复,模拟主站通信超时;
T3 读固有参数否认回复 固有参数的定值区号?!!! |
T3小型化历史文件上送测试
问题3.小型化读定值不回复(管理机): 2023-10-30 17:37:36.763 SEND: (158) 68 9C 04 00 0E 00 CA 30 06 00 01 00 01 00 01 50 00 02 50 00 03 50 00 04 50 00 05 50 00 06 50 00 07 50 00 08 50 00 09 50 00 0A 50 00 0B 50 00 0C 50 00 0D 50 00 0E 50 00 0F 50 00 10 50 00 11 50 00 12 50 00 13 50 00 14 50 00 15 50 00 16 50 00 17 50 00 18 50 00 19 50 00 1A 50 00 1B 50 00 1C 50 00 1D 50 00 1E 50 00 1F 50 00 20 50 00 21 50 00 22 50 00 23 50 00 24 50 00 25 50 00 26 50 00 27 50 00 28 50 00 29 50 00 2A 50 00 2B 50 00 2C 50 00 2D 50 00 2E 50 00 2F 50 00 30 50 00 --Rtu_IEC104_CheckMsg--OK--- --rtu104--Rtu_IEC104_Proc--wRetVal=00- byBase=8,bySG=1,byJudgeSetZone=0 RTU_ReadSet line=848 --rtu104--Rtu_IEC104_Proc--enterreadset--retVal=0 --rtu104--Rtu_IEC104_Proc--wRetVal=00- byBase=8,bySG=1,byJudgeSetZone=0 RTU_ReadSet line=848 --rtu104--Rtu_IEC104_Proc--enterreadset--retVal=0 23-10-30 20:29:54 957 读定值代码走读: RTU_ReadSet ^^^^^^^^^^^^^^^^^ //以下3个都调用了 RTU_ReadSet接口;3个分别用于什么情况?! WORD Rtu_IEC104_Proc_C_RS_NA_1( BYTE byHostNo, BYTE byFlagCH, BYTE byInLen, BYTE *pbyMsg104 ) WORD Rtu_IEC104_Proc_C_RS_NA_1_JS( BYTE byHostNo, BYTE byFlagCH, BYTE byInLen, BYTE *pbyMsg104 ) //ASDU=108 0X6C 南网规范; ok! WORD Rtu_IEC104_Proc108_ReadPara( BYTE byHostNo, BYTE byFlagCH, BYTE *pbyMsg104 ) =================== #ifdef CONST_COMM_DISTRICT_FJ #ifdef CONST_COMM_CLASS_DTU_C wRetVal = Rtu_IEC104_Proc_C_RS_NA_1_JS( byHostNo, CONST_104_SOCK_DATA,byMsgLen, &pbyMsg104[CONST_104_LEN_APCI] ); //====================== 读定值,江苏和国网的区别?? //============ // 定值分拣信息体地址--江苏使用,分拣标准《配电自动化系统应用DL/T634.5104-2009实施细则(试行)》 Fun_BranchParaInfoAddr_JS byInfoAddrGroup[dwLoop3].byParaInfoAddr[0],
//定值调阅:报文回复: void Rtu_IEC104_Send( BYTE byHostNo ) if( 0==wMsgLen ) {
} //???加了打印就ok了…. 问题1:定值调阅,主机转发的ASDU地址为0; 问题2:调阅定值,主机下发(ASDU地址为0),从机否认回复主机后,主机没有否认回复主站! 问题3.主机下发(定值调阅和遥控都没有下发下去!!!),没收到从机回复(小熊猫 下发,实际是否下发?) Re:主机下发ok,从机定值调阅需调试。 WORD Rly_IEC104_Send_ParaOpt( WORD wUnitID,BYTE *pbyMsgBuf,BYTE *pbyMsgSYS ) { // 更换为子站地址 tWB2.wWord = ptUnitVal->ptUnitSet->wCommAddr; // wStationNo pbyMsgBuf[4] = tWB2.cByte[CN_BYTE_LO]; // 公共地址.1 pbyMsgBuf[5] = tWB2.cByte[CN_BYTE_HI]; // 公共地址.2 } WORD Comm_Get_UnitCommAddr( WORD wUnitID ) {
} |
|
问题“1.管理机/wave.bin 文件数量的更新;
//wave.bin 1.文件数量管理 创建/写入/读取相应目录下文件数量 BOOL FileNumManager(BYTE byHostNo, BYTE byFileType, BYTE byOperateType,WORD *pbyFileNum) { case EN_CATALOG_TYPE_WAVE: sprintf(cStrFileName,"/D/COMTRADE/wave.bin"); byMaxFileNum = CN_MAXNUM_WAVEFILE; break;
} //写 wave.bin 文件;EN_CATALOG_TYPE_WAVE // 启动WaveComtrade任务(保护板录波) WaveComtrade_StartTask SINT32 WaveComtradeMain( void )
void WaveComtrade(const tagWaveCtrad *ptApp, INT32 iTaskSN) { BOOL WaveCtrad_RefCfgFile_New(const tagWaveCtrad *ptApp, char *pcFileName) { bFullNum = FileNumManager(0, EN_CATALOG_TYPE_WAVE, EN_FILE_OPERATE_RW,&byFileNum); }
}
//对下104….. Rly_IEC104_Proc_F_FR_NA_1 //接收文件传输.. __WriteWaveFile_Transmit //读文件接口 __ReadWriteWaveFile_Interface //获取目录信息: __GetCatalogInfo { else if( 0 == strcmp(ptRecvFileTranCtrl->cCatalogName,byCatalogName[7]) ) bFullNum = FileNumManager(0, EN_CATALOG_TYPE_WAVE, EN_FILE_OPERATE_R,&byFileNum); __GetCatalogInfo printf("\n---RWFILE---2.callcatalogfail ==%d\n",byRlt); } //修改FJ宏定义注释掉后,录波文件主站可以调上来(没有更新wave.bin) //录波 文件发送数: //获取录波目录:录波文件数: 1. __GetCatalogInfo { case EN_CATALOG_TYPE_WAVE: bFullNum = FileNumManager(0, EN_CATALOG_TYPE_WAVE, EN_FILE_OPERATE_R,&byFileNum); ptSendFileTranCtrl->byWAVEFileCount = (bFullNum == TRUE)?(CN_MAXNUM_WAVEFILE*2):(byFileNum*2);//; byDescResultFlag = __GetData_WaveCatalog( byCallFlag,ptSendFileTranCtrl); } 2. BYTE __GetData_WaveCatalog( BYTE byCallFlag,tagSendFileTranCtrl *ptSendFileTranCtrl )
{ ptSendFileTranCtrl->byWAVEFileCount = byCnt; } else//召唤时间段内文件 1) //主站发送:-------召唤录波目录: 2023-10-27 14:00:27.139 SEND: (45) 68 2B 06 00 16 00 D2 01 05 00 01 00 00 00 00 //传输原因:05:请求/被请求 02//附件数据包类型:2:文件传输;其它:备用; //数据包: 01 //1:读目录; 00 00 00 00 //目录ID 08//目录长度 43 4F 4D 54 52 41 44 45//目录名 00//召唤标志:0:目录下所有文件;1:满足时间搜索; 00 00 00 00 00 00 00 //查询起始时间 00 00 00 00 00 00 00 //查询终止时间 g_uiRly104=1; g_uiRly104=0; g_uiRly104 0 --Rtu_IEC104_CheckMsg--OK--- --rtu104--Rtu_IEC104_Proc--wRetVal=00- --rtu104--Rtu_IEC104_Proc--enterfiletranf- --rwfile---Rtu_IEC104_Proc_F_FR_NA_1-▒▒▒ղ▒▒▒▒ʶ= 01- --rwfile-__ReadCatalog-▒▒▒▒-__GetCatalotOrFileName ptSendFileTranCtrl=0x7565a6c --rwfile-__ReadCatalog-exit-__GetCatalotOrFileName cCatalogName = COMTRADE -- stringbuf=COMTRADE --rwfile-▒▒ѯ▒▒ʼʱ▒▒:(ʮ▒▒▒▒▒▒▒) 00 00 00 00 00 00 00 --rwfile-▒▒ѯ▒▒ֹʱ▒▒:(ʮ▒▒▒▒▒▒) 00 00 00 00 00 00 00 --rwfile---__ReadWriteFile_Interface-▒▒▒ղ▒▒▒▒ʶ01-▒▒▒Ͳ▒▒▒▒ʶ=00 ---RWFILE---Ŀ¼ID▒▒▒▒= 0 --rwfile-__ReadCatalog-exit-____ReadCatalog_Interface ok --rwfile---Rtu_IEC104_Proc_F_FR_NA_1-▒▒catalogĿ¼▒▒ȷ- --rtu104--Rtu_IEC104_Proc--exitfiletranf-wRetVal=00
|
录波上送: 1.主从rly104 录波目录上送:ftpOpen(从机有录波生成,发通知,主从ftp打开从机文件,写到自己的Unitx-wave.cfg文件中) 1)从机生成录波后,主机 Unit1-wave.cfg 自动更新了从机的录波目录;--没有及时更新!--或者没有更新,重启后更新 //0xD2, 210:有文件传输; // 报文解析处理函数 void Rly_IEC104_ProcParse( BYTE byPortNo,WORD wMonID,BYTE byConnIdx,BYTE *pbyMsg104 ) switch( pbyMsg104[CONST_104_LEN_APCI] ) case ENUM_104_M_ME_NC: // 13:测量值, 短浮点数 case ENUM_104_F_WAVE: //0xd7: 215: 录波目录召唤请求 BYTE Rly_IEC104_Proc_WaveCall( BYTE byPortNo,WORD wUnitID,BYTE byConnIdx ) { dwCallRlt =ftpopen( "/D/COMTRADE", bysrcName, strFileDir , byUnitIP ) ;
//ftp打开从机(服务器),wave.cfg文件,//从机的 //-->. 然后写到自己的文件里 Unit1-wave.cfg;//主机的;(ptUnitSet->wCommAddr)
//主机:写完录波目录后,置录波需要召唤标志; tUnitWaveCall->wReadFlg = CONST_STATUS_FILE_CALL; } //从机,录波写到D盘时,也置位需要召唤录波 BYTE __Generate_WAVEFILE_Out( BYTE byMonID, tagRecvFileTranCtrl *ptRecvFileTranCtrl ,tagSendFileTranCtrl *ptSendFileTranCtrl ) { tUnitWaveCall->wReadFlg = CONST_STATUS_FILE_CALL;
} //1.主从报文: DR(23-10-25 12:09:40.203)68 04 83 00 00 00 //从机生成录波,从机发送:录波目前召唤请求: DR(23-10-25 12:09:54.143)68 10 72 00 10 00 d7 00 03 00 01 00 6b 00 00 00 6c 00 DS(23-10-25 12:09:54.143)68 04 01 00 74 00 2.主从Rly104 录波文件的上送: //主从发送文件召唤: // 发送函数 void Rly_IEC104_Send( BYTE byPortNo, WORD wUnitID ) int Rly_IEC104_SendFileCall( WORD wUnitID ) //104规约的方式召唤 { // 文件召唤状态不处于下发召唤时返回 if(tUnitWaveCall->wReadFlg != CONST_STATUS_FILE_CALLDOWN) return 0; // 获取待读取文件名 memcpy(&bySendbuf[wMsgLen],tUnitWaveCall->iSrcName,CN_WAVEFILE_NAME_LEN);
} //录波列表维护任务:
加了打印又可以可
|
// 数据通道发送函数 void Rtu_IEC104_Send( BYTE byHostNo ) // 网卡eth1的link变化标志获取 g_dwLinkStatus[ptHostVal->byCommPort]= Get_Eth1_LinkStatus(); |
遥信: ok! 1>.遥信总召上送ok!(采用的表内的INF号); 2>.突发:突发可以上送,但序号是错的! 序号为:0x46(6), 0x47(7),0x4c (12), 0x54 (20); 应该在表中:6-- INF-154合位,7--INF-155分位; 12--- 数据库中, 设置为了0x41, 因此,错位了0x40个! Ok!(真双点的起始位置,0x41,影响到了单点的,单点排在帧双点后面) // 保留参数6 BYTE byBaseOBJ_TDP[2]; // 真双点信息体地址基准 |
遥测: 1>.虚电流为10A,且不上送;实际加量也不上送; RE:OK!拉点拉错了,拉成装置4了,应该是主机。 2>.需遥测10A, 浮点上送为0.061A; (一次值上送???二次值上送??) Ia =1, 上送 0.061; Ua=100,上送0.61; RE: 浮点上送:本机遥测(满刻度需要设置为0, 内部算标度,归一化转浮点上送;) 2.数据库模板中的,转发表量程设置为0 ;// 1、fYcScale=装置模板中的“标度”*“转发表量程”; |
遥测显示错位代码走读:
void MenuProc_See_YC(BYTE byScreen)
wAcPos = Get_RealData_Index(g_tMenuCtrl.ptCurrent->byAttrib,wBaseNo );
WORD Get_RealData_Index( WORD wTabType, WORD wIndex)
switch(wTabType)
case EN_MEA_DC:
wRealIndex = g_wDCIndexTab[wIndex];
break;
10.遥控异常。接收到遥控命令后,通信断掉,通信重连。 RE:1)重连是模拟主站发出的。用串口组手,25s没回应,终端否认回复! ----原因:数据库不对。模拟主站直连间隔单元,配置了下挂装置的遥控。 ---遥控分闸ok!, 遥控合闸没有出口。 2)遥控文件记录ok,遥控选择失败,装置没有记录。 3)原因:数据库不对,配了 --rtu104--Rtu_IEC104_Proc--wRetVal=00- --Rtu_IEC104_CheckMsg--OK--- --rtu104--Rtu_IEC104_Proc--wRetVal=00- ----Rtu_IEC104_Proc045_Control----wMsgLenAll=16 byType:2d byType:2d 23-10-16 15:58:42 693 Read Task Error nRead<=0, nTcpNo=1,ErroNo:0x0 //1.遥控报文接收处理: WORD Rtu_IEC104_Proc045_Control( BYTE byHostNo, BYTE *pbyMsg104 ) { //报文合法性的判断: 1>.未知的类型标识(44),未知的传送原因,未知的ASDU地址,未知的信息对象地址
//接收到遥控报文,启动25s计时器,没有清则否定回复主站。 Time_TimerBStart( &ptCmdCtrl->tCmdTimer, CONST_TIMEOUT_RTU_CMD, ENUM_TIMERB_TYPE_SECOND );
bRetVal = Fun_ReportSaveCmdDown( byHostNo, g_tPosiYK[wIndexDB].wUnitID, bySysBuf, 0x0C ); Event_SaveRecordYK( byHostNo, byParam,wIndexYK, bySysBuf ); // wObject
} //2.遥控报文回复: WORD Rtu_IEC104_Send_Response( BYTE byHostNo, BYTE byFlagCH ) { //1.遥控命令回复后,清遥控超时计时器 if( bRespond ) // 响应已发送完毕 { Time_TimerBStop( &ptCmdCtrl->tCmdTimer );
} //2.25s超时后没有回复,则回复 备份报文及 0x47; else if( Time_TimerBCheck( &ptCmdCtrl->tCmdTimer) ) { wSendLen = Rtu_IEC104_Proc000_FrameError( byHostNo, CONST_104_SOCK_DATA, 0x47, pbyBakMsg ); Time_TimerBStop( &ptCmdCtrl->tCmdTimer );
} }
|
遥测功率量 显示端子错误: // 1.函数功能:查找某类型实时数据数目 WORD Get_RealData_Num( WORD wTabType) { case EN_MEA_POWER_2: wAnaNum = CN_P_INDEX_NUM; break; }
|
//把手远方情况下,不能修改定值: UINT32 DW_VERSION_NW; // 南网版本定义:1:南网版本;0:国网版本
#define M_CN_VERSION_NW ( DW_VERSION_NW ) // 南网版本定义:1:南网版本;0:国网版本
//函数功能:预设中元件配置菜单的执行函数 void MenuProc_Cfg_Soft( BYTE byScreen, BYTE byType ) { // 南网版本就地修改软压板不受远控压板影响 <<- by huangwt 2018.3.1 if( !M_CN_VERSION_NW )
}
//系统常量配对转换; A-->B;----未生效,此变量没有同步过来! const tagCNVar g_tCNVarTab[ ] = { { CN_VERSION_NW, &DW_VERSION_NW }, // #define M_CN_VERSION_NW // 南网版本定义:1:南网版本;0:国网版本 } // 南网版本定义 #define CN_VERSION_NW ( 1 ) // 1:南网版本;0:国网版本
|
开出调试无出口: //开出调试 void MenuProc_Dbg_Relay( BYTE byScreen ) { if((EN_OUTPUT_TRIP == byAttrib)||(EN_OUTPUT_RLAY== byAttrib)) // 动作出口调试 } |
小型化 主从挂接测试: 1.对上参数设置: 2.对下参数设置: |
Rly104:
//先要建立TCP?!
//104 任务主函数
void Rly_IEC104_MonProc( BYTE byPortNo, WORD wUnitID, BYTE byUnitSeri)
//Rly104发送;
Rly_IEC104_Send( byPortNo,wUnitID );
// 任务主函数 int Rly_IEC104Main( BYTE byPortNo ) Rly_IEC104_Send_HostCmd( byPortNo ); //转发主站遥控、定值设定命令! for( cLoop=0; cLoop<byNumUnit; cLoop++ ) { wUnitID = ptPortSet->wUnitID[cLoop];
} |
int TcpClientStart( short nTcpNo )
if( FALSE ==TcpGetSockState(iTcpSockNo) ) continue; // 连接中断
// 报文接收处理函数
void Rly_IEC104_Proc( BYTE byPortNo,WORD wUnitID )
// 报文解析处理函数
void Rly_IEC104_ProcParse( BYTE byPortNo,WORD wMonID,BYTE byConnIdx,BYTE *pbyMsg104 )
{
void Rly_IEC104_Proc_FrameU( WORD wUnitID,BYTE byConnIdx,BYTE *pbyMsg104 )
// 发送S帧或测试帧
WORD Rly_IEC104_SendSU( BYTE byPortNo, WORD wUnitID )
for( byConnIdx=0; byConnIdx<CONST_UINT_EQ_MAX_NUM; byConnIdx++ )
{// 检查所有的连接
ptConnCtrl = &pt104UnitVal->tConnCtrl[byConnIdx];
iTcpSockNo = ptConnCtrl->iTcpSockNo;
if( iTcpSockNo <0 ) continue; // 连接无效
if( FALSE ==TcpGetSockState(iTcpSockNo) )
{
ptConnCtrl->byLinkStatus = 3;
ptConnCtrl->wNS = 0; // 连接中断,发送记数清零
ptConnCtrl->wNR = 0;
continue;
}
//获取TCP连接状态:
int TcpGetSockState( short nTcpNo )
// 装置初始化函数 int Rly_IEC104_UnitInit( BYTE byPortNo, WORD wUnitID ) {
iTcpSockNo = TcpAddConnection( byUnitIP, ptParamNet->byIP, ptParamNet->wNetPort, ENUM_MODE_NET_CLIENT, (PFUNC)Rly_IEC104_MsgRecv );
TcpSetConnPara( iTcpSockNo, CONST_VOL_BUF_MSG*16, CONST_VOL_BUF_SEND, (BYTE*)0, CONST_104_CONNECTTIMEOUT, 10 );
TcpSetConnCheckEFun( iTcpSockNo, Rly_IEC104_CheckTCP, (void*)&ptConnCtrl->bUsed );
} |
RLY104 TCP客户端任务: int comm_main( void ) // 函数功能:启动TCP连接监视任务 void TcpStartNet( void ) // 函数功能:检查客户端是否被关闭,重启客户端连接 void TcpMonTask( void ) //启动客户端: int TcpClientStart( short nTcpNo )
//打印信息: struct MTcpConn { //---------this if for tcp portnum user---------- char ServerIP[20]; // IP地址字符串 char ClientIP[20]; // IP地址字符串 short nServerPort; int SockType; // 0=Server Type; 1=Client Type
//SockType 获得: // nPort 服务端口 // nType 运行模式,0作为服务器,1作为客户端 short TcpAddConnection( BYTE* ServerIP, BYTE* ClientIP, short nPort, int nType, int ( *ReadFunc )( ), BYTE byDstSlot ) { pConn->SockType = nType;
}
|
int TcpClientStart( short nTcpNo )
{
if( connect( sFd, (struct sockaddr*)&serverAddr, sockAddrSize ) == ERROR )
{
//连接错误!---------原因是什么?!
printf( "Connect to %s:%d Error,ErroNo:0x%x\n", pConn->ServerIP, pConn->nServerPort, errnoGet( ) );
}
}
何工,您好,加密模块问题请教下您:
有关内置/外置 加密模块的:
1)23年深瑞配套珠海沃顿的,已经生产供货20套(软件是上批验收定版的,都没问题),目前是外置的加密模块,不能更换内置的;
2)内置的新产品开发中,本次来不及供货。
目前功能和使用上都没问题,看本次是否可以还是外置?后续我们更换产品规格,新产品再内置。