yyy5102 发表于 2024-8-9 09:45:15

新手求助:12CA560S2工控板寻找好心网友帮忙写程序

寻找好心网友帮忙写程序


我现在用12C5A60S2——(价格4元一个)做的工控板,暂时先用这个,以后再考虑换芯片
输入点
P22=X0 按钮1
P23=X1 接近开关
P24=X2 磁性开关
P25=X3 信号
P27=X5 按钮2
输出点
P20=Y0 电机
P07=Y1 电磁阀
P06=Y2 信号
程序流程:

X0 复位按钮1按下,启动变量M5 (参考三菱程序的中间量) 启动Y0电机

X0 复位按钮1再次按下,结束变量M5,停止所有输出,不包括Y1

X1接近开关上升沿触发后,停止Y0,启动Y1
X2磁性开关 和Y1,同时启动四个计时器,T0,T1 T2,T3
T0开 T1关M5开,输出Y2
T2开 T3关,m5开,输出Y2
-----------
X5按钮2,复位开关,按下停止程序M5,反转Y1电磁阀

soma 发表于 2024-8-9 10:58:06

可以换8051U

网老四 发表于 2024-8-9 11:24:44

M5程序指什么?
工控这东西基本都是低速IO时序,实现起来比较容易的.

jwd 发表于 2024-8-9 13:19:53

楼主估计还没有整理好他的思路

yyy5102 发表于 2024-8-9 14:01:37

jwd 发表于 2024-8-9 13:19
楼主估计还没有整理好他的思路
这个工控板目前,在使用中,,有三菱的程序,没有STC的程序,STC的程序,Kill的我不会写,所以求助网友,帮写一下,或写一问部分也可

yyy5102 发表于 2024-8-9 14:06:12

soma 发表于 2024-8-9 10:58
可以换stc8051u

平台搭建好了,在使用中,小批量生产中
等写好KILL程序,再换其它芯片
因为我不会写程序,所有求助网友帮写一下

网老四 发表于 2024-8-9 14:15:46

yyy5102 发表于 2024-8-9 14:06
平台搭建好了,在使用中,小批量生产中
等写好KILL程序,再换其它芯片
因为我不会写程序,所有求助网友 ...

你不是用PLC2hex移植的吗?难道没成功

yyy5102 发表于 2024-8-9 21:33:38

网老四 发表于 2024-8-9 14:15
你不是用PLC2hex移植的吗?难道没成功

已经成功了,现在小批量制作中
之所有需要KILL程序,是因为好更换新芯片
-----
新芯片不需要晶振,安全 性能更高。

yyy5102 发表于 2024-8-9 21:34:50

soma 发表于 2024-8-9 10:58
可以换stc8051u

我也想换,换了U不会写程序
所以现在找网友帮忙写程序

ximi西米 发表于 2024-8-10 08:39:24

针对您描述的STC12CA560S2微控制器在工业控制板上的应用需求,我们可以设计一个简单的程序流程来满足您的要求。由于STC12CA560S2是一个基于8051内核的单片机,我们将使用标准的C语言来编写控制逻辑。下面是一个简化的程序框架,用于实现您的功能需求:

c
#include <reg52.h> // 包含STC12C560S2的头文件

sbit X0 = P2^2; // 定义输入点
sbit X1 = P2^3;
sbit X2 = P2^4;
sbit X5 = P2^7;
sbit Y0 = P2^0; // 定义输出点
sbit Y1 = P0^7;
sbit Y2 = P0^6;

bit M5 = 0; // 定义变量M5,作为中间控制变量

void Timer0_Init(); // 假设需要初始化定时器(具体实现根据需求)
void Timer1_Init();
void Timer2_Init();
void Timer3_Init();

void main() {
    // 初始化IO口和定时器(这里仅为示意,具体实现根据硬件和需求)
    X0 = 1; // 通常设置为输入模式时,需要配置为上拉或下拉
    X1 = 1;
    X2 = 1;
    X5 = 1;

    Y0 = 0; // 初始时电机停止
    Y1 = 0; // 初始时电磁阀关闭
    Y2 = 0; // 初始时信号输出关闭

    Timer0_Init();
    Timer1_Init();
    Timer2_Init();
    Timer3_Init();

    while (1) {
      // 检测X0(复位按钮1)的状态变化
      if (!X0) {
            delay(10); // 消抖延时
            if (!X0) {
                if (M5) {
                  // 如果M5已启动,则停止所有输出(除了Y1)
                  M5 = 0;
                  Y0 = 0;
                  // 如果需要,可以在这里添加代码来停止其他输出或重置状态
                } else {
                  // 如果M5未启动,则启动M5和Y0
                  M5 = 1;
                  Y0 = 1;
                }
                while (!X0); // 等待按钮释放
            }
      }

      // 检测X1(接近开关)的上升沿
      // 假设有一个变量lastX1保存了X1的上一个状态
      if (X1 && !lastX1) {
            Y0 = 0; // 停止Y0
            Y1 = 1; // 启动Y1
            // 初始化或重置计时器(如果需要)
            // ...
            lastX1 = 1; // 更新X1的状态
      }

      // 检测X2(磁性开关)的状态
      // 如果X2为高且Y1也为高,则启动计时器
      if (X2 && Y1) {
            // 假设这里通过控制寄存器来启动/停止定时器
            // ...
      }

      // 处理X5(按钮2)的按下
      if (!X5) {
            delay(10); // 消抖延时
            if (!X5) {
                M5 = 0; // 停止M5
                // 如果需要反转Y1,则切换Y1的状态
                Y1 = !Y1;
                while (!X5); // 等待按钮释放
            }
      }

      // 根据M5和计时器的状态控制Y2
      // ...
    }
}

// 延时函数(简单实现,用于消抖)
void delay(unsigned int ms) {
    // 实现延时逻辑,这里只是示意
}

// 定时器初始化函数(具体实现根据需求)
void Timer0_Init() {
    // ...
}
// ... 其他定时器的初始化函数
注意:

上面的代码是一个简化的框架,具体实现时需要根据您的硬件环境和需求进行调整。
定时器的初始化和控制逻辑没有详细展开,因为这取决于您的具体需求(如定时时间、中断服务程序等)。
消抖延时函数delay的具体实现也需要您根据系统时钟频率来编写。
输入点通常配置为上拉或下拉输入,具体取决于您的电路设计。
文心一言编写的框架
页: [1] 2 3
查看完整版本: 新手求助:12CA560S2工控板寻找好心网友帮忙写程序