开启成长之旅!这是我参与「日新计划 12 月更文挑战」的第41天,点击查看活动详情

一、串口屏

单片机运用串口2接纳和发送数据

完结功用有:改动屏幕的亮度,收集输出电压电流(adc)频率(eg8010)显现在串口屏,改动输出频率电压(接纳串口屏数据,通过8010改动)。

1.1、接纳数据

接纳串口屏数据,因为数据字节数是无规律的,所以接纳数据运用到了行列办法接纳。

  • 行列

用了比较简单的办法,循环行列。

大体思路便是:结构体变量(数组,头尾变量作为数组的下标)

typedef	struct _QUEUE
{
	u16 _head;            //数据栈头指针
	u16 _tail;						 //数据栈尾指针
	u8 _data[QUEUE_MAX_SIZE];	//#define QUEUE_MAX_SIZE 80 ,行列长度
}QUEUE;

光伏电子工程的设计与实施2022——单片机力控部分实现思路

  • 数据放入
void queue_push(u8 _data)//数据一个一个放入FIFO,串口屏
{
	u16 pos;
	pos = (que._tail+1)%QUEUE_MAX_SIZE; //
	if(pos!=que._head)//非满状况		
	{
		que._data[que._tail]=_data;
		que._tail = pos;
	}                 
}

光伏电子工程的设计与实施2022——单片机力控部分实现思路

  • 数据取出
static void queue_pop(u8* _data)
{
	if(que._tail!=que._head)//非空状况
	{
		*_data = que._data[que._head];
		que._head = (que._head+1)%QUEUE_MAX_SIZE; //栈尾指向下一个指令头部? ? ? ? 
	}
}

光伏电子工程的设计与实施2022——单片机力控部分实现思路

1.2、发送数据

  • 单片机发送给串口屏数据很简单,代码如下发送一个字节数据
void Uart2_SendData(unsigned char dat)  //串口2发送数据
{
	S2BUF =	dat;//写数据到UART2数据寄存器
	while(!(S2CON&S2TI));//等候串口发送完结
		S2CON&=~S2TI;//发送中止标志方位0
}

光伏电子工程的设计与实施2022——单片机力控部分实现思路

  • 发送2字节数据,把int拆分开高8位低8位别离发送
void SendDatas(u16 str)
{
	Uart2_SendData((u8)((str>>8)&0xff));
	Uart2_SendData((u8)(str&0xff));	
}

光伏电子工程的设计与实施2022——单片机力控部分实现思路

  • 串口屏显现的是文本,运用有时候要把整形数转为字符串,然后发送
sprintf(Text_buf,"%d",dat); //把整型dat转为字符串Text_buf

光伏电子工程的设计与实施2022——单片机力控部分实现思路

1.3、显现曲线

1、收集2个ad(电压 电流)

2、比较2ad,判别是否从曲线零点开端

3、循环收集屏的宽度+5个ad(滤波需求多出5个值)

4、滤波(取5个连续ad的平均值),比较出峰值谷值

5、发送数据给串口屏显现

1.4、改动亮度

接纳串口屏的数据指令,发送改动亮度指令

二、EG8010

运用的串口3,数据接纳到数组里边,因为数据很固定,都是发送2字节返回4字节数据

注:eg需求初始化

2.1、接纳发送数据

  • 接纳
void UART3_Routine(void) interrupt 17 //串口3中止
{
	if(S3CON&S3RI)								//等候串口接纳完结
	{		
    S3CON&=~S3RI;								//手动清零接纳中止标志位	
		eg8010_buf[eg_count++]=S3BUF;//压入到指令缓冲区
	}
}

光伏电子工程的设计与实施2022——单片机力控部分实现思路

  • 发送
void Uart3_SendData(u8 dat)//串口3发送1个字节数据
{
	S3BUF=dat;//写数据到UART3数据寄存器
	while(!(S3CON&S3TI));//等候发送中止标志方位1
	S3CON&=~S3TI;//将发送中止标志方位0
}

光伏电子工程的设计与实施2022——单片机力控部分实现思路

2.2、读电压电流温度频率

1、发送读取指令

2、等候数据接纳完结

3、读取接纳到的数据,4字节,别离是电压电流温度频率

2.3、改动输出电压频率

1、接纳到串口屏的改动电压(频率)命令

2、发送给eg8010改动电压命令改动输出电压,操控数据命令改动输出频率

三、RS485

3.1、485初始化

使能脚界说,串口4初始化

sbit EN_485=P0^4;		//485使能脚

光伏电子工程的设计与实施2022——单片机力控部分实现思路

void RS485_init()//485初始化
{
	Uart4_init();
	EN_485 = 0;//接纳状况
}

光伏电子工程的设计与实施2022——单片机力控部分实现思路

3.2、接纳数据响应函数

  • 完好函数

接纳到数据,依据功用码去处理,如果5ms还没有处理就摒弃掉这次数据

  • 守时处理

从接纳到最后一个数据开端计时,5ms后数据清理

  • 数据接纳中止

receTimeOut决议数据处理等候最大时刻,5便是5ms清零,与守时处理函数相关

  • 设置单个寄存器函数

读出寄存器地址,和设置的内容,调用设置寄存器函数,最后数据发回plc

  • 设置寄存器函数

依据地址,设置不同的寄存器

四、WiFi

运用的是模仿串口的办法,守时器1

4.1、模仿串口流程图

大致流程便是:中止中4个判别(3个有关接纳,1个发送)

r被拉低,说明开端接纳,就去接纳8位,接纳完就放入数组。

t拉低,起始位开端发送,发送8位+1中止位

光伏电子工程的设计与实施2022——单片机力控部分实现思路
光伏电子工程的设计与实施2022——单片机力控部分实现思路​修改

光伏电子工程的设计与实施2022——单片机力控部分实现思路
光伏电子工程的设计与实施2022——单片机力控部分实现思路​修改

五、EEPROM(断电数据维护)

当每次智能离网微逆变体系信号源开机时,将“开机”的“次数”加1;

单片机上电初始化程序完结后读取EEPROM里的开机次数到变量a+1,而且显现在串口屏。

EEPROM程序完结参阅STC——EEPROM(断电数据维护)_dz小伟的博客-CSDN博客

六、力控(vb代码)

6.1、用到的函数

#TextControl.Text         //文本框内容,获取,更改
Display("顶部窗口"); 	    //翻开窗口,切换窗口
MsgBox("暗码过错"+ setten +"次");    //弹出提示框
Exit(2);			        //退出程序运用01234
CloseWindow();		        //关闭窗口,关闭弹出式窗口用
IntToStr($Day,10);		        //整数转字符串,返回值字符串
StrRight(string,2);	        //截取字符串右边个字符
Rand(10000);                    //随机数
#ComboBox1.GetWindowsText(); //获取修改框内容,下拉框
#Text1.Show(1);		//躲藏控件,图形方针
#TreeMenu.GetSelItemData();  //获取树形菜单数值
strlen();        //返回字符串长度
StrRepeate("#",5);    // 重复形成的字符串。暗码躲藏用
//数据报表运用
#Report.AddRow(0,2,1);//插入一行
//#Report.SetCellDouble(0,2,1,123.1,1);//输出变量
#Report.SetCellString(0,2,1,$Time,1);//输出字符串

6.2、登录窗口

  • 暗码过错次数提示框

点击“登录”按钮后,若账号暗码过错则弹窗提示“暗码过错X次”

完结办法:界说一个整型变量,过错后加一,然后变量转字符串,用函数MsgBox显现

  • 暗码躲藏(***)和显现

1.设有“躲藏”按钮,点击后可将暗码躲藏(显现的暗码更换为‘#’)再次点击后可将躲藏额暗码恢复显现。

按钮改动变量a(是否显现暗码),窗口脚本判别是否显现暗码:是而且flag为0把文本框内容赋值给暗码变量mm,flag为1(暗码躲藏切换回显现后履行一次),把mm赋值给文本框显现,flag清零。否躲藏暗码而且flag为0(暗码显现切换躲藏后履行一次),把flag置1,求出变量mm长度,把文本框赋值为长度len个#,flag置1。flag为1(暗码躲藏循环履行的语句),判别mm和文本框内容长度是否共同,共同什么都不履行,不然变量len2=文本框-mm,把文本框的右len2个字符加到mm上,从头给文本框赋值len+len2个#。

2.设有“躲藏”按钮,点击后可将暗码躲藏(显现的暗码更换为‘*’)再次点击后可将躲藏额暗码恢复显现。

做2文本框(属性设置为一个暗码显现一个暗码躲藏),2文本框切换显现(按钮改动变量完结切换)(牢记2文本框内容必须相同且同步,在窗口脚本中同步)

  • 验证码

设有4位验证码显现、可刷新验证码。

运用rand发生随机数。点击刷新,发生随机数并赋值给文本(不是4位数则从头随机)

光伏电子工程的设计与实施2022——单片机力控部分实现思路
光伏电子工程的设计与实施2022——单片机力控部分实现思路​修改

  • 自动判别账号和暗码过错

账号输入正确时,弹窗提示“账号正确”,若账号输入超过4个字符且过错时弹窗提示“账号过错”并清空输入的账号;当暗码输入正确时,弹窗提示“暗码正确”,若暗码输入超过6个字符且过错时弹窗提示“暗码过错”并清空输入的暗码;

界说flag和flag2(账号暗码标志位,正确则置1),窗口脚本,进入后别离判别flag和flag2是否为0,为0后持续判别账号正确(flag置1),账号过错(账号不等于而且长度大于4)。

清空文本框:给文本框赋值””

  • 账号确定

一个变量,1表明确定账户,解锁清空0

  • 推迟2s

点击“登录”按钮后,若管理员账号暗码正确,则等候2秒后,弹窗提示“管理员账号登录”并翻开“顶部窗口”和“操作界面”;

暗码正确后一个变量a置1,窗口脚本另一个变量b++,直到b加到2s后,弹窗和翻开指定窗口。

6.3、顶部窗口

  • 切换窗口(树形菜单)

读取树形菜单数值到变量a,依据a切换窗口,(切换窗口之前加一个判别是否和前次变量shu1相同),注:要在进入窗口的时候先给shu1赋初始值(不赋值会直接进入到树形菜单的初始值界面)

  • 切换窗口(切换控件)

一个变量a++,一个a–,然后切换依据a数值切换。

  • 显现时刻(格局:XX日XX月XX年—上午/下午XX时XX分—星期X)

读取出变量,按格局赋值给文本框。

光伏电子工程的设计与实施2022——单片机力控部分实现思路
光伏电子工程的设计与实施2022——单片机力控部分实现思路​修改

6.4、监视窗口

  • 下拉框切换组合表

判别下拉内容然后躲藏显现表

光伏电子工程的设计与实施2022——单片机力控部分实现思路
光伏电子工程的设计与实施2022——单片机力控部分实现思路​修改

  • 单选

判别3中心变量状况是否和开关状况相等

不相等在判别中心变量是0仍是1

0把开关状况置1,其他2个置0

1把开关状况置0

八、离网硬件

分为2块电路板

8.1、逆变升压

升压,逆变,前后级检测维护

  • 前级升压到400v
  • 后级逆变,LR滤波输出沟通220v

8.2、驱动部分

前级升压驱动,后级逆变驱动,毛病检测通讯操控

  • 前级SG3525升压驱动(pwm12),过压过流欠压维护
  • 后级EG8010逆变驱动(spwm1234),IR2110隔离放大5-15v
  • 单片机通讯操控电路

九、呼吸灯

使用守时器1中止,模仿PWM,使led出现呼吸灯作用