// 下列 ifdef 块是创建使从 DLL 导出更简单的
|
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 ACTUATOR_EXPORTS
|
// 符号编译的。在使用此 DLL 的
|
// 任何项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
|
// ACTUATOR_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
|
// 符号视为是被导出的。
|
#ifdef ACTUATOR_EXPORTS
|
#define ACTUATOR_API __declspec(dllexport)
|
#else
|
#define ACTUATOR_API __declspec(dllimport)
|
#endif
|
|
typedef enum
|
{
|
//粮种准备命令代码(粮种已修改)
|
READY_GRAIN = 0x01,
|
|
//返回准备完成
|
READY_FINISH = 0x02,
|
|
//检测启动命令
|
DETECT_START = 0x03,
|
|
//返回检测完毕
|
DETECT_FINISH = 0x04,
|
|
//设备水分仪复位命令
|
DEVICE_WR_RESET = 0xFE,
|
|
//返回水分仪故障代码
|
DEVICE_WR_FAULT = 0xFF
|
}PLCWORD;
|
|
typedef enum
|
{
|
//水分仪准备指令
|
WR_READY = 0x01,
|
|
//水分仪检测指令
|
WR_DETECT = 0x02,
|
|
//水分仪校验指令
|
WR_VERIFY = 0x03,
|
|
//水分仪复位指令
|
WR_RESET = 0x04,
|
|
//粮食变更指令
|
WR_GOODS = 0x05
|
}WRWORD;
|
|
|
//创建初始化客户PLC设备句柄ctx
|
//strIp: IP地址
|
//nPort: 网络端口
|
ACTUATOR_API void* __stdcall CreatePlcDevice(const char* strIp, int nPort);
|
|
//创建水分仪句柄ctx
|
//szSerialPort: 串口名
|
//baud: 波特率
|
//parity: 校验类型
|
//data_bit: 数据位
|
//stop_bit: 停止位
|
ACTUATOR_API void* __stdcall CreateWrDevice(const char* szSerialPort, int baud, char parity, int data_bit, int stop_bit);
|
|
|
//连接客户设备或水分仪装置
|
//ctxDev : 设备句柄
|
//返回值:小于0 表示 错误,
|
ACTUATOR_API int __stdcall ConnectDevice(void* ctxDev);
|
|
//获取状态或粮种更改信息
|
//ctxDev : 设备句柄
|
//nState :状态字,如下状态不会重复
|
// 0x01: 粮种已修改
|
// 0x03: 开始测试
|
// 0xFE: 复位命令,优先级最高
|
// 其他: 为写入状态
|
//nGoodType: 粮种编号
|
// 0x01: 小麦,
|
// 0x02: 水稻
|
// 0x03: 黄豆
|
// 0x04: 玉米
|
//返回值:小于0 表示 错误,
|
ACTUATOR_API int __stdcall ReadState(void* ctxDev, unsigned short* nState, unsigned short* nGrainType);
|
|
//写回状态
|
//ctxDev : 设备句柄
|
//nState :状态字,如下状态不会重复
|
// 0x02: 准备已完成
|
// 0x04: 检测完成
|
// 0xFF: 水分仪故障
|
//返回值:小于0 表示 错误,
|
ACTUATOR_API int __stdcall ResponseState(void* ctxDev, unsigned short nState);
|
|
//回传检测数据
|
//ctxDev : 设备句柄
|
//nDatas :数组,数据顺序如下
|
// 粮种编码
|
// 含水率, 取整 = 原值*100
|
// 容重比, 取整 = 原值*100
|
//nSize : 数据个数
|
//返回值:小于0 表示 错误,
|
ACTUATOR_API int __stdcall UploadData(void* ctxDev, unsigned short* nDatas, unsigned short nSize = 3);
|
|
|
|
|
//下发命令信息
|
//ctxDev : 设备句柄
|
//nCmdType :命令字,如下描述
|
// 0x01: 粮种已修改
|
// 0x02: 开始测试
|
// 0x03: 校准命令,即为标定页面检测按钮命令,
|
//nGoodType: 粮种编号
|
// 0x01: 小麦,
|
// 0x02: 水稻
|
// 0x03: 黄豆
|
// 0x04: 玉米
|
// 当nCmdType 为0x02,0x03时,不用考虑粮种编号
|
// nResponseSeconds: 响应时间,以秒计算
|
// nResponseUSeconds: 响应时间,以微妙计算,若小于秒,全部用微妙表示。
|
//返回值:小于0 表示 错误,
|
ACTUATOR_API int __stdcall SendCommands(void* ctxDev, unsigned short nCmdType, unsigned short nGrainType = 0, unsigned int nResponseSeconds = 0, unsigned int nResponseUSeconds = 500000);
|
|
|
//下发参数
|
//ctxDev : 设备句柄
|
//nStartFreq :起始频率
|
//nStopFreq : 终止频率
|
//nStepFreq : 步长
|
//nDecayCode :衰减码
|
//nAscValid : ASC 内部/外部有效, 取值为 0:内部有效, 1:外部有效
|
//返回值:小于0 表示 错误,
|
ACTUATOR_API int __stdcall WriteParams(void* ctxDev, unsigned short nStartFreq, unsigned short nStopFreq,
|
unsigned short nStepFreq, unsigned short nDecayCode, unsigned short nAscValid);
|
|
|
//读取检测信息
|
//ctxDev : 设备句柄
|
//nDatas :数组,数据顺序如下
|
// 电压值
|
// 重量
|
// 温度
|
// 湿度
|
// nSize : 读取4个寄存器
|
//返回值:小于0 表示 错误,
|
ACTUATOR_API int __stdcall ReadDatas(void* ctxDev, unsigned short* nDatas, unsigned short nSize = 4);
|
|
|
//读取扫频值,其实为电平值,
|
//ctxDev : 设备句柄
|
//nVcc :电平值指针
|
//返回值:小于0 表示 错误,
|
ACTUATOR_API int __stdcall ReadVcc(void* ctxDev, unsigned short* nVcc);
|
|
//读重量值,
|
//ctxDev : 设备句柄
|
//nWeight :重量值
|
//返回值:小于0 表示 错误,
|
ACTUATOR_API int __stdcall ReadWeight(void* ctxDev, unsigned short* nWeight);
|
|
//断开水分仪或客户设备的连接
|
//ctxDev : 设备句柄指针
|
//返回值:小于0 表示 错误,
|
ACTUATOR_API int __stdcall Disconnect(void* ctxDev);
|
|
//销毁资源
|
//ctxDev : 设备句柄指针
|
//返回值:小于0 表示 错误,
|
ACTUATOR_API int __stdcall DestroyDevice(void* ctxDev);
|
|
//算法函数
|
//x 为测量值
|
//y 为实际值
|
//n 为拟合次数
|
//nSampleNumber 样本数量
|
//返回值:小于0 表示 错误,
|
ACTUATOR_API int __stdcall Linearize(float x[], float y[], double Coefficient[], const int n = 2, const int nSampleNumber = 5);
|
|
|
//计算函数
|
ACTUATOR_API double __stdcall CalcValue(unsigned short nDValue, double Coef0, double Coef1, double Coef2, double Coef3, double Coef4);
|