/* Includes ------------------------------------------------------------------*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include "cmd.h" #include "fifo.h" #include "common.h" #include "ca_cau.h" #include "serial.h" #include "modbus.h" #include "hwgpio.h" #include "ca_main.h" #include "ca_CL106d.h" //#include "ca_CL106d.h" //#include "serial.h" //#include "hwgpio.h" cl106d_ctrl_t cl106d_ctrl; int cl106d_checksum(unsigned char *pdata, int len) { int i; unsigned char check = 0; for(i = 1;i < len;i++) { check ^= *(pdata + i); } pdata[len] = check; return 0; } int cl106d_packet(unsigned char *pbuf) { ClHead_t *head = (ClHead_t *)pbuf; head->ucHead = 0x81; head->ucRxID = 0x01; head->ucTxID = 0x07; head->ucLength = 0x06; head->ucCmd = 0xc9; int len = 5; cl106d_checksum((unsigned char *)head, len); len++; return len; } /********************************************************************** * 函数名称: cl106d_connet * 功能描述: * 输入参数: none * * 输出参数: none * 返 回 值: 0:failure 1:success * 其它说明: * 修改日期: 2023/12/08 ***********************************************************************/ int cl106d_connet() { int i; int ret = 0; int len = cl106d_packet(cl106d_ctrl.send_buf); for (i = 0; i < 3; i++) { GPIO_ENABLE_SEND(1); usleep(1000); serial_write(cl106d_ctrl.fd, cl106d_ctrl.send_buf, len); print_raw_data(cl106d_ctrl.send_buf, len); usleep(1000*6); GPIO_ENABLE_SEND(0); len = serial_read(cl106d_ctrl.fd, cl106d_ctrl.recv_buf, sizeof(cl106d_ctrl.recv_buf)); printh("[%s:%d] len=%d\n", __FUNCTION__, __LINE__, len); print_raw_data(cl106d_ctrl.recv_buf, len); if (len > 0) { ret = 1; break; } } return ret; } /********************************************************************** * 函数名称: cl106d_setpower * 功能描述: * 输入参数: none * * 输出参数: none * 返 回 值: 0:failure 1:success * 其它说明: * 修改日期: 2023/12/08 ***********************************************************************/ int cl106d_setpower(float vol,float cur) { int ret = 0; printh("cl106dSetPower vol:%.5f cul:%.5f",vol,cur); unsigned char cmdExample[] = { 0x81,0x01,0x07,0x49,0xA3,0x05,0x46,0x3F, 0x00,0x00,0x00,0x00,//#QUc 相位值放大 1 万倍取整: 120 * 10000 = 1200000 = 0x124F80 0x00,0x00,0x00,0x00,//#QUb 0x00,0x00,0x00,0x00,//#QUa 0x00,0x00,0x00,0x00,//#QIc 0x00,0x00,0x00,0x00,//#QIb 0x00,0x00,0x00,0x00,//#QIa 32 Byte 0xff, 0x00,0x00,0x00,0x00,0x00,//#UC 57.7 = 577000 * 10-4(577000 = 0x8CDE8, -4 = FC) 0x00,0x00,0x00,0x00,0x00,//#UB 0x00,0x00,0x00,0x00,0xfc,//#UA [43] 4位小数 0x00,0x00,0x00,0x00,0x00,//#IC 0x00,0x00,0x00,0x00,0x00,//#IB 0x00,0x00,0x00,0x00,0xfa,//#IA [58] 6位小数 0x20,0xA1,0x07,0x00,//#F 频率值放大 1 万倍取整: 50 * 10000 = 500000 = 0x7A120 0x07,0x07,0x3f,0x3f,0x00, 0x00//CS #校验和字节,替换为实际计算异或和 41Byte }; //73Byte unsigned int *pVal = (unsigned int *)&cmdExample[43]; *pVal = (unsigned int)(vol * 10000); unsigned int *pcul = (unsigned int *)&cmdExample[58]; *pcul = (unsigned int)(cur * 1000000); memcpy(cl106d_ctrl.send_buf,cmdExample,73); cl106d_checksum(cl106d_ctrl.send_buf, 72); int i = 0; for ( i = 0; i < 10; i++) { GPIO_ENABLE_SEND(1); usleep(1000); serial_write(cl106d_ctrl.fd, cl106d_ctrl.send_buf, 73); usleep((1040)*73); usleep(1000); print_raw_data(cl106d_ctrl.send_buf, 73); GPIO_ENABLE_SEND(0); int len = serial_read(cl106d_ctrl.fd, cl106d_ctrl.recv_buf, sizeof(cl106d_ctrl.recv_buf)); printh("[%s:%d] len=%d\n", __FUNCTION__, __LINE__, len); print_raw_data(cl106d_ctrl.recv_buf, len); if (len > 0) { ret = 1; break; } else { GPIO_SHUTDOWN_PWR(); } } return ret; } int cl106d_init() { memset(&cl106d_ctrl,0,sizeof(cl106d_ctrl_t)); //2 打开串口 cl106d_ctrl.fd = serial_open("/dev/ttymxc3", 9600); if (cl106d_ctrl.fd < 0) { printh("[%s:%d]serial_open failed!\n", __FUNCTION__, __LINE__); return -1; } return 0; }