标题:
STM32单片机PLC FX3U源码以及关联资料
[打印本页]
作者:
yyhyyhyyh
时间:
2022-12-11 17:06
标题:
STM32单片机PLC FX3U源码以及关联资料
//crc校验码 从02后面一个字节开始累加到03,和的低8位再分成高4位和低4位,即03后面的两个字节
//三菱格式码 0 --30 1--31 2--32 3--33 4--34 5--35 6--36 7--37 8--38
// 9--39 A--41 B--42 C--43 D--44 E--45 F--46
三、寄存器说明
M0-M383 384点 一般用
M384-M511 128点 EEPROM 保持用
M512-M1535 1024点 电容保持用
M8000-M8255 256点 特殊用
S0-S9 10点 初始状态 EEPROM保持性
S10-S127 118点 EEPROM保持性
S128-S999 872点 电容保持性
D0-D127 128点
D128-D255 128点 EEPROM保持性、
D256-D7999 7744点 电容保持性
D1000-D7999 文件寄存器
D8000-D8255 256点 16位特殊用 本程序对应D6000-D6255
四、模拟量采集
D7899到 D7999存放的是 模拟量采集 数字量---高温度值----低温度值-----电流值
单片机源程序如下:
/********************************************************************************
* 文件名 :main.c
* 描述 :PLC应用平台固件程序
* DI DO AI AO RTC 固件 监控
* 实验平台:螺杆机通用平台
* 硬件连接: 1、停电处理 停电时不做主循环 梯形图停止运转 IO停止输出
2、正常运转模式
* 作者 : 王玺联
**********************************************************************************/
#include "PLC_Config.h"
#include "bsp.h"
#include "port.h"
AppManageFlag MainAppManageFlag;
//**************************************************************************************************
// [名称] u8 ExtendBoardHaveOrNot(void)
// [功能] 扩展板有无检测
// [作者]
// [日期] 2015年08月11号
// [版本]
//**************************************************************************************************
u8 ExtendBoardHaveOrNot(void)
{
if (GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_5) == 1)
{
//为高说明扩展板存在
d[ SYS_EXTEND_BORD_HAVE_ADR ]= EXTEND_BORD_HAVE;
return EXTEND_BORD_HAVE ;
}
else
{
//为低电平 说明扩展板不存在
d[ SYS_EXTEND_BORD_HAVE_ADR ]=EXTEND_BORD_HAVE_NO;
return EXTEND_BORD_HAVE_NO;
}
}
//**************************************************************************************************
// [名称] void AppMain(void)
// [功能] 正常运行处理 电源正常 梯形图运转 非修正模式
// [作者]
// [日期]
// [版本]
//**************************************************************************************************
void AppMain(void)
{
RegisterXInRefresh();
if(MainAppManageFlag.AdConvert ==TRUE)
{
MainAppManageFlag.AdConvert = FALSE;
AdConvertManage();
}
if(MainAppManageFlag.RtcEeprom ==TRUE)
{
MainAppManageFlag.RtcEeprom = FALSE;
RtcTimeEepromWrtReadManage();
}
if(MainAppManageFlag.DaOut ==TRUE)
{
MainAppManageFlag.DaOut = FALSE;
DaOutManage();
}
if(MainAppManageFlag.Modbus ==TRUE)
{
MainAppManageFlag.Modbus =FALSE;
if (RS485_SLAVE_MODE ==d[RS_485_MASTER_SLAVE_SWICH])
{
ModbusManage();
}
else if(RS485_MASTER_MODE ==d[RS_485_MASTER_SLAVE_SWICH])
{
TopUnitContrlManage();
}
else
{
;//去执行三菱通信协议
}
}
if(MainAppManageFlag.TopOsWrdBit == TRUE)
{
MainAppManageFlag.TopOsWrdBit =FALSE;
TopWrdBitConvertManage();
}
if(MainAppManageFlag.TopOsPhyPropBit == TRUE)
{
MainAppManageFlag.TopOsPhyPropBit =FALSE;
TopPhysiPropManage();
}
if(LadRun()==LAD_DOWN_LOAD_OVER)
{
SetLedSts(PLC_LAD_RUN );
}
else
{
SetLedSts(PLC_IDLE );
}
RegisterYOutRefresh();
}
//**************************************************************************************************
// [名称] int main(void)
// [功能] 主程序处理
// [作者]
// [日期] 2014年10月9号
// [版本]
//**************************************************************************************************
unsigned char MainLoop =100;
extern unsigned char volatile PlcManageSts;
int main(void)
{
//禁止所有中断
DisableInterrupts();
CompileLocatToDataSectionClr();
CompileDataClr();
//NVIC configuration
NVIC_Configuration();
TIM2_Initial();
//GPIO 输入输出设置
GPIO_Configuration();
SysTickConfig();
I2C_EE_Init() ;
Usart1Init();
Usart2MultiComInit();
Usart3Init();
FuncInit();
PowerOnManage();
SetSubCircutStartOn();
ExtendBoardHaveOrNot();
E2PromFirstUseInitManage();
ReadCorectParamDataFromE2prom();
PowerOnReadRtcCopyToLocalClock();
IWDGInit();
//开启所有中断
EnableInterrupts();
while (1)
{
IWDG_ReloadCounter();
switch(MainLoop)
{
case 100:
//在进入真正的梯形图循环之前将 DI AI 数据采集到内存
RegXReset();
RegisterXInRefresh();
if(AD_MANAGE_FINSH ==AdConvertManage( ))
{
MainLoop =0;
}
else
{
MainLoop =100;
}
break;
//掉电检测
case 0:
if(PowerOffManage() ==TRUE)
{
MainLoop =4;
}
else
{
MainLoop =1;
}
break;
//编程PROG SW检测
case 1:
PlcProgRunCheck();
if(LAD_RUN == PlcManageSts)
{
MainLoop =6;
}
else if(LAD_PROG == PlcManageSts)
{
MainLoop =5;
}
else if(LAD_RUN_TO_PROG == PlcManageSts)
{
MainLoop =50;
}
else if(LAD_PROG_TO_RUN == PlcManageSts)
{
MainLoop =60;
}
break;
//掉电 模式
//检测是否来电,来电后进行主程序循环
case 4:
if(TRUE ==PowerOnCheckManage())
{
MainLoop =0;
}
else
{
MainLoop =4;
}
break;
case 50:
PlcStopInit();
MainLoop =5;
break;
//编程模式
case 5:
LadProgManage();
SetLedSts(PLC_LAD_PORG );
CorectParamDataPrintManage( );
MainLoop =0;
break;
case 60:
//等待复位
DisableInterrupts();
PlcRunInit();
PlcProgToRunReadCrctParamInit();
GenerateSystemReset();
EnableInterrupts();
break;
//运行模式
case 6:
AppMain();
MainLoop =0;
break;
default:
break;
}
}
}
复制代码
51hei.png
(9.3 KB, 下载次数: 56)
下载附件
2022-12-12 03:01 上传
所有资料51hei附件下载:
FX3U源码以及关联资料20180827.7z
(1.95 MB, 下载次数: 136)
2022-12-12 03:04 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
jokefjg
时间:
2022-12-17 12:31
有没有F407的
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1