2.使用 23-07-06 14:32 0 # YHLIOT使用 ## 一.文件说明 - YHLIOT.h 动态库头文件,包含数据结构与调用方法接口 - YHLIOT.dll Windows平台动态库 - YHLIOT.so Linux平台动态库 ## 二.结构体与数据说明 重要: char* id_name 设备名称是接口识别交互的关键,每次都需要传入,在配置参数以及数据读写都需要。 ### 1.DeviceStruct 设备结构体 设备结构体定义 ```c struct DeviceStruct { char* name; // key API接口,如"PLC.Mitsubishi" char* ip; // ip端口,如"192.168.99.10:8000" char* socket; // socket类型TCP、UDP,如"tcp" char* id_name; // 设备名称,如"Mitsubishi-01" int option; // 选项参数,参考各API说明 int args[5]; // 可选参数,参考各API说明 char* argsc[5]; // 可选参数,参考各API说明 short datatypes; // 数据类型,0:ABCD,1:BADC,2:CDAB,3:DCBA }; ``` ### 2.RWStruct 读写结构体 读写结构体定义 ```C struct RWStruct { char* id_name; // 设备名称 如"Mitsubishi-01",与设备结构体一致 char* funcs; // API方法名 如"int16" char* vars; // 变量、参数或值 如"D100" int number; // 读取数量 int option; // 选项参数,参考各API说明 int types; //TCP功能 0 str / 1 hex 纯TCP时用到,是否以16进制发送显示 }; ``` ### 3.GoSlice 切片结构 ```c typedef struct { void *data; GoInt len; GoInt cap; } GoSlice; ``` ### 4.GoInterface 接口结构 ```c typedef struct { void *data; GoInt len; GoInt cap; } GoSlice; ``` ### 5.数据类型 与C数据对应 ```c typedef signed char GoInt8; typedef unsigned char GoUint8; typedef short GoInt16; typedef unsigned short GoUint16; typedef int GoInt32; typedef unsigned int GoUint32; typedef long long GoInt64; typedef unsigned long long GoUint64; typedef GoInt64 GoInt; typedef GoUint64 GoUint; typedef size_t GoUintptr; typedef float GoFloat32; typedef double GoFloat64; ``` ## 三.函数说明 ### 1.NewNet 新建设备连接 传入参数 : DeviceStruct 设备结构体 返回状态码 ```c extern GoInt NewNet(struct DeviceStruct p); ``` ### 2.Read 设备读取数据 传入参数: RWStruct 读写结构体定义 GoSlice* 传人切片指针、接收结果 返回状态码 ```c // 设备读取数据 // extern GoInt Read(struct RWStruct p, GoSlice* retvalue); ``` ### 3.Write 设备写入数据 传入参数: RWStruct 读写结构体定义 GoInterface 传人GoInterface 结构 返回状态码 ```c // 设备写入数据 extern GoInt Write(struct RWStruct p, GoInterface writevalue); ``` ### 4.SetConf 参数设置 传入参数: RWStruct 读写结构体定义 char* data 传人字符串(暂未使用) 返回状态码 ```c // 参数设置 // extern GoInt SetConf(struct RWStruct p, char* data); RWStruct 结构体参数说明 struct RWStruct { char* id_name; // 设备名称 如"Mitsubishi-01",与设备结构体一致 char* funcs; // 未使用 char* vars; // 需要设置的参数名 如"hex_str" int number; // 读取数量 int option; // 选项参数,参考各API说明 int types; // 设置值 }; vars变量值说明 hex_str 代表设置TCP发送是以字符串还是二进制,仅纯TCP服务或端客户端起作用 types 值说明 0:字符串,1:16进制 type 设置数据类型 types值说明 0:ABCD,1:BADC,2:CDAB,3:DCBA ``` ### 5.ToData 数据转换 在Read调用后使用, RWStruct数据与Read相同即可。 传入参数: RWStruct 读写结构体定义 char** data 传人字符串指针返回转换结果 返回状态码 ```c // 数据转换结果转字符串,由于读写使用的切片,部分语言会不好读取 如C# 处理有问题可使用此函数转字符串 // extern GoInt ToData(struct RWStruct p, char** data); ``` ### 6.Close 关闭连接 传入参数: DeviceStruct 设备结构体定义 ```c // 关闭连接 // extern void Close(struct DeviceStruct p); ``` ### 7.NewServer 新建服务端 服务端使用 传入参数: DeviceStruct 设备结构体定义,参照结构体说明 返回状态码 ```c // 新建服务端 extern GoInt NewServer(struct DeviceStruct p); ``` ### 8.TCPListen 监听IP连入 传入参数: RWStruct 读写结构体定义 返回状态码或连接的IP ```c // 监听连入IP extern char* TCPListen(struct RWStruct p); ``` ### 9.TCPRead 服务端读取数据 纯TCP服务端使用 传入参数: RWStruct 读写结构体定义 GoSlice* 未使用 返回字符串读取结果 ```c // 服务端读取数据 extern char* TCPRead(struct RWStruct p, GoSlice* retvalue); ``` ### 10.TCPWrite TCP写入数据 纯TCP服务端使用 传入参数: RWStruct 读写结构体定义 GoInterface 传人GoInterface 结构 返回状态码 ```c // 服务端写入数据 extern GoInt TCPWrite(struct RWStruct p,GoInterface writevalue); struct RWStruct { char* id_name; // 设备名称 如"TCPServer-01",与设备结构体一致 char* funcs; // API方法名 如"str" char* vars; // 值 如"123" int number; // int option; // 选项参数,参考各API说明 int types; // TCP功能 0 str / 1 hex 纯TCP时用到,是否以16进制发送显示 }; ``` ### 11.ServerClose 服务端关闭 纯TCP服务端使用 传入参数: DeviceStruct 设备结构体定义 返回状态码 ```c // 服务端关闭 // extern GoInt ServerClose(struct DeviceStruct p); ``` ## 四、数据类型接口 以字符串传入RWStruct结构funs变量 ```c 对应类型 字符串 short "int16"; unsigned short "uint16"; int "int32"; unsigned int "uint32"; long long "int64"; unsigned long long "uint64"; float "Float32"; double "Float64"; writedata "writedata" ``` 目录