找回密码
 立即注册
查看: 598|回复: 27

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

[复制链接]
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 90 天

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6773

    积分

    荣誉版主

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

    积分
    6773
    QQ
    发表于 2024-4-8 09:25:57 | 显示全部楼层 |阅读模式
    接上一章:让你的STC32变成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的也可以自己去抓包看看通信的数据是不是都符合这个格式,有问题的小伙伴可以帖子下面留言,下一章节主要讲下载程序怎么保存。
    回复 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 09:01
  • 签到天数: 155 天

    [LV.7]常住居民III

    25

    主题

    717

    回帖

    1785

    积分

    金牌会员

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

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 94 天

    [LV.6]常住居民II

    2

    主题

    56

    回帖

    378

    积分

    中级会员

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

    使用道具 举报

  • TA的每日心情

    昨天 07:58
  • 签到天数: 57 天

    [LV.5]常住居民I

    3

    主题

    534

    回帖

    702

    积分

    高级会员

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

    使用道具 举报

  • TA的每日心情
    开心
    1 分钟前
  • 签到天数: 49 天

    [LV.5]常住居民I

    0

    主题

    12

    回帖

    266

    积分

    中级会员

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

    点评

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

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 90 天

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6773

    积分

    荣誉版主

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

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

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

    使用道具 举报

  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 51 天

    [LV.5]常住居民I

    2

    主题

    148

    回帖

    191

    积分

    注册会员

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

    使用道具 举报

  • TA的每日心情
    开心
    1 分钟前
  • 签到天数: 49 天

    [LV.5]常住居民I

    0

    主题

    12

    回帖

    266

    积分

    中级会员

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

    好的
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    113

    回帖

    627

    积分

    高级会员

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

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

    使用道具 举报

    该用户从未签到

    1

    主题

    113

    回帖

    627

    积分

    高级会员

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-2 08:10 , Processed in 0.080446 second(s), 75 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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