打印
[STM32F4]

STM32与FPGA的PLC

[复制链接]
楼主: 東南博士
手机看帖
扫描二维码
随时随地手机跟帖
21
東南博士|  楼主 | 2019-12-17 12:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览

使用特权

评论回复
22
東南博士|  楼主 | 2019-12-17 12:44 | 只看该作者

使用特权

评论回复
23
東南博士|  楼主 | 2019-12-17 12:44 | 只看该作者

使用特权

评论回复
24
東南博士|  楼主 | 2019-12-17 12:44 | 只看该作者

使用特权

评论回复
25
東南博士|  楼主 | 2019-12-17 12:45 | 只看该作者

使用特权

评论回复
26
東南博士|  楼主 | 2019-12-17 12:45 | 只看该作者

使用特权

评论回复
27
東南博士|  楼主 | 2019-12-17 12:46 | 只看该作者
指令解析的原理:

使用特权

评论回复
28
東南博士|  楼主 | 2019-12-17 12:47 | 只看该作者

使用特权

评论回复
29
東南博士|  楼主 | 2019-12-17 12:47 | 只看该作者
    对于应用指令的解码,还需要考虑指令的执行方式、类型和组成。应用指令
的执行方式主要包括连续执行和脉冲执行两种,通过指令助记符后面的标记加以
区分。应用指令的执行方式如图3-4所示。由图3-4可知,指令助记符MOV后
面的标注“P”表示脉冲执行,在输入继电器X1状态由OFF转向ON时执行数
据寄存器赋值操作(数据寄存器D10中的数据存入到数据寄存器D 12);在没有标
注“P”的情况下,表示连续执行,输入继电器X1的状态为ON时PLC每次执
行到这里数据寄存器赋值操作都要被执行。

使用特权

评论回复
30
東南博士|  楼主 | 2019-12-17 12:47 | 只看该作者

使用特权

评论回复
31
東南博士|  楼主 | 2019-12-17 12:48 | 只看该作者
DS ZO,表示从DS开始向后偏移ZO个单位寄存器,如果ZO=K4,则将编码号为5
加上变址寄存器数值4(即KS+K4=K9),变址操作后的地址为D9o

使用特权

评论回复
32
東南博士|  楼主 | 2019-12-17 12:49 | 只看该作者
    PLC源程序转换成的二进制码只是对PLC指令程序的直接翻译,并不具备
程序运行能力。PLC源程序解码函数的功能就是按照PLC源程序解码原理将二
进制码转化为具有程序执行能力的结构体函数。为此需要在PLC系统中分配指
令和软元件的寄存器地址(软元件的寄存器地址中数据实时刷新,因此在SRAM
中分配寄存器地址),保障程序执行过程中有固定的寄存器地址与PLC指令功
能一一对应。例如LD XO指令,在PLC系统中相当于取得输入继电器X的寄存
器地址中的数据。本课题设计的PLC基本指令和应用指令条数分别为21和480
PLC基本指令、应用指令的地址配置情况如表3-7, 3-8所示。

使用特权

评论回复
33
東南博士|  楼主 | 2019-12-17 12:49 | 只看该作者

使用特权

评论回复
34
東南博士|  楼主 | 2019-12-17 12:49 | 只看该作者

使用特权

评论回复
35
東南博士|  楼主 | 2019-12-17 12:51 | 只看该作者
    STM32的SRAM存储器空间分配表中为PLC软元件地址配置区分配了
32KB大小的存储空间,地址范围为0x20014000--Ox2001BFFF o STM32的FLASH
存储器空间分配表中规划了8KB大小的PLC系统配置存储区,地址范围为
0x08042000--Ox08043FFF,用它来存储P标号、步进指令STL、步进复位指令
RET的状态。此外,为了满足PLC系统对于定时器T、计数器C的高速读取,
在双口RAM的地址范围内规划了定时器T、计数器C的状态寄存器地址,这样
就可以实现实时更新定时器、计数器的状态到双口RAM中。SRAM存储器、
FASLH存储器和双口RAM存储器的一个存储地址占用存储空间大小为一个字
节(8位)。软元件地址配置中定义了软元件的地址范围、软元件个数等信息,
PLC软元件的地址配置情况如表3-9所示。

使用特权

评论回复
36
東南博士|  楼主 | 2019-12-17 12:51 | 只看该作者
    部分软元件地址在系统中定义如下:
    #define PLC R START ADDR        0x20014000    //PLC系统软元件的起始
地址
  #define X一ASE一DDR     ((uint3 2一)PLCes R START一DD助//X软元件
的起始地址
    #define Y BASE ADDR       (X BASE ADD+(X_ SIZE+7)/8)  //Y软元件的
起始地址
    #define M一ASE一DD      }Y一ASE一DD+(y_ SIZE+7)/8)   //辅助继电器
M的起始地址
    根据PLC系统软元件的起始地址和软元件的个数确定各个软元件的起始地
址,(软元件个数+7 ) /8是为了保证为每一个软元件分配足够的存储空间。

使用特权

评论回复
37
東南博士|  楼主 | 2019-12-17 12:51 | 只看该作者

使用特权

评论回复
38
東南博士|  楼主 | 2019-12-17 12:52 | 只看该作者
系统运行状态存储区的PLC执行状态。如果是开始解码PLC源程序,再进一步
判断PLC源程序存储区内是否有数据。在PLC源程序存储区内数据的情况下,
通过邮箱发送解码信号和PLC源程序解码命令,PLC源程序解码函数在收到解
码消息后进入解码状态,并根据解码命令执行解码操作。PLC源程序解码过程中
首先通过指针指向PLC源程序存储的位置,此时PLC系统运行状态标记为开始
解码,并将该状态记录在STM32的PLC系统运行状态存储区中,此外擦除PLC
源程序解码结果存储区为后续解码结果保存做准备。然后开始进行解码操作,先
根据32位二进制码(即一条PLC指令)的高四位判断指令类型,再根据指令类
型(基本指令、其他基本指令和步进指令、应用指令和OUT ( T/C)转向不同
的解码函数。完成一条指令的解码后,通过指针指向下一条PLC指令,然后再
进行指令解码操作。当遇到END指令或者指针指向PLC源程序存储区的尾部则
跳出解码函数。如果解码成功将解码的结果保存至PLC源程序解码结果存储区,
修改PLC运行状态为解码成功,并将此状态保存至PLC系统运行状态存储区。

使用特权

评论回复
39
東南博士|  楼主 | 2019-12-17 12:52 | 只看该作者
typedef struct{
    uint8 t BasicInstructNumber;//基本指令编号
    uint8 t ApplyInstructNumber;//应用指令编号
    uint8 t Type;令类型
    uint8 t Reserved;//保留
}InstructFormTypedef;
typedef struct{
    InstructF orm肠pedef Instruct;//操作码
    uint32 t InstructLine;//程序行数
    uint32一OperandNumber;//操作数个数
    uint32一Operand肠pe[2];//操作数类型
    struct{
        uint32一OperandBitAddr;//操作数位别名区地址
        uint32 t OperandWordAddr;//操作数字地址
        uint32一OperandBitAddr;//操作数位地址
          }OperandAddr[OPERANDes MAXes NUMBER];
}InstructTypeDef;

使用特权

评论回复
40
東南博士|  楼主 | 2019-12-17 12:52 | 只看该作者
    PLC系统运行过程中,需要快速调用指令结构体函数并根据指令的执行要求
判别是否可以执行该指令结构体函数。为了满足以上要求,指令结构体的第一个
成员变量为操作码。操作码用四个字节大小的存储空间表示,为了区分基本指令
和功能指令,分别将其标号存放于第一个字节和第二个字节,指令执行方式存放
于第三字节,最后一个字节保留。PLC系统中基本指令的执行方式为连续执行。
应用指令的执行方式有连续执行和脉冲执行两类,在应用指令编码表表3-6中可
以看到,指令助记符后面有“P”表示脉冲执行,没有“P”则表示连续执行。
操作码的编码方式如表3-10所示。判断脉冲执行指令需要比较当前扫描周期和
前一个扫描周期的结果,如果出现由OFF转向ON的结果则能够执行该指令。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则