使用SM2 C API

通过驱动程序提供的C API,可访问SM2的模拟、数字和文本值。文件SM2API.H描述了API和文件SM2API.LIB中的函数。可以把这个库文件与您的C应用程序链接起来,以访问API的功能。可以在根目录找到这两个文件。默认路径为 C:\Program Files (x86)\GE\iFIX\ 或 C:\IFIX\,取决 iFIX 安装位置。

注意:要使用此API,必须安装iFIX集成(EDA)开发工具包。

示例

假设您用SM2驱动程序存储以前系统的数据。使用C API和一些预设的模拟量块,可以从原始系统中提取数据并存储到过程数据库中。

C API 功能

语法

读、写和返回的值

UINT16 GetAnalog(UINT16 index, FLOAT *data);

GetAnalog: 读取模拟量值(32位浮点数)到用“index”表示的寄存器中。

如果操作成功,返回FE_OK。

如果寄存器索引超出范围,返回FE_IO_ADDR。

如果模拟值超出了32位浮点范围,则返回FE_RANGE。

注意: GetAnalog 和 GetDouble访问的是SM2中的同一张表。

UINT16 SetAnalog(UINT16 index, FLOAT data);

SetAnalog:写模拟值(32位浮点数)到用‘index’表示的寄存器中,即使数据没有变化,也为该寄存器产生一个例外。

如果操作成功,返回FE_OK。

如果寄存器索引超出范围,返回FE_IO_ADDR。

注意: SetAnalog和SetDouble访问的是SM2中的同一张表。

UINT16 GetDouble(UINT16 index, DOUBLE *data);

GetDouble:读取模拟值(64位浮点数)到用“index”表示的寄存器中。

如果操作成功,返回FE_OK。

如果寄存器索引超出范围,返回FE_IO_ADDR。

注意: GetAnalog 和 GetDouble访问的是SM2中的同一张表。

UINT16 SetDouble(UINT16 index、DOUBLE data);

SetDouble:写模拟值(64位浮点数)到用‘index’表示的寄存器中,即使数据没有变化,也为指定寄存器产生一个例外。

如果操作成功,返回FE_OK。

如果寄存器索引超出范围,返回FE_IO_ADDR。

注意: SetAnalog和SetDouble访问的是SM2中的同一张表。

UINT16 GetDigital(UINT16 index, UINT16 *data);

GetDigital:读取16个数字值(20,000个数字量寄存器中任何一个寄存器的所有16位)到用“index”表示的寄存器中。

如果操作成功,返回FE_OK。

如果寄存器索引超出范围,返回FE_IO_ADDR。

注意:API只能一次同时读和写整个16位数字量寄存器。如果修改1位,首先读寄存器,修改相应的位,然后写入该寄存器。但是,修改单个位时,注意确保在应用程序中同时只有一个线程访问同一个数字量寄存器。

UINT16 SetDigital(UINT16 index, UINT16 data);

SetDigital:写16个数字值(20,000个数字量寄存器中任何一个寄存器的所有16位)到用‘index’表示的寄存器中,即使数据没有变化,也为该寄存器的所有16位产生一个例外。

如果操作成功,返回FE_OK。

如果寄存器索引超出范围,返回FE_IO_ADDR。

注意:API只能一次同时读和写整个16位数字量寄存器。如果修改1位,首先读寄存器,修改相应的位,然后写入该寄存器。但是,修改单个位时,注意确保在应用程序中同时只有一个线程访问同一个数字量寄存器。

UINT16 SetDigitalEx(UINT index, UINT16 data, UINT16 mask)

SetDigitalEx:写16个数字值(20,000个数字量寄存器中任何一个寄存器的所有16位)到用‘index’表示的寄存器中,并对从掩码中选择的指定位产生一个例外。即使数据没有变化,也为在掩码中设置的位触发一个例外。

如果操作成功,返回FE_OK。

如果寄存器索引超出范围,返回FE_IO_ADDR。

注意:API只能一次同时读和写整个16位数字量寄存器。如果修改1位,首先读寄存器,修改相应的位,然后写入该寄存器。但是,修改单个位时,注意确保在应用程序中同时只有一个线程访问同一个数字量寄存器。

UINT16 GetText(UINT16 index, char *data, int size)

GetText 从以 ‘index’ 标记的寄存器开始从文本寄存器读取以 ‘data’ 标记的文本。读取的字符数由 ‘size’ 表示。GetText 不会自动在所读文本中添加空的结束符。如果需要以空结束的字符串,务必在读文本之后用程序在文本串末尾添加一个空的结束符。

如果操作成功,返回FE_OK。

如果寄存器索引超出范围,返回FE_IO_ADDR。

UINT16 SetText(UINT16 index, char *data, int size)

SetText 从用 `index' 标记的寄存器开始向文本寄存器写入以 `data' 标记的文本。写入的字符数由 `size' 表示。文本值不支持基于例外处理。SetText不会自动在所写入的文本中添加空的结束符。如果需要以空结束的字符串,务必在写文本之前用程序在文本串末尾添加一个空的结束符。

如果操作成功,返回FE_OK。

如果寄存器索引超出范围,返回FE_IO_ADDR。

UINT16 GetCommError(UINT16 *data);

GetCommError:读取通讯错误标志到S寄存器。标签是一个1位整数值。

总是返回FE_OK。

UINT16 SetCommError(UINT16 data);

SetCommError:写通讯错误标签到S寄存器。标签是一个1位整数值。只能把0或1传送给SetCommError函数。使用任何其它值时将产生不可预测的结果。

总是返回FE_OK。

UINT16 GetAnalogAlarm(UINT16 index, INT16 *alm);

GetAnalogAlarm 从用 'index' 标记的模拟量寄存器中读取报警状态。关于可用报警状态的更多内容,请参考了解报警状态章节。

注意:自 iFIX 4.5 开始,对于 SM2 驱动程序仅支持 IA_OK 和 IA_COMM 报警状态。

如果操作成功,返回FE_OK。

如果寄存器索引超出范围,返回FE_IO_ADDR。

UINT16 SetAnalogAlarm(UINT16 index, INT16 alm);

SetAnalogAlarm:写报警状态到用‘index’表示的模拟量寄存器,即使数据或报警没有变化,也为该寄存器产生一个例外。关于可用报警状态的更多内容,请参考了解报警状态章节。

注意:自 iFIX 4.5 开始,对于 SM2 驱动程序仅支持 IA_OK 和 IA_COMM 报警状态。

如果操作成功,返回FE_OK。

如果寄存器索引超出范围,返回FE_IO_ADDR。

UINT16 GetDigitalAlarm(UINT16 index, INT16 *alm);

GetDigitalAlarm 从用 'index' 标记的数字量寄存器中读取报警状态。关于可用报警状态的更多内容,请参考了解报警状态章节。

注意:自 iFIX 4.5 开始,对于 SM2 驱动程序仅支持 IA_OK 和 IA_COMM 报警状态。

如果操作成功,返回FE_OK。

如果寄存器索引超出范围,返回FE_IO_ADDR。

UINT16 SetDigitalAlarm(UINT16 index, INT16 alm);

SetDigitalAlarm:写报警状态到用‘index’表示的数字量寄存器,即使数据或报警没有变化,也将产生一个例外。数字量寄存器的所有16位使用相同的报警。关于可用报警状态的更多内容,请参考了解报警状态章节。

注意:自 iFIX 4.5 开始,对于 SM2 驱动程序仅支持 IA_OK 和 IA_COMM 报警状态。

如果操作成功,返回FE_OK。

如果寄存器索引超出范围,返回FE_IO_ADDR。

UINT16 GetTextAlarm(UINT16 index INT16 alm)

GetTextAlarm 从用 `index' 标记的文本寄存器中读取报警状态。关于可用报警状态的更多内容,请参考了解报警状态章节。

注意:自 iFIX 4.5 开始,对于 SM2 驱动程序仅支持 IA_OK 和 IA_COMM 报警状态。

如果操作成功,返回FE_OK。

如果寄存器索引超出范围,返回FE_IO_ADDR。

UINT16 SetTextAlarm(UINT16 index, INT16 alm)

SetTextAlarm 向用 'index' 标记的文本寄存器中写入报警状态。当一个块从 SM2 驱动程序中读取数据时,返回第一个字节的报警状态。附加字节的状态被忽略。关于可用报警状态的更多内容,请参考了解报警状态章节。

注意:自 iFIX 4.5 开始,对于 SM2 驱动程序仅支持 IA_OK 和 IA_COMM 报警状态。

如果操作成功,返回FE_OK。

如果寄存器索引超出范围,返回FE_IO_ADDR。

 

另请参见

您最近了解过 iFIX 吗 ?

查看最新版 iFIX 的所有新功能。

让 iFIX 帮助您提高效率,降低成本。