首页 理论教育通信程序主要函数概述

通信程序主要函数概述

【摘要】:3)DPN_APPL_LIMIT_ERROR:超出多用户操作中DP应用程序的最大允许数目。调用dpn_init()函数时,refer-ence结构体元素的入口与统一CP上注册的其他DP应用程序的dpn_init()函数不匹配。·没有正确安装CP5611网络接口卡的驱动程序。通过该函数可以将上位机的控制命令发到指定的DP从站,完成对从站的控制操作。

1.定义变量

2.初始化函数dpn_init(&dpn_ptr)

编写上位机程序时,在对CP5611/5613进行访问操作之前必须调用初始化函数。使用初始化函数之前,必须对该函数做一些初始化操作,其他函数使用前也必须先对变量初始化。

如果有错误,可以参考初始化函数的返回值来解决。

interror=dpn_ptr.error_code有以下几种错误情况:

各错误代码的含义如下:

1)DPN_NO_ERROR:无错误。返回值是有效的,并且必须进行判断。

2)DPN_ACCESS_ERROR:调用的DP应用程序无权写该函数或从站。

3)DPN_APPL_LIMIT_ERROR:超出多用户操作中DP应用程序的最大允许数目。

4)DPN_CENTRAL_ERROR:函数必须且仅能由中央DP应用程序调用。

5)DPN_CLOSE_ERROR:关闭DP应用程序出错。

6)DPN_LENGTH_ERROR:dpn_interface、dpn_interface_s和dpn_interface_s_ext结构体的元素“length”超出允许数值范围,或者dpn_out_slv、dpn_out_slv_m和dpn_out_slv_m_ext的数据长度与配置值不匹配。

7)DPN_MEM_BOARD_ERROR:CP上没有足够的空闲内存。

8)DPN_MEM_HOST_ERROR:主站上没有足够的空闲内存。

9)DPN_MODE_ERROR:当前无法执行函数调用。调用dpn_set_mode()函数时发生该错误,可能是因为在改变操作方式时试图跳过一个状态。

10)DPN_NO_DBASE_ERROR:DP数据库无入口或入口错误。

11)DPN_OPEN_ERROR:DP应用程序注册错误(例如,未下载驱动,未插入CP等)。

12)DPN_RECEIVE_ERROR:CP对接口驱动的确认错误。

13)DPN_REFERENCE_DIFF_ERROR:多用户方式错误。调用dpn_init()函数时,refer-ence结构体元素的入口与统一CP上注册的其他DP应用程序的dpn_init()函数不匹配。

14)DPN_REFERENCE_ERROR:dpn_interface、dpn_interface_m和dpn_ifc_m_ext结构体的元素reference无效。

15)DPN_SEND_ERROR:接口驱动对CP的调用错误。

16)DPN_SLV_STATE_ERROR:dpn_interface结构体的slv_state元素无效。

17)DPN_STAT_NR_ERROR:dpn_interface、dpn_interface_s和dpn_interface_s_ext结构体的元素stat_nr无效,或者数据库中不存在从站。

18)DPN_USER_DATA_ERROR:dpn_interface结构体的一个或多个user_data数组无效。

19)DPN_WRONG_BOARD_ERROR:dpn_interface结构体的reference.board元素无效。输入有效值(1~4)以匹配安装CP(CP_L2_1对应1,CP_L2_2对应2)。

20)DPN_SYS_STATE_ERROR:dpn_interface结构体的sys_state元素无效。

21)DPN_GLB_CTRL_ERROR:调用dpn_global_crtl()函数时控制命令的数值范围非法。

22)DPN_BOARD_ERROR:CP固件错误(例如,第二层无法正常启动)。

23)DPN_WD_EXPIRED_ERROR:DP应用程序的运行监控信号检测到超时,从而导致任务无法执行。

24)DPN_OPEN_LICENSE_ERROR:无法打开授权。

25)DPN_LOAD_L2_VXD_ERROR:无法装载SOFTNET CP需要的第二层驱动。

26)DPN_OPEN_L2_VXD_ERROR:无法打开SOFTNET CP需要的第二层驱动。该错误在第二层驱动启动时显示。可能的原因:总线短路,软入口已经使用,内部AMPRO2错误,信息服务器(SIM9SYNC)未运行。

只有当初始化正确后,才能进行下一步操作。如果出现错误,可能原因有以下几种:

·已经调用了初始化函数,并且已经成功,但没有调用复位函数,又一次调用了初始化函数。

·对dpn_ptr.user_data[j]的值超出了以下3种状态设置:DPN_SLV_WRITE_READ、DPN_SLV_READ或DPN_SLV_NO_ACCESS。(www.chuimin.cn)

·设置了DPN_SLV_WRITE_READ或DPN_SLV_READ属性的模块,但没有在配置软件中进行正确配置。

·dpn_ptr.reference.board_select和dpn_ptr.reference.access属性设置不正确。

·Set PG/PC设置不正确,也不能初始化成功。

·没有正确安装CP5611网络接口卡的驱动程序。

·在初始化前没有将配置好的参数文件正确下载到系统中。

3.数据输出函数dpn_out_slv(&ptr_ptr)

数据输出函数将有效数据传送到DP从站。通过该函数可以将上位机的控制命令发到指定的DP从站,完成对从站的控制操作。例如,下面程序段是向地址为m_ptradd的DP从站发送了8个字节的有效数据。

4.数据读入函数dpn_in_slv(&dpn_ptr)

数据输入函数读入DP从站的有效数据。通过该函数可以将DP从站的数据读入到上位机,完成对从站的监控操作。例如,下面程序段是读入地址为m_ptradd的DP从站8个字节的有效数据。

返回的从站状态类型代码的含义如下:

·DPN_SLV_STAT_OFFLINE:DP从站不在数据传输段(CP启动)。

·DPN_SLV_STAT_NOT_ACTIVE:从站在本地数据库中未激活。

·DPN_SLV_STAT_READY:DP从站处于数据传输段。

·DPN_SLV_STAT_READY_DIAG:DP从站处于数据传输段并且有诊断数据存在。

·DPN_SLV_STAT_NOT_READY:DP从站不在数据传输段。

·DPN_SLV_STAT_NOT_READY_DIAG:DP从站不在数据传输段并且有诊断数据存在。

返回的系统状态代码的含义如下:

1)DPN_SYS_OFFLINE(Offline模式):停止与所有主站和DP从站的通信,FDL从令牌环中退出。用户接口等待一个启动信号。

2)DPN_SYS_STOP(Stop模式):总线参数集装入FDL,FDL为活动状态,能处理与2类主站的通信,不能轮询DP从站。

3)DPN_SYS_CLEAR(Clear模式):对从站设置参数,检查通信接口配置并读取这些DP从站用户的数据。输出数据将被忽略。

4)DPN_SYS_OPERATE(Operate模式):1类主站与指定的DP从站进行用户数据交换。来自DP从站的输入数据传送给用户,用户的输出数据传送给DP从站。用户接口退出Operate模式时,主站将通过功能Global_Control清除所有DP从站的输出。

初始化函数的返回值没有错误后,可以进行其他函数的操作。但有时并不能达到用户期望的结果,比如数据不能读取到上位机,或者上位机的数据不能正确下载到从站中。初始化正确但是不能正常通信的可能原因有以下几种:

·从站没有工作。

·从站电源指示灯亮,但是电源电压低,微处理器没有工作。

·通信电缆没有连接好。

·通信电缆太长或通信速度太快。

·没有正确设置终端电阻

·地址设置不一致。

5.读取总线参数函数dpn_read_bus_par(&dpn_ptr)

返回值,user_data[ ]为总线参数,总线参数的结构如下所示。

6.复位函数dpn_reset(&dpn_ptr)

退出时程序要复位,程序代码如下所示。

程序正确复位后error_code=0。