驱动开发手册_修改.doc_第1页
驱动开发手册_修改.doc_第2页
驱动开发手册_修改.doc_第3页
驱动开发手册_修改.doc_第4页
驱动开发手册_修改.doc_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Advantech Open eAutomation Boundless Integration ADVANTECH TECHNOLOGY INC. WebAccess Driver Development Tool (Draft) Created Date : 01/21/2002 Add Part 4:Debug 01/28/2002 Edit by Wang.wen 08/27/2007 Advantech Open eAutomation Boundless Integration2 ADVANTECH TECHNOLOGY INC. Part 0: Introduction Part 1: Configuration Functions Configuration function list: BwDevGetConversionInfo BwDevGetAddressInfo BwDevCheckAddress BwDevDoBlockAddress BwGetDeviceInfo BwDevdisplayInfo Part 2: Driver Runtime Arrange functions Runtime Arrange function list: BwParseAndExtract BwRead_SetupPacket BwRead_InitPacket BwRead_IfSamePacket BwRead_FormatPacket BwRead_EndPacket BwWrite_OneTagPacket Part 3: Driver Runtime Communication functions Runtime Communication function list: BwStartDriver BwSendDataorBwSendDataExt BwReceiveDataorBwReceiveDataExt BwGetRawData BwConvertDataExt BwFreePacket BwStopDriver Part 4: Debug WebAccess Driver Appendix : Important Data structures Advantech Open eAutomation Boundless Integration 3 ADVANTECH TECHNOLOGY INC. PART 0: Introduction Advantech Open eAutomation Boundless Integration4 ADVANTECH TECHNOLOGY INC. Introduction WebAccess 驱动程序开发环境。 编译器:Microsoft Visual C+ 6.0。 编译设定:请使用样例驱动程序的设定。 每个 WebAccess 的设备驱动程序至少由两个 DLL 组成。一个 DLL 用来配置,另一个 DLL 用 来安排组成通讯数据包和通讯 。配置 DLL 必须以“#”结束,如:“MODICON#.DLL”,另 一个运行 DLL 必须在配置 DLL 中被定义。 成功编译和生成 DLL 文件后,用户必须把配置 DLL 文件复制到 WebAccess 工程节点的 WebAccessnode 文件夹下,并且把运行 DLL 复制到 WebAccess 监控节点的 WebAccessnodeDriver 文件夹下。 Advantech Open eAutomation Boundless Integration 5 ADVANTECH TECHNOLOGY INC. PART 1: Configuration Function Advantech Open eAutomation Boundless Integration6 ADVANTECH TECHNOLOGY INC. BwDevGetConversionInfo BwDevGetConversionInfo 提供配置程序一个可用的转换代码列表,供用户选择。 BW_DEV_API int BwDevGetConversionInfo( int index, char *pConvName ); Parameters Index 保存取得的指向第 N 个转换代码的编号的变量,编号从 0 开始。 pConvName 一个指向保存转换代码名称字符串的存储区的指针。转换代码名称最大长度是 63 个字 符。 Return Value 如果该编号所指向的转换代码可用,则返回相应的转换代码编号,并把它的名称送进存 储区,否则返回值 0。 Remarks 这个转换代码告诉 WebAccess 核心程序把从设备取回的原始数据进行正确的转换。转 换代码的名称将在配置程序的参数和点属性页面的转换代码栏内列表显示。配置程序将从编号 0 开始,不断调用该函数,并且每次调用,编号加 1,直到返回 0,从而取得所有转换代码名和 编号。WebAccess 内部使用的转换代码定义的编号范围是 1-127,WebAccess 在系统内部转 换数据,在 Bwdevice.h.中进行定义。编号 128 及以上是用户自己定义的转换代码。核心程序 调用在运行 DLL 中定义的用户函数,在外部转换数据。用户只有在 1-127 中找不到合适的转换 代码的情况下才使用自己定义的转换代码。 Advantech Open eAutomation Boundless Integration 7 ADVANTECH TECHNOLOGY INC. conversion code BwDevGetAddressInfo BwDevGetAddressInfo 函数在配置程序中提供一个可用的地址模板信息列表供客户选择。 BW_DEV_API int BwDevGetAddressInfo ( int index, char *pAddress ); Parameters Index 保存指向第 N 个地址模板的编号的变量,编号从 0 开始。 pAddress 一个指向保存地址模板字符串的存储区的指针。地址模板最大长度是 127 个字符。 Return Value 如果该编号所指向的地址模板是可用的,则返回值为 1,并且把地址模板的字符串送进 “pAddress”所指向的地址存储区;否则返回值为 0。 Advantech Open eAutomation Boundless Integration8 ADVANTECH TECHNOLOGY INC. Remarks 地址模板将在配置程序的参数和点属性页面的地址模板栏内列表显示,以给用户提供一 个正确的地址格式。配置程序将从编号 0 开始,不断调用该函数,并且每次调用,编号加 1, 直到返回 0,从而取得所有地址模板。 Address Template BwDevCheckAddress BwDevCheckAddress 函数校验用户输入的地址串的合法性。在 WebAccess 中定义点,点击 “提交”按钮时,调用该函数。 BW_DEV_API int BwDevCheckAddress( char *pAddress, char *pMsg ); Parameters pAddress 一个指向存储用户输入的地址串的存储区的指针。 pMsg 一个指向存储区的指针,该存储区用来存储校验地址时,如有错误所返回的信息串。最 大长度为 127 个字符。 Return Value Advantech Open eAutomation Boundless Integration 9 ADVANTECH TECHNOLOGY INC. 如果存储用户输入的地址串的存储区保存的是有效地址,该函数返回值为 1,并且不启 用“pMsg”指向的信息存储区。如果地址串有错误,该函数返回值为 0,并且把错误信息送入 信息存储区。 Remarks 配置程序调用该函数去校验输入的地址串是否正确。如果地址串错误,则返回值为 0, 并且清空当前输入的地址串,让用户输入正确的地址串。 Validate this address BwDevDoBlockAddress BwDevDoBlockAddress 函数以区块点的参数的地址和偏移量来代替点的地址。 BW_DEV_API int BwDevDoBlockAddress( char *pAddress, char *pOffset ); Parameters pAddress 一个指向存储用户输入的地址串的存储区的指针。替换的地址串也放在这里。 pOffset Advantech Open eAutomation Boundless Integration10 ADVANTECH TECHNOLOGY INC. 一个指向保存偏移量字符串的存储区的指针。偏移量字符依靠设备决定。这个函数必须分析设 备的偏移量字符串的格式。如果设备不支持区块点,该区域将不会被使用。 Return Value 如果没有任何错误,返回值为 1;如果发现错误,返回值为 0。 Remarks 这个函数被配置程序调用来为所有区块点产生地址。如果设备不支持区块点,该函数将 不被执行。 Before applying offset Offset Individual parameters After applied offset Advantech Open eAutomation Boundless Integration 11 ADVANTECH TECHNOLOGY INC. New address BwGetDeviceInfo BwGetDeviceInfo 函数返回设备驱动程序的定义信息。 BW_DEV_API int BwGetDeviceInfo( struct BwDevices *pDevinfo ); Parameters pDevinfo 一个指向存储设备信息的存储区的指针。 需返回的信息: pDevinfo-ArrangeDll/part2 的文件名称,不带“.dll” pDevinfo-DriverDll/ part3 的文件名称,不带“.dll” pDevinfo-Name/设备的名称,将显示在设备列表中,必须与本文件名相同 pDevinfo-Device_No/设备编号 pDevinfo-Protocol_No/协议编号 pDevinfo-CommandBufferSize/发给设备的命令包的最大可能尺寸 pDevinfo-DataBufferSize/从设备返回的数据包的最大可能尺寸 pDevinfo-WorkingbufferSize/驱动程序需要的工作缓冲的尺寸 pDevinfo-CallBeforeFree /断开设备前是否需要注销数据包(是否需要调用 BwFreePacket 函数) pDevinfo-InterfaceType0/所支持的端口类型 1 pDevinfo-InterfaceType1/所支持的端口类型 2 pDevinfo-InterfaceType2/所支持的端口类型 3 Advantech Open eAutomation Boundless Integration12 ADVANTECH TECHNOLOGY INC. pDevinfo-InterfaceType3/所支持的端口类型 4 Return Value 总是返回值 1。 Remarks 该函数被下载程序调用,以便收集设备信息。 请参见附录中 BwDevices 结构体的说明。 BwDevDisplayInfo BwDevDisplayInfo 函数返回设备驱动程序的定义的附加信息。 BW_DEV_API int BwDevDisplayInfo( int xType, int index, char *disp_Type, char *disp_Name_id, char *default_value, char *check1, char *check2, char *resv, int size); Parameters xType : index:信息编号,从 1 到 6,14 为数值,5、6 为字符串 disp_Type:信息类型,在 BwDevice.H 文件中定义 dispName_id:该信息的名称 default_value:提供一个默认值 check1:该信息允许的最小值 check2:该信息允许的最大值 resv: size: Return Value 总是返回 0。 Remarks 该函数被配置程序调用,以便收集设备的附加信息。该函数信息类型放到 disp_Type 所 指向的内存中,把信息的名字放到 dispName_id 所指向的内存中,把默认值放到 Advantech Open eAutomation Boundless Integration 13 ADVANTECH TECHNOLOGY INC. default_value 所指向的内存中,有效的最小和最大值分别放到 check1 和 check2 所指向的内 存中,配置程序将根据这两个值判断用户输入的信息是否正确。配置程序从 index=16 调用 6 次,能够取得设备的 4 个数值信息和两个字符串信息。 Advantech Open eAutomation Boundless Integration14 ADVANTECH TECHNOLOGY INC. PART 2: Arrange Function Advantech Open eAutomation Boundless Integration 15 ADVANTECH TECHNOLOGY INC. Arrange State Diagram BwRead_SetupPacket BwRead_InitPacket More tag BwRead_IfSamePacketsame packet and more no more tag no more tag or more tagnot the same packet BwRead_FormatPacket no more tag BwRead_EndPacket 系统在开始时,安排规划好后,如果无新增加的点,将不再调用。 Advantech Open eAutomation Boundless Integration16 ADVANTECH TECHNOLOGY INC. BwParseAndExtract BwParseAndExtract 函数每个点调用一次,分析用户输入的地址,分类排序,从首位依次往 后排,为通讯程序准备信息。作用:分析点信息,决定点的排序方法。 BW_DEV_API int BwParseAndExtract ( struct point_data *pPoint ); Parameters pPoint 一个指向存储点信息的 point_data 结构体的指针。 Return Value ADDRESS_ALL_TEXT if the whole address field parsed as a text string ADDRESS_TEXT32 if the address field parsed as struct addr_text_32 ADDRESS_TEXT96 if the address field parsed as struct addr_text_96 ADDRESS_TEXT120 if the address field parsed as struct addr_text_120 根据地址串,返回相应地址格式的结构体类型。 Remarks 这个函数从 pP.text 中取得地址文本串,分析它,并且把分析信息存 入一个地址信息结构体中,然后返回使用的地址结构体类型。因此核心程序能够根据返回的类 型进行分类。分类规则如下: Type ADDRESS_ALL_TEXT : 按地址区域的字母次序分类排序。 Type ADDRESS_TEXT32 : 按从 .t32.data0到 .t32.data11的信息 分类排序。 Type ADDRESS_TEXT96 : 按从 .t96.data0到 .t96.data7的信息分 类排序点。 Type ADDRESS_TEXT120 : 按从 .t120.data0到 .t120.data1的信 息分类排序点。 在分类排序过程中,.t32.datai的优先级比 .t32.datai+1高。 在这个函数中,许多点的区域信息将被按照运行时的需要进行调整,如:启始位,长度和 pPoint-address 的转换等。 BwRead_SetupPacket Advantech Open eAutomation Boundless Integration 17 ADVANTECH TECHNOLOGY INC. BwRead_SetupPacket 准备在通讯开始或恢复时发送给设备的第一个准备数据包。与读写点 数据无关,只是一个通讯开始的信号。并且与设备有关,不是每个设备都需要。 BW_DEV_API int BwRead_SetupPacket( char *pWorkingBuffer, char *pCmdBuffer, int *data_size, struct device_data *pDevice); Parameters pWorkingBuffer 一个指向工作存储区的指针,该存储区能够被程序用来存储任何临时数据。该存储区的 尺寸在 BwGetDeviceInfo 函数中定义,在那里驱动程序在 device_data 结构体中设置 WorkingBufferSize 数值。 pCmdBuffer 一个指向存储被发送给设备的通讯包的存储区的指针。该存储区的尺寸在 BwGetDeviceInfo 函数中定义,在那里驱动程序在 device_data 结构体中设置 CommandBufferSize 数值。 data_size 如果需要,一个存储返回的数据尺寸的整型指针。 pDevice 一个指向 device_data 结构体的指针。 Return Value 返回值为命令的尺寸,也就是 pCmdBuffer 中存储的数据包的尺寸。如果不需要启动命 令,即不需要执行该函数,返回值为 0。 Remarks 只有当设备需要启动命令时,才执行该函数。在大多数情况下,都不需要启动命令。核 心程序为每个设备单独调用一次该函数。 BwRead_InitPacket BwRead_InitPacket 函数在定义通讯包中的第一个点时调用,把第一个点放到通讯数据包中, 并准备一个新的读点数据的请求数据包。 BW_DEV_API int BwRead_InitPacket ( Advantech Open eAutomation Boundless Integration18 ADVANTECH TECHNOLOGY INC. char *pWorkingBuffer, char *pCmdBuffer, struct point_data *pFirst, int *data_size, struct device_data *pDevice ); Parameters pWorkingBuffer 一个指向工作存储区的指针,该存储区能够被程序用来存储任何临时数据。该存储区的 尺寸在 BwGetDeviceInfo 函数中定义,在那里驱动程序在 device_data 结构体中设置 WorkingBufferSize 数值。 pCmdBuffer 一个指向存储被发送给设备的通讯数据包的存储区的指针。该存储区的尺寸在 BwGetDeviceInfo 函数中定义,在那里驱动程序在 device_data 结构体中设置 CommandBufferSize 数值。在核心程序调用 BwRead_FormatPacket 函数前,驱动程序可以 在该区存储任何局部的或临时的数据。 pFirst 一个指向存储第一个点的信息的 point_data 结构体的指针。(传进来第一个点的信息) data_size 一个存储返回的数据尺寸的整型指针。在核心程序调用 BwRead_FormatPacket 函数前, 驱动程序可以在该区存储任何临时的数据。 pDevice 一个指向 device_data 结构体的指针。 Return Value 返回这个点的原始数据在返回的数据包中的偏移量。 Remarks 当需要一个新的通讯数据包时,系统核心程序将调用该函数。核心程序把第一个点送入 这个新的数据包,并且为驱动程序准备所需信息,返回第一个点的原始数据在返回数据包中的 偏移量。所以核心程序和驱动程序能够根据这个偏移量取得原始数据,并进行转换处理。 BwRead_IfSamePacket BwRead_IfSamePacket 函数判断是否可以与第一个点放在同一个包中。如果可以,返回这个 点在包中的偏移量,以供核心程序提取数据时使用。 Advantech Open eAutomation Boundless Integration 19 ADVANTECH TECHNOLOGY INC. BW_DEV_API int BwRead_IfSamePacket ( char *pWorkingBuffer, char *pCmdBuffer, struct point_data *pFirst, struct point_data *pCurrent, int *data_size, struct device_data *pDevice ); Parameters pWorkingBuffer 一个指向工作存储区的指针,该存储区能够被程序用来存储任何临时数据。该存储区的 尺寸在 BwGetDeviceInfo 函数中定义,在那里驱动程序在 device_data 结构体中设置 WorkingBufferSize 数值。 pCmdBuffer 一个指向存储被发送给设备的通讯数据包的存储区的指针。该存储区的尺寸在 BwGetDeviceInfo 函数中定义,在那里驱动程序在 device_data 结构体中设置 CommandBufferSize 数值。在核心程序调用 BwRead_FormatPacket 函数前,驱动程序可以 在该区存储任何局部的或临时的数据。 pFirst 一个指向存储第一个点的信息的 point_data 结构体的指针。 pCurrent 一个指向保存当前点的信息的 point_data 结构体的指针。 data_size 一个用来保存返回的数据尺寸的整型指针。在核心程序调用 BwRead_FormatPacket 函 数前,驱动程序可以在该区存储任何临时的数据。 pDevice 一个指向 device_data 结构体的指针。 Return Value 如果当前点和第一个点的原始数据能够放在同一个通讯请求包中,则返回当前点的原始 数据在返回数据包中的偏移量。否则,返回值-1。偏移量以 byte 为单位计算,数据包中第一个 点的偏移量是 0,数据是根据“偏移量+起始位+长度”读取。 Remarks Advantech Open eAutomation Boundless Integration20 ADVANTECH TECHNOLOGY INC. 为了实现最大效率,驱动程序必须缩减通讯数据包的数量。在大多数情况下,这意味着 每个数据包实现通讯协议所允许的最大数据量。 在 BwParseAndExtract 函数的返回结果的基础上决定的分类序列中有新的点时,核心程 序将调用该函数。驱动程序必须决定是否能把两个点放到同一个通讯请求数据包中。如果能把 这两个点放到同一个通讯请求数据包中,那么该函数将返回当前点的原始数据的偏移量。核心 程序然后尝试取得下一个点,并再次调用该函数,看是否还能放到同一个数据包中,直到两个 点不能放到同一个数据包中。当两个点不能放到同一个数据包,核心程序调用 BwRead_FormatPacket 函数去格化一个新的数据包。 BwRead_FormatPacket BwRead_FormatPacket 函数在预备好的信息的基础上产生读取点的数据时的请求数据包。 BW_DEV_API int BwRead_FormatPacket ( char *pWorkingBuffer, char *pCmdBuffer, struct point_data *pFirst, struct point_data *pLast, int *data_size, int *cmd_size, struct device_data *pDevice, struct point_data *ppComm_pt, int count ); Parameters pWorkingBuffer 一个指向工作存储区的指针,该存储区能够被程序用来存储任何临时数据。该存储区的 尺寸在 BwGetDeviceInfo 函数中定义,在那里驱动程序在 device_data 结构体中设置 WorkingBufferSize 数值。 pCmdBuffer, 一个指向存储被发送给设备的通讯数据包的存储区的指针。该存储区的尺寸在 BwGetDeviceInfo 函数中定义,在那里驱动程序在 device_data 结构体中设置 CommandBufferSize 数值。通过这个函数,最后通讯数据包将被存入存储区。这个数据包在运 行通讯时,通过 BwSendData 函数被发送给设备。 pFirst 一个指向保存这个数据包中第一个点的信息的 point_data 结构体指针。 pLast 一个指向保存这个数据包中最后一个点的信息的 point_data 结构体指针。 Advantech Open eAutomation Boundless Integration 21 ADVANTECH TECHNOLOGY INC. data_size 一个保存返回的数据尺寸的整型指针。核心程序根据这个尺寸分配存储区来存储原始数 据。 cmd_size 一个保存存储在 cmd 存储区中的数据包的尺寸的整型指针。若该尺寸为 0,则该数据包 不会被发送。 pDevice 一个指向 device_data 结构体的指针。 ppComm_pt 一个指向 point_data 结构体指针数组的指针,该指针数组存储了这个通讯数据包中所有 的点的信息。 Count 保存这个通讯数据包中的点的数量的变量,为整型。 Return Value 如果成功生成数据包则返回值 1。返回任何小于 0 的值将使系统核心程序放弃该请求包 内数据的读取。 Remarks 核心程序调用该函数,驱动程序根据准备好的点信息产生通讯数据包。cmd 存储区可能 存在其它的发送数据。这其它的数据可能包括 BwSendData 函数能认可或处理的任何数据。如: Modicon 驱动在 cmd 存储区可能存放 RTU 和 ASCII 格式的数据包,并且由 BwSendData 决定 发送 RTU 或 ASCII 的数据包。 BwRead_EndPacket 当通讯驱动程序需要断开与设备的连接时,BwRead_EndPacket 函数产生一个断开连接命令 数据包。 BW_DEV_API int BwRead_EndPacket ( char *pWorkingBuffer, char *pCmdBuffer, int *cmd_size, int *data_size, struct point_data *pLast, struct device_data *pDevice ); Advantech Open eAutomation Boundless Integration22 ADVANTECH TECHNOLOGY INC. Parameters pWorkingBuffer 一个指向工作存储区的指针,该存储区能够被程序用来存储任何临时数据。该存储区的 尺寸在 BwGetDeviceInfo 函数中定义,在那里驱动程序在 device_data 结构体中设置 WorkingBufferSize 数值。 pCmdBuffer 一个指向存储被发送给设备的通讯数据包的存储区的指针。该存储区的尺寸在 BwGetDeviceInfo 函数中定义,在那里驱动程序在 device_data 结构体中设置 CommandBufferSize 数值。通过这个函数,如果需要断开命令,断开通讯数据包将被存入 pCmdBuffer 指向的存储区。这个数据包在运行通讯时,通过 BwSendData 函数被发送给设备。 大多数设备都不需要断开命令。当核心程序停止时,断开命令将被通讯函数 BwSendData 发送 给设备。 cmd_size 一个保存 cmd 存储区中断开命令数据包的尺寸的整型指针。如果不需要断开命令,则尺 寸为 0。 data_size 一个存储返回数据尺寸的整型指针。核心程序根据这个尺寸分配存储区和存储原始数据。 pLast 一个指向保存设备中最后一个点的信息的 point_data 结构体的指针。 pDevice 一个指向 device_data 结构体的指针。 Return Value 如果成功,返回值为 1。 Remarks 大多数设备不需要断开命令。只有当设备需要断开命令的时候才执行这个函数。若不需 要断开命令,则需设*cmd_size=0。 BwWrite_OneTagPacket 当用户需要修改设备中点的数据时,BwWrite_OneTagPacket 函数产生一个置值通讯数据包, 即写通讯数据包。 Advantech Open eAutomation Boundless Integration 23 ADVANTECH TECHNOLOGY INC. BW_DEV_API int BwWrite_OneTagPacket ( struct point_data *pPoint, union dl8 *value, char *data, char *pCmdBuffer, int *cmd_size, struct device_data *pDevice ); Parameters pPoint 一个指向 point_data 结构体的指针,该结构体保存被置新值的点信息。 value 一个指向 dl8 共用体的指针,该共用体保存被置的新置。对于文本量点,使用 value- pt;对于模拟量点,使用 value-dvalue;对于数字量点,使用 value-dvalue。 data 一个指向 data 存储区的指针,data 存储区保存的是在转换代码的基础上修改后的数据。 它可以产生一个整数或无符号数据格式,以减少驱动程序的工作量。 pCmdBuffer 一个指向存储被发送给设备的通讯数据包的存储区的指针。该存储区的尺寸在 BwGetDeviceInfo 函数中定义,在那里驱动程序在 device_data 结构体中设置 CommandBufferSize 数值。在这个函数中,设置数值的命令通讯数据包被存放在这个存储区。 cmd_size 一个保存 cmd 存储区中数据包的尺寸的整型指针。 pDevice 一个指向 device_data 结构体的指针。 Return Value 如果成功,返回值为 1。 Remarks 当用户通过监控或其他方法有一个修改点的数值的需求时,如果这个点属于这个设备, 那么这个函数将被调用。驱动程序必须从函数的参数中取得这个点的信息和新的数值,按格式 规划一个写命令数据包发送给设备。这个写命令数据包比读命令数据包有更高的优先级,因此 它将被通讯驱动程序在完成当前命令后发送。 Advantech Open eAutomation Boundless Integration24 ADVANTECH TECHNOLOGY INC. PART 3: Communication Function Advantech Open eAutomation Boundless Integration 25 ADVANTECH TECHNOLOGY INC. Communication State Diagram BwStartDriver Wait more packet to send BwSendData Receive_error BwReceiveData Receive_more no more tagReceive_ok BwGetRawData BwConvertDataExtnext tag Stop and free packet BwFreePacket more packets BwStopDriver Stop w/o Free packet Advantech Open eAutomation Boundless Integration26 ADVANTECH TECHNOLOGY INC. BwStartDriver BwStartDriver 函数初始化驱动程序通讯。 BW_DEV_API int BwStartDriver ( struct port_data *pdata, int *WorkingBuffer_size, int *ReceiveBuffer_size, int *delay_send ); Parameters pdata 一个指向 port_data 结构体的指针。驱动程序必须在这个结构体的信息的基础上进行初 始化。 WorkingBuffer_size 这个函数中保存设置的通讯工作存储区的尺寸的整型指针。存储区默认尺寸是 4096 字 节。 ReceiveBuffer_size 这个函数中保存设置的数据包接收存储区的尺寸的整型指针。存储区默认尺寸是 4096 字节。 delay_send 如果设备在发送完最后一个响应后,不能马上收到一个新的命令,“*delay_send”将被 置 1,因此核心程序将在几毫秒后,安排下一个周期扫描。 Return Value 如果驱动程序已经初始化成功,将返回数值 1。否则,返回负数。 Remarks 驱动程序必须在输入的 port_data 结构体的信息的基础上初始化通讯端口。有些设备支 持超过一种协议接口,那么该函数必须决定使用什么接口类型与设备相连,并进行正确的初始 化。如:Modicon 的设备支持 RS-232 串口,TCP/IP 以太网接口或 Modbus Plus 接口。这个 函数必须通过校验 pdata-type 来确认所使用的接口类型。接口类型的数值在 bwdevice.h.定义。 在 WebAccess 中,每个通讯端口在运行时都有一个相对独立的进程。在通讯部分的代 码必须保证进程安全。所有的全局变量的使用必须非常小心。在编译时,“multi-thread dll” 必须启用,并且 Struce member alignment 必须为 1Byte。 Advantech Open eAutomation Boundless Integration 27 ADVANTECH TECHNOLOGY INC. BwSendData BwSendData 函数用来发送一个通讯数据包到设备。 BW_DEV_API int BwSendData ( int*rdata, char*pCmdBuffer, int cmd_size, int*nstate, char*pWorkingBuffer, struct device_data *pDevice ); Parameters rdata 一个指向 pdata-rdata0的整型指针。这个整型数组保存在通讯过程中,被驱动程序单 独使用的数据。pdata 就是是 BwStartDriver()中的参数 pdata。 pCmdBuffer 一个指向保存通讯数据包的存储区的指针,该通讯数据包由 BwRead_FormatPacket 或 BwWrite_OneTagPacket 函数产生。这个函数通过正确的通讯函数调用把数据包发送给设备。 cmd_size 一个保存由 BwRead_FormatPacket 或 BwWrite_OneTagPacket 函数产生的保存在 pCmdBuffer 存储区中的数据包的尺寸的整数。 nstate 这是一个保存可变的转换状态的指针。如果通讯协议完成一个读写请求需要多次发送, 这个变量将用来保存协议的状态。因为 WebAccess 的内核将依据此变量来调用这个函数完成 发送数据,驱动程序必须保证当前的发送状态是否正确。 pWorkingBuffer 一个指向被驱动程序单独使用的工作存储区的指针,该工作存储区的尺寸在 BwStartDriver 中被定义。 pDevice 一个指向 device_data 的指针。 Return Value 如果成功,返回数值 1。 Remarks Advantech Open eAutomation Boundless Integration28 ADVANTECH TECHNOLOGY INC. 这个函数通过正确的端口发送通讯数据包给实际设备。驱动程序必须保存当前状态的足 迹。 BwSendDataExt 作用同 BwSendData BW_DEV_API int BwSendDataExt ( Int*rdata, struct comm_data *pComm, int*nstate, char*pWorkingBuffer, struct device_data *pDevice ); Parameters pComm 指向 comm_data 结构的指针,这个结构中包含了 pCmdBuffer 指向的内存指针 (pComm-command_buffer)和 cmd_size 的值(pComm-command_size)以及其他的信息。 其他参数同 BwSendData 函数。 Return Value 同 BwSendData 函数。 Remarks 若核心程序找不到 BwSendData 函数,就会尝试执行 BwSendDataExt 函数。 BwReceiveData BwReceiveData 函数用来从设备接收通讯数据。 BW_DEV_API int BwReceiveData ( Int*rdata, char*r_buffer, int*r_size, char*pCmdBuffer, int*nState, char*pWorkingBuffer, struct device_data *pDevice, int*quality ); Parameters rdata 一个指向 pdata-rdata0的整型指针。这个整型数组保存在通讯过程中,被驱动程序单 独使用的数据。 Advantech Open eAutomation Boundless Integration 29 ADVANTECH TECHNOLOGY INC. r_buffer 一个指向存储当前接收到的数据的存储区的指针。大小由 BwStartDriver 中的 ReceiveBuffer_size 指定。 r_size 一个保存,在 r_buffer 存储区内,当前接收到的数据的尺寸的指针。当最新的数据被送 入 r_buffer 存储区,数据长度必须相应的更新。 pCmdBuffer 一个指向存储在调用该函数发送数据之前,由 BwRead_FormatPacket 或 BwWrite_OneTagPacket 产生的通讯数据包的存储区的尺寸的指针。 nState 这是一个保存可变的转换状态的指针。如果通讯协议完成一个读写请求需要多次发送, 这个变量将用来保存协议的状态。因为 WebAccess 的内核调用这个函数发送数据,驱动程序 必须保证当前的发送状态是否正确。 pWorkingBuffer 一个指向被驱动程序单独使用的工作存储区的指针,该工作存储区的尺寸在 BwStartDriver 中被定义。 pDevice 一个指向 device_data 的指针。 quality 一个保存通讯质量值的整型指针。如果接收数据失败,该指针变量将被置相应的质量值, 因此 WebAccess 能够在线传递信息。其值定义为 0x8000 + 错误代码。 Return Value BW_RSTATE_MORE(=2): 如果还有没有接收完的数据需要接收。这个函数将被继续调 用。 BW_RSTATE_OK(=1): 如果这个数据包的所有数据都已经接收完,WebAccess 将调用 BwGetRawData 函数处理接收到的数据。 BW_RSTATE_ERROR(=3): 如果发现有任何错误。这时,“*quality”变量必须保存 相应的质量值。 Remarks 这个函数通过正确的通讯函数调用,接收数据。WebAccess 内核在每一个发送命令后 都将清空 r_buffer 存储区,并且如果函数返回 BW_RSTATE_MORE,而且没有超时,则将重 复调用该函数接收数据。 Advantech Open eAutomation Boundless Integration30 ADVANTECH TECHNOLOGY INC. BwReceiveDataExt BwReceiveDataExt ( int*rdata, char*r_buffer, int*r_size, struct comm_data *pComm, int*nstate, char*pWorkingBuffer, struct device_data *pDevice, int*quality ); Parameters pComm 指向 comm_data 结构的指针,这个结构中包含了 pCmdBuffer 指向的内存指针 (pComm-command_buffer)和其他的信息。 其他参数同 BwReceiveData 函数。 Return Value 同 BwReceiveData 函数。 Remarks 若核心程序找不到 BwReceiveData 函数,就会尝试执行 BwReceiveDataExt 函数。 BwGetRawData BwGetRawData 函数用来从设备接收通讯数据。 BW_DEV_API int BwGetRawData ( char *r_buffer, char *data_buffer, int data_size, char *pWorkin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论