登录
首页 无所不谈
回帖 发帖
正文

主题:AI编程

点击:252 回复:8

AI横行,突发奇想,AI编写PLC程序会如何?
附件 无标题.jpg
附件 无标题2.jpg
24-12-05 13:36
这个AI编程方案是可行的,只是需要一个庞大的用户经验数据库
比如 你的 启动逻辑  停止逻辑 自锁逻辑  作好对于各种动作及条件的对应编程逻辑,然后把AI引入 只是需要试错 AI编程后 需要人工修改与审核
24-12-05 18:28
梯形图在PLC编程的地位慢慢就变低喽表情
24-12-05 21:00
以前在豆包试过还不行,估计现在是进化了
24-12-05 21:41
AI还需要训练,用的置位命令,又用了自锁命令。
24-12-06 08:11
我记得好像chatgpt3.0的时候有人就用它做过plc编程,当然是一些简单的小程序,也有能单片机编程的AI,这种计算机或者说工程思想的内容我觉得AI应该更容易实现。
24-12-06 09:15
我觉得没事还是去研究自动驾驶汽车吧,卷咱们这些臭鱼烂虾没有意义,AI再强线得人接吧,老板用AI编程好了调试不得去人吗,这个工具最终还是方便我们使用,替代搞自动化工程师还不太行,AI编完就一定正确能用吗,不得一个懂行的给审一下么,不合适还得给改改。
24-12-11 16:17
还得需要大量数据来支撑。
24-12-16 16:11
还是豆包,
STC8H1K28与TM1638的4位共阳led,5按键程序;
#include
#include
// 定义TM1638与单片机连接的引脚
sbit DIO = P2^0;
sbit CLK = P2^1;
sbit STB = P2^2;
// 共阳数码管段码表(0 - 9,A - F),根据实际数码管调整
unsigned char code SEG_CODE[] = {
   0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90,
   0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
// 延时函数,用于产生适当的时序延时
void Delay(unsigned int x) {
   unsigned int i, j;
   for (i = 0; i < x; i++)
       for (j = 0; j < 120; j++);
}
// 向TM1638写入一个字节数据
void Write_TM1638(unsigned char dat) {
   unsigned char i;
   for (i = 0; i < 8; i++) {
       CLK = 0;
       DIO = dat & 0x01;
       dat >>= 1;
       CLK = 1;
   }
}
// 发送命令字到TM1638
void Send_CMD(unsigned char cmd) {
   STB = 0;
   Write_TM1638(cmd);
   STB = 1;
}
// 初始化TM1638
void TM1638_Init() {
   Send_CMD(0x8F);  // 设置显示模式,开启显示等
}
// 在指定位置显示一位数字(pos为0 - 3表示数码管从左到右的位置,num为要显示的数字0 - F)
void Display_Digit(unsigned char pos, unsigned char num) {
   Send_CMD(0x44);  // 设置数据自动地址加1模式
   STB = 0;
   Write_TM1638(0xC0 | pos);  // 设置显示地址
   Write_TM1638(SEG_CODE[num]);
   STB = 1;
}
// 显示4位数字(disp_buf数组存放要显示的4位数字,例如disp_buf[0]为最高位数字)
void Display_Number(unsigned char disp_buf[]) {
   unsigned char i;
   for (i = 0; i < 4; i++) {
       Display_Digit(i, disp_buf[i]);
   }
}
// 扫描按键,返回按键值(0 - 5表示5个按键,无按键按下返回0xFF)
unsigned char Scan_Keys() {
   unsigned char key_value = 0xFF;
   Send_CMD(0x42);  // 设置读按键命令
   STB = 0;
   Write_TM1638(0xC0);
   CLK = 0;
   DIO = 1;
   _nop_();
   _nop_();
   CLK = 1;
   _nop_();
   _nop_();
   if (DIO == 0) {  // 有按键按下
       key_value = 0;
       while (DIO == 0);  // 等待按键释放
   }
   STB = 1;
   return key_value;
}
void main() {
   unsigned char disp_buf[4] = {0, 0, 0, 0};  // 显示缓冲区
   unsigned char key;
   TM1638_Init();
   while (1) {
       // 在这里可以根据自己的需求设置要显示的数字到disp_buf数组中
       Display_Number(disp_buf);
       key = Scan_Keys();
       if (key!= 0xFF) {
           // 根据按下的按键进行相应处理,这里简单打印按键值示例
           switch (key) {
               case 0:
                   // 处理第一个按键按下的逻辑
                   break;
               case 1:
                   // 处理第二个按键按下的逻辑
                   break;
               case 2:
                   // 处理第三个按键按下的逻辑
                   break;
               case 3:
                   // 处理第四个按键按下的逻辑
                   break;
               case 4:
                   // 处理第五个按键按下的逻辑
                   break;
           }
       }
       Delay(10);  // 适当延时,避免频繁扫描
   }
}
24-12-24 11:52

工控新闻

更多新闻资讯