找回密码
 立即注册
查看: 4148|回复: 50

PLC 实战, 让你的32G12K128变成FX3U教程(二)程序下载, PLC 实战

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2024-4-8 09:25:57 | 显示全部楼层 |阅读模式
接上一章:让你的 32G12K128 变成FX3U教程(一)建立连接,
PLC 实战  https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7340
这一张主要实现的功能如下,通过上位机可以下载程序到工控板。



一、过程分析
1.上位机发送:02 45 30 31 38 30 30 30 30 32 03 44 33
2.上位机发送:02 45 30 31 38 30 34 34 30 43 03 45 43

3.上位机发送:02 45 30 30 38 30 30 30 46 45 03 46 42
4.上位机发送:02 45 30 30 38 30 46 45 30 32 03 46 44
5.上位机发送:02 45 30 30 38 30 31 34 30 36 03 44 42

6.上位机发送:02 46 35 30 31 30 30 30 36 30 03 44 35

7.上位机发送:02 45 31 31 38 30 30 30 35 43 31 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 46 34 30 39 46 46 30 42 46 34 30 31 45

8.上位机发送:02 45 31 31 38 30 35 43 46 45 30 30 32 34 30 30 43 35 30 46 30 30 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 03 32 39

9.上位机发送:02 46 35 30 31 30 34 32 36 31 03 44 43
10.上位机发送:02 45 31 31 38 30 30 32 30 32 44 38 42 41 03 44 35
11.上位机发送:02 45 30 30 38 31 35 32 30 32 03 44 41
15.上位机发送:02 46 35 30 31 30 30 30 36 30 03 44 35
13.上位机发送:02 46 35 30 31 31 30 38 30 30 36 03 30 45
14.上位机发送:02 45 30 31 38 30 30 38 30 38 03 45 31
15.上位机发送:02 30 30 45 43 41 30 32 03 38 45
16.上位机发送:02 45 37 37 36 36 30 03 35 32
17.上位机发送:02 46 37 31 38 30 35 43 31 46 44 35 43 30 46 46 03 38 30
18.上位机发送:02 46 35 30 31 30 36 39 36 30 03 45 34

19.上位机发送:02 45 31 31 38 30 35 43 46 45 30 30 32 34 30 30 43 35 30 46 30 30 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 03 32 39

20.上位机发送:02 45 38 37 36 36 30 03 35 33
21.上位机发送:02 30 30 45 43 41 30 32 03 38 45
22.上位机发送:02 42 03 34 35

乍一看好像上面的指令超级多,但是归类之下就很简单,首先每个数据帧是02开头,03结尾,命令就可以理解为如下的格式
截图202404080853507787.jpg

需要注意的是不同的功能码的数据帧可能对应不一样的帧命令长度和数据,这一章节的内容的整个通信功能基本如下:
截图202404080905541669.jpg

针对于上面的几种功能和每种功能对应的命令,分别编写对应的操作函数即可。

二、过程分析

1.针对0x45功能,01命令的回复
这一个命令主要是读取代码的属性,包含代码步长等信息,直接从内存区域读出来返回即可,实现的代码如下:
  1. void PC_READ_PORG2(void)                  //读程序E01
  2. {
  3.         u16 temp;
  4.         u8 temp_sum;
  5.         comm_port.g_TxBuf[0]=0x02;                 //报文开始
  6.         temp_sum=0;
  7.         data_address-=0x8000;                   //发送下来的是80xx 对应到实际本地的偏移地址上
  8.         for(temp=0; temp<data_size2; temp++)
  9.         {
  10.                 comm_port.g_TxBuf[temp*2+1] =Ascll[plc_programCodeBuf[data_address+temp]/0x10]; //取字节高位
  11.                 comm_port.g_TxBuf[temp*2+2] =Ascll[plc_programCodeBuf[data_address+temp]%0x10]; //取字节低位
  12.                 temp_sum +=comm_port.g_TxBuf[temp*2+1]+comm_port.g_TxBuf[temp*2+2];
  13.         }
  14.         comm_port.g_TxBuf[temp*2+1]=0x03;
  15.         temp_sum+=0x03;
  16.         comm_port.g_TxBuf[temp*2+2]=Ascll[temp_sum/0x10];
  17.         comm_port.g_TxBuf[temp*2+3]=Ascll[temp_sum%0x10];
  18.         comm_port.txCnt =temp*2+4;
  19.      
  20. }
复制代码
数据回复的帧也和发送的帧一样02开头,03和两字节的校验结尾
截图202404080910002175.jpg

需要注意的是发送和接收的数据都是ascll传输的,例如一个16进制的0x16,传输就是0x31 ,0x36,这个具体参照ascll码表即可。


2.针对0x45功能,00命令的回复
  1. void PC_READ_Parameter2(void)        //读配置 E00
  2. {
  3.         
  4.         u8 temp_sum;
  5.         
  6.         
  7.         comm_port.g_TxBuf[0]=0x02;//报文开始
  8.         temp_sum=0;
  9.         prog_address =PLC_Comm_Byte(comm_port.g_TxBuf[2]*0x100+comm_port.g_TxBuf[3]);//计算数据操作起始地址
  10.         
  11.     if((prog_address==0x1790)||(prog_address==0x17D0))//请求读监控数据区0X1790 与 0X17D0地址
  12.         {
  13.    
  14.         }
  15.     else
  16.     {
  17.         for(temp=0; temp<data_size2; temp++)        //读RAM
  18.         {
  19.             send=PLC_RW_RAM_8BIT(prog_address+temp);
  20.             comm_port.g_TxBuf[temp*2+1]=Ascll[send/0x10]; //取字节高位
  21.             comm_port.g_TxBuf[temp*2+2]=Ascll[send%0x10]; //取字节低位
  22.             temp_sum +=comm_port.g_TxBuf[temp*2+1]+comm_port.g_TxBuf[temp*2+2];
  23.         }
  24.     }
  25.    
  26.         comm_port.g_TxBuf[temp*2+1]=0x03;    //
  27.         temp_sum+=0x03;
  28.         comm_port.g_TxBuf[temp*2+2]=Ascll[temp_sum/0x10];
  29.         comm_port.g_TxBuf[temp*2+3]=Ascll[temp_sum%0x10];
  30.         comm_port.txCnt =temp*2+4;
  31. }
复制代码
针对于上面的一系列操作其实基本就是读取一个内部信息和程序区域的参数,按照地址和命令直接返回plc_programCodeBuf或者plc_16BitBuf的数据即可,如果遇到一些特殊的命令还没解析出来的,可以直接抓包抓出他的返回值在特殊处理一下即可(一般返回个0x06或者0x15就能解决一半以上的问题)。
这里需要特别注意的一个命令或者说最最重要的一个命令就是0x45功能里的11命令,梯形图的程序会在上位机里转化成16进制的数据,然后通过串口下载过来,但是这个数据最总要保存到工控板里,或者说保存到单片机里,接受到之后回复上位机一个06即表示程序下载完成,但是这一节内容里我直接回复了个06,具体的程序保存我们下下章节再来完整的赘述,这里暂不处理,可以看到代码里现在我是这么处理的
  1. void PC_WRITE_PORG2(void)
  2. {
  3.         prog_address =comm_port.g_TxBuf[2]*0x100 +comm_port.g_TxBuf[3];   //计算数据操作起始地址
  4.    
  5.     //下载的程序数据需要保存,这里暂不实现
  6.     comm_port.g_TxBuf[0] = 0x06;
  7.     comm_port.txCnt =1;           
  8. }
复制代码


可以看到这一章节的代码下载程序,上位机下载程序已经可以识别到这一步了;虽然命令看着多,但是其实归类下来就那么几个而已
截图202404080923564268.jpg

这一张的代码有需要的可以在群文件下载,手边有FX3U的也可以自己去抓包看看通信的数据是不是都符合这个格式,有问题的小伙伴可以帖子下面留言,下一章节主要讲下载程序怎么保存。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:518
  • 最近打卡:2025-05-01 05:52:49
已绑定手机

46

主题

1694

回帖

2540

积分

金牌会员

积分
2540
发表于 2024-4-8 09:35:03 | 显示全部楼层
我的沙发
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:386
  • 最近打卡:2025-04-30 22:13:28
已绑定手机

8

主题

137

回帖

1045

积分

金牌会员

积分
1045
发表于 2024-4-8 10:07:31 | 显示全部楼层
这些通信协议都是民间总结出来的还是从三菱内部搞出来的 啊
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:422
  • 最近打卡:2025-05-01 09:54:52
已绑定手机

19

主题

3190

回帖

4866

积分

论坛元老

积分
4866
发表于 2024-4-8 13:01:22 来自手机 | 显示全部楼层
使用类似crc校验码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:343
  • 最近打卡:2025-05-01 07:56:21

0

主题

13

回帖

78

积分

注册会员

积分
78
发表于 2024-4-8 13:23:37 | 显示全部楼层
在哪里下载啊,找不到啊

点评

q群文件下载,软件是po解的,不敢直接传论坛上群号在我的头像边上  详情 回复 发表于 2024-4-8 13:45
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2024-4-8 13:45:52 | 显示全部楼层
zhengs*** 发表于 2024-4-8 13:23
在哪里下载啊,找不到啊

q群文件下载,软件是po解的,不敢直接传论坛上{:5_284:}群号在我的头像边上
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:246
  • 最近打卡:2025-04-30 10:10:32

3

主题

155

回帖

537

积分

高级会员

积分
537
发表于 2024-4-8 14:11:25 | 显示全部楼层
可以,持续更新了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:343
  • 最近打卡:2025-05-01 07:56:21

0

主题

13

回帖

78

积分

注册会员

积分
78
发表于 2024-4-8 16:09:10 | 显示全部楼层
电子DI*** 发表于 2024-4-8 13:45
q群文件下载,软件是po解的,不敢直接传论坛上群号在我的头像边上

好的
回复 支持 反对

使用道具 举报 送花

2

主题

185

回帖

1048

积分

金牌会员

积分
1048
发表于 2024-4-8 16:33:37 | 显示全部楼层
cn*** 发表于 2024-4-8 10:07
这些通信协议都是民间总结出来的还是从三菱内部搞出来的 啊

肯定是中国民间了,不但把三菱全系列的给总结出来了,还把西门子的S7-200和S7-300系列也给总结出来了
回复 支持 反对

使用道具 举报 送花

2

主题

185

回帖

1048

积分

金牌会员

积分
1048
发表于 2024-4-8 16:35:29 | 显示全部楼层
总结通讯协议还简单些,更难的指令编码系统都全给总结出来了
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 19:33 , Processed in 0.177154 second(s), 119 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表