Merge branch 'develop' of http://git.jsgsdt.com:8070/wxsmart-test/acdt into develop

This commit is contained in:
吴俊潮 2025-04-02 13:53:48 +08:00
commit 4f1f4f0eca
9 changed files with 1537 additions and 1723 deletions

5
.vscode/extensions.json vendored Normal file
View File

@ -0,0 +1,5 @@
{
"recommendations": [
"ms-vscode.cpptools"
]
}

View File

@ -651,7 +651,7 @@ uint16_t ch395_port = 8080;
//uint8_t ch395_macaddr[6] = {0x5C,0x53,0x10,0x6C,0x18,0x49};
/* 远程IP地址设置 */
//uint8_t ch395_des_ipaddr[4] = {192,168,1,111};
static uint8_t socket0_send_buf[] = {"This is from CH395Q\r\n"};
static uint8_t socket0_send_buf[1024];
static uint8_t socket0_recv_buf[1024];
ch395_socket cha95_sockct_sta[8];
@ -683,7 +683,11 @@ void ch395_init(void)
memcpy(cha95_sockct_sta[0].net_config.gwipaddr, ch395_gw_ipaddr, sizeof(cha95_sockct_sta[0].net_config.gwipaddr)); /* 设置静态网关IP地址 */
memcpy(cha95_sockct_sta[0].net_config.maskaddr, ch395_ipmask, sizeof(cha95_sockct_sta[0].net_config.maskaddr)); /* 设置静态子网掩码地址 */
//memcpy(cha95_sockct_sta[0].net_config.macaddr, ch395_macaddr, sizeof(cha95_sockct_sta[0].net_config.macaddr)); /* 设置静态MAC地址 */
<<<<<<< HEAD
cha95_sockct_sta[0].sour_port = ch395_port; /* 源端口 */
=======
cha95_sockct_sta[0].sour_port = 8080; /* 源端口 */
>>>>>>> 694c8a2a7149125de63428eb48d859c6a7ca06cf
cha95_sockct_sta[0].proto = CH395Q_SOCKET_TCP_SERVER; /* 设置协议 */
cha95_sockct_sta[0].send.buf = socket0_send_buf; /* 发送数据 */
cha95_sockct_sta[0].send.size = sizeof(socket0_send_buf); /* 发送数据大小 */
@ -734,7 +738,11 @@ void set_ipv4(void)
memcpy(cha95_sockct_sta[0].net_config.ipaddr, ch395_ipaddr, sizeof(cha95_sockct_sta[0].net_config.ipaddr)); /* 设置静态本地IP地址 */
memcpy(cha95_sockct_sta[0].net_config.gwipaddr, ch395_gw_ipaddr, sizeof(cha95_sockct_sta[0].net_config.gwipaddr)); /* 设置静态网关IP地址 */
memcpy(cha95_sockct_sta[0].net_config.maskaddr, ch395_ipmask, sizeof(cha95_sockct_sta[0].net_config.maskaddr)); /* 设置静态子网掩码地址 */
<<<<<<< HEAD
cha95_sockct_sta[0].sour_port = ch395_port; /* 源端口 */
=======
cha95_sockct_sta[0].sour_port = 8080; /* 源端口 */
>>>>>>> 694c8a2a7149125de63428eb48d859c6a7ca06cf
ch395q_socket_config(&cha95_sockct_sta[0]); /* 配置socket参数 */
}

View File

@ -56,7 +56,7 @@
/* USER CODE BEGIN PV */
/* 本地网络信息IP地址、网关地址、子网掩码和端口号 */
uint8_t ch395_addr[14] = {192,168,111,194,192,168,111,110,255,255,255,0,31,144};
uint8_t ch395_addr[14] = {192,168,114,194,192,168,114,110,255,255,255,0,31,144};
/* USER CODE END PV */
@ -142,6 +142,7 @@ int main(void)
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
//数字量输入输出

View File

@ -43,7 +43,7 @@ void MX_TIM1_Init(void)
/* USER CODE END TIM1_Init 1 */
htim1.Instance = TIM1;
htim1.Init.Prescaler = 1;
htim1.Init.Prescaler = 0;
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
htim1.Init.Period = 65535;
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

View File

@ -120,7 +120,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name></Name>
<Name>d</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
@ -208,14 +208,18 @@
<Ww>
<count>10</count>
<WinNumber>1</WinNumber>
<<<<<<< HEAD
<ItemText>tx_start</ItemText>
=======
<ItemText>g_ch395q_sta.socket[0].config</ItemText>
>>>>>>> 694c8a2a7149125de63428eb48d859c6a7ca06cf
</Ww>
</WatchWindow1>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>0</SubType>
<ItemText>0x080C0000</ItemText>
<ItemText>0x20000034 </ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>

View File

@ -10,8 +10,8 @@
<TargetName>VOQC</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pArmCC>5060960::V5.06 update 7 (build 960)::.\ARMCC</pArmCC>
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
<pArmCC>5060960::V5.06 update 7 (build 960)::.\ARM Compiler_5_06</pArmCC>
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARM Compiler_5_06</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>
@ -82,7 +82,7 @@
</BeforeMake>
<AfterMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<RunUserProg2>1</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>

File diff suppressed because it is too large Load Diff

View File

@ -505,7 +505,7 @@ ProjectManager.FreePins=false
ProjectManager.HalAssertFull=false
ProjectManager.HeapSize=0x200
ProjectManager.KeepUserCode=true
ProjectManager.LastFirmware=true
ProjectManager.LastFirmware=false
ProjectManager.LibraryCopy=1
ProjectManager.MainLocation=Core/Src
ProjectManager.NoMain=false
@ -572,7 +572,7 @@ SPI2.VirtualNSS=VM_NSSHARD
SPI2.VirtualType=VM_MASTER
TIM1.EncoderMode=TIM_ENCODERMODE_TI12
TIM1.IPParameters=EncoderMode,Prescaler
TIM1.Prescaler=1
TIM1.Prescaler=0
TIM6.IPParameters=Prescaler,Period
TIM6.Period=999
TIM6.Prescaler=83

View File

@ -135,27 +135,27 @@ void prov_set(float target_p, propotion_valve *pvx)
pvx->target_percent = (target_p - pvx->ctrl_min) / ( pvx->ctrl_max - pvx->ctrl_min )*100; //目标百分比,按照理论范围计算
pvx->target_pressure = pvx->target_percent/100*900; //Kpa, 比例阀 (4~20mA -> 0~0.9Mpa)
switch (pvx->tag)//分段校准,不同比例阀的数据表不一样
{
case 1:
{
target_p = (prov_section_calculate(pvx->target_pressure,&adj_pv1) > 0)?(prov_section_calculate(pvx->target_pressure,&adj_pv1)):(target_p);
target_p = (target_p < pvx->input_max)?(target_p):(pvx->input_max); //dac输出限幅
target_p = (target_p > pvx->input_min)?(target_p):(pvx->input_min);
}
break;
// switch (pvx->tag)//分段校准,不同比例阀的数据表不一样
// {
// case 1:
// {
// target_p = (prov_section_calculate(pvx->target_pressure,&adj_pv1) > 0)?(prov_section_calculate(pvx->target_pressure,&adj_pv1)):(target_p);
// target_p = (target_p < pvx->input_max)?(target_p):(pvx->input_max); //dac输出限幅
// target_p = (target_p > pvx->input_min)?(target_p):(pvx->input_min);
// }
// break;
case 2:
{
target_p = (prov_section_calculate(pvx->target_pressure,&adj_pv2) > 0)?(prov_section_calculate(pvx->target_pressure,&adj_pv2)):(target_p);
target_p = (target_p < pvx->input_max)?(target_p):(pvx->input_max); //dac输出限幅
target_p = (target_p > pvx->input_min)?(target_p):(pvx->input_min);
}
break;
// case 2:
// {
// target_p = (prov_section_calculate(pvx->target_pressure,&adj_pv2) > 0)?(prov_section_calculate(pvx->target_pressure,&adj_pv2)):(target_p);
// target_p = (target_p < pvx->input_max)?(target_p):(pvx->input_max); //dac输出限幅
// target_p = (target_p > pvx->input_min)?(target_p):(pvx->input_min);
// }
// break;
default:
break;
}
// default:
// break;
// }
pvx->target_current = target_p; //记录当前理论模拟输出
pvx->pidout_max = pvx->target_current*(1 + out_makeup); //pid输出调节上限
pvx->pidout_min = pvx->target_current*(1 - out_makeup); //pid输出调节下限
@ -317,30 +317,32 @@ void analog_ctrl(void)
if( ao_blf1!= (float)(HoldReg[1]) / 1000) //保持寄存器值发生变化时dac输出
{
ao_blf1 = (float)(HoldReg[1]) / 1000; // uA -> mA
prov_set(ao_blf1,&pv_one); //控制比例阀1
ao_blf1_set(ao_blf1);
//prov_set(ao_blf1,&pv_one); //控制比例阀1
}
if(ao_blf2 != (float)(HoldReg[2]) / 1000) //保持寄存器值发生变化时dac输出
{
ao_blf2 = (float)(HoldReg[2]) / 1000; // uA -> mA
prov_set(ao_blf2,&pv_two); //控制比例阀2
ao_blf2_set(ao_blf2);
//prov_set(ao_blf2,&pv_two); //控制比例阀2
}
if( (CoilState[3]&(0x40)) == 0x40 ) //触发比例阀1自整定
{
if( (astep_s == SECTION_WAIT) && (pv_two.status != PROV_ADJUSTING) )
{
pv_one.status = PROV_ADJUSTING;
}
}
if( (CoilState[3]&(0x20)) == 0x20 ) //触发比例阀2自整定
{
if( (astep_s == SECTION_WAIT) && (pv_one.status != PROV_ADJUSTING) )
{
pv_two.status = PROV_ADJUSTING;
}
}
// if( (CoilState[3]&(0x40)) == 0x40 ) //触发比例阀1自整定
// {
// if( (astep_s == SECTION_WAIT) && (pv_two.status != PROV_ADJUSTING) )
// {
// pv_one.status = PROV_ADJUSTING;
// }
// }
//
// if( (CoilState[3]&(0x20)) == 0x20 ) //触发比例阀2自整定
// {
// if( (astep_s == SECTION_WAIT) && (pv_one.status != PROV_ADJUSTING) )
// {
// pv_two.status = PROV_ADJUSTING;
// }
// }
if(it_100ms_flag_pv == 1) //每隔100ms更新一次数据
@ -369,63 +371,34 @@ void analog_ctrl(void)
pv_two.bias = pv_two.target_percent - pv_two.current_percent;
}
if(it_50ms_flag_pv == 1) //每隔50ms校准一次
{
it_50ms_flag_pv = 0;
// if(it_50ms_flag_pv == 1) //每隔50ms校准一次
// {
// it_50ms_flag_pv = 0;
//
// //每个比例阀对应两个电磁阀,一个是气源一个是锁止阀
// if( (CoilState[0]&(0x03)) == 0x03 ) //2个电磁阀都开启的情况下才进行控制比例阀1,否则保持
// {
// if(pv_two.status != PROV_ADJUSTING) //对其中一个比例阀进行自整定时,不对另一个进行控制
// {
// prov_ctrl(&pv_one, &adj_pv1);
// }
// }
//
// if( (CoilState[0]&(0x0C)) == 0x0C ) //2个电磁阀都开启的情况下才进行控制比例阀2,否则保持
// {
// if(pv_one.status != PROV_ADJUSTING) //对其中一个比例阀进行自整定时,不对另一个进行控制
// {
// prov_ctrl(&pv_two, &adj_pv2);
// }
// }
//每个比例阀对应两个电磁阀,一个是气源一个是锁止阀
if( (CoilState[0]&(0x03)) == 0x03 ) //2个电磁阀都开启的情况下才进行控制比例阀1,否则保持
{
if(pv_two.status != PROV_ADJUSTING) //对其中一个比例阀进行自整定时,不对另一个进行控制
{
prov_ctrl(&pv_one, &adj_pv1);
}
}
if( (CoilState[0]&(0x0C)) == 0x0C ) //2个电磁阀都开启的情况下才进行控制比例阀2,否则保持
{
if(pv_one.status != PROV_ADJUSTING) //对其中一个比例阀进行自整定时,不对另一个进行控制
{
prov_ctrl(&pv_two, &adj_pv2);
}
}
}
// }
}
//逐步接近法
//void prov_calibrate_step(propotion_valve *pvx)
//{
// pvx->cstep_wait = (pvx->cstep_wait > 254)?(pvx->cstep_wait):(pvx->cstep_wait + 1); //每100ms加一次上限255
//
// if( pvx->cstep_wait > CSTEP_WAIT_MAX) //目标更新X秒后误差仍不符合条件时再进行微步调节
// {
// if( (pvx->bias > pvx->bias_area) && (pvx->bias < BIAS_MAX) ) //正偏差(目标-实际),输出偏小
// {
// pvx->current_input += ((pvx->bias < 1))?(pvx->cstep_gasin):(pvx->cstep_gasin*3);
//
// pvx->current_input = (pvx->current_input <= pvx->cstep_max)?(pvx->current_input):(pvx->cstep_max); //dac输出限幅
// pvx->current_input = (pvx->current_input <= pvx->input_max)?(pvx->current_input):(pvx->input_max);
//
// pvx->pvout(pvx->current_input);
// }
//
// if( (pvx->bias < -pvx->bias_area) && (pvx->bias > -BIAS_MAX) ) //负偏差(目标-实际),输出偏大
// {
// pvx->current_input -= ((pvx->bias > -1))?(pvx->cstep_gasin):(pvx->cstep_gasout*3);
//
// pvx->current_input = (pvx->current_input >= pvx->cstep_min)?(pvx->current_input):(pvx->cstep_min); //dac输出限幅
// pvx->current_input = (pvx->current_input >= pvx->input_min)?(pvx->current_input):(pvx->input_min);
//
// pvx->pvout(pvx->current_input);
// }
// }
//
//}