123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- // /**
- // ************************************************************************************************
- // * @file pcs_nr.c
- // * @author 国轩储能
- // * @version V1.0
- // * @date 2018-11-20
- // * @brief 南瑞pcs通讯
- // * @attention
- // ************************************************************************************************
- // **/
- // #include "ModbusTcp_Client.h"
- // #include "os_my_var.h"
- // #include "pcs_nr.h"
- // #include "socket.h"
- // #include "w5500.h"
- // u16 pcs_run_data1[48]; // pcs1 运行数据
- // u32 time_pcs;
- // void __bsp_Pcs_FrameSend_W5500(const u8 *pMsg, u8 count);
- // void Pcs_RecFrame_1st(const u8 *p);
- // void Pcs_RecFrame_2nd(const u8 *p);
- // void (*Func_PcsHandleFrame[2])(const u8 *p) = {Pcs_RecFrame_1st, Pcs_RecFrame_2nd}; // 定义PCS接收帧
- // // 定义PCS发送帧
- // FrameSend_TypeDef PCSFrameArray[PCS_FRAME_COUNT] =
- // {
- // {0, 1, 0x0000, 10, ModbusTcpCli_SendFrame04, Pcs_RecFrame_1st},
- // {1, 0, 0x000a, 36, ModbusTcpCli_SendFrame04, Pcs_RecFrame_2nd},
- // {2, 3, 0x0000, 10, ModbusTcpCli_SendFrame04, Pcs_RecFrame_1st},
- // {3, 4, 0x0000, 10, ModbusTcpCli_SendFrame04, Pcs_RecFrame_1st},
- // {4, 0, 0x0000, 10, ModbusTcpCli_SendFrame04, Pcs_RecFrame_1st},
- // };
- // ModbusTcpCli_TypeDef ModbusTcpCli_Pcs = {1, __bsp_Pcs_FrameSend_W5500}; // 1: 从机地址, __bsp_Pcs_FrameSend_W5500:发送函数
- // /****************************************************
- // * 函 数 名:CopyPCS1_DataRun
- // * 函数功能:读取PCS1运行数据
- // * 入口参数:register_addr 寄存器地址 count 数量 p 缓冲区指针
- // * 说 明:无
- // *****************************************************/
- // void CopyPCS1_DataRun(u16 register_addr, u16 count, u16 *p)
- // {
- // u16 offset, i;
- // offset = register_addr - MODBUS_ADDR_PCS1_RUN;
- // for (i = 0; i < count; i++)
- // *p++ = pcs_run_data1[offset + i];
- // }
- // /****************************************************
- // * 函 数 名:PCS1_ParSet_YK
- // * 函数功能:PCS遥控参数设置
- // * 入口参数:register_addr: 寄存器地址, data: 0 断开 1 闭合
- // * 说 明:无
- // *****************************************************/
- // void PCS1_ParSet_YK(u16 register_addr, u16 data)
- // {
- // u16 register_pcs, value;
- // OS_RESULT result;
- // u8 *pMsg;
- // register_pcs = register_addr - MODBUS_ADDR_YK_PCS1 + MODBUS_ADDRRESS_PCS_YK;
- // if (getSn_SR(SOCK_PCS1) == SOCK_ESTABLISHED)
- // {
- // value = data ? 0xFF00 : 0; // 0 断开 1 吸合
- // ModbusTcpCli_SendFrame05(register_pcs, value, &ModbusTcpCli_Pcs);
- // /* 等待收到数据,不阻塞任务 */
- // result = os_mbx_wait(&pcs_set_mailbox, (void *)&pMsg, TIME_200MS);
- // // OS_R_OK,表示消息邮箱中有消息,立即从消息邮箱中获得消息,无需等待
- // // OS_R_MBX,表示在设置的超时时间范围内收到消息
- // if ((result == OS_R_OK || result == OS_R_MBX) && (pMsg[7] == 0x05)) // 成功获得消息
- // {
- // value = value; // 调试用
- // }
- // }
- // }
- // /****************************************************
- // * 函 数 名:PCS_ParSet_YK
- // * 函数功能:PCS遥控直流断路器
- // * 入口参数:data: 数量, stack_id 电池堆编号(1开始)
- // * 说 明:无
- // *****************************************************/
- // void PCS_DCBreaker_YK(u8 data)
- // {
- // PCS1_ParSet_YK(MODBUS_ADDR_PCS1_DC_BREAKER_HMI, data); // PCS1
- // }
- // /****************************************************
- // * 函 数 名:PCS1_ParSet_YT
- // * 函数功能:PCS遥调参数设置
- // * 入口参数:register_addr 寄存器地址 count 数量 p 缓冲区指针
- // * 说 明:无
- // *****************************************************/
- // void PCS1_ParSet_YT(u16 register_addr, int16_t data)
- // {
- // OS_RESULT result;
- // u8 *pMsg;
- // u16 register_pcs, temp;
- // // if(data < 0) // 设置功率-10,pcs显示-11
- // // data++;
- // register_pcs = register_addr - MODBUS_ADDR_YT_PCS1 + MODBUS_ADDRRESS_PCS_YT;
- // ModbusTcpCli_SendFrame06(register_pcs, data, &ModbusTcpCli_Pcs);
- // /* 等待PCS数据,不阻塞任务 */
- // result = os_mbx_wait(&pcs_set_mailbox, (void *)&pMsg, TIME_200MS);
- // // OS_R_OK,表示消息邮箱中有消息,立即从消息邮箱中获得消息,无需等待
- // // OS_R_MBX,表示在设置的超时时间范围内收到消息。
- // if ((result == OS_R_OK || result == OS_R_MBX) && (pMsg[7] == 0x06)) // 成功获得消息
- // {
- // temp = temp;
- // }
- // }
- // /****************************************************
- // * 函 数 名:PCS1_NetHandle
- // * 函数功能:处理PCS发过来数据帧
- // * 入口参数:p 缓冲区指针
- // * 说 明:无
- // *****************************************************/
- // // void PCS1_NetHandle(const u8 *p, u16 register_addr)
- // //{
- // // // 00 00 00 00 00 05 01 04 字节数 dataH dataL
- // // u8 offset, i, temp1, temp2, count;
- // //
- // // count = p[8]/2;
- // // offset = register_addr - MODBUS_ADDR_PCS1_RUN;
- // // if(p[7] == MODBUS_FUNCTION_CODE_04) // 读取PCS运行数据
- // // {
- // // for(i = 0; i < count; i++)
- // // {
- // // temp1 = p[9 + 2*i];
- // // temp2 = p[9 + 2*i +1];
- // // pcs_run_data1[offset + i] = (temp1 << 8) + temp2;
- // // }
- // // }
- // // }
- // /****************************************************
- // * 函 数 名:SendFrame_ReadPcsData
- // * 函数功能:发送获取PCS1数据报文
- // * 入口参数:register_addr 寄存器地址 count 数量
- // * 说 明:无
- // ****************************************************/
- // void ReadPcsData(void)
- // {
- // u32 time1, time2;
- // static u8 cur_index = 0; // 1#pcs帧序号
- // OS_RESULT result;
- // u8 *pMsg;
- // FrameSend_TypeDef PCSFrame = PCSFrameArray[cur_index]; // 指向当前帧
- // if (getSn_SR(SOCK_PCS1) == SOCK_ESTABLISHED)
- // {
- // // 从发送数据帧到消息邮箱收到数据,办公室实测最短时间20ms,最长40ms
- // PCSFrame.Send(PCSFrame.start_addr, PCSFrame.reg_count, &ModbusTcpCli_Pcs); // 发送
- // time1 = DWT_CYCCOUNT;
- // /* 等待PCS数据,不阻塞任务 */
- // result = os_mbx_wait(&pcs_yc_mailbox, (void *)&pMsg, TIME_200MS);
- // // OS_R_OK,表示消息邮箱中有消息,立即从消息邮箱中获得消息,无需等待
- // // OS_R_MBX,表示在设置的超时时间范围内收到消息。
- // if (result == OS_R_OK || result == OS_R_MBX) // 成功获得消息
- // {
- // time2 = DWT_CYCCOUNT;
- // time_pcs = (time2 - time1) / 168;
- // #if defined(__HUAIBEI)
- // PCSFrame.Receive(pMsg);
- // #elif defined(__PRODUCT_TEST)
- // SG_PCS1_NetHandle(rec_buf_pcs1); // 处理PCS发过来数据帧
- // #else
- // #error no such macro!;
- // #endif
- // }
- // cur_index = PCSFrame.next_index;
- // Battery_ImportantData[INDEX_STATE_PCS1].com_state = STATE_OK;
- // }
- // else
- // Battery_ImportantData[INDEX_STATE_PCS1].com_state = STATE_FAULT;
- // }
- // void Pcs_RecFrame_1st(const u8 *p)
- // {
- // // 字节数
- // // 00 00 00 00 00 04 01 03 2 dataH dataL
- // u8 offset, i, temp1, temp2, count;
- // count = p[8] / 2;
- // offset = 0; // register_addr - MODBUS_ADDR_PCS1_RUN;
- // if (p[7] == MODBUS_FUNCTION_CODE_04) // 读取PCS运行数据
- // {
- // for (i = 0; i < count; i++)
- // {
- // temp1 = p[9 + 2 * i];
- // temp2 = p[9 + 2 * i + 1];
- // pcs_run_data1[offset + i] = (temp1 << 8) + temp2;
- // }
- // }
- // }
- // void Pcs_RecFrame_2nd(const u8 *p)
- // {
- // u8 offset, i, temp1, temp2, count;
- // count = p[8] / 2;
- // offset = 10; // register_addr - MODBUS_ADDR_PCS1_RUN;
- // if (p[7] == MODBUS_FUNCTION_CODE_04) // 读取PCS运行数据
- // {
- // for (i = 0; i < count; i++)
- // {
- // temp1 = p[9 + 2 * i];
- // temp2 = p[9 + 2 * i + 1];
- // pcs_run_data1[offset + i] = (temp1 << 8) + temp2;
- // }
- // }
- // }
- // void __bsp_Pcs_FrameSend_W5500(const u8 *pMsg, u8 count)
- // {
- // w5500_send(SOCK_PCS1, pMsg, count);
- // // ModbusTcpCli_Pcs1 ModbusTcpCli_TypeDef
- // }
|