// 下列 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,
|
|
//上阀门开
|
WR_VALV01 = 0x07,
|
//上阀门关
|
WR_VALV02 = 0x08,
|
//下阀门开
|
WR_VALV03 = 0x09,
|
//下阀门关
|
WR_VALV04 = 0x0A,
|
//双阀门开
|
WR_VALV05 = 0x0B,
|
//双阀门关
|
WR_VALV06 = 0x0C,
|
//振动开
|
WR_VIBRATE_01 = 0x0D,
|
//振动关
|
WR_VIBRATE_02 = 0x0E,
|
|
}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 表示 设备有故障,故障码详见ReadFaultCode函数,有描述
|
// 小于0 表示 命令执行错误,错误可以通过 GetError提取处理。
|
// 等于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 : 设备句柄
|
//nVersions :数组,数据顺序如下
|
// 硬件版本
|
// 软件版本
|
// nSize : 读取2个寄存器
|
//返回值:小于0 表示 错误,
|
ACTUATOR_API int __stdcall ReadVersion(void* ctxDev, unsigned short* nVersions, unsigned short nSize = 1);
|
|
|
//读取扫频值,其实为电平值,
|
//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 : 设备句柄
|
//nFaultCode : 故障码
|
// 0 .......... 正常
|
// 1 .......... 上阀门关卡住
|
// 2 .......... 下阀门关卡住
|
// 4 .......... 上阀门开卡住
|
// 8 .......... 下阀门开卡住
|
//返回值:小于0 表示 错误,
|
ACTUATOR_API int __stdcall ReadFaultCode(void* ctxDev, unsigned short* nFaultCode);
|
|
//复位命令
|
//ctxDev : 设备句柄指针
|
//返回值:无,
|
ACTUATOR_API int __stdcall ResetCommand(void* ctxDev);
|
|
//取错误字符串:
|
//ctxDev : 设备句柄指针
|
//返回值:无,
|
//执行条件,在上面命令函数执行返回-1的时候调用。
|
ACTUATOR_API const char* __stdcall GetError(void* ctxDev);
|
|
//断开水分仪或客户设备的连接
|
//ctxDev : 设备句柄指针
|
//返回值:小于0 表示 错误,
|
ACTUATOR_API int __stdcall Disconnect(void* ctxDev);
|
|
//销毁资源
|
//ctxDev : 设备句柄指针
|
//返回值:小于0 表示 错误,
|
ACTUATOR_API int __stdcall DestroyDevice(void* ctxDev);
|
|
|
/***************************轮廓线回传函数**********************************
|
data: 数据以整数数组表示
|
nsize: 数据尺寸
|
**************************************************************************/
|
typedef void(__stdcall* MESSAGE_HANDLER)(unsigned short *data, int nsize);
|
|
/*
|
nSlavePort: 服务端口 比如 502
|
szDevPort: 串口 COM1
|
baud, parity, data_bit, stop_bit 参考上面函数
|
detectTimeout 检测超时时间
|
resetTimeout 服务超时时间
|
handler : 回调函数
|
*/
|
|
ACTUATOR_API int __stdcall StartTcpSlaveEx(void* waterDev, int nSlavePort, int detectTimeout = 60, int resetTimeout = 10, MESSAGE_HANDLER handler = NULL);
|
|
ACTUATOR_API int __stdcall StartTcpSlave(int nSlavePort, const char* szSerialPort, int baud, char parity, int data_bit, int stop_bit, int, int detectTimeout = 60, int resetTimeout = 10, MESSAGE_HANDLER handler = NULL);
|
|
ACTUATOR_API int __stdcall StopTcpSlave();
|
|
//算法函数
|
//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 int __stdcall LinearizeX(double x[], double y[], double Coefficient[], const int nDegree = 3, const int nSampleNumber = 5);
|
ACTUATOR_API int __stdcall PolyNomialFit(double x[], double y[], double Coefficient[], const int nDegree = 3, const int nSampleNumber = 5);
|
|
//计算函数
|
ACTUATOR_API double __stdcall CalcValue(unsigned short nDValue, double Coef0, double Coef1, double Coef2, double Coef3, double Coef4);
|