PLC编辑软件帮助系统

深圳市显控科技股份有限公司是一家潜心于工业可视触摸控制产品---人机界面核心技术的研发与攻克，专业开发、制造、销售最先进的工控产品的民族高科技企业！经过六年多的沉淀与升华，深圳显控公司厚积薄发，以其强劲的研发创新能力、不基于任何系统、100%完全自主知识产权的核心技术和高性价比的优势深深引领我国及全球相关行业。

由于笔者水平有限，手册中难免有许多不妥与错误之处，诚请读者批评指正。若您需要更进一步的获得更多的技术支持请通过以下方式与我们联系，我们将真诚为您服务。

SAMSOAR Developer 编辑软件是针对显控推出的可编程控制器（PLC）的梯形图编辑工具，支持中英文双版本切换，支持在线监控PLC并且支持定时保存、错误恢复等。

本公司推出的PLC产品简单易学，应用范围广泛，其帮助系统能够帮助您掌握SAMSOAR Developer软件的基本操作与用法。

PLC编辑软件帮助系统包括:

1、 快速入门

2、 创建新工程基本步骤

3、 指令系统

4、 寄存器

5、 通信协议

6、硬件手册

7、系统设置

8、联系方式


SAMSOAR Developer软件快速入门

内容如下：

了解SAMSOAR Developer

SAMSOAR Developer运行的系统需求

SAMSOAR Developer的安装及卸载过程

SAMSOAR Developer的运行

SAMSOAR Developer基本操作


什么是SAMSOAR Developer？

SAMSOAR Developer是针对深圳市显控科技股份有限公司推出的可编程逻辑控制器（PLC）的梯形图编辑软件。该软件可以帮你快速准确的编辑一个PLC的梯形图工程。在梯形图中支持主程序、子程序、中断程序的编写，每个程序中包含了若干个网络，默认新建工程的时候是15个网络，用户可以根据需要自己添加网络，目前可以为每个程序最多添加1000个网络。

在编辑梯形图的时候支持使用鼠标点击工具栏输入，也支持直接键盘键入命令或者通过双击树形目录处的命令，将选中的命令添加到图标指定的位置。

SAMSOAR Developer支持三种编辑模式分别是：写入模式、注释编辑模式、监视模式。其中，写入模式支持正常的编辑、修改、转换梯形图等操作；注释编辑模式支持修改元件的注释，要注意的是此时只能修改梯形图的注释，不能插入或修改梯形图元件；监视模式支持监视梯形图元件在PLC中的值，另外除了支持梯形图监视以外还支持软元件登陆监视，可以批量监视软元件的值。在执行监视模式的时候可以选择串口或者USB口进行监视。

SAMSOAR Developer支持USB和串口的上下载，在上下载和执行监控之前可以通过点击通信测试按钮来检测PLC是否连接到计算机。在通过串口进行通信的时候支持自动检测波特率的功能。

SAMSOAR Developer还支持设置自动定时保存功能，通过在系统设置对话框中可以设置自动保存的时间，使您的工程更加安全无忧。

SAMSOAR Developer对上下载工程做了严格的保密措施，可以在PLC设置对话中配置上下载密码，若不输入正确的密码无法进行上载操作。在编辑梯形图的时候还可以在程序的属性页面对指定的主程序、子程序、中断程序进行加密，使得其他人员无法任意查看您所编写的工程。


SAMSOAR Developer软件运行对计算机的需求

一、SAMSOAR Developer硬件最低要求是：

· 最低Pentium 3-800MHz计算机。为有更佳性能，推荐Pentium 4-1GHz以上的计算机。

· 内存在Windows 98系统运行时，最少需要64M以上内存；在Windows 2000系统上运行时，最少需要128M以上的内存；在Windows XP上运行时，最少需要128M以上内存。推荐使用256M以上内存。

· 硬盘空间，安装SAMSOAR Developer至少需要50M。推荐可用硬盘空间至少在100M以上，如果没有足够的硬盘空间，SAMSOAR Developer无法安装；

· 显示卡:Windows系统兼容，含有1MB以上的显示内存，可工作于1024*768分辨率以上，32位真彩色；

· 计算机带USB接口；

· 两键鼠标和键盘。

低于以上配置的计算机，SAMSOAR Developer在计算机上运行有可能无法安装和运行。

推荐配置：

· CPU：使用相当于Intel公司的Pentium 800或以上级别的CPU；

· 内存：256M以上；

· 显卡：Windows系统兼容，含有1MB以上的显示内存，可工作于1024*768分辨率以上，32位真彩色；

硬盘：40G以上。

二、SAMSOAR Developer组态软件可以在以下操作系统下运行：

1. 中、英文Microsoft Windows NT Server 4.0（需要安装SP3）或更高版本；

2. 中、英文Microsoft Windows NT Workstation 4.0（需要安装SP3）或更高版本；

3. 中、英文Microsoft Windows 98、Me、2000、 XP（Windows 95推荐安装IE5.0）或更高版本；

4. 中、英文Microsoft Windows VISTA系统 ；

5. 中、英文Microsoft Windows 7系统。

不满足以上版本的操作系统，SAMSOAR Developer将拒绝安装。

推荐系统：

推荐使用Windows XP SP2版本的操作系统。

SAMSOAR Developer对运行计算机的硬件要求

SAMSOAR Developer对运行计算机的软件需求


SAMSOAR Developer 的安装及卸载过程

一、软件的安装

SAMSOAR Developer 是专为标准Microsoft Windows系统设计的32位应用软件。安装软件前，请确认该计算机的软件和硬件是否符合安装的最低需求。

使用随产品配送的安装盘来安装SAMSOAR Developer。具体安装步骤如下：

l 启动Windows；

l 双击安装文件 [image] ，会弹出如下图1-1所示对话框：

图1-1

通过该对话框可以选择安装的语言，点击“确定”按钮。

l 在弹出的“欢迎使用”对话框中点击“下一步”，如图1-2所示：

图1-2

l 在弹出的“选择目标位置”对话框中可以选择程序的安装目录， 在安装之前请确定磁盘是否有有足够的剩余空间，否则的话会导致安装失败。程序默认路径为“C:\Program Files\SAMSoar Developer”，用户可以根据自己实际情况选择安装，如图1-3所示，然后点击下一步。

图1-3

l 在弹出的“选择开始菜单”对话框中点击“下一步”，如图1-4所示：

图1-4

l 然后在弹出的对话框中选择下一步，如图1-5

图1-5

l 此时会弹出提示选择安装的对话框，在确认选择无误的情况下请点击“安装”按钮，如图1-6所示：

图1-6

l 此时会弹出提示选择安装的对话框，在确认选择无误的情况下请点击“安装”按钮，如图1-7所示：

图1-7

l 安装程序正在将SAMSoar Developer安装到指定目录下，请等待直到程序安装完毕，此时会弹出安装完成对话框，如图1-8所示：

图1-8

l 点击完成按钮，至此SAMSoar Developer已经成功安装到您的计算机当中

二、软件的卸载

l 想要卸载SAMSoar Developer的话可以点击开始->程序->SAMSoar Developer下的卸载SAMSoar Developer选项；如图1-9所示：

图1-9

l 此时会弹出是否确定卸载对话框，如图1-10所示：

图1-10

l 点击确定的话会弹出卸载进度对话框 如图1-11所示：

图1-11

l 至此软件将从本地计算机移除。


SAMSOAR Developer的运行

SAMSOAR Developer.exe在安装完成后，会在桌面上放置运行快捷方式，如图1-1所示：

图1-1 桌面快捷图标

同时Windows开始菜单中也添加了相应的SAMSOAR Developer程序，双击桌面上的快捷方式或已经保存的工程文件，或者单击开始菜单中SAMSOAR Developer程序组的SAMSOAR Developer.exe运行组态软件，运行界面如下图1-1：

图1-1 软件运行画面


SAMSOAR Developer基本操作

本章介绍SAMSOAR Developer软件操作的简单介绍 SAMSOAR Developer鼠标的用法，快捷键以及一些术语。

内容：

鼠标操作和快捷键


SAMSOAR Developer鼠标用法和快捷键

一、鼠标的用法

在编辑梯形图的时候，用鼠标点击 [image] 的元件工具栏之后，将鼠标放在梯形图编辑区域，此时鼠标将变成所选择的元件的形状。在合适的地方单击鼠标之后将弹出梯形图输入对话框，如图1-1所示：

图1-1 梯形图输入对话框

在该对话框中填入元件地址即可将元件添加到梯形图当中。

另外也可以通过双击树形目录处的命令或者直接键盘键入命令来编辑梯形图。

下面是对鼠标的几种常用的操作和意义

◎左键单击

按左侧的键，然后松开在本书中称为[单击]，在选择菜单，选择对象，选择工具按钮和确认设定时使用。

◎左键双击

连续快速的按左侧的健两次在本书中称为[双击]，在梯形图编辑模式、注释编辑模式、监控模式下鼠标在编辑区域双击已经存在的元件时是打开修改对话框，这时会对元件的信息进行修改、编辑注释或者修改监视的值。

◎右键单击

按右侧的键，然后松开在本书中称为[右击]，对某部件进行右击操作可以打开右键下拉菜单，或者在空白处右击操作显示右键菜单。还可以取消编辑状态，恢复鼠标形状。

二、快捷键

下表2-1中罗列的是一些常用的快捷键，方便工程设计人员快速的进行工程画面的组态：

CTRL+C | 复制
CTRL+V | 粘贴
CTRL+X | 剪切
←→↑↓ | 被选择的对象左右，上下移动
ESC | 取消命令操作
DEL | 删除

表2-1 快捷键


SAMSOAR Developer编辑界面及系统构成

SAMSOAR Developer编辑接口简洁友好，易学易用。本节介绍 SAMSOAR Developer 的组态画面以及软件的各个功能按钮。

内容：

SAMSOAR Developer菜单栏

SAMSOAR Developer工具栏


SamkoonSoar 菜单

SamkoonSoar编辑软件的菜单栏为使用者提供了丰富的菜单选项菜单栏如下图1-1所示：

说明: 说明: 说明: image002

图1-1

工程(F):

说明: 说明: 说明: image004

新建工程：用于新建一个新的SAMSOAR工程文件

打开工程：打开一个已经存在的SAMSOAR工程文件

保存工程：保存正在编辑的SAMSOAR工程文件

另存为 ：自己选择路径保存工程文件

关闭工程：关闭当前工程

编辑（E）：

说明: 说明: 说明: image002

撤销： 撤销刚才的操作步骤；注意,在执行指令表生成命令之后（F4快捷键），将不能进行撤销操作

恢复： 恢复刚才已经撤销的操作步骤

剪切： 对于选中的目标执行剪切操作

复制： 对于选中的目标执行复制操作

黏贴： 在光标的指定位置粘贴剪切板中的内容

行插入：在光标的指定位置向前插入一行。若想在指定位置向后插入，请在光标处单击右键在弹出的菜单中选择“行插入”->“向后插入”或“末尾追加”

行删除：删除光标所在的行

查找/替换（S）：

说明: 说明: 说明: 136

软元件查找/替换：执行软元件的查找替换操作

软元件批量替换：执行软元件的批量替换

指令查找： 在工程内部查找并标记输入的指令

网络查找： 根据输入的网络号查找到网络

元件注释： 在该对话框中可以查看、编辑、导出元件的注释

软元件初始化： 在该对话框中可查看,编辑软元件的值

软元件使用列表：在该对话框中可以查找指定的软元件是否被使用过

变换（C）：

说明: 说明: 说明: image010

生成指令表：对梯形图的语法和用到的元件进行错误检查，检查通过的话会生成相应指令表以备用户下载和查看

显示（V）：

说明: 说明: 说明: image006

注释显示： 通过该按钮可以切换到注释显示状态

工具栏： 点击该按钮可以选择工具栏的显示

在线（D）：

说明: 说明: 说明: image010

传输设置： 可以通过该对话框测试通信链接是否正常

PLC读取： 弹出PLC读取对话框，在对话框中可以实现对plc内部数据的上载操作

PLC写入： 弹出PLC下载对话框，在对话中实现将编辑的梯形图下载到PLC中

PLC校验： 打开PLC校验对话框，比较上下位的指令表是否一致。比较的结果可以通过菜单栏的“窗口”->“指令比较窗口”查看

监视变量： 通过该对话框进行软元件变量的监视以及对软元件的值进行修改，注意，只有切换到梯形图监视模式的情况下才允许执行软元件的变量监视

更改PLC状态： 可以通过该对话框对PLC进行运行与停止操作。注意，在切换PLC状态时请务必确认好相关安全连接的状态，防止突然启动造成相应损失

工具（T）：

说明: 说明: 说明: image007

程序检查： 在该对话框对已编译成功的梯形图进行检查，查看是否有多线圈输出等问题

系统设置： 在该对话框内对梯形图的编程界面以及风格等进行相应的设置，使得软件使用更符合用户自己编程习惯

窗口（W）：

说明: 说明: 说明: @J2QG@KKMMC3AD9[2UA8BW9

指令窗口： 点击该按钮可以切换到指令窗口

梯形图窗口： 点击该按钮可以切换到梯形图窗口

指令比较窗口： 点击该按钮可以切换到指令比较窗口

帮助（H）：

说明: 说明: 说明: image011

帮助： 点击该按钮可以调处帮助文档查看

关于： 点击该按钮可以查看软件的版本号以及版权归属


SamkoonSoar工具栏

标准工具栏

标准工具栏中包含了针对plc工程项目的一些基本操作的按钮，如新建、打开、保存以及对于梯形图编辑过程中用到的剪切、拷贝、黏贴等基本操作。

新建工程：用于新建一个SAMSOAR工程文件

打开工程：打开一个已经存在的SAMSOAR工程文件

保存工程：保存正在编辑的SAMSOAR工程文件

剪切：对于选中的目标执行剪切操作

复制：对于选中的目标执行复制操作

黏贴：在光标的指定位置粘贴剪切板中的内容

撤销：撤销刚才的操作步骤；注意,在执行指令表生成命令之后（F4快捷键），将不能进行撤销操作

恢复：恢复刚才已经撤销的操作步骤

软元件查找/替换：执行软元件的查找替换操作；

指令查找：在工程内部查找并标记输入的指令

软元件使用列表：在该对话框中可以查找指定的软元件是否被使用过

注释显示：通过该按钮可以切换到注释显示状态

传输设置：可以通过该对话框测试通信链接是否正常

监视变量：通过该对话框进行软元件变量的监视以及对软元件的值进行修改，注意，只有切换到梯形图监视模式的情况下才允许执行软元件的变量监视

系统设置：在该对话框内对梯形图的编程界面以及风格等进行相应的设置，使得软件使用更符合用户自己编程习惯

添加子程序：该按钮可以在编辑的工程中快速添加一个空白子程序

添加中断程序：该难可以在编辑的工程中快速添加一个空白的中断程序

行插入：在光标的指定位置向前插入一行。若想在指定位置向后插入，请在光标处单击右键在弹出的菜单中选择“行插入”->“向后插入”或“末尾追加”

行删除：删除光标所在的行

EQG]10RAXT2UN]5TMUI[M6Q 网络插入：在光标的指定位置向前插入一网络。若想在指定位置向后插入，请在光标处单击右键在弹出的菜单中选择“网络插入”->“向后插入”或“末尾追加”

网络删除：删除光标所在的网络

软元件注释：单击该按钮可以弹出软元件注释对话框，在该对话框中可以查看、编辑、导出元件的注释

软元件初始化：单击该按钮可以弹出软元件初始化对话框，在该对话框中可以查看、编辑软元件的值

梯形图符号工具栏

该工具栏中包含编辑梯形图时用到的基本的元件，通过单击该工具栏上的按钮可以快速进行梯形图符号的输入

鼠标：切换到正常的鼠标模式，该模式下可以对梯形图进行选中、双击对应的梯形图符号进行编辑以及弹出右键菜单等操作

常开触点：鼠标切换到常开触点输入模式，在梯形图空白位置单击会弹出梯形图命令输入对话框，可以快速插入一个常开触点，快捷键为 （F2）

立即常开：同上 快捷键为（Shift+F2）

常闭：同上 快捷键为（F3）

XD(0B5$X8K$4BUGEHUSBQ0E 立即常闭：同上 快捷键为（Shift+F3）

上升沿脉冲：同上 快捷键为（F5）

下降沿脉冲：同上 快捷键为（F6）

运算结果上升沿化：同上 快捷键为（Shift+F5）

运算结果下降沿化：同上 快捷键为（Shift+F6）

运算结果取反：同上 快捷键为（F7）

输出线圈：同上 快捷键为（F8）

立即输出线圈：同上 快捷键为（Shift+F8）

横线：绘制一条横向连接线 快捷键为（F9）

竖线：绘制一条竖向连接线 快捷键为（F10）

横线删除：删除点中的横线 快捷键为（Shift+F9）

竖线删除：删除点中的竖线 快捷键为（Shift+F10）

程序工具栏

该工具栏中包含对于梯形图的相关操作如上传下载监控等

生成指令表：对梯形图的语法和用到的元件进行错误检查，检查通过的话会生成相应指令表以备用户下载和查看

梯形图/指令表显示切换：单击该按钮可以在梯形图和指令表之间进行显示切换

写入模式：单击该按钮可以切换到梯形图正常的编辑模式，在该模式下对梯形图进行正常的插入删除修改等编辑工作

注释编辑模式：在该模式下可以进行梯形图软件注释的修改，在该模式下无法通过双击图元来编辑梯形图元件

监视模式：在该模式下回对当前窗口中梯形图可视区域的元件进行监控，读取PLC内部该元件的值并显示到窗口上，该模式下不允许进行梯形图的编辑等操作

PLC参数设置：在该对话框中可以对PLC的相关参数进行设置如通信参数设置、密码设置、滤波设置、保持区设置、型号修改、AI/AO设置等内容


软元件查找/替换

单击菜单栏的查找/替换->软元件查找/替换命令或者直接单击工具栏上的 [image] 查找/替换图标，会打开如图4-1的查找/替换对话框：

图4-1

说明: 说明: 3LVFX@6$40NN3(P[JJ7PRX5 此处输入需要查找或者替换的已存在的软元件的名称。比如：X1、Y0等。

说明: 说明: 1Z6VB`$NY7V527(EY3`~$PJ 当需要替换的时候，在此处输入替换元件的名称，比如：X1、Y0等。当只是查找的时候，此处不需要输入。

说明: 说明: P}FXU~ECD(`K)HV}VLBU5GH 该功能将指定程序对象内旧软元件开始点数的软元件替换成新软元件开始点数的软元件

如：设置 旧软元件 D10 新软元件 D20 点数 5

意思是：把指定对象程序下的D10-D14 替换成 D20-D24

勾选此处，在查找/替换时只会搜寻输出位置的软元件。

说明: 说明: H6%CJ4SJNT8_ZGDSHST]S$D 选中第一个选项并且 说明: 说明: D{A@H~`K(LKCJPGVQGQ9%]Y 勾中是指查找或者替换从当前选中的第一个网络第一个图元开始查找。

若未勾上，则从第一个程序的第一个网络第一个图元开始查找。选中第2个选项则是从光标位置开始往前查找或者替换。选中第3项则是 从光标位

置开始往下查找或者替换。

说明: 说明: D{A@H~`K(LKCJPGVQGQ9%]Y 勾中选择需要查找或者替换的图元所在的程序。

说明: 说明: S3C~$DR9@~DEAJXMX_40BN2 此选项需要 说明: 说明: D{A@H~`K(LKCJPGVQGQ9%]Y 先勾上，然后选择网络的范围，才能在此范围内进行查找或者替换。

比如图4-1，就是表示在Main(OB0)程序内的0-4网络内对名称为M1的软元件进行查找，或者用Y1-Y3 3个点的范围替换在输出指令的M1-M3.


软元件批量替换

单击菜单栏的查找/替换->软元件批量替换，会打开如图1-1的软元件批量替换对话框：

图1-1

旧软元件：程序中原有且需要被替换的软元件，若此处不输入软元件则不会发生替换。

新软元件：用来替换掉旧软元件，若旧元件输入正确，此处无输入点击执行按钮将报错。

点数：即替换元件和被替换元件的偏移数，不输入时默认为1。如图1-1中的替换方式也可用下图1-2中的输入方式实现：

图1-2

指定对象程序：勾选此项可以对指定的子程序中的软元件进行批量替换。

：单击该按钮执行批量替换功能。


指令查找

单击菜单栏的查找/替换->指令查找命令或者直接单击工具栏上的 [image] 指令查找图标，会打开如图1-1的查找/替换对话框：

图1-1

：输入指令名称进行查找。比如：LD,OUT等。


网络查找

单击菜单栏的查找/替换->网络查找命令，会打开如图1-1的网络查找对话框：

图1-1

：输入需要查找的网络ID,若有对应网络视图窗口会跳转到对应位置，若不存在该网络编程软件将不做任何动作。

注意：网络查找仅对当前程序进行查找，无论是否查找到对应网络都不会对其他子程序进行查找。


软元件使用列表

单击菜单栏的查找/替换->软元件使用列表命令或者直接单击工具栏上的 [image] 软元件使用列表图标，会打开如图4-1的软元件查找对话框

选中这个选项是表示统计所有程序中当前查找的软元件的使用情况。

选中这个选项是表示统计当前程序中当前查找的软元件的使用情况。

此处为输入你要查看的图元(空白处不填则默认为零)。


元件变量表

1.双击工程管理窗口中的元件浏览->元件变量表，会打开如下所示窗口：

2.在表格中添加变量，如表格中所示：

变量名：指在工程中替代相应地址的一个名称。

·变量名区分大小写，即在这里定义的Switch若在工程中使用switch则无法输入。

·变量名不可与PLC寄存器地址冲突，即不可用X1，D1之类的名称。

地址 ：该变量名所对应的PLC寄存器地址。

数据类型：用户为变量定义的变量类型（若无特殊操作采用默认类型即可，变量使用时，组态软件会根据变量所应用的指令类型重新分配变量数据类型）。

注释 ：对变量名的描述。

添加变量：增加表格行数，用来定义更多的变量。

·点击添加变量按钮，添加的表格行数由 [image] 决定。

·表格最大行数为1000个（最多可定义1000个变量）。

·右键表格栏，可对表格行进行插入，删除，全部删除操作。

3.以上定义需点击确定按钮方可生效。

4.梯形图中应用如下：

·变量名应用于指令的输入方式

·输入后的梯形图

注意：

·变量表内可修改对应地址如下图：

点击确定之后变量名未改变，且梯形图中有使用该变量名的指令，但此时该变量已经不适用于使用它的指令。因此在用户点击确认按钮后组态软件会判断梯形图中使用的变量名是否

还适用于原来的指令，若不适用，组态软件将修改指令参数为未对变量表进行修改时变量名所对应的地址，如下图所示：


监视变量

单击菜单栏的在线->监视变量命令或者直接单击工具栏上的 [image] 监视变量图标，会打开如图4-1的监视变量对话框。注意：只有在监视模式下才能在该对话框进行元件监视，“监视开始”按钮才会变为有效状态。

图4-1元件监视对话框

·左侧列表为监视变量表的名称，左键列表名可切换监视变量表,右键列表框可对变量表进行增减(最大可增加13个表格)，每一个表下可添加不同监视变量,在同一时刻只可监视其中一个表格内的变量。

· [image] 此处显示选中的监视变量表名称,修改此处内容可修改对应表格的名称。

1、单击“添加元件”按钮可以弹出“元件信息”对话框如图4-2所示：

图4-2元件信息对话框

在该对话框中可以进行添加元件的操作，选中“批量添加”复选框的话可以进行元件的批量添加操作，在个数中可以输入批量添加的个数，方便实现一次监视一连串的数据。注意，添加的个数不能超过元件最大长度限制

2、在监控模式下单击“监视开始”按钮，可以监视到PLC中当前监控元件的数据如图4-3所示：

图4-3，元件监视对话框

在该对话框中不仅可以查看元件在plc中的数据，还能对元件中的值进行写入修改，双击想修改的元件，会弹出如图4-4位元件修改及4-5字元件修改对话框：

图4-4位元件值修改

图4-5 字元件值修改

3、“监视停止” 按钮可以停止当前对PLC数据的监视。

4、“删除元件”删除当前选中的元件

5、“删除所有”删除列表中所有监控元件

6、“关闭”关闭当前对话框


程序检查

单击菜单栏的工具->程序检查，会打开如图1-1所示的程序检查对话框：

图1-1

，如图所示：此处可以选择检查内容，勾选多线圈检查将检查指定对象中的多线圈输出显示在表格中。（灰色内容为尚未开放选项，不可勾选）

如图所示，此处可选择检查的指定对象。选择全程序作为对象时，执行该功能将对整个程序进行检查。检查效果如下图1-2所示：

图1-2

检查出表格中错误之后可双击该错误，视图窗口将自动跳转至错误处。

注意：进行梯形图检查前须确保梯形图能编译成功，否则无法进行检查。


SAMSOAR Developer系统设置

单击菜单栏的工具->系统设置命令或者直接单击工具栏上的 [image] 系统设置图标，会打开如图1-1的系统设置对话框：

图1-1

：此选项是设置在编辑模式下的图元变量的颜色。

：此选项是设置在监视模式下的变量/数据的颜色。

：此选项是设置图元标量色字体样式字体的大小以及指令图形的相对大小。

：此选项是设置图元注释的字体的样式，字体大小以及字体的颜色。

在该对话框里可以对编程界面上的字体、字体颜色、字体大小等信息进行设置。另外在“其他设置”选项卡中可以对是否启动在编辑模式下进行注释编辑的选项，也可以设置定时保存等功能，如图1-2所示：

图1-2

：此选项勾上则表示可以在编辑模式下编辑梯形图的同时可以进行注释的编辑。取消则不能。

： 勾上则可以设定1-20分钟内任意的时间来自动保存工程到安装目录的save文件夹下。


软元件注释

进入工程后，在工程左侧树形窗口点击元件浏览->元件注释表，直接单击工具栏上的 [image] 软元件注释，会打开如图4-1的软元件注释框：

：点击此按钮将会显示所有在程序中被使用的软元件的名称以及注释内容。

81WSQ32AW%WPW46(H6F%EZB ： 点击此按钮将会弹出 S29D2U62YTSZZ5TV(UWIO61 选择导出的路径将表格中的内容导出到EXECL中。

： 点击此按钮将会清除当前表格中显示的内容。

： 点击这些按钮将会只显示点击的该类型的软元件的注释。比如：点击X按钮将显示如下

： 在此处可以直接输入软元件的名称从而可以查看到该软元件的注释。例如： H$IN65YA0]X2O(]HU[6RTP7

81WSQ32AW%WPW46(H6F%EZB :在修改完软件注释后，需要点击确定才能保存修改的注释，若直接关闭或者点取消将不会保存修改的注释。


软元件初始化

进入工程后，在工程左侧树形窗口直接点击软元件初始化选项，或者直接单击工具栏上的 [image] 软元件初始化，会打开如图1的软元件初始化对话框：

图1

：此处输入需要初始化软元件的起始位置(软元件名只能以D开头)。

： 这2个选项提供数据的显示格式。

： 此处输入软元件初始化的范围。范围为0-8000.比如输入10，则会显示d0-d10的可编辑范围。如图1。


注释编辑模式

点击程序工具栏上的 [image] “注释编辑模式”可以切换到梯形图注释编辑状态，在该状态下无法对梯形图的图元进行插入、修改等编辑操作。在该模式下双击图元会弹出软元件注释输入对话框如图4-1所示：

图4-1软元件注释输入对话框

在该对话中可以输入注释如图所示 [image] 点击确定之后，该变量在梯形图中所有地方的注释会被替换为当前输入内容，如图4-2所示：

图4-2注释输入效果图

再次点击 “注释编辑模式”按钮可以切换到梯形图编辑模式，或者可以通过“写入模式”按钮来进行相应的模式切换

·注意：

1、 当切换到“注释编辑模式”之后，“显示”菜单中的“注释显示”会被自动置为选中状态，工具栏中的 “注释显示”按钮也被自动置为选中状态，用户可以通过手动点击该按钮来显示或隐藏注释

2、 若想在梯形图编辑模式下显示相应的元件注释，则可以通过“显示”菜单中的“注释显示”按钮，或者工具栏中的“注释显示”来进行相应的显示和隐藏的切换。

3、一个元件在一个工程中只存在一份注释，修改任意位置该元件的注释内容，其余部分都会被相应的修改

若想快速对元件的注释进行批量的修改，可以在树形目录下的“元件浏览”->“元件注释表”中进行相应的操作。具体参见“元件注释表”


监视模式

单击程序工具栏上的 [image] “监视模式”按钮，会弹出如图4-1对话框：

图4-1通信设置对话框

在该对话框中可以对通信口进行设置， [image] ，

如果使用USB连接的话直接点击“通讯测试”，通讯正常的话会弹出图4-2对话窗口，否则会显示图4-3对话窗口，请检查通讯电缆是否有异常；

图4-2

图4-3

而如果使用COM连接的话需要点击“手动配置”按钮，会弹出通讯参数设置对话框，如图4-4，在此对话框中需要对应设置PC串口号、波特率、数据位、停止位、校验码、超时时间，完成后点击“确定”，点击“通讯测试”，通讯正常的话会弹出图4-2对话窗口，否则会显示图4-5对话窗口，请检查通讯电缆是否有异常；

注意：为防止用户遗忘波特率、数据位、停止位、校验码参数设置，软件可以对通讯参数进行校验测试，如图4-1中所示，先点击“手动配置”选择对应的PC串口号，然后点击“确定”，然后勾选“自动检测”勾选项，最后点击“通讯测试”，软件会自动切换识别COM口的通讯参数，如果通讯正常的话会弹出图4-2对话窗口，否则会显示图4-5对话窗口，请检查通讯电缆是否有异常；

图4-4

图4-5

设置通讯参数并通讯成功之后点击“确定”按钮，梯形图的编辑区域将会被切换到“监视状态”如图4-6所示：

图4-6梯形图监控模式

·在“梯形图监控”模式下双击图元会弹出如图4-7所示“变量值修改”对话框：

图4-7变量值修改

根据所选择的变量不同，可以对位元件进行强制的“ON”/“OFF”的操作，或者对于字图元进行数值的修改

·在“梯形图监控”模式下，状态栏中会显示指令的扫描周期和PLC目前运行状态，如图所示

·在监视模式下可以进行查找/替换元件 、查找指令、监视变量、查看软元件使用列表、查看元件变量表、查看软元件注释等操作

·再次点击“监视模式”按钮可以切换到梯形图编辑模式


PLC参数设置

单击工具栏上的 [image] PLC设置图标，会打开如图4-1的PLC设置对话框：

图4-1PLC参数设置对话框

1、通信参数设置页面

·COM口参数设置：在该页面可以对PLC的通信参数进行相应的设置。PLC串口的默认通信参数为：波特率 9600，数据位8，停止位1，校验码NONE

注意：若想使用MODBUS主站表格进行MODBUS通信的话 [image] 在该处必须选中MODBUS主站。

且该COM口设置为MODBUS主站或自由口通讯用之后,无法再用来下载工程,需修改该COM口配置为MODBUS从站之后才可重新用做下载口。

·站号设置： 在该处可以设置PLC的站号

·超时时间： 可以设置plc超时时间

2、 密码设置页面，如图4-2所示：

图4-2密码设置页面

·上载加密：设置PLC程序的上载密码，在上载程序的时候回提示输入该密码，遗忘改密码的话会导致程序无法上载

·下载加密：设置PLC程序的下载密码，在下载程序的时候回提示输入改密码，遗忘该密码的话会导致无法更新PLC内部的程序

·监控加密：设置PLC监控的密码，在上位梯形图监控该模式的时候会用到，遗忘该密码将不能监控PLC程序

注意：密码最大长度为8位。

3、 滤波设置页面，如图4-3所示：

图4-3滤波设置

·在该页面可以进行滤波设置，滤波设置范围从0.20~51.20ms之间。

4、 保持区设置，如图4-4所示：

图4-4保持区设置

·在该页面中可以对掉电保持区的容量进行设置，点击默认设置的时候会清空当前设置并将掉电保持区的起始地址设置为最小值，将长度设置为最大值

·勾选下载时不清除掉电保持数据，在下载梯形图程序时将不清除下载之前掉电保持区的数据。

5、 型号修改，如图4-5所示

图4-5型号修改页面

·在该页面中可以对当前PLC型号做相应的修改


SamkoonSoar创建工程基本步骤

本章介绍创建新工程的基本步骤。

内容：

用SamkoonSoar创建一个新的工程


软件安装及使用

1.软件安装与卸载

1.1软件的安装

SAMSOAR Developer 是专为标准Microsoft Windows系统设计的32位应用软件。安装软件前，请确认该计算机的软件和硬件是否符合安装的最低需求。

使用随产品配送的安装盘来安装SAMSOAR Developer。具体安装步骤如下：

l 启动Windows；

l 双击安装文件 [image] ，会弹出如下图1-1所示对话框：

图1-1

通过该对话框可以选择安装的语言，点击“确定”按钮。

l 在弹出的“欢迎使用”对话框中点击“下一步”，如图1-2所示：

图1-2

l 在弹出的“选择目标位置”对话框中可以选择程序的安装目录， 在安装之前请确定磁盘是否有有足够的剩余空间，否则的话会导致安装失败。程序默认路径为“C:\Program Files\SAMSoar Developer”，用户可以根据自己实际情况选择安装，如图1-3所示，然后点击下一步。

图1-3

l 在弹出的“选择开始菜单”对话框中点击“下一步”，如图1-4所示：

图1-4

l 然后在弹出的对话框中选择下一步，如图1-5

图1-5

l 此时会弹出提示选择安装的对话框，在确认选择无误的情况下请点击“安装”按钮，如图1-6所示：

图1-6

l 此时会弹出提示选择安装的对话框，在确认选择无误的情况下请点击“安装”按钮，如图1-7所示：

图1-7

l 安装程序正在将SAMSoar Developer安装到指定目录下，请等待直到程序安装完毕，此时会弹出安装完成对话框，如图1-8所示：

图1-8

l 点击完成按钮，至此SAMSoar Developer已经成功安装到您的计算机当中

1.2软件的卸载

想要卸载SAMSoar Developer的话可以点击开始->程序->SAMSoar Developer下的卸载SAMSoar Developer选项；如图1-9所示：

图1-9

l 此时会弹出是否确定卸载对话框，如图1-10所示：

图1-10

l 点击确定的话会弹出卸载进度对话框 如图1-11所示：

图1-11

l 至此软件将从本地计算机移除。

2.工程创建

安装好软件后，打开软件。

0、预准备

首先你看到的是SamkoonSoar编辑软件的菜单栏，在开始创建工程之前，对菜单栏做一个简单的了解对编程很有帮助。

我们的软件菜单栏为使用者提供了丰富的菜单选项，如下图2-1所示：

图2-1

工程(F):

新建工程：用于新建一个新的SAMSOAR工程文件

打开工程：打开一个已经存在的SAMSOAR工程文件

保存工程：保存正在编辑的SAMSOAR工程文件

另存为 ：自己选择路径保存工程文件

关闭工程：关闭当前工程

编辑（E）：

撤销： 撤销刚才的操作步骤；注意,在执行指令表生成命令之后（F4快捷键），将不能进行撤销操作

恢复： 恢复刚才已经撤销的操作步骤

剪切： 对于选中的目标执行剪切操作

复制： 对于选中的目标执行复制操作

黏贴： 在光标的指定位置粘贴剪切板中的内容

行插入：在光标的指定位置向前插入一行。若想在指定位置向后插入，请在光标处单击右键在弹出的菜单中选择“行插入”->“向后插入”或“末尾追加”

行删除：删除光标所在的行

查找/替换（S）：

软元件查找/替换：执行软元件的查找替换操作；

指令查找： 在工程内部查找并标记输入的指令

网络查找： 根据输入的网络号查找到网络

元件注释： 在该对话框中可以查看、编辑、导出元件的注释

软元件初始化： 在该对话框中可查看,编辑软元件的值

软元件使用列表：在该对话框中可以查找指定的软元件是否被使用过

变换（C）：

生成指令表：对梯形图的语法和用到的元件进行错误检查，检查通过的话会生成相应指令表以备用户下载和查看

显示（V）：

注释显示： 通过该按钮可以切换到注释显示状态

工具栏： 点击该按钮可以选择工具栏的显示

在线（D）：

传输设置： 可以通过该对话框测试通信链接是否正常

PLC读取： 弹出PLC读取对话框，在对话框中可以实现对plc内部数据的上载操作

PLC写入： 弹出PLC下载对话框，在对话中实现将编辑的梯形图下载到PLC中

PLC校验： 打开PLC校验对话框，比较上下位的指令表是否一致。比较的结果可以通过菜单栏的“窗口”->“指令比较窗口”查看

监视变量： 通过该对话框进行软元件变量的监视以及对软元件的值进行修改，注意，只有切换到梯形图监视模式的情况下才允许执行软元件的变量监视

更改PLC状态： 可以通过该对话框对PLC进行运行与停止操作。注意，在切换PLC状态时请务必确认好相关安全连接的状态，防止突然启动造成相应损失

工具（T）：

系统设置： 在该对话框内对梯形图的编程界面以及风格等进行相应的设置，使得软件使用更符合用户自己编程习惯

窗口（W）：

指令窗口： 点击该按钮可以切换到指令窗口

梯形图窗口： 点击该按钮可以切换到梯形图窗口

指令比较窗口： 点击该按钮可以切换到指令比较窗口

帮助（H）：

帮助： 点击该按钮可以调处帮助文档查看

关于： 点击该按钮可以查看软件的版本号以及版权归属

下面开始创建工程的步骤。

1、点击菜单栏中工程-->新建工程，（也可以直接按组合键Ctrl+N）如下图2-2：

图2-2

弹出对话框，如图2-3：

图2-3

设置好后，点击确定。界面变成如下图2-4：

图2-4

现在就可以编辑工程了，编写自己的工程梯形图。到这里就可以直接到工程编辑那一步了。

另外还可以点击侧边工具栏中的PLC参数设置 [image] PLC参数设置。

3.工程编辑

3.1.1网络、行增加与删除

编辑区有网络组成，在默认的网络数用完后，再编辑区可编辑位置右键菜单中有网络插入、网络删除，行删除、行插入等选项在网络或网络内行数不够时可供使用。如下图3-1。

图3-1

3.1.2图元的添加

在任一网络的可编辑位置左键点击选中，在左侧工程管理窗口中展开指令及其子项，如下图3-2示。双击某指令即能添加指令在选中位置。各指令的功能、参数个数、使用方法在帮助文档中有详细解说。建议初学人员多查看帮助文档里的指令讲解查看。帮助文档里对繁多的指令都有讲解，在此就不表。

图3-2

也可以在选中位置后，直接输入命令的方式添加命令，比如”LD M0”，如下图3-3示，就能添加命令。不过这需要编程人员对命令有一定了解，所以开始时候，建议在左侧工程管理窗口指令条目下双击命令来添加命令。

图3-3

已经添加好的图元，左击选中后，按F1即能打开帮助查看这条命令的功能详细的讲解。按Delete键即可删除。

3.1.3查找与替换

当工程冗长复杂时，有时需要快速查找某个软元件、指令、网络，用户可以通过菜单栏中的查找/替换进行实现，点击查看详情——软元件查找/替换，指令查找。

3.1.4软元件初始化

有时需要某些软元件在程序运行之初就有初始值，用户可以点击菜单栏的查找/替换-->软元件初始化或者工具栏中的软元件初始化快捷键，进入软元件初始化界面进行设置，点击查看详情。

3.1.5软元件使用列表

用户编辑一个程序后，若需要查看哪些软元件被使用到了，哪些没被使用到，可以点击菜单栏的查找/替换-->软元件使用列表查看。查看详情。

3.1.6别名

每个软元件都是其一定的用途，用户可以根据用途对用到的软元件起别名，这在程序冗长且用到的软元件较多时对理解程序比较有帮助，点击查看详情。

3.1.7注释添加与显示

在菜单栏中查找/替换-->元件注释中可以查看工程用到所有软元件，编辑注释。在图元上双击亦可编辑注释。在图元添加时候，都有对软元件的注释编辑框。用户可以对软元件添加注释。点击侧边工具栏的注释编辑模式图标 [image] 或者菜单栏中的显示-->注释显示，即可在梯形图中显示注释内容。点击查看详情。

3.1.8系统设置

菜单栏的工具-->系统设置中，用户可以对变量、数据的颜色字体、以及定时保存工程进行设置。点击查看详情。

3.1.9指令表

用户可以点击侧边工具栏的梯形图/指令表显示切换 [image] 查看编辑的梯形图的指令表形式。

3.2子程序的使用

在左侧工程管理窗口展开程序选项，在程序区域右键菜单中我们能添加中断程序、子程序、pid程序。如下图3-4。

图3-4

程序编辑区下方有主程序、子程序、中断程序、pid程序。单击某个程序，就能激活该程序的编辑界面进而进行编辑。编辑好后，使用call命令调用子程序，点击查看call命令详情。

3.3中断程序的使用

中断程序的相关命令有4个：ATCH（中断绑定）/DTCH（中断释放）/EI（中断允许）/DI（中断禁止）。

前面已经讲过中断子程序的创建，ATCH（中断绑定）将中断事件与中断子程序相关联，当中断事件发生的时候，相关联的中断子程序会执行。

可以使用“中断解除”指令断开中断事件与中断子程序之间的关联，从而禁止单个中断事件。“中断解除”指令使中断返回至非现用或忽略状态。

有如下8个中断事件可用：

中断向量表：

中断号 | 中断事件
K0 | X000上升沿触发
K1 | X000下降沿触发
K2 | X000边沿变化触发
K3 | X001上升沿触发
K4 | X001下降沿触发
K5 | X001边沿变化触发
K6 | 中断定时器0 注：设定值为D8173，定时范围（1~32767ms）（分辨率1ms）
K7 | 中断定时器1 注：设定值为D8174，定时范围（1~32767ms）（分辨率1ms）

中断允许EI：指令全局性启用所有附加中断事件进程。要执行中断子程序，必须先开启全局中断。

中断禁止DI：指令全局性禁止所有中断事件进程。

绑定中断事件与中断子程序后(ATCH)，只要开启中断允许EI，中断事件发生中断子程序就会被执行。共有8个中断事件可用。如果想禁止单个中断事件，就使用DTCH命令；如果要禁止所有中断，则使用中断禁止DI命令。

3.4函数功能块的使用

右键单击工程管理窗口中的函数功能块即能添加，函数功能块是使用C语言编写。用户可以使用自定义函数块，软件提供了部分常用的库函数供用户添加与使用。其调用是由callm来实现的，点击查看callm详情。

在写完函数功能块后，需要编译成功才能使用。

工程管理窗口中某个程序如果不需要了，右键菜单即可选择删除该程序。

程序编辑完成后，点击F4编译梯形图程序，至此程序编辑就完成了。

4.工程下载

梯形图工程编辑好之后，我们就可以将工程下载到PLC中了。在菜单栏在线-->PLC下载或点击侧边工具栏中的PLC下载图标 [image] ，弹出对话框图4-1。

图4-1

下载有两种方式，com口下载与usb下载。不管那种方式下载，下载之前都须接好线，把PLC与电脑相连。

Com口下载的话，就要进行通信参数设置，或自动检测，或手动配置。如果是usb下载，只需在上图连接方式中选中usb。

在开始下载之前，可以点击上图中的通信测试进行一次测试通信来判断是否正常，如果一切正常的话，会提示通信成功。如下图4-2。下载时这一步不是必须的。

图4-2

如果使用了软元件初始化功能，那么需要勾选上图的软元件表复选框。

两种方式任选其一配置好后，点击开始下载。按照提示操作就可以完成下载了。如果所选型号与PLC型号不一致，就点击上图中的修改按钮进入PLC参数设置对话框把工程型号设置成对应型号。

程序下载后让PLC处于RUN状态，用户编辑的程序下载运行就算完成了。

对于已经下载过程序的PLC，用户还可以使用程序上载来上载PLC中的程序。点击侧边工具栏中的“PLC上载” [image] ，或者菜单栏的在线-->PLC上载，打开上载对话框，如图4-3。

图4-3

界面与程序下载相似，操作也相同。配置好通讯方式后，直接点击上载按钮，软件就会自动上载PLC中程序到PC并打开上载工程。


PLC指令系统

内容如下：

位逻辑

比较

转换

逻辑运算

传送

浮点数计算

整数计算

定时器

计数器

程序控制

移位指令

中断指令

实时时钟

通信指令

脉冲输出指令

高速计数指令

辅助指令

PID指令


位逻辑指令

内容如下：

-| |-

-|||-

-|/|-

-|/||-

-|↑|-

-|↓|-

-↑-

-↓-

-/-

-()

-(|)

-(S)

-(SI)

-(R)

-(RI)

ALT

ALTP


常开输入指令 -| |-

对应命令 | 注释/说明 | 操作数（线圈）
LD、AND、OR | 常开触点 | X/Y/M/T/C/S

指令说明：

当位等于1时，常开（LD、AND、OR）触点接通（ON），否则断开（OFF）。

在指令表中，常开触点用LD（载入）、AND（与）和OR（或）指令表示，这些指令LD（载入）、AND（与）或OR（或）将地址位数值置于堆栈顶部。

实例：

指令表：

LD X000 // 加载输入线圈X000，X000必须等于1时才能激活X000

OR X002 // 与输入线圈X002进行‘或’操作

AND X001 // 与输入线圈X001进行‘与’操作

OUT Y000 // 输出线圈Y000

梯形图：


立即常开输入指令 -|||-

对应命令 | 注释/说明 | 操作数（线圈）
LDIM、ANDIM、ORIM | 立即常开触点 | X/Y/M/T/C/S

指令说明：

当实际输入点（位）是1时，立即常开（LDIM、ANDIM、ORIM）触点接通（ON），否则断开（OFF）。

在指令表中，立即常开触点用LDIM（立即载入）、ANDIM（立即与）和ORIM（立即或）指令表示，这些指令LDIM（立即载入）、ANDIM（立即与）或ORIM（立即或）将地址位数值置于堆栈顶部，并立即执行。

实例：

指令表：

LDIM X000 // 立即加载输入线圈X000，X000必须等于1时才能激活X000

ORIM X002 // 与输入线圈X002进行‘立即或’操作

ANDIM X001 // 与输入线圈X001进行‘立即与’操作

OUT Y000 // 输出线圈Y000

梯形图：


常闭输入 -|/|-

对应命令 | 注释/说明 | 操作数（线圈）
LDI、ANDI、ORI | 常闭触点 | X/Y/M/T/C/S

指令说明：

当位等于0时，常闭（LDI、ANDI、ORI）触点接通（ON），否则断开（OFF）。

在指令表中，常闭触点用LD NOT（载入非）、AND NOT（与非）和OR NOT（或非）指令表示，这些指令LD（载入）、AND（与）或OR（或）将地址位数值的逻辑NOT（非）置于堆栈顶部。

实例：

指令表：

LDI X000 // 加载输入线圈X000的逻辑NOT，X000必须等于0时才能激活X000

ORI X002 // 与输入线圈X002进行‘或非’操作

ANDI X001 // 与输入线圈X001进行‘与非’操作

OUT Y000 // 输出线圈Y000

梯形图：


立即常闭输入指令 -|/||-

对应命令 | 注释/说明 | 操作数（线圈）
LDIIM、ANDIIM、ORIIM | 立即常闭触点 | X/Y/M/T/C/S

指令说明：

当实际输入点（位）是0时，立即常闭（LDIIM、ANDIIM、ORIIM）触点接通（ON），否则断开（OFF）。

在指令表中，立即常闭触点用LDIIM（立即载入非）、ANDIIM（立即与非）和ORIIM（立即或非）指令表示，这些指令LDIM（立即载入）、ANDIM（立即与）或ORIM（立即或非）将地址位数值的逻辑NOT（非）置于堆栈顶部，并立即执行。

实例：

指令表：

LDIIM X000 // 立即加载输入线圈X000的逻辑NOT，X000必须等于0时才能激活X000

ORIIM X002 // 与输入线圈X002进行‘立即或非’操作

ANDIIM X001 // 与输入线圈X001进行‘立即与非’操作

OUT Y000 // 输出线圈Y000

梯形图：


上升沿脉冲 -|↑|-

对应命令 | 注释/说明 | 操作数（寄存器）
LDP、ANDP、ORP | 上升沿脉冲 | X/Y/M/T/C/S

指令说明：

1） 触点允许一次扫描中每次执行“0”到“1” （OFF → ON）转换时，将堆栈顶值设为1；否则，将其设为0；

2） 沿信号后方的输出只会在边沿信号导通的瞬间执行一次，除非再次有相应的边沿信号产生时才会再执行一次，所以后方输出建议不要使用普通输出线圈（OUT指令），使用置位输出线圈（SET指令）；

3） 沿信号不要串联使用，串联的两个沿信号只有在一个扫描周期内同时触发才可能接通，实际使用时很难发生。

实例：

指令表：

LD X000 // 加载输入线圈X000，X000必须等于1时才能激活X000

OR X002 // 与输入线圈X002进行‘或’操作

ANDP X001 // 与输入线圈X001进行‘与’操作

SET Y000 K1 // 输出线圈Y000

梯形图：


下降沿脉冲 -|↓|-

对应命令 | 注释/说明 | 操作数（线圈）
LDF、ANDF、ORF | 下降沿脉冲 | X/Y/M/T/C/S

指令说明：

1） 触点允许一次扫描中每次执行“1”到“0” （ON → OFF）转换时，将堆栈顶值设为1；否则，将其设为0。

2） 沿信号后方的输出只会在边沿信号导通的瞬间执行一次，除非再次有相应的边沿信号产生时才会再执行一次，所以后方输出建议不要使用普通输出线圈（OUT指令），使用置位输出线圈（SET指令）；

3） 沿信号不要串联使用，串联的两个沿信号只有在一个扫描周期内同时触发才可能接通，实际使用时很难发生。

实例：

指令表：

LD X000 // 加载输入线圈X000，X000必须等于1时才能激活X000

OR X002 // 与输入线圈X002进行‘或’操作

ANDF X001 // 与输入线圈X001进行‘与’操作

SET Y000 K1 // 输出线圈Y000

梯形图：


结果上升沿 -↑-

对应命令 | 注释/说明 | 操作数（无）
MEP | 结果上升沿 | None

指令说明：

1） 在至MEP指令为止的运算结果的上升沿时（OFF→ ON）变为ON（导通状态）；

2） 沿信号后方的输出只会在边沿信号导通的瞬间执行一次，除非再次有相应的边沿信号产生时才会再执行一次，所以后方输出建议不要使用普通输出线圈（OUT指令），使用置位输出线圈（SET指令）。

实例：

指令表：

LD X000

OR X002

AND X001

MEP //如果前方触点结果有上升沿，则执行后方输出

SET Y000 K1

梯形图：


结果下降沿 -↓-

对应命令 | 注释/说明 | 操作数（无）
MEF | 结果下降沿 | None

指令说明：

1） 在至MEF指令为止的运算结果的下降沿时（ON → OFF）变为ON（导通状态）；

2） 沿信号后方的输出只会在边沿信号导通的瞬间执行一次，除非再次有相应的边沿信号产生时才会再执行一次，所以后方输出建议不要使用普通输出线圈（OUT指令），使用置位输出线圈（SET指令）。

实例：

指令表：

LD X000

OR X002

AND X001

MEF //如果前方触点结果有下降沿，则执行后方输出

SET Y000 K1

梯形图：


运算结果取反指令 -/-

对应命令 | 注释/说明 | 操作数（无）
INV | 结果取反 | None

指令说明：

将至INV之前的运算结果取反后作为输出的使能。

实例：

指令表：

LD M000

INV //将M000结果取反输出到Y001

OUT Y001

梯形图：


普通输出线圈 -()

对应命令 | 注释/说明 | 操作数（线圈）
OUT | 普通输出线圈 | Y/M/S

指令说明：

1） 线圈前方条件持续导通时，线圈才会输出；

2） 禁止线圈重复输出，如错误实例，如果此时X0导通而X1未导通，则梯形图顺序执行过程中，X0先导通Y0有输出，但马上X1未导通Y0禁止输出，所以Y0始终无法输出，可采用辅助继电器M解决该问题；

实例：

指令表：

LD X000

OUT Y000 //输出Y000

梯形图：

错误实例：


立即输出线圈 –(|)

对应命令 | 注释/说明 | 操作数（线圈）
OUTIM | 立即输出线圈 | Y/M/S

指令说明：

指令将输出位的新数值立即写入输出寄存器，并输出。

实例：

指令表：

LD X000

OUTIM Y000 //立即输出Y000

梯形图：


置位输出线圈 –(S)

对应命令 | 注释/说明 | 操作数（线圈）
SET | 置位输出线圈 | Y/M/S/T/C,K/H

指令说明：

指令置位从地址位（BIT）开始的（N）个线圈，最大点数根据操作数类型设定。

实例：

指令表：

LD X000

SET Y000 K16 //置位Y000~Y017

梯形图：


立即置位输出线圈 –(SI)

对应命令 | 注释/说明 | 操作数（线圈）
SETIM | 立即置位输出线圈 | Y/M/S/T/C,K/H

指令说明：

指令立即置位从地址位（BIT）开始的（N）个线圈，最大点数根据操作数类型设定。

实例：

指令表：

LD X000

SETIM Y000 K16 //立即置位Y000~Y017

梯形图：


复位输出线圈 –(R)

对应命令 | 注释/说明 | 操作数（线圈）
RST | 复位输出线圈 | Y/M/S/T/C,K/H

指令说明：

指令复位从地址位（BIT）开始的（N）个线圈，最大点数根据操作数类型设定。

实例：

指令表：

LD X000

RST Y000 K16 //复位Y000~Y017

梯形图：


立即复位输出线圈 –(RI)

对应命令 | 注释/说明 | 操作数（线圈）
RSTIM | 立即复位输出线圈 | Y/M/S/T/C,K/H

指令说明：

指令立即复位从地址位（BIT）开始的（N）个线圈，最大点数根据操作数类型设定。

实例：

指令表：

LD X000

RST IM Y000 K16 //立即复位Y000~Y017

梯形图：


连续交替输出 ALT

对应命令 | 注释/说明 | 操作数（线圈）
ALT | 连续交替输出 | Y/M/S

指令说明：

当堆栈顶值为1时，指令让目标软元件的状态在1（ON）和0（OFF）之间连续交替转换。

实例：

指令表：

LD X000

ALT Y000 //Y000在0和1交替变化，周期为当前扫描周期

梯形图：


脉冲交替输出 ALTP

对应命令 | 注释/说明 | 操作数（线圈）
ALTP | 脉冲交替输出 | Y/M/S

指令说明：

当执行到此条指令之前的结果发生了上升沿（OFF -- ON）变化时，目标软元件的状态在1（ON）和0（OFF）之间交替转换。

实例：

指令表：

LD X000

ALTP Y000 //当X000从0变为1时，Y000在0和1交替变化

梯形图：


比较指令

内容如下：

==

<>

>=

<=

>

<


比较指令 ==

对应命令 | 注释/说明 | 操作数（寄存器）
W= D= F= | LDWEQ、AWEQ、ORWEQ LDDEQ、ADEQ、ORDEQ LDFEQ、AFEQ、ORFEQ | K/H/D/CV/TV/AI/AO/V/Z,K/H/D/CT/TV/AI/AO/V/Z K/H/D/CV32,K/H/D/CV32 K/D/CV32,K/D/CV32

指令说明：

比较等于指令用于比较两个数值是否相等，如果比较结果为真实，输出打开

比较的两个数是带符号的

W= 比较双字节整数

D= 比较四字节整数

F= 比较实数

在指令表中，当1位于堆栈顶端时，指令执行载入（LD）、与（AND）和或（OR）操作

实例：

指令表：

LDWEQ D0 D1 // 加载D0和D1，并比较D0是否等于D1

ORWEQ D4 H0123 // 比较D4和H0123是否相等，并将比较结果和栈顶值进行‘或’操作

AWEQ D2 D3 // 比较D2和D3是否相等，并将比较结果和栈顶值进行‘与’操作

LDDEQ D6 D8 // 加载D6D7和D8D9，并比较 D6D7是否等于D8D9

ORDEQ D14 K888 // 比较D14D15和K888是否相等，并将比较结果和栈顶值进行‘或’操作

ADEQ D10V0 D12Z0 // 比较（D10D11+地址偏移V0）和（D12D13+地址偏移Z0）是否相等，并将比较结果和栈顶值进行‘与’操作

LDFEQ D18 D20 // 加载浮点数D18D19和浮点数D20D21，并比较 浮点数D18D19是否等于浮点数D20D21

ORFEQ D26 K1.234567 // 比较浮点数D26D27和K1.234567是否相等，并将比较结果和栈顶值进行‘或’操作

AFEQ D22 D24 // 比较浮点数D22D23和浮点数D24D25是否相等，并将比较结果和栈顶值进行‘与’操作

ORB // 将栈顶值与当前能流值进行‘或’操作

ORB // 将栈顶值与当前能流值进行‘或’操作

OUT Y000 // 输出Y000

梯形图：


比较指令 <>

对应命令 | 注释/说明 | 操作数（寄存器）
W<> D<> F<> | LDWNE、AWNE、ORWNE LDDNE、ADNE、ORDNE LDFNE、AFNE、ORFNE | K/H/D/CV/TV/AI/AO/V/Z,K/H/D/CT/TV/AI/AO/V/Z K/H/D/CV32,K/H/D/CV32 K/D/CV32,K/D/CV32

指令说明：

比较不等于指令用于比较两个数值是否相等，如果比较结果为真实，输出打开

比较的两个数是带符号的

W<> 比较双字节整数

D<> 比较四字节整数

F<> 比较实数

在指令表中，当1位于堆栈顶端时，指令执行载入（LD）、与（AND）和或（OR）操作

实例：

指令表：

LDWNE D0 D1 // 加载D0和D1，并比较D0是否‘不等于’D1

ORWNE D4 D5 // 比较D4是否‘不等于’D5，并将比较结果和栈顶值进行‘或’操作

AWNE D2 D3 // 比较D2是否‘不等于’D3，并将比较结果和栈顶值进行‘与’操作

LDDNE D6 D8 // 加载D6D7和D8D9，并比较 D6D7是否‘不等于’D8D9

ORDNE D14 D16 // 比较D14D15是否‘不等于’D16D17，并将比较结果和栈顶值进行‘或’操作

ADNE D10 D12 // 比较D10D11是否‘不等于’D12D13，并将比较结果和栈顶值进行‘与’操作

LDFNE D18 D20 // 加载浮点数D18D19和D20D21，并比较 浮点数D18D19是否‘不等于’浮点数D20D21

ORFNE D26 D28 // 比较浮点数D26D27是否‘不等于’浮点数D28D29，并将比较结果和栈顶值进行‘或’操作

AFNE D22 D24 // 比较浮点数D22D23是否‘不等于’浮点数D24D25，并将比较结果和栈顶值进行‘与’操作

ORB // 将栈顶值与当前能流值进行‘或’操作

ORB // 将栈顶值与当前能流值进行‘或’操作

OUT Y000 // 输出Y000

梯形图：


比较指令 >=

对应命令 | 注释/说明 | 操作数（寄存器）
W>= D>= F>= | LDWGE、AWGE、ORWGE LDDGE、ADGE、ORDGE LDFGE、AFGE、ORFGE | K/H/D/CV/TV/AI/AO/V/Z,K/H/D/CT/TV/AI/AO/V/Z K/H/D/CV32,K/H/D/CV32 K/D/CV32,K/D/CV32

指令说明：

比较大于等于指令用于比较两个数值的大小，如果比较结果为真实，输出打开

比较的两个数是带符号的

W >= 比较双字节整数

D >= 比较四字节整数

F >= 比较实数

在指令表中， 当1位于堆栈顶端时，指令执行载入（LD）、与（AND）和或（OR）操作

实例：

指令表：

LDWGE D0 D1 // 加载D0和D1，并比较D0是否‘大于等于’D1

ORWGE D4 D5 // 比较D4是否‘大于等于’D5，并将比较结果和栈顶值进行‘或’操作

AWGE D2 D3 // 比较D2是否‘大于等于’D3，并将比较结果和栈顶值进行‘与’操作

LDDGE D6 D8 // 加载D6D7和D8D9，并比较 D6D7是否‘大于等于’D8D9

ORDGE D14 D16 // 比较D14D15是否‘大于等于’D16D17，并将比较结果和栈顶值进行‘或’操作

ADGE D10 D12 // 比较D10D11是否‘大于等于’D12D13，并将比较结果和栈顶值进行‘与’操作

LDFGE D18 D20 // 加载浮点数D18D19和D20D21，并比较 浮点数D18D19是否‘大于等于’浮点数D20D21

ORFGE D26 D28 // 比较浮点数D26D27是否‘大于等于’浮点数D28D29，并将比较结果和栈顶值进行‘或’操作

AFGE D22 D24 // 比较浮点数D22D23是否‘大于等于’浮点数D24D25，并将比较结果和栈顶值进行‘与’操作

ORB // 将栈顶值与当前能流值进行‘或’操作

ORB // 将栈顶值与当前能流值进行‘或’操作

OUT Y000 // 输出Y000

梯形图：


比较指令 <=

对应命令 | 注释/说明 | 操作数（寄存器）
W<= D<= F<= | LDWLE、AWLE、ORWLE LDDLE、ADLE、ORDLE LDFLE、AFLE、ORFLE | K/H/D/CV/TV/AI/AO/V/Z,K/H/D/CT/TV/AI/AO/V/Z K/H/D/CV32,K/H/D/CV32 K/D/CV32,K/D/CV32

指令说明：

比较小于等于指令用于比较两个数值的大小，如果比较结果为真实，输出打开

比较的两个数是带符号的

W<= 比较双字节整数

D <= 比较四字节整数

F <= 比较实数

在指令表中， 当1位于堆栈顶端时，指令执行载入（LD）、与（AND）和或（OR）操作

实例：

指令表：

LDWLE D0 D1 // 加载D0和D1，并比较D0是否‘小于等于’D1

ORWLE D4 D5 // 比较D4是否‘小于等于’D5，并将比较结果和栈顶值进行‘或’操作

AWLE D2 D3 // 比较D2是否‘小于等于’D3，并将比较结果和栈顶值进行‘与’操作

LDDLE D6 D8 // 加载D6D7和D8D9，并比较 D6D7是否‘小于等于’D8D9

ORDLE D14 D16 // 比较D14D15是否‘小于等于’D16D17，并将比较结果和栈顶值进行‘或’操作

ADLE D10 D12 // 比较D10D11是否‘小于等于’D12D13，并将比较结果和栈顶值进行‘与’操作

LDFLE D18 D20 // 加载浮点数D18D19和D20D21，并比较 浮点数D18D19是否‘小于等于’浮点数D20D21

ORFLE D26 D28 // 比较浮点数D26D27是否‘小于等于’浮点数D28D29，并将比较结果和栈顶值进行‘或’操作

AFLE D22 D24 // 比较浮点数D22D23是否‘小于等于’浮点数D24D25，并将比较结果和栈顶值进行‘与’操作

ORB // 将栈顶值与当前能流值进行‘或’操作

ORB // 将栈顶值与当前能流值进行‘或’操作

OUT Y000 // 输出Y000

梯形图：


比较指令 >

对应命令 | 注释/说明 | 操作数（寄存器）
W> D> F> | LDWG、AWG、ORWG LDDG、ADG、ORDG LDFG、AFG、ORFG | K/H/D/CV/TV/AI/AO/V/Z,K/H/D/CT/TV/AI/AO/V/Z K/H/D/CV32,K/H/D/CV32 K/D/CV32,K/D/CV32

指令说明：

比较大于指令用于比较两个数值的大小，如果比较结果为真实，输出打开

比较的两个数是带符号的

W > 比较双字节整数

D > 比较四字节整数

F > 比较实数

在指令表中， 当1位于堆栈顶端时，指令执行载入（LD）、与（AND）和或（OR）操作

实例：

指令表：

LDWG D0 D1 // 加载D0和D1，并比较D0是否‘大于’D1

ORWG D4 D5 // 比较D4是否‘大于’D5，并将比较结果和栈顶值进行‘或’操作

AWG D2 D3 // 比较D2是否‘大于’D3，并将比较结果和栈顶值进行‘与’操作

LDDG D6 D8 // 加载D6D7和D8D9，并比较 D6D7是否‘大于’D8D9

ORDG D14 D16 // 比较D14D15是否‘大于’D16D17，并将比较结果和栈顶值进行‘或’操作

ADG D10 D12 // 比较D10D11是否‘大于’D12D13，并将比较结果和栈顶值进行‘与’操作

LDFG D18 D20 // 加载浮点数D18D19和D20D21，并比较 浮点数D18D19是否‘大于’浮点数D20D21

ORFG D26 D28 // 比较浮点数D26D27是否‘大于’浮点数D28D29，并将比较结果和栈顶值进行‘或’操作

AFG D22 D24 // 比较浮点数D22D23是否‘大于’浮点数D24D25，并将比较结果和栈顶值进行‘与’操作

ORB // 将栈顶值与当前能流值进行‘或’操作

ORB // 将栈顶值与当前能流值进行‘或’操作

OUT Y000 // 输出Y000

梯形图：


比较指令 <

对应命令 | 注释/说明 | 操作数（寄存器）
W< D< F< | LDWL、AWL、ORWL LDDL、ADL、ORDL LDFL、AFL、ORFL | K/H/D/CV/TV/AI/AO/V/Z,K/H/D/CT/TV/AI/AO/V/Z K/H/D/CV32,K/H/D/CV32 K/D/CV32,K/D/CV32

指令说明：

比较小于指令用于比较两个数值的大小，如果比较结果为真实，输出打开

比较的两个数是带符号的

W < 比较双字节整数

D < 比较四字节整数

F < 比较实数

在指令表中， 当1位于堆栈顶端时，指令执行载入（LD）、与（AND）和或（OR）操作

实例：

指令表：

LDWL D0 D1 // 加载D0和D1，并比较D0是否‘小于’D1

ORWL D4 D5 // 比较D4是否‘小于’D5，并将比较结果和栈顶值进行‘或’操作

AWL D2 D3 // 比较D2是否‘小于’D3，并将比较结果和栈顶值进行‘与’操作

LDDL D6 D8 // 加载D6D7和D8D9，并比较 D6D7是否‘小于’D8D9

ORDL D14 D16 // 比较D14D15是否‘小于’D16D17，并将比较结果和栈顶值进行‘或’操作

ADL D10 D12 // 比较D10D11是否‘小于’D12D13，并将比较结果和栈顶值进行‘与’操作

LDFL D18 D20 // 加载浮点数D18D19和D20D21，并比较 浮点数D18D19是否‘小于’浮点数D20D21

ORFL D26 D28 // 比较浮点数D26D27是否‘小于’浮点数D28D29，并将比较结果和栈顶值进行‘或’操作

AFL D22 D24 // 比较浮点数D22D23是否‘小于’浮点数D24D25，并将比较结果和栈顶值进行‘与’操作

ORB // 将栈顶值与当前能流值进行‘或’操作

ORB // 将栈顶值与当前能流值进行‘或’操作

OUT Y000 // 输出Y000

梯形图：


转换指令

内容如下：

WTOD

DTOW

DTOF

BIN

BCD

ROUND

TRUNC


整数转换为双整数 WTOD

对应命令 | 注释/说明 | 操作数（寄存器）
WTOD | 16位整数转换为32位整数 | D/K/H/TV/CV/AI/AO/V/Z,D

指令说明：

整数至双整数（WTOD）指令将整数值（IN）转换成双整数值，并将结果置入OUT指定的变量中。

实例：

指令表：

LD X000

WTOD D0 D1 //将整数D0转换为双整数并存储在寄存器D1D2

梯形图：


双整数转换为整数 DTOW

对应命令 | 注释/说明 | 操作数（寄存器）
DTOW | 32位整数转换为16位整数 | D/K/H,D/TV/CV/AO/V/Z

指令说明：

双整数至整数（DTOW）指令将双整数值（IN）转换成整数值，并将结果置入OUT指定的变量中。

如果转换的数值过大，数值溢出标志位被置位，且无法在输出中表示。

M_8169 被置位时表示数值溢出

实例：

指令表：

LD X000

DTOW D0 D2 //将双整数D0D1转换为整数并存储在寄存器D2

梯形图：


双整数转换为浮点数 DTOF

对应命令 | 注释/说明 | 操作数（寄存器）
DTOF | 32位整数转换为浮点数 | D/K/H,D

指令说明：

双整数至浮点数（DTOF）指令将双整数值（IN）转换成浮点数，并将结果置入OUT指定的变量中。

实例：

指令表：

LD X000

DTOF D0 D2 //将双整数D0D1转换为浮点数并存储在寄存器D2D3

梯形图：


BCD码转换为整数 BIN

对应命令 | 注释/说明 | 操作数（寄存器）
BIN | BCD码转换为16位整数 | D/K/H/TV/CV/AI/AO/V/Z,D/TV/CV/AO/V/Z

指令说明：

BCD至整数指令将二进制编码的十进制数值IN转换成整数，并将结果载入OUT指定的变量中。IN的有效范围是0至9999 BCD。

M_8168 被置位时表示无效的BCD码转换

实例：

指令表：

LD X000

BIN H0234 D0 //将BCD码234转换为整数并存储在寄存器D0

梯形图：


整数转换为BCD BCD

对应命令 | 注释/说明 | 操作数（寄存器）
BCD | 16位整数转换为BCD码 | D/K/H/TV/CV/AI/AO/ V/Z,D/TV/CV/AO/V/Z

指令说明：

整数至BCD指令将整数（IN）转换成二进制编码的十进制数值，并将结果载入OUT指定的变量中。OUT的有效范围是0至9999 BCD。

M_8168 被置位时表示无效的BCD码转换

实例：

指令表：

LD X000

BCD D0 D1 //将整数D0转换为BCD码并存储在寄存器D1

梯形图：


取整 ROUND

对应命令 | 注释/说明 | 操作数（寄存器）
ROUND | 实数转换成双整数值 | D/K,D

指令说明：

指令将实值（IN）转换成双整数值，并将结果置入OUT指定的变量中。如果小数部分等于或大于0.5，则进位为整数。

实例：

指令表：

LD X000

ROUND K4.56 D0 //将实数4.56转换为双整数并存储在寄存器D0D1 0.56>0.5 进位为1 所以转换结果为5

梯形图：


截位 TRUNC

对应命令 | 注释/说明 | 操作数（寄存器）
TRUNC | 截位将32位实数转换为32位双整数 | D/K,D

指令说明：

指令将32位实数（IN）转换成32位双整数，并将结果的整数部分置入OUT指定的变量中。只有实数的整数部分被转换，小数部分被丢弃。

实例：

指令表：

LD X000

TRUNC K4.56 D0 //将实数4.56转换为双整数并存储在寄存器D0D1 转换结果为4

梯形图：


逻辑运算指令

内容如下：

INVW

INVD

ANDW

ANDD

ORW

ORD

XORW

XORD


反转字 INVW

对应命令 | 注释/说明 | 操作数（寄存器）
INVW | 字取反 | K/H/D/TV/CV/AI/AO/V/Z, D/TV/CV/AO/V/Z

指令说明：

指令对输入字IN执行取反操作，并将结果载入输出OUT寄存器。

实例：

指令表：

LD X000

INVW D0 D1 //将D0取反输出到D1

梯形图：


反转双字 INVD

对应命令 | 注释/说明 | 操作数（寄存器）
INVD | 双字取反 | K/H/D,D

指令说明：

指令对输入双字IN执行取反操作，并将结果载入输出OUT寄存器。

实例：

指令表：

LD X000

INVD D0 D2 //将D0D1取反输出到D2D3

梯形图：


字相与 ANDW

对应命令 | 注释/说明 | 操作数（寄存器）
ANDW | 字相与 | K/H/D/TV/CV/AI/AO/V/Z,K/H/D/TV/CV/AI/AO/V/Z,D/TV/CV/AO/V/Z

指令说明：

指令对输入字IN1和IN2执行与操作，并将结果载入输出OUT寄存器。

实例：

指令表：

LD X000

ANDW D0 D1 D2 //将D0与D1进行与操作，并将结果输出到D2

梯形图：


双字相与 ANDD

对应命令 | 注释/说明 | 操作数（寄存器）
ANDD | 双字相与 | K/H/D,K/H/D,D

指令说明：

指令对输入双字IN1和IN2执行与操作，并将结果载入输出OUT寄存器。

实例：

指令表：

LD X000

ANDD D0 D2 D4 //将D0D1与D2D3进行与操作，并将结果输出到D4D5

梯形图：


字相或 ORW

对应命令 | 注释/说明 | 操作数（寄存器）
ORW | 字相或 | K/H/D/TV/CV/AI/AO/V/Z,K/H/D/TV/CV/AI/AO/V/Z,D/TV/CV/AO/V/Z

指令说明：

指令对输入字IN1和IN2执行或操作，并将结果载入输出OUT寄存器。

实例：

指令表：

LD X000

ORW D0 D1 D2 //将D0与D1进行或操作，并将结果输出到D2

梯形图：


双字或 ORD

对应命令 | 注释/说明 | 操作数（寄存器）
ORD | 双字相或 | K/H/D,K/H/D,D

指令说明：

指令对输入双字IN1和IN2执行或操作，并将结果载入输出OUT寄存器。

实例：

指令表：

LD X000

ORD D0 D2 D4 //将D0D1与D2D3进行或操作，并将结果输出到D4D5

梯形图：


字异或 XORW

对应命令 | 注释/说明 | 操作数（寄存器）
XORW | 字异或 | K/H/D/TV/CV/AI/AO/V/Z,K/H/D/TV/CV/AI/AO/V/Z,D/TV/CV/AO/V/Z

指令说明：

指令对输入字IN1和IN2执行异或操作，并将结果载入输出OUT寄存器。

实例：

指令表：

LD X000

XORW D0 D1 D2 //将D0与D1进行异或操作，并将结果输出到D2

梯形图：


双字异或 XORD

对应命令 | 注释/说明 | 操作数（寄存器）
XORD | 双字异或 | K/H/D,K/H/D,D

指令说明：

指令对输入双字IN1和IN2执行异或操作，并将结果载入输出OUT寄存器。

实例：

指令表：

LD X000

XORD D0 D2 D4 //将D0D1与D2D3进行异或操作，并将结果输出到D4D5

梯形图：


传送指令

内容如下:

MOV

MOVD

MOVF

MVBLK

MVDBLK


移动字 MOV

对应命令 | 注释/说明 | 操作数（寄存器）
MOV | 移动字 | D/TV/CV/K/H/AI/AO/V/Z,D/TV/CV/AO/V/Z

指令说明：

指令将输入字（S）复制至输出字（D），不改变原来的数值。

实例：

指令表：

LD X000

MOV D0 D1 //D0复制到D1

梯形图：


传送双字 MOVD

对应命令 | 注释/说明 | 操作数（寄存器）
MOVD | 传送双字 | D/K/H/CV32,D/CV32

指令说明：

指令将输入双字（S）复制至输出双字（D），不改变原来的数值。

实例：

指令表：

LD X000

MOVD D0 D2 //D0D1复制到D2D3

梯形图：


传送实数 MOVF

对应命令 | 注释/说明 | 操作数（寄存器）
MOVF | 传送实数 | D/K/AI/AO/CV32,D/CV32

指令说明：

指令将输入实数（S）复制至输出实数（D），不改变原来的数值。

实例：

指令表：

LD X000

MOVF D0 D2 //D0D1复制到D2D3

梯形图：


成块移动字 MVBLK

对应命令 | 注释/说明 | 操作数（寄存器）
MVBLK | 成块移动字 | D/TV/CV/AI/AO/V/Z, D/TV/CV/AO/V/Z, D/K/H

指令说明：

指令将字数目（N）从输入地址（S）复制至输出地址（D）。N的范围是1至1024。

实例：

指令表：

LD X000

MVBLK D0 D5 K10 //将D0~D9这10个字复制到D5~D14的10个字

梯形图：


成块移动双字 MVDWBLK

对应命令 | 注释/说明 | 操作数（寄存器）
MVDBLK | 成块移动双字 | D, D, D/K/H

指令说明：

指令将双字数目（N）从输入地址（S）复制至输出地址（D）。N的范围是1至512。

实例：

指令表：

LD X000

MVDBLK D0 D100 K10 //将D0(D1) ~ D18(D19)的10个双字复制到D100(D101)~ D118(D119)

梯形图：


浮点数运算指令

内容如下:

ADDF

SUBF

MULF

DIVF

SQRT

SIN

COS

TAN

LN

EXP


浮点加运算 ADDF

对应命令 | 注释/说明 | 操作数（寄存器）
ADDF | 浮点数加 | K/D/CV32,K/D/CV32,D/CV32

指令说明：

指令将两个32位实数相加，并产生一个32位实数结果（OUT）。

IN1 + IN2 = OUT

M_8170 负结果

M_8171 零结果

实例：

指令表：

LD X000

ADDF D0 D2 D4 //D0D1 + D2D3 = D4D5

梯形图：


浮点减运算 SUBF

对应命令 | 注释/说明 | 操作数（寄存器）
SUBF | 浮点数减 | K/D/CV32,K/D/CV32,D/CV32

指令说明：

指令将两个32位实数相减，并产生一个32位实数结果（OUT）。

IN1 - IN2 = OUT

M_8170 负结果

M_8171 零结果

实例：

指令表：

LD X000

SUBF D0 D2 D4 //D0D1 - D2D3 = D4D5

梯形图：


浮点乘运算 MULF

对应命令 | 注释/说明 | 操作数（寄存器）
MULF | 浮点数乘 | K/D/CV32,K/D/CV32,D/CV32

指令说明：

指令将两个32位实数相乘，并产生一个32位实数结果（OUT）。

IN1 × IN2 = OUT

M_8170 负结果

M_8171 零结果

实例：

指令表：

LD X000

MULF D0 D2 D4 //D0D1 × D2D3 = D4D5

梯形图：


浮点除运算 DIVF

对应命令 | 注释/说明 | 操作数（寄存器）
DIVF | 浮点数除 | K/D/CV32,K/D/CV32,D/CV32

指令说明：

指令将两个32位实数相除，并产生一个32位实数结果（OUT）。

IN1 ÷ IN2 = OUT

M_8170 负结果

M_8171 零结果

M_8172 除数为零

实例：

指令表：

LD X000

DIVF D0 D2 D4 //D0D1 ÷ D2D3 = D4D5

梯形图：


平方根 SQRT

对应命令 | 注释/说明 | 操作数（寄存器）
SQRT | 平方根 | D/K/CV32,D/CV32

指令说明：

指令对32位实数（IN）取平方根，并产生一个32位实数结果（OUT）

SQRT（IN）= OUT

M_8171 零结果

实例：

指令表：

LD X000

SQRT K256 D0 // SQRT(256) = D0D1 = 16

梯形图：


正弦 SIN

对应命令 | 注释/说明 | 操作数（寄存器）
SIN | 正弦函数 | D/K/CV32,D/CV32

指令说明：

指令对角度值IN进行三角运算，并将结果放置在OUT中。输入角以角度为单位。欲将输入角从弧度转换成角度，用弧度除以1.745329E-2（约等于PI/180，PI = 3.1415926）。

SIN（IN）= OUT

M_8170 负结果

M_8171 零结果

实例：

指令表：

LD X000

SIN K30 D0 // SIN(30°) = D0D1 = 0.5

梯形图：


余弦 COS

对应命令 | 注释/说明 | 操作数（寄存器）
COS | 余弦函数 | D/K/CV32,D/CV32

指令说明：

指令对角度值IN进行三角运算，并将结果放置在OUT中。输入角以角度为单位。欲将输入角从弧度转换成角度，用弧度除以1.745329E-2（约等于PI/180，PI = 3.1415926）。

COS（IN）= OUT

M_8170 负结果

M_8171 零结果

实例：

指令表：

LD X000

COS K60 D0 // COS(60°) = D0D1 = 0.5

梯形图：


正切 TAN

对应命令 | 注释/说明 | 操作数（寄存器）
TAN | 正切函数 | D/K/CV32,D/CV32

指令说明：

指令对角度值IN进行三角运算，并将结果放置在OUT中。输入角以角度为单位。欲将输入角从弧度转换成角度，用弧度除以1.745329E-2（约等于PI/180，PI = 3.1415926）。

TAN（IN）= OUT

M_8169 溢出

M_8170 负结果

M_8171 零结果

实例：

指令表：

LD X000

TAN K45 D2 // TAN(45°) = D2D3 = 1

梯形图：


自然对数 LN

对应命令 | 注释/说明 | 操作数（寄存器）
LN | 自然对数函数 | D/K/CV32,D/CV32

指令说明：

指令对IN中的数值进行自然对数计算，并将结果置于OUT中。

LN(IN) = OUT

欲从自然对数获得以10为底数的对数，用自然对数除以2.302585（约等于10的自然对数）。

欲将任何实数提升为另一个实数的乘幂，包括分数指数：将"自然指数"指令与"自然对数"指令相结合。例如，欲将X提升为Y乘幂，输入以下指令：EXP (Y * LN (X))。

实例：

指令表：

LD X000

LN D0 D2 //LN（D0D1） = D2D3

梯形图：


自然指数 EXP

对应命令 | 注释/说明 | 操作数（寄存器）
EXP | 自然指数函数 | D/K/CV32,D/CV32

指令说明：

指令进行e的IN次方指数计算，并将结果置于OUT中。

EXP(IN) = OUT

欲将任何实数提升为另一个实数的乘幂，包括分数指数：将"自然指数"指令与"自然对数"指令相结合。例如欲将X提升为Y乘幂，输入以下指令：

EXP (Y * LN (X))。

例：5的立方 = 5^3=EXP(3*LN(5))=125

实例：

指令表：

LD X000

EXP K3 D2 //EXP（3） = D2D3 = e^3

梯形图：


整数计算指令

内容如下:

ADD

ADDD

SUB

SUBD

MUL

MULW

MULD

DIV

DIVW

DIVD

INC

INCD

DEC

DECD


16位整数加 ADD

对应命令 | 注释/说明 | 操作数（寄存器）
ADD | 16位整数加得到16位整数 | K/H/D/TV/CV/AI/AO/V/Z,K/H/D/TV/CV/AI/AO/V/Z,D/TV/CV/AO/V/Z

指令说明：

指令（ADD）将两个16位整数相加，并产生一个16位的结果（OUT）

IN1 ＋ IN2 = OUT

M_8169 溢出

M_8170 负结果

M_8171 零结果

实例：

指令表：

LD X000

ADD D0 D1 D2 //D0 + D1 = D2

梯形图：


双整数加 ADDD

对应命令 | 注释/说明 | 操作数（寄存器）
ADDD | 32位整数加 | K/H/D/CV32,K/H/D/CV32,D/CV32

指令说明：

指令（ADDD）将两个32位整数相加，并产生一个32位的结果（OUT）

IN1 ＋ IN2 = OUT

M_8169 溢出

M_8170 负结果

M_8171 零结果

实例：

指令表：

LD X000

ADDD D0 D2 D4 //D0D1 + D2D3 = D4D5

梯形图：


16位整数减 SUB

对应命令 | 注释/说明 | 操作数（寄存器）
SUB | 16位整数减 | K/H/D/TV/CV/AI/AO/V/Z,K/H/D/TV/CV/AI/AO/V/Z,D/TV/CV/AO/V/Z

指令说明：

指令（SUB）将两个16位整数相减，并产生一个16位的结果（OUT）

IN1 - IN2 = OUT

M_8169 溢出

M_8170 负结果

M_8171 零结果

实例：

指令表：

LD X000

SUB D0 D1 D2 //D0 - D1 = D2

梯形图：


32位整数减 SUBD

对应命令 | 注释/说明 | 操作数（寄存器）
SUBD | 32位整数减 | K/H/D/CV32,K/H/D/CV32,D/CV32

指令说明：

指令（SUBD）将两个32位整数相减，并产生一个32位的结果（OUT）

IN1 - IN2 = OUT

M_8169 溢出

M_8170 负结果

M_8171 零结果

实例：

指令表：

LD X000

SUBD D0 D2 D4 //D0D1 – D2D3 = D4D5

梯形图：


乘 MUL

对应命令 | 注释/说明 | 操作数（寄存器）
MUL | 乘 | K/H/D/TV/CV/AI/AO/V/Z,K/H/D/TV/CV/AI/AO/V/Z,D

指令说明：

指令（MUL）将两个16位整数相乘，并产生一个32位的结果（OUT）

IN1 × IN2 = OUT

M_8170 负结果

M_8171 零结果

实例：

指令表：

LD X000

MUL D0 D1 D2 //D0 × D1 = D2D3

梯形图：


16位乘 MULW

对应命令 | 注释/说明 | 操作数（寄存器）
MULW | 16位乘 | K/H/D/TV/CV/AI/AO/V/Z,K/H/D/TV/CV/AI/AO/V/Z,D/TV/CV/AO/V/Z

指令说明：

指令（MULW）将两个16位整数相乘，并产生一个16位的结果（OUT）

IN1 × IN2 = OUT

M_8169 溢出

M_8170 负结果

M_8171 零结果

实例：

指令表：

LD X000

MULW D0 D1 D2 //D0 × D1 = D2

梯形图：


32位乘 MULD

对应命令 | 注释/说明 | 操作数（寄存器）
MULD | 32位乘 | K/H/D/CV32,K/H/D/CV32,D/CV32

指令说明：

指令（MULD）将两个32位整数相乘，并产生一个32位的结果（OUT）

IN1 × IN2 = OUT

M_8169 溢出

M_8170 负结果

M_8171 零结果

实例：

指令表：

LD X000

MULD D0 D2 D4 //D0D1 × D2D3 = D4D5

梯形图：


除 DIV

对应命令 | 注释/说明 | 操作数（寄存器）
DIV | 除 | K/H/D/TV/CV/AI/AO/V/Z,K/H/D/TV/CV/AI/AO/V/Z,D

指令说明：

指令（DIV）将两个16位整数相除，并产生一个32位的结果（OUT），其中低16位存商，高16位存余数

IN1 ÷ IN2 = OUT

M_8169 溢出

M_8170 负结果

M_8171 零结果

M_8172 除数为零

实例：

指令表：

LD X000

DIV D0 D1 D2 //D0 ÷ D1 = D2D3 D2存商 D3存余数

梯形图：


16位除 DIVW

对应命令 | 注释/说明 | 操作数（寄存器）
DIVW | 16位除 | K/H/D/TV/CV/AI/AO/V/Z,K/H/D/TV/CV/AI/AO/V/Z,D/TV/CV/AO/V/Z

指令说明：

指令（DIVW）将两个16位整数相除，并产生一个16位的结果（OUT）

IN1 ÷ IN2 = OUT

M_8169 溢出

M_8170 负结果

M_8171 零结果

M_8172 除数为零

实例：

指令表：

LD X000

DIVW D0 D1 D2 //D0 ÷ D1 = D2

梯形图：


32位除 DIVD

对应命令 | 注释/说明 | 操作数（寄存器）
DIVD | 32位除 | K/H/D/CV32,K/H/D/CV32,D/CV32

指令说明：

指令（DIVD）将两个32位整数相除，并产生一个32位的结果（OUT）

IN1 ÷ IN2 = OUT

M_8169 溢出

M_8170 负结果

M_8171 零结果

M_8172 除数为零

实例：

指令表：

LD X000

DIVD D0 D2 D4 //D0D1 ÷ D2D3 = D4D5

梯形图：


字加1 INC

对应命令 | 注释/说明 | 操作数（寄存器）
INC | 字加1 | K/H/D/TV/CV/AO/V/Z, D/TV/CV/AO/V/Z

指令说明：

指令（INC）16位整数加一，并产生一个16位的结果（OUT）

IN + 1 = OUT

M_8169 溢出

M_8170 负结果

M_8171 零结果

实例：

指令表：

LD X000

INC D0 D0 //D0 + 1 = D0

梯形图：


双字加1 INCD

对应命令 | 注释/说明 | 操作数（寄存器）
INCD | 双字加1 | K/H/D/CV32,D/CV32

指令说明：

指令（INCD）32位整数加一，并产生一个32位的结果（OUT）

IN + 1 = OUT

M_8169 溢出

M_8170 负结果

M_8171 零结果

实例：

指令表：

LD X000

INCD D0 D0 //D0D1 + 1 = D0D1

梯形图：


字减1 DEC

对应命令 | 注释/说明 | 操作数（寄存器）
DEC | 字减1 | K/H/D/TV/CV/ AO/V/Z,D/TV/CV/AO/V/Z

指令说明：

指令（DEC）16位整数减一，并产生一个16位的结果（OUT）

IN - 1 = OUT

M_8169 溢出

M_8170 负结果

M_8171 零结果

实例：

指令表：

LD X000

DEC D0 D0 //D0 - 1 = D0

梯形图：


双字减1 DECD

对应命令 | 注释/说明 | 操作数（寄存器）
DECD | 双字减1 | K/H/D/CV32,D/CV32

指令说明：

指令（DECD）32位整数减一，并产生一个32位的结果（OUT）

IN - 1 = OUT

M_8169 溢出

M_8170 负结果

M_8171 零结果

实例：

指令表：

LD X000

DECD D0 D0 //D0D1 - 1 = D0D1

梯形图：


定时器指令

内容如下:

TON

TONR

TOF


接通延时定时器 TON

对应命令 | 注释/说明 | 操作数（寄存器）
TON | 接通延时定时器 | TV,K/H/D

指令说明：

TON指令在启用输入端为"闭合"时，开始计时。当前值（TVx）大于或等于预设时间（SV）时，定时器位（Tx）为"闭合"，且定时器停止计时；

启用输入端为"断开"时，接通延时定时器自动复位，即定时器位（Tx）为OFF，当前值（TVx）为0；

Tx = T0至T255，TVx = TV0至TV255。

TON、TONR和TOF定时器有三种分辨率。分辨率由下图所示的定时器编号决定。每一个当前值都是时间基准的倍数。例如，10毫秒定时器中的计数50表示500毫秒

定时器类型 | 分辨率 | 最大值 | 定时器编号
TON、TONR、TOF | 100ms | 3276.7秒 | T0 – T199
 | 10ms | 327.67秒 | T200 – T249
 | 1ms | 32.767秒 | T250 – T255

注意：

TOF，TONR及TON不能共享相同的定时器号码。例如，不能有 TON TV32 D0和TOF TV32 D0。

您可以将TON用于单间隔计时。

可用"复原"（RST）指令复原任何定时器。"复原"指令执行下列操作：

定时器位 = 断开，定时器当前值 = 0

定时器的刷新方式：

FGs系列PLC对于不同分辨率的定时器，其刷新方式是不同的，从而在使用方法上也有很大的不同，使用时请一定要注意根据使用场合和要求来选择不同分辨率的定时器

（1）1ms定时器：1ms定时器由系统每隔1ms刷新一次，与扫描周期及程序处理无关，它采用的是中断刷新方式，因此当扫描周期大于1ms时，在一个周期中可能被多次刷新，其当前值（TVx）及（Tx）在一个扫描周期内不一定保持一致；

（2）10ms定时器：10ms定时器由系统在每个扫描周期开始时自动刷新，由于在每隔扫描周期只刷新一次，因此在一个扫描周期内定时器位（Tx）和当前值（TVx）始终保持一致；

（3）100ms定时器：100ms定时器是在定时器指令执行时才被刷新，因此，若100ms定时器被激活后，如果不是每个扫描周期都执行定时器指令或在一个扫描周期内多次执行定时器指令，则都会造成计时失准。100ms定时器仅用在定时器指令在每个扫描周期执行一次的程序中；

定时器的正确使用举例：

（1）1ms定时器：在使用错误方法时，只有当定时器的刷新发生在T250的常闭触点执行以后到T250的常开触点执行以前的区间时，才能产生宽度为一个扫描周期的Y0输出，而这种可能性是极小的；

（2）10ms定时器：在使用错误方法时，则永远也产生不了Y0输出，因为当10ms的定时器计时到时，定时器是在每次扫描周期的开始时才刷新，例中当T200被置位，但执行到定时器指令时，定时器将被复位（当前值和定时器位都被置0）；当常开触点T200被执行时，T200永远为OFF，Y0也将为OFF，即永远不会被置位ON；

（3）100ms定时器：由于100ms定时器是在执行指令时刷新，因此，当定时器T0到达设定值时，必定会产生一个Y0输出；

实例：

指令表：

Network 000

LD X000

TON TV10 D0 //定时器定时到D0时，T10 = 1 （D0为变量,也可以用常量代替，如K1）

Network 001

LD T10

OUT Y000

梯形图：


接通延时记忆定时器 TONR

对应命令 | 注释/说明 | 操作数（寄存器）
TONR | 接通延时记忆定时器 | TV,K/H/D

指令说明：

指令在启用输入为"闭合"时，开始计时。当前值（TVxxx）大于或等于预设时间（SV）时，计时位（Txxx）为"闭合"。当输入为"断开"时，保持保留性延迟定时器当前值。您可使用保留性接通延时定时器为多个输入"闭合"阶段累计时间。Txxx = T0至T255，TVxxx = TV0至TV255。

TON、TONR和TOF定时器有三种分辨率。分辨率由下图所示的定时器编号决定。每一个当前值都是时间基准的倍数。例如，10毫秒定时器中的计数50表示500毫秒

定时器类型 | 分辨率 | 最大值 | 定时器编号
TON、TONR、TOF | 100ms | 3276.7秒 | T0 – T199
 | 10ms | 327.67秒 | T200 – T249
 | 1ms | 32.767秒 | T250 – T255

注意：

TOF，TONR及TON不能共享相同的定时器号码。例如，不能有 TONR TV32 D0和TON TV32 D0。

您可以将TONR用于累积多个计时间隔。

可用"复原"（RST）指令复原任何定时器。"复原"指令执行下列操作：

定时器位 = 断开，定时器当前值 = 0

只能用"复原"指令复原TONR定时器。

实例：

指令表：

Network 000

LD X000

TONR TV251 K100 //定时器定时到K100时，T251 = 1 （如K100表示定时到达100*1ms,也可以用变量代替）

Network 001

LD T251

OUT Y000

梯形图：


断开延时定时器 TOF

对应命令 | 注释/说明 | 操作数（寄存器）
TOF | 断开延时定时器 | TV,K/H/D

指令说明：

用于在输入关闭后，延迟固定的一段时间再关闭输出。启用输入打开时，定时器位立即打开，当前值被设为0。输入关闭时，定时器继续计时，直到消逝的时间达到预设时间。达到预设值后，定时器位关闭，当前值停止计时。如果输入关闭的时间短于预设数值，则定时器位仍保持在打开状态。TOF指令必须遇到从"闭合"至"断开"的转换才开始计时。

TON、TONR和TOF定时器有三种分辨率。分辨率由下图所示的定时器编号决定。每一个当前值都是时间基准的倍数。例如，10毫秒定时器中的计数50表示500毫秒

定时器类型 | 分辨率 | 最大值 | 定时器编号
TON、TONR、TOF | 100ms | 3276.7秒 | T0 – T199
 | 10ms | 327.67秒 | T200 – T249
 | 1ms | 32.767秒 | T250 – T255

注意：

TOF，TONR及TON不能共享相同的定时器号码。例如，不能有 TONR TV32 D0和TOF TV32 D0。

您可以将TOF用于延长时间以超过关闭（或假）条件，例如在电机关闭后使电机冷却。

可用"复原"（RST）指令复原任何定时器。"复原"指令执行下列操作：

定时器位 = 断开，定时器当前值 = 0

复原后，TOF定时器要求启用输入从"闭合"转换为"断开"，以便重新启动。

实例：

指令表：

Network 000

LD X000

TOF TV200 K1 //定时器定时到K1时，T200 = 1 （如K1表示定时到达1*10ms，K2表示2*10ms等,也可以用变量代替）

Network 001

LD T200

OUT Y000

梯形图：


计数器指令

内容如下:

CTU

CTUD

CTD


向上计数器 CTU

对应命令 | 注释/说明 | 操作数（寄存器）
CTU | 向上计数器 | CV/CV32,K/H/D

指令说明：

每次向上计数输入能流从关闭向打开转换时，向上计数（CTU）指令从当前值向上计数。当前值（CVxxx）大于或等于预设值（SV）时，计数器位（Cxxx）打开。复原（RST）输入打开或执行"复原"指令时，计数器被复原。达到最大值（32,767或2147483647）时，计数器停止计数。

计数器范围： CVxxx=CV0 至 CV255；Cxxx= C0 至 C255。

计数器类型 | 计数器位数 | 最大值 | 计数器编号
CTU | 16位 | 32767 | C0 – C199
 | 32位 | 2147483647 | C200 – C234
 | 32位（高速） | 2147483647 | C235 – C255

注意：因为每个计数器有一个当前值，请勿将相同的计数器号码设置给一个以上计数器（号码相同的向上计数器和向下计数器存取相同的当前值）。

实例：

指令表：

Network 000

LD X000

CTU CV0 D0 //计数器从当前值CV0开始向上计数，设定值（SV）为D0

Network 001

LD C0

OUT Y000

梯形图：


向上向下计数器 CTUD

对应命令 | 注释/说明 | 操作数（寄存器）
CTUD | 向上向下计数器 | CV/CV32,K/H/D

指令说明：

每次计数输入能流从关闭向打开转换时，计数器（CTUD）指令判断当前值与设定值的大小。当前值（CVxxx）大于（小于）预设值（SV）时，计数器做向下（向上）计数，当前值（CVxxx）等于预设值（SV）时，计数器（Cxxx）置为1，当前值（CVxxx）不动作。复原（RST）输入打开或执行"复原"指令时，计数器被复原（复原计数器（Cxxx）时，建议使用RST指令进行）。

计数器范围： CVxxx=CV0 至 CV255；Cxxx= C0 至 C255。

计数器类型 | 计数器位数 | 最大值 | 计数器编号
CTUD | 16位 | 32767 | C0 – C199
 | 32位 | 2147483647 | C200 – C234
 | 32位（高速） | 2147483647 | C235 – C255

注意：因为每个计数器有一个当前值，请勿将相同的计数器号码设置给一个以上计数器（编号相同的计数器存取相同的当前值）。

实例：

指令表：

Network 000

LD X000

CTUD CV0 D0 //计数器判断CV0与D0的大小关系，并从当前值CV0开始向上向下计数，设定值（SV）为D0

Network 001

LD C0

OUT Y000


向下计数器 CTD

对应命令 | 注释/说明 | 操作数（寄存器）
CTD | 向下计数器 | CV/CV32,K/H/D

指令说明：

每次向下计数输入能流从关闭向打开转换时，向下计数（CTD）指令从当前值向下计数。当前值CVxxx等于0时，计数器位（Cxxx）打开。载入输入（LD）打开时，计数器复原计数器位（Cxxx）并用预设值（SV）载入当前值。达到零时，计数器位Cxxx打开。向下计数器继续向下计数到最小值（16位-32768，,32位-2147483648），停止计数。

计数器范围： CVxxx=CV0 至 CV255；Cxxx= C0 至 C255。

计数器类型 | 计数器位数 | 最大值 | 计数器编号
CTD | 16位 | 32767 | C0 – C199
 | 32位 | 2147483647 | C200 – C234
 | 32位（高速） | 2147483647 | C235 – C255

注意：因为每个计数器有一个当前值，请勿将相同的计数器号码设置给一个以上计数器（号码相同的向上计数器和向下计数器存取相同的当前值）。

实例：

指令表：

Network 000

LD X000

CTD CV0 D0 //计数器从当前值CV0开始向下计数，设定值（SV）为D0

Network 001

LD C0

OUT Y000

梯形图：


程序控制指令

内容如下:

FOR

NEXT

JMP

LBL

CALL

CALLM


FOR循环

对应命令 | 注释/说明 | 操作数（寄存器）
FOR | For循环 | D/K/H

指令说明：

如果指令前条件导通，则执行此条指令。此条指令必须和NEXT指令配合使用，FOR和NEXT指令允许了一个程序的区域指定。在这个区域内，包括了一系列指令，它们将会被重复执行（CNT）次。

如果未导通，则程序跳过FOR—NEXT中间的所有程序段，向下执行剩下的指令。

注意：FOR循环嵌套层数最大为8层

实例：

指令表：

LD X000

FOR K10 //循环10次

…… //执行其他语句

NEXT

梯形图：


最近一次 for 循环结束 NEXT

对应命令 | 注释/说明 | 操作数（无）
NEXT | 跟FOR指令配对 | None

指令说明：

始终与此条NEXT指令之前的最近一次的FOR指令配套，结束FOR循环

实例：

指令表：

LD X000

FOR K10 //循环10次

…… //执行其他语句

NEXT

梯形图：


程序内部跳转 JMP

对应命令 | 注释/说明 | 操作数（寄存器）
JMP | 程序内部跳转 | K/H

指令说明：

跳接至标签（JMP）指令对程序中的指定标签（LBL）执行分支操作。

跳接接受时，堆栈顶值始终为逻辑1。

您可以在主程序、子程序或中断子程序中使用“跳接”指令。

“跳接”及其对应的“标签”指令必须始终位于相同的代码段中（主程序、子程序或中断子程序）。

实例：

指令表：

LD X000

JMP K0 //假如栈顶值为1，跳转到K0标签处

…… //不执行语句范围

LBL K0

……

梯形图：


程序内部标签 LBL

对应命令 | 注释/说明 | 操作数（寄存器）
LBL | 程序内部标签 | K/H

指令说明：

与JMP指令配合使用，指示跳转位置。

实例：

指令表：

LD X000

JMP K0 //假如栈顶值为1，跳转到K0标签处

…… //不执行语句范围

LBL K0

……

梯形图：


调用子程序 CALL

对应命令 | 注释/说明 | 操作数（寄存器）
CALL | 调用子程序 | 子程序ID

指令说明：

当CALL指令有效时，通过被调用的指针，它将强迫程序运行与子程序ID号相同的子程序，执行完被调用子程序，会自动返回到当前CALL指令的下一条指令继续执行；

当CALL指令无效时，程序会自动跳过此条CALL指令，执行下一条指令。

注意：1.指令输入时，子程序输入对应K10，中断程序对应K100，PID程序对应K200；

如：下梯形图，CALL指令与子程序SBR_0关联则输入:CALL K10即可，与子程序SBR_1关联则 CALL K11，以此类推。

2.CALL 子程序调用最大嵌套8层。

实例：

指令表：

LD X000

CALL SBR_0（SBR0） //调用子程序SBR0

梯形图：


C函数功能块调用 CALLM

对应命令 | 注释/说明 | 操作数（寄存器）
CALLM | 函数功能块调用 | 函数功能块编号，字地址(D,TV,CV,AO)，位地址(M,S,Y)

指令说明：

C函数编写说明：

1) 每个函数功能块内可以有多个函数，但最终供梯形图调用的函数为void XXX(WORD W, BIT B)（注意：空格也要一样），其中XXX表示该函数功能块的名字，为了方便描述，这里称该函数为“主函数”，其他函数为“子函数”。

2）主函数必须无返回值，即类型为void，且参数形式固定为(WORD W, BIT B)。

3）子函数无形式限制。但其形式不要与主函数相同，为void XXX(WORD W, BIT B)，避免与主函数冲突，如果要使用该函数形式，那么参数名不要为W，B，，可以是XXX(WORD w, BIT b) ，XXX(WORD D, BIT M)等。

4）如果编写子函数时，函数形式也为void XXX(WORD W, BIT B)，与主函数相同，会修改函数功能块的名称，该子函数变为主函数，请重新修改函数，选择主函数。

5）目前版本C函数功能块可以用的flash为：0x1FF0字节，ram为：0x600字节。若函数引用了数学库等标准C库函数，会占用较大的flash空间和ram空间。

主函数说明：

主函数形式必须为void XXX(WORD W, BIT B)，其中XXX表示该函数功能块的名字，WORD W对应PLC的寄存器(D,TV,CV,AO)，BIT B对应PLC的寄存器(M,S,Y)。

假设传入的参数为W：D2, B：M3, 那么W[0]=>D2，B[0]=>M3，W[1]=>D3，B[1]=>M4，W[2]=>D4，B[2]=>M5，以此类推。即W[n](B[n])等于传入的寄存器加n。

若要表示浮点数，请用FW[n]，注意：浮点数和双整数占用4个字节，即连续的两个D，同上W：D2，则FW[0]=>D2D3，FW[1]=>D4D5，FW[2]=>D6D7，DW[0] => D2D3, DW[1] => D4D5 以此类推。

计算公式：假设传入的参数为W：Di, B：Mk，，则：W[n]==Di+n，B[n]==Mk+n，FW[n]==Di+2nDi+2n+1，DW[n]==Di+2nDi+2n+1。

取双字运算：

由上述讲解可知，若传入参数W：D0，则W[0]=>D0，只能取到D0内的单字，若要进行双字处理可以利用地址强制取值，整形参数的强制取值为D0(D1) => *(int *)W， D100(D101) => *(int *)(W +100)，其他类型参数可以此类推。也可以直接在程序中采用DW取双字，若传入参数W：D0，则D0(D1) => DW[0/2]， D100(D101) => DW[100 / 2]。同时也可使用FW取双字浮点数，使用方式与DW类似。

实例(排序)：

函数功能块Init：

/**

初始化寄存器

**/

void Init(WORD W, BIT B)

{

W[0] = 6;

W[1] = 4;

W[2] = 2;

W[3] = 7;

W[4] = 9;

W[5] = 1;

W[6] = 17;

}

函数功能块Sort：

/**

从大到小排序，

W[0]为排序元素的个数

W[1]为元素的首地址

**/

void Sort(WORD W, BIT B)

{

short i;

short j;

short temp;

for(i=W[0]; i>1; i--)

{

for(j=1; j<i; j++)

if(W[j] < W[j+1])

{

temp= W[j];

W[j] = W[j+1];

W[j+1] = temp;

}

}

}

指令表：

LDP M0 //M0上升沿来临时，执行函数功能块Init，使D[0]=6，D[1]=4，D[2]=2，D[3]=7，D[4]=9，D[5]=1，D[6]=17

CALLM K2 D0 M0 // K2为系统生成的参数，用户无需关心

LDP M1 //M0上升沿来临时，执行函数功能块Sort, 对D[1]到D[6]进行从大到小的排序，结果为D[1]=17，D[2]=9，D[3]=7，D[4]=4，D[5]=2，D[6]=1

CALLM K1 D0 M0 // K1为系统生成的参数，用户无需关心

LDWG D1 D2

AWG D3 D4

AWG D5 D6

OUT Y000 //如果D1>D2>D3>D4>D5>D6，Y000置1

梯形图：

说明: 说明: 捕获

实例（双字运算）

/*****************************

FunctionName:GetNum

将D0(D1)中的整形数移动到D100(D101)中

*****************************/

void GetNum(WORD W, BIT B)

{

int temp;

temp = *(int *)W;

*(int *)(W + 100) = temp; //或者直接使用DW[100 / 2] = DW[0];

}

梯形图：


移位指令

内容如下:

SHL

SHLD

SHR

SHRD

ROL

ROLD

ROR

RORD

SHRB

SHLB


字左移 SHL

对应命令 | 注释/说明 | 操作数（寄存器）
SHL | 字左移 | D/K/H/TV/CV/AI/AO/V/Z,D/K/H,D/TV/CV/AO/V/Z

指令说明：

指令将输入字（IN1）数值向左移动IN2位，并将结果载入输出字（OUT）。移位指令对每个移出位补0。如果移位数目（IN2）大于或等于16，则数值最多被移位16次。如果移位数目大于0，溢出内存位（M_8166）采用最后一次移出位数值。如果移位操作结果为0，设置0内存位（M_8167）。

M_8166 为移出的最后一个位设置为溢出位

M_8167 如果移位结果是零，则设置零位

实例：

指令表：

LD X000

SHL D0 K1 D1 //将D0左移1位输出到D1

梯形图：

..


双字左移 SHLD

对应命令 | 注释/说明 | 操作数（寄存器）
SHLD | 双字左移 | D/K/H,D/K/H,D

指令说明：

指令将输入双字（IN1）数值向左移动IN2位，并将结果载入输出字（OUT）。移位指令对每个移出位补0。如果移位数目（IN2）大于或等于32，则数值最多被移位32次。如果移位数目大于0，溢出内存位（M_8166）采用最后一次移出位数值。如果移位操作结果为0，设置0内存位（M_8167）。

M_8166 为移出的最后一个位设置为溢出位

M_8167 如果移位结果是零，则设置零位

实例：

指令表：

LD X000

SHLD D0 K1 D2 //将D0D1左移1位输出到D2D3

梯形图：


字右移 SHR

对应命令 | 注释/说明 | 操作数（寄存器）
SHR | 字右移 | D/K/H/TV/CV/AI/AO/V/Z,D/K/H,D/TV/CV/AO/V/Z

指令说明：

指令将输入字（IN1）数值向右移动IN2位，并将结果载入输出字（OUT）。移位指令对每个移出位补0。如果移位数目（IN2）大于或等于16，则数值最多被移位16次。如果移位数目大于0，溢出内存位（M_8166）采用最后一次移出位数值。如果移位操作结果为0，设置0内存位（M_8167）。

M_8166 为移出的最后一个位设置为溢出位

M_8167 如果移位结果是零，则设置零位

实例：

指令表：

LD X000

SHR D0 K1 D1 //将D0右移1位输出到D1

梯形图：


双字右移 SHRD

对应命令 | 注释/说明 | 操作数（寄存器）
SHRD | 双字右移 | D/K/H,D/K/H,D

指令说明：

指令将输入双字（IN1）数值向右移动IN2位，并将结果载入输出字（OUT）。移位指令对每个移出位补0。如果移位数目（IN2）大于或等于32，则数值最多被移位32次。如果移位数目大于0，溢出内存位（M_8166）采用最后一次移出位数值。如果移位操作结果为0，设置0内存位（M_8167）。

M_8166 为移出的最后一个位设置为溢出位

M_8167 如果移位结果是零，则设置零位

实例：

指令表：

LD X000

SHRD D0 K1 D2 //将D0D1右移1位输出到D2D3

梯形图：


位左移 SHLB

对应命令 | 注释/说明 | 操作数（线圈）
SHLB | 位左移 | X/Y/M/S/T/C, Y/M/S/T/C,D/K/H,D/K/H

指令说明：

指令操作数源线圈元件[SRC.]的长度n2，目标线圈元件[DST.]的长度n1，n2≤n1≤目标线圈长度最大值，其功能是对于n1位（移动线圈的长度）的位元件进行n2位的左移。指令执行的是n2位的移位。

如下：

 | [SRC.] | [DST.] | n1 | n2
SHLB | Y0 | M0 | K8 | K2

指令执行过程：

(1) M7,M6 → 移出

(2) M5,M4 → M7,M6

(3) M3,M2 → M5,M4

(4) M1,M0 → M3,M2

(5) Y1,Y0 → M1,M0

实例：

指令表：

LD X000

SHLB M0 Y0 K16 K1 //将Y017移出，再将Y016移入Y017，… ，再将M0移入Y0

梯形图：


位右移 SHRB

对应命令 | 注释/说明 | 操作数（线圈）
SHRB | 位右移 | X/Y/M/S/T/C, Y/M/S/T/C,D/K/H,D/K/H

指令说明：

指令操作数源线圈元件[SRC.]的长度n2，目标线圈元件[DST.]的长度n1，n2≤n1≤目标线圈长度最大值，其功能是对于n1位（移动线圈的长度）的位元件进行n2位的右移。指令执行的是n2位的移位。

如下：

 | [SRC.] | [DST.] | n1 | n2
SHRB | Y0 | M0 | K8 | K2

指令执行过程：

(1) M1,M0 → 移出

(2) M3,M2 → M1,M0

(3) M5,M4 → M3,M2

(4) M7,M6 → M5,M4

(5) Y1,Y0 → M7,M6

实例：

指令表：

LD X000

SHRB M0 Y000 K16 K1 //将Y000移出，再将Y001移入Y000，… ，再将M0移入Y017

梯形图：


循环字左移 ROL

对应命令 | 注释/说明 | 操作数（寄存器）
ROL | 循环字左移 | D/K/H/TV/CV/AI/AO/V/Z,D/K/H,D/TV/CV/AO/V/Z

指令说明：

指令将输入字数值（IN1）向左旋转IN2位，并将结果载入输出字（OUT）。旋转具有循环性。如果移动位数（IN2）大于或等于16，在旋转执行之前的移动位数（IN2）上执行模数16操作。从而使移动位数在0至15之间。如果移动位数为0，则不执行旋转操作。如果执行旋转操作，旋转的最后一位数值被复制至溢出位（M_8166）。如果移动位数不是16的整倍数，旋转出的最后一位数值被复制至溢出内存位（M_8166）。如果旋转数值为0，设置0内存位（M_8167）。

M_8166 为移出的最后一个位设置为溢出位

M_8167 如果移位结果是零，则设置零位

实例：

指令表：

LD X000

ROL D0 K1 D1 //将D0循环左移1位输出到D1

梯形图：


循环双字左移 ROLD

对应命令 | 注释/说明 | 操作数（寄存器）
ROLD | 循环双字左移 | D/K/H,D/K/H,D

指令说明：

指令将输入字数值（IN1）向左旋转IN2位，并将结果载入输出字（OUT）。旋转具有循环性。如果移动位数（IN2）大于或等于32，在旋转执行之前的移动位数（IN2）上执行模数32操作。从而使移动位数在0至31之间。如果移动位数为0，则不执行旋转操作。如果执行旋转操作，旋转的最后一位数值被复制至溢出位（M_8166）。如果移动位数不是32的整倍数，旋转出的最后一位数值被复制至溢出内存位（M_8166）。如果旋转数值为0，设置0内存位（M_8167）。

M_8166 为移出的最后一个位设置为溢出位

M_8167 如果移位结果是零，则设置零位

实例：

指令表：

LD X000

ROLD D0 K1 D2 //将D0D1循环左移1位输出到D2D3

梯形图：


循环字右移 ROR

对应命令 | 注释/说明 | 操作数（寄存器）
ROR | 循环字右移 | D/K/H/TV/CV/AI/AO/V/Z,D/K/H,D/TV/CV/AO/V/Z

指令说明：

指令将输入字数值（IN1）向右旋转IN2位，并将结果载入输出字（OUT）。旋转具有循环性。如果移动位数（IN2）大于或等于16，在旋转执行之前的移动位数（IN2）上执行模数16操作。从而使移动位数在0至15之间。如果移动位数为0，则不执行旋转操作。如果执行旋转操作，旋转的最后一位数值被复制至溢出位（M_8166）。如果移动位数不是16的整倍数，旋转出的最后一位数值被复制至溢出内存位（M_8166）。如果旋转数值为0，设置0内存位（M_8167）。

M_8166 为移出的最后一个位设置为溢出位

M_8167 如果移位结果是零，则设置零位

实例：

指令表：

LD X000

ROR D0 K1 D1 //将D0循环右移1位输出到D1

梯形图：


循环双字右移 RORD

对应命令 | 注释/说明 | 操作数（寄存器）
RORD | 循环双字右移 | D/K/H,D/K/H,D

指令说明：

指令将输入字数值（IN1）向右旋转IN2位，并将结果载入输出字（OUT）。旋转具有循环性。如果移动位数（IN2）大于或等于32，在旋转执行之前的移动位数（IN2）上执行模数32操作。从而使移动位数在0至31之间。如果移动位数为0，则不执行旋转操作。如果执行旋转操作，旋转的最后一位数值被复制至溢出位（M_8166）。如果移动位数不是32的整倍数，旋转出的最后一位数值被复制至溢出内存位（M_8166）。如果旋转数值为0，设置0内存位（M_8167）。

M_8166 为移出的最后一个位设置为溢出位

M_8167 如果移位结果是零，则设置零位

实例：

指令表：

LD X000

RORD D0 K1 D2 //将D0D1循环右移1位输出到D2D3

梯形图：


中断指令

内容如下：

ATCH

DTCH

EI

DI


中断绑定 ATCH

对应命令 | 注释/说明 | 操作数（寄存器）
ATCH | 中断绑定 | 中断子程序ID，K

指令说明：

指令将中断事件（EVNT）与中断子程序号码（INT）相关联，并启用中断事件。

在激活中断子程序之前，必须在中断事件和您希望在事件发生时执行的程序段之间建立关联。使用“中断绑定”指令将中断事件（由中断事件号码指定）与程序段（由中断子程序ID指定）联系在一起。您可以将多个中断事件附加在一个中断子程序上，但一个事件不能同时附加在多个中断子程序上。当您将一个中断事件附加在一个中断子程序上时，会自动启用中断。如果您用全局禁用中断指令禁用所有的中断，则每次出现的中断事件均入队等候，直至使用全局启用中断或中断队列溢出重新启用中断。

您可以使用“中断解除”指令断开中断事件与中断子程序之间的关联，从而禁止单个中断事件。“中断解除”指令使中断返回至非现用或忽略状态。

注意：

1、绑定了相应的中断子程序后，当触发了该条件时将自动启用中断进入中断子程序，但该中断子程序与普通子程序不同的是，在触发了相应条件时它每次仅执行一次，即只有一个扫描周期；

2、在中断子程序中请不要使用边沿信号类指令，因为边沿信号指令是要和上一个扫描周期作对比才能比较出结果，而对于像中断子程序这样每次只存在一个扫描周期的特殊子程序，若使用边沿信号指令可能会造成PLC运行逻辑错误！

中断向量表：

中断号 | 中断事件
K0 | X000上升沿触发
K1 | X000下降沿触发
K2 | X000边沿变化触发
K3 | X001上升沿触发
K4 | X001下降沿触发
K5 | X001边沿变化触发
K6 | 中断定时器0 注：设定值为D8173，定时范围（1~32767ms）（分辨率1ms）
K7 | 中断定时器1 注：设定值为D8174，定时范围（1~32767ms）（分辨率1ms）

实例：

指令表：

Network 000

LDP M0

ATCH INTR_0（INTR0） K0 //将中断事件（EVNT）K0与中断子程序INTR_0关联

EI //中断开启

Network 001

LDP M1

DTCH K0 //中断释放

Network 002

LDP M2

DI //中断禁止

梯形图：


中断释放 DTCH

对应命令 | 注释/说明 | 操作数（寄存器）
DTCH | 中断释放 | K

指令说明：

指令将解除中断事件（EVNT）与中断子程序号码（INT）之间的关联，并禁用中断事件。

在激活中断子程序之前，必须在中断事件和您希望在事件发生时执行的程序段之间建立关联。使用“中断绑定”指令将中断事件（由中断事件号码指定）与程序段（由中断子程序ID指定）联系在一起。您可以将多个中断事件附加在一个中断子程序上，但一个事件不能同时附加在多个中断子程序上。当您将一个中断事件附加在一个中断子程序上时，会自动启用中断。如果您用全局禁用中断指令禁用所有的中断，则每次出现的中断事件均入队等候，直至使用全局启用中断或中断队列溢出重新启用中断。

您可以使用“中断解除”指令断开中断事件与中断子程序之间的关联，从而禁止单个中断事件。“中断解除”指令使中断返回至非现用或忽略状态。

中断向量表：

中断号 | 中断事件
K0 | X000上升沿触发
K1 | X000下降沿触发
K2 | X000边沿变化触发
K3 | X001上升沿触发
K4 | X001下降沿触发
K5 | X001边沿变化触发
K6 | 中断定时器0 注：设定值为D8173，定时范围（1~32767ms）（分辨率1ms）
K7 | 中断定时器1 注：设定值为D8174，定时范围（1~32767ms）（分辨率1ms）

实例：

指令表：

Network 000

LDP M0

ATCH INTR_0（INTR0） K0 //将中断事件（EVNT）K0与中断子程序INTR_0关联

EI //中断开启

Network 001

LDP M1

DTCH K0 //中断释放

Network 002

LDP M2

DI //中断禁止

梯形图：


中断允许 EI

对应命令 | 注释/说明 | 操作数（无）
EI | 中断允许 | NONE

指令说明：

指令全局性启用所有附加中断事件进程。要执行中断子程序，必须先开启全局中断。

转换至RUN（运行）模式时，中断开始时被禁止。一旦进入RUN（运行）模式，您可以通过执行全局中断允许指令，启用所有中断进程。执行中断禁止指令会禁止处理中断；但是现用中断事件将继续入队等候。

实例：

指令表：

Network 000

LDP M0

ATCH INTR_0（INTR0） K0 //将中断事件（EVNT）K0与中断子程序INTR_0关联

EI //中断开启

Network 001

LDP M1

DTCH K0 //中断释放

Network 002

LDP M2

DI //中断禁止

梯形图：


中断禁止 DI

对应命令 | 注释/说明 | 操作数（无）
DI | 禁止中断 | NONE

指令说明：

指令全局性禁止所有中断事件进程。

转换至RUN（运行）模式时，中断开始时被禁止。一旦进入RUN（运行）模式，您可以通过执行全局中断允许指令，启用所有中断进程。执行中断禁止指令会禁止处理中断；但是现用中断事件将继续入队等候。

实例：

指令表：

Network 000

LDP M0

ATCH INTR_0（INTR0） K0 //将中断事件（EVNT）K0与中断子程序INTR_0关联

EI //中断开启

Network 001

LDP M1

DTCH K0 //中断释放

Network 002

LDP M2

DI //中断禁止

梯形图：


实时时钟指令

内容如下:

TRD

TWR


读实时时钟 TRD

对应命令 | 注释/说明 | 操作数（寄存器）
TRD | 读实时时钟 | D

指令说明：

指令从硬件时钟读取当前时间和日期，并将其载入以地址T起始的8个连续D的时间缓冲区。其中，年份用2字节表示。

所有日期和时间值必须采用BCD格式编码（例如，8211代表2013年）。请参阅下表。

T（Dn – Dn+7） | 说明 | 数据
0 | 年（2000 -- 2099） | 当前年份（BCD值）
1 | 月（1 -- 12） | 当前月份（BCD值）
2 | 日期（1 -- 31） | 当前日期（BCD值）
3 | 小时（0 -- 23） | 当前小时（BCD值）
4 | 分钟（0 -- 59） | 当前分钟（BCD值）
5 | 秒（0 -- 59） | 当前秒（BCD值）
6 | 00 | 保留
7 | 星期几（0 -- 6） | 当前是星期几，0=星期日（BCD值）

实例：

指令表：

LD X000

TRD D0 //时间读入D0~D7

梯形图：


写实时时钟 TWR

对应命令 | 注释/说明 | 操作数（寄存器）
TWR | 写实时时钟 | D

指令说明：

指令将当前时间和日期写入用T指定的在8个D的时间缓冲区开始的硬件时钟。其中，年份用2字节表示。

所有日期和时间值必须采用BCD格式编码（例如，8211代表2013年）。请参阅下表。

T（Dn – Dn+7） | 说明 | 数据
0 | 年（2000 -- 2099） | 当前年份（BCD值）
1 | 月（1 -- 12） | 当前月份（BCD值）
2 | 日期（1 -- 31） | 当前日期（BCD值）
3 | 小时（0 -- 23） | 当前小时（BCD值）
4 | 分钟（0 -- 59） | 当前分钟（BCD值）
5 | 秒（0 -- 59） | 当前秒（BCD值）
6 | 00 | 保留
7 | 星期几（0 -- 6） | 星期由年月日决定不可独立修改

实例：

指令表：

LD X000

TWR D0 //时间写入D0~D7

梯形图：


通信指令

内容如下:

MBUS

SEND

REV


Modbus主站通信 MBUS

对应命令 | 注释/说明 | 操作数（寄存器）
MBUS | 调用Modbus主站通信指令 | K/H, 表格ID, D

指令说明

1、COM_ID：通信口选择，可选择COM0（232）或COM1（485）；

2、Table：Modbus主站表格ID，可在工程管理窗口中添加所需的Modbus主站表格；

3、WR：Dn、Dn+1，其中Dn用来存储通信信息代码(见下表)，Dn+1用来存储当前主站表格的Modbus命令编号，

4、修改配置信息：选择COM口通信参数设置，如主站站号、波特率、校验位、超时时间等，然后选择Modbus主站模式；

注意：

1、要使用该指令的话必须将所设置的COM口（232/485）设置为主站模式并勾选配置信息下载到PLC中，否则不会执行通信命令，具体设置方式请参照PLC参数设置页面内容；

2、该指令的第三个操作数WR虽然只需输入Dn来表示通信信息代码，但Dn+1也是有实际意义的，可用来返回当前主站表格的Modbus命令编号，而且Dn+1不可在其它地方修改数值；

3、对于Modbus主站可设置串口通信的超时时间，默认为200ms，另外PLC内部自定义了重连次数为10，用户可根据实际情况上下调整该超时时间，比如：当设置超时时间为200ms时，表示若200ms内从站不返回，PLC将重新发送一次数据包，若10次重新发送后即总计2s内从站均不回应，则返回通讯超时错误代码16即0x10；

4、PLC运行中返回的通信信息代码存放在所设置的Dn寄存器中，该数值是一个十进制数，而下面表格中的均是十六进制数，如：通信返回Dn值=16，转换成十六进制=0x10，即表示通讯超时；

5、对于同一个COM口，在同一时刻不可能同时与多个从站进行数据通信，PLC内部访问外部从站设备均是一个一个顺序执行的，用户在编程时应考虑到这点；

通信信息代码：

代码 | 信息
0x01 | 非法功能码
0x02 | 非法地址
0x03 | 非法数据
0x04 | 从站操作失败
0x05 | 命令有效，正在处理中
0x06 | 从机忙
0x07 | 非法数据类型
0x08 | 非法命令编号
0x09 | 非法密码
0x10 | 通讯超时
0x11 | 数值错误：数据小于0或者大于255
0x12 | 主从站设置错误
0x13 | 本身的站号与指令设定的站号相同发送错误
0x14 | 元件地址溢出：接收或发送的数据量超出元件存储空间
0x15 | 命令执行失败
0x18 | 信息帧错误，包括长度错误和校检错误
0x20 | 参数不可修改
0x21 | 参数运行时不可修改
0x22 | 参数受密码保护

实例：

先在工程管理窗口中添加一个Modbus主站表，如下：

指令表：

LD X000

MBUS K0 K0 D0 //D0存储通信信息，D1存储当前正在执行的Modbus命令编号

梯形图：

PLC梯形图运行流程：

1、先执行从站站号为1的表格命令，PLC向从站站号为1的设备发送数据包，并等待该从站返回信息，此时D1=0；

2、在这段时间内，即便PLC扫描到该指令也不会执行相应命令，直到第一个表格命令中的从站设备正确返回或大于超时时间，才会执行该Modbus表格中之后的命令；

3、第一个表格命令执行完后，当梯形图再次扫描到该指令，将顺序执行该表格的第二条命令，即PLC会向从站站号为5的设备发送数据包，并等待该从站返回信息，此时D1=1；

4、第三个表格命令与前面两条类似，依次循环执行，此时D1=2；

5、需注意的是，对于同一个COM口，不可能同时与多台从站设备进行通信，它们之间必然是有着先后顺序的，只是这个顺序执行的速度很快，甚至可看做是同步执行；


自由口通信 SEND

对应命令 | 注释/说明 | 操作数（寄存器）
SEND | 调用自由口通讯发送指令 | K, D,K/H/D

指令说明：

1、COM_ID（通信口选择）:可选择COM0（232）或COM1（485）；

2、Addr（起始地址）：该参数地址是以Dn为起始地址的一片区域，该操作数仅能选择D数据寄存器；

3、Len（数据长度）：设置待发送数据的长度，该操作数可选择K/H/D，对于不同型号PLC均有其相应的发送最大限制；

4、修改配置信息：选择COM口通信参数设置，如波特率、校验位等，然后选择自由口通信模式，以及数据缓冲位数；

通讯数据缓冲位说明：

8位：通讯时D寄存器的高8位字节是无效的，PLC只利用D寄存器的低8位字节进行发送和接收数据；

16位：通讯时在发送过程中，PLC先发送D寄存器中的低8位字节数据，然后再发送高8位字节数据；

需注意的是，无论选择8位还是16位数据缓冲位，其发送长度Len均为字节长度，当选择8位时，一个D寄存器就是一个字节长度，而当选择16位时，一个D寄存器则是2个字节长度；

COMn正在发送标志位(Only Read)：

寄存器 | 串口 COMn
M_8176 | COM0（232）
M_8177 | COM1（485）

COMn发送完成标志位(Read or Write)：

寄存器 | 串口 COMn
M_8180 | COM0（232）
M_8181 | COM1（485）

注意：

1、使用该指令的前提是必须将相应的COM口（232/485）设置为自由口通讯模式，具体设置方式请参照PLC参数设置页面内容；

2、当设置某COM口模式为自由口通讯后，该COM口则不能再用来进行程序下载和数据监视，也不能用作Modbus主、从站间进行通讯；

3、在没有USB的情况下，建议只使用COM1（485）口用作通讯，COM0（232）仅留作编程以及执行数据监视功能；

4、在修改了PLC参数设置后，需勾选配置信息，然后下载到PLC中，否则参数修改无效；

5、由于受PLC数据缓存大小的限制，因此发送数据长度Len不能超过其最大限制，对于16或32点PLC最大为256Byte，而64点PLC最大为512Byte；

6、自由口通讯传输属于半双工模式，即发送指令SEND和接收指令REV不能同时进行；

实例1：

指令表：

Network 000

LDP M000

SEND K1 D0 K21 //选择COM1（485），起始地址设为D0，待发送数据长度为K21；

//若数据缓冲位为8，则会将D0-D20寄存器中的所有低8位数据，共21Byte的数据发送至COM1（485）；

//若数据缓冲位为16，则会将D0-D10寄存器中的高8位、低8位数据以及D11的低8位数据，共21Byte的数据发送至COM1（485）；

//此处SEND指令的使能端为上升沿，即每来一次上升沿便发送一次，如若选择常闭开关来使能SEND指令，则每当梯形图扫描至该指令时都将会执行发送数据功能；

梯形图：

说明: 说明: 说明: image003.jpg

实例2：

指令表：

Network 000

LD M0 //首先在参数设置中配置好COM0口的相关参数，然后勾选配置信息下载到PLC中；

MPS

MVBLK D2000 D1 D0 //将要传输的数据块通过MVWBLK指令传送至起始地址为D1，长度为D0的一片区域；

MPP

ANDN M8180 //数据发送完成后将失能SEND指令，关闭COM0口的数据发送；

MEP

SEND K0 D1 D0 //使能M0后，将数据发送至COM0口；

Network 001

LD M8180 //M8180是COM0口的发送完成标志，当数据发送完成后该位将自动置1，需在程序中手动对它进行复位，否则该位一直为1；

REV K0 D1001 D1000 //发送完成后将使能REV接收指令，接收到的数据存放在以D1001为起始地址的一片区域，并将返回的接收长度存放在D1000中；

Network 002

LDF M8178 //M8178是COM0口的正在接收标志位，每当数据接收完成时将产生一个下降沿，该位是只读的，仅由程序控制，对其进行置/复位操作是无效的；

MOV D1000 D3000 //当COM0口的数据接收完成时，把返回的数据接收长度D1000传送至D3000；

MVBLK D1001 D3001 D1000 //把接收到的以起始地址为D1001的一片数据块传送至以起始地址为D3001的一片区域，传送数据块长度即为本次接收到的数据长度D1000；

RST M8180 K1 //数据接收完成后，清除M8180发送完成标志位；

梯形图：


自由口通信 REV

对应命令 | 注释/说明 | 操作数（寄存器）
REV | 调用自由口通讯接收指令 | K, D,D

指令说明：

1、COM_ID（通信口选择）:可选择COM0（232）或COM1（485）；

2、Addr（起始地址）：将接收到的数据存放在以Dn为起始地址的一段区域，该操作数仅能选择D数据寄存器；

3、Len（接收长度）：该参数无需设置，在数据接收过程中会自动返回实际接收到的数据长度，并存放在所设的D寄存器中，对于不同型号PLC均有其相应的接收最大限制；

3、修改配置信息：选择COM口通信参数设置，如波特率、校验位等，并选择自由口通信模式，以及数据缓冲位数；

通讯数据缓冲位说明：

8位：通讯时D寄存器的高8位字节是无效的，PLC只利用D寄存器的低8位字节进行发送和接收；

16位：通讯时在接收过程中，PLC将接收到的数据先存放在D寄存器中的低8位字节，然后再存放在D寄存器中的高8位字节；

需注意的是，无论选择8位还是16位数据缓冲位，通讯时其返回的接收长度Len均为字节长度，当选择8位时，一个D寄存器就是一个字节长度，而当选择16位时，一个D寄存器是2个字节长度；

另外，每次在接收数据前以及重新使能接收REV指令后，都会自动清除上一次存放在D寄存器中的缓冲数据，因此REV指令常和MVWBLK指令结合使用；

COMn正在接收标志位(Only Read)：

寄存器 | 串口 COMn
M_8178 | COM0（232）
M_8179 | COM1（485）

COMn接收完成标志位(Read or Write)：

寄存器 | 串口 COMn
M_8182 | COM0（232）
M_8183 | COM1（485）

注意：

1、要使用该指令的话必须将所设置的COM口（232/485）设置为自由口通讯模式，具体设置方式请参照PLC参数设置页面内容；

2、当设置某COM口模式为自由口通讯后，则该COM口不能用来进行程序下载和监视，也不能用作Modbus主站、从站；

3、在修改了PLC参数设置后，需勾选配置信息，然后下载到PLC中，否则参数修改无效；

4、由于受PLC数据缓存大小的限制，因此接收数据长度Len不能超过其最大限制，对于16或32点PLC最大为256Byte，而64点PLC最大为512Byte；

5、自由口通讯传输属于半双工模式，即发送指令SEND和接收指令REV不能同时进行；

实例1：

指令表：

Network 000

LD M000

REV K1 D0 D1000 //选择COM1（485），起始地址选为D0，当REV指令使能后，将会接收COM1（485）中的数据，假设收到0x10 0x11 0x12 0x13 0x14

//若数据缓冲位为8，则返回的接收长度Len为5，D0=16,D1=17,D3=18,D4=19,D5=20；

//若数据缓冲位为16，则返回的接收长度Len为5，D0=4368,D1=4882,D2=20；

梯形图：

说明: 说明: image002.jpg

实例2：

指令表：

Network 000

LD M0

REV K0 D1 D0 //配置好COM0口的相关参数后，使能COM0的REV接收指令，接收到的数据存放在以D1为起始地址的一片区域，并将返回的接收长度存放在D0中；

Network 001

LDP M8182 //M8182是COM0的接收完成标志位，当数据接收完成时该位将自动置1，需在程序中手动对它进行复位，否则该位一直为1；

SEND K0 D1001 D1000 //当COM0口接收到一次数据后将使能SEND发送指令，将长度为D1000且以D1001为起始地址的一片区域发送至COM0口；

RST M8182 K1 //清除M8182接收完成标志位；

Network 002

LDF M8178 //M8178是COM0口的正在接收标志位，每当数据接收完成时将产生一个下降沿，该位是只读的，仅由程序控制，对其进行置/复位操作是无效的；

MVBLK D1 D2000 D0 //将接收到的数据成块地存放在另一片区域，以方便对接收到的数据进行其他指令运算；

梯形图：


脉冲输出指令

内容如下：

PLSF

DPLSF

PWM

DPWM

PLSY

DPLSY

PLSR

PLSRD

DPLSR

DPLSRD

PLSNEXT

PLSSTOP

ZRN

DZRN

PTO

DRVI

DDRVI


可变频率脉冲输出PLSF/DPLSF

对应命令 | 注释/说明 | 操作数（寄存器）
PLSF(16位)/DPLSF(32位) | 可变频率脉冲输出 | 输出频率(K/H/D) 输出脉冲Y

指令说明：

1）对于16/32点晶体管型的PLC，Y000~Y001为高速脉冲输出口，对于64点晶体管型的PLC，Y000~Y003为高速脉冲输出口；

2）对于各路脉冲：32位指令可输出频率范围0Hz~200KHz；16位指令对应的可输出频率范围为0~65535Hz；

3）对于继电器型的PLC，不具有高速脉冲功能，所有输出端口的最大输出频率由继电器的吸合时间决定；

4）当脉冲指令的前提条件导通时，立即以设定的脉冲频率开始连续的输出脉冲，过程脉冲频率可调，直至脉冲指令的前提条件断开；可用于可变脉冲频率连续输出脉冲；

5）频率跳变时无加减速时间；

6）该功能可用于电机点动控制，脉冲发送无加减速过程，所以点动控制速度不能太高，带加速的点动控制可参考指令PLSR/DPLSR/PLSRD/DPLSRD；

7）本指令不含方向输出口，方向信号输出端口号和信号控制可由用户自定义和设置，如接线图，方向信号输出口Y2，Y3和Z相输入可由用户定义，带方向脉冲输出可参考PLSRD/DPLSRD。

脉冲累积计数(读写，只能写‘0’)：

寄存器 | 脉冲输出Yn
D_8140(D_8141) | Y000
D_8142(D_8143) | Y001
D_8144(D_8145) | Y002
D_8146(D_8147) | Y003

32位脉冲累积计数溢出标记，溢出为1(只读)：

寄存器 | 脉冲输出Yn
M_8118 | Y000
M_8119 | Y001
M_8120 | Y002
M_8121 | Y003

注意：

1. DPLSF输出频率为32位正整数，占用两个连续的D寄存器；PLSF输出频率为16位正整数，占用1个D；

2. 不同的脉冲指令不能共享编号相同的脉冲Y，比如 DPLSF D1 Y000和PLSF D0 Y000同时使用不合法，即使前提条件未导通也不可以，如果要对同一个输出口分别操作可以使用子程序的方式进行操作；

3. 对于高速脉冲输出，它是针对外部高速器件的，假如要对脉冲进行计数，只能使用高速脉冲输入计数器，不能使用内部计数器，也不能使用Y边沿变化进行计数，当作为高速输出时，不能作为普通输出口用；

4. 晶体管的OFF时间具有在轻负载时会延长的特性。所以请在需要响应性时设计成让负载在较轻时加负载电阻，增加负载电流；

5. 对于脉冲输出Y0，寄存器D8140（D8141）中累计其脉冲个数，D8141存储高16位，D8140存储低16位；

6. 脉冲累积计数寄存器（D8140~D8146）是重要寄存器，可读写，但具有写保护，只能使用MOVD指令写入‘0’作为清空寄存器用，不能写入其它值；

7. 由于本指令脉冲输出不带方向，所以脉冲累积计数寄存器（D8140~D8146）只能正方向计数；

8. 高速脉冲输出时，脉冲累积计数寄存器（D8140~D8146）内的值是不连续的、时刻变化的，用于判断时，最好大小比较，不要使用等于判断。

实例：

接线图：

指令表：

Network 000

LDP M8151 //M8151上升沿赋值，一定是上升沿，防止PLC扫描重复赋值

MOVD K400 D0 //初始频率

Network 001

LDP M1

MOVD K900 D0 //改变值D0

Network 002

LDP M2

MOVD K650 D0 //改变值D0

Network 003

LDP M3

MOVD K500 D0 //改变值D0

Network 004

LD M0

DPLSF（或PLSF） D0 Y000 //当M0为‘1’时，在Y000输出频率为D0D1(或D0)的脉冲，否则脉冲输出停止，脉冲频率会随着D0D1的数值变化而变化。

梯形图：

时序图：


脉宽调制PWM/DPWM

对应命令 | 注释/说明 | 操作数（寄存器）
PWM(16位)/DPWM(32位) | 脉宽调制 | 输出频率(K/H/D) 输出占空比(K/H/D) 输出脉冲Y

指令说明：

1）对于16/32点晶体管型的PLC，Y000~Y001为高速脉冲输出口，对于64点晶体管型的PLC，Y000~Y003为高速脉冲输出口；

2）对于各路脉冲：32位指令可输出频率范围0Hz~200KHz，占空比范围K0~K100；16位指令对应的可输出频率范围为0~65535Hz，占空比范围K0~K100；

3）对于继电器型的PLC，不具有高速脉冲功能，所有输出端口的最大输出频率由继电器的吸合时间决定；

4）当脉冲指令的前提条件导通时，立即以设定的脉冲频率和占空比开始连续的输出脉冲，过程脉冲频率可调，占空比可调，直至脉冲指令的前提条件断开；可用于可变脉冲频率及占空比连续输出脉冲；

5）频率跳变时无加减速时间。

脉冲累积计数(读写，只能写‘0’)：

寄存器 | 脉冲输出Yn
D_8140(D_8141) | Y000
D_8142(D_8143) | Y001
D_8144(D_8145) | Y002
D_8146(D_8147) | Y003

32位脉冲累积计数溢出标记，溢出为1(只读)：

寄存器 | 脉冲输出Yn
M_8118 | Y000
M_8119 | Y001
M_8120 | Y002
M_8121 | Y003

注意：

1. DPWM输出频率与占空比为32位正整数，占用两个连续的D寄存器；PWM输出频率与占空比为16位正整数，占用1个D；

2. 不同的脉冲指令不能共享编号相同的脉冲Y，比如 DPWM D0 D2 Y000和DPLSY D0 D2 Y000同时使用不合法，即使前提条件未导通也不可以，如果要对同一个输出口分别操作可以使用子程序的方式进行操作；

3. 对于高速脉冲输出，它是针对外部高速器件的，假如要对脉冲进行计数，只能使用高速脉冲输入计数器，不能使用内部计数器，也不能使用Y边沿变化进行计数，当作为高速输出时，不能作为普通输出口用；

4. 晶体管的OFF时间具有在轻负载时会延长的特性。所以请在需要响应性时设计成让负载在较轻时加负载电阻，增加负载电流；

5. 对于脉冲输出Y0，寄存器D8140（D8141）中累计其脉冲个数，D8141存储高16位，D8140存储低16位；

6. 脉冲累积计数寄存器（D8140~D8146）是重要寄存器，可读写，但具有写保护，只能使用MOVD指令写入‘0’作为清空寄存器用，不能写入其它值；

7. 由于本指令脉冲输出不带方向，所以脉冲累积计数寄存器（D8140~D8146）只能正方向计数；

8. 高速脉冲输出时，脉冲累积计数寄存器（D8140~D8146）内的值是不连续的、时刻变化的，用于判断时，最好大小比较，不要使用等于判断。

实例：

指令表：

Network 000

LD M0

DPWM D0 D2 Y000 //当M0为‘1’时，在Y000输出频率为D0D1，占空比为百分之D2D3的脉冲

梯形图：

指令表：

Network 001

LD M0

PWM D0 D1 Y000 //当M0为‘1’时，在Y000输出频率为D0，占空比为百分之D1的脉冲

梯形图：


单段不带加减速脉冲输出PLSY/DPLSY

对应命令 | 注释/说明 | 操作数（寄存器）
PLSY(16位)/DPLSY(32位) | 单段不带加减速脉冲输出 | 输出频率(K/H/D) 输出脉冲数(K/H/D) 输出脉冲Y

指令说明：

1）对于16/32点晶体管型的PLC，Y000~Y001为高速脉冲输出口，对于64点晶体管型的PLC，Y000~Y003为高速脉冲输出口；

2）对于各路脉冲：32位指令可输出频率范围0Hz~200KHz；16位指令对应的可输出频率范围为0~65535Hz；

3）对于继电器型的PLC，不具有高速脉冲功能，所有输出端口的最大输出频率由继电器的吸合时间决定；

4）该指令作用是输出一定频率的指定脉冲数的脉冲，当脉冲正在输出时，相应的脉冲正在输出标志被置位，在脉冲输出过程中，脉冲频率可调；

5）频率跳变时无加减速时间；

6）该功能可用于电机点动控制，脉冲发送无加减速过程，所以点动控制速度不能太高，带加速的点动控制可参考指令PLSR/DPLSR/PLSRD/DPLSRD；

7）本指令不含方向输出口，方向信号输出端口号和信号控制可由用户自定义和设置，带方向脉冲输出可参考PLSRD/DPLSRD。

脉冲正在输出标志(只读)：

寄存器 | 脉冲输出Yn
M_8134 | Y000
M_8135 | Y001
M_8136 | Y002
M_8137 | Y003

脉冲累积计数(读写，只能写‘0’)：

寄存器 | 脉冲输出Yn
D_8140(D_8141) | Y000
D_8142(D_8143) | Y001
D_8144(D_8145) | Y002
D_8146(D_8147) | Y003

32位脉冲累积计数溢出标记，溢出为1(只读)：

寄存器 | 脉冲输出Yn
M_8118 | Y000
M_8119 | Y001
M_8120 | Y002
M_8121 | Y003

注意：

1. DPLSY输出频率与输出脉冲数为32位正整数，占用两个连续的D寄存器；PLSY输出频率与输出脉冲数为16位正整数，占用1个D；

2. 不同的脉冲指令不能共享编号相同的脉冲Y，比如 DPWM D0 D2 Y000和DPLSY D0 D2 Y000同时使用不合法，即使前提条件未导通也不可以，如果要对同一个输出口分别操作可以使用子程序的方式进行操作；

3. 对于高速脉冲输出，它是针对外部高速器件的，假如要对脉冲进行计数，只能使用高速脉冲输入计数器，不能使用内部计数器，也不能使用Y边沿变化进行计数，当作为高速输出时，不能作为普通输出口用；

4. 晶体管的OFF时间具有在轻负载时会延长的特性。所以请在需要响应性时设计成让负载在较轻时加负载电阻，增加负载电流；

5. 对于脉冲输出Y0，寄存器D8140（D8141）中累计其脉冲个数，D8141存储高16位，D8140存储低16位；

6. 脉冲累积计数寄存器（D8140~D8146）是重要寄存器，可读写，但具有写保护，只能使用MOVD指令写入‘0’作为清空寄存器用，不能写入其它值；

7. 由于本指令脉冲输出不带方向，所以脉冲累积计数寄存器（D8140~D8146）只能正方向计数；

8. 高速脉冲输出时，脉冲累积计数寄存器（D8140~D8146）内的值是不连续的、时刻变化的，用于判断时，最好大小比较，不要使用等于判断。

实例：

指令表：

Network 000

LDP M8151 //M8151上升沿赋值，一定是上升沿，防止PLC扫描重复赋值

MOVD K400 D0 //初始频率

Network 001

LDP M1

MOVD K900 D0 //改变值D0

Network 002

LDP M2

MOVD K650 D0 //改变值D0

Network 003

LDP M3

MOVD K500 D0 //改变值D0

Network 004

LD M0

DPLSY（或PLSY） D0 D2 Y000 //当M0为‘1’时，在Y000端口输出频率为D1D0（或D0）的脉冲，当脉冲数达到D3D2（或D2）个时，输出脉冲停止，并将脉冲正在输出标志M_8134复位

Network 005

LDF M8134

RST M0 K1

梯形图：

时序图：


相对位置多段脉冲输出PLSR/DPLSR/PLSRD/DPLSRD

对应命令 | 注释/说明 | 操作数（寄存器）
PLSR(16位)/DPLSR(32位) | 相对位置多段脉冲输出 | 指定分段脉冲参数起始软元件地址编号(D) 指定加减速的数值(K/H)或者软元件的地址编号(D) 指定脉冲输出端口编号(Y)
PLSRD(16位)/DPLSRD(32位) | 带方向相对位置多段脉冲输出 | 指定分段脉冲参数起始软元件地址编号(D) 指定加减速的数值(K/H)或者软元件的地址编号(D) 指定脉冲输出端口编号(Y) 指定脉冲输出方向端口编号(Y)

指令说明：

1）对于16/32点晶体管型的PLC，Y000~Y001为高速脉冲输出口，对于64点晶体管型的PLC，Y000~Y003为高速脉冲输出口；

2）对于单路脉冲：32位指令可输出频率范围0Hz~200KHz，脉冲量范围K0~K2147483647；16位指令对应的可输出频率范围为0~32767Hz，脉冲量范围K0~K32767，当频率为0时停止输出；

3）对于继电器型的PLC，不具有高速脉冲功能，所有输出端口的最大输出频率由继电器的吸合时间决定；

4）参数地址是以Dn为起始地址的一段区域。下例(16位指令形式)：D0设定第1段脉冲的最高频率、D1设定第1段脉冲的个数，D2设定第2段脉冲的最高频率、D3设定第2段脉冲的个数，……，以Dn设定第(n+2)/2段脉冲的最高频率、Dn+1设定第(n+2)/2段脉冲的个数设定为0值表示结束分段；段数不受限制；

5）对32位指令DPLSR，D0（双字）设定第1段脉冲的最高频率、D2（双字）设定第1段脉冲的个数，D4（双字）设定第2段脉冲的最高频率、D6（双字）设定第2段脉冲的个数，……，以Dn设定第(n+4)/4段脉冲的最高频率、Dn+2设定第(n+4)/4段脉冲的个数的设定值为0表示分段结束；段数不受限制；

6）加减速时间是指从起始频率到稳定频率的加减速时间，同一指令内，各段加减速时间相同，加减速时间范围：0~65536ms；

7）每段设定脉冲频率，脉冲个数和加减速时间满足如下关系式的才是合法的：

（起始频率Hz + 结束频率Hz）×（ 加减速时间ms÷1000） <= 脉冲个数 × 2

对于用户设置不合法的参数，以及设置得非常不合理的参数，当是否忽略错误标志M8070-M8073被置位时，不忽略错误，程序将会报错，ERR红灯变亮，出错脉冲指令不执行，其它程序会继续执行。用户可以读取D8176中的错误编号查看错误原因，错误码如下表，出错脉冲段位置可由D8108-D8111查看。修改完善后再次下载运行程序，错误状态会取消，并正确执行程序。当M8070-M8073被复位时，忽略错误，ERR灯不会亮，但错误依然会检测到，对应寄存器会显示错误状态，但脉冲会强制发送，此时脉冲频率可能存在跳变情况，但脉冲数量依然准确。

错误码（D8176） | 错误码解释 | 错误原因及修改方式
23 | 多段脉冲指令的段落数超出最大范围（可能无分段完成标志） | PLSR指令的频率和脉冲数量参数同时为零代表指令结束，如果报此错可能是未设置结束标志，或设置段数超过默认最大段数。
24 | 多段脉冲指令第一段最大脉冲频率小于默认起始频率 | 第一段的默认起始频率是100HZ，所以第一段最大频率请不要低于此值。
25 | 频率小于下限 | 频率设置得不要太低，如果要使用低频，请选择非加减速脉冲指令。
26 | 单段脉冲数小于下限 | 各段落的脉冲数不要设置得太低，否则无法完成加减速。
27 | 加减速时间小于下限 | 加减速时间设置太小，频率分段跳变跨度很大，不易起步。
28 | 参数不满足加减速合法要求 | 各参数不满足合法关系式，请重新调整参数使其满足上式。
29 | 最后一段不满足加减速合法要求，请兼顾加速和减速停的脉冲数量 | 指令最后一段会默认从结束频率减速为零，无需用户设置(除PTO指令)，请考虑减速的脉冲数量， 满足：（起始频率 Hz + 结束频率Hz）×（ 加减速时间ms÷1000） <= 脉冲个数

8）对于带方向指令，脉冲方向Y编号可以任意指定。脉冲输出方向只由第一段设定的脉冲个数或者脉冲频率的正负决定，当第一段设定的脉冲个数或者频率为正数时，为正方向，Y输出为ON；当设定的脉冲个数或者频率为负数时，为负方向，Y输出为OFF；

9）功能：带加减速点动进和点动退，相对位置多段脉冲输出，回归原点。

脉冲正在输出标志(只读)：

寄存器 | 脉冲输出Yn
M_8134 | Y000
M_8135 | Y001
M_8136 | Y002
M_8137 | Y003

脉冲方向，正方向为1(只读)：

寄存器 | 脉冲输出Yn
M_8102 | Y000
M_8103 | Y001
M_8104 | Y002
M_8105 | Y003

32位脉冲累积计数溢出标记，溢出为1(只读)：

寄存器 | 脉冲输出Yn
M_8118 | Y000
M_8119 | Y001
M_8120 | Y002
M_8121 | Y003

脉冲累积计数(读写，只能写‘0’)：

寄存器 | 脉冲输出Yn
D_8140(D_8141) | Y000
D_8142(D_8143) | Y001
D_8144(D_8145) | Y002
D_8146(D_8147) | Y003

是否忽略错误，继续发送脉冲，默认忽略为0，若设为1，出错时停止脉冲输出(读写)：

寄存器 | 脉冲输出Yn
M_8070 | Y000
M_8071 | Y001
M_8072 | Y002
M_8073 | Y003

检查每段用户设置脉冲个数和频率是否正确 1--发现错误（用于多段脉冲）(只读)：

寄存器 | 脉冲输出Yn
M_8086 | Y000
M_8087 | Y001
M_8088 | Y002
M_8089 | Y003

当前脉冲段(只读)：

寄存器 | 脉冲输出Yn
D_8124 | Y000
D_8125 | Y001
D_8126 | Y002
D_8127 | Y003

出错脉冲段位置，0表示无错误(只读)：

寄存器 | 脉冲输出Yn
D_8108 | Y000
D_8109 | Y001
D_8110 | Y002
D_8111 | Y003

注意：

1. DPLSR每个输出频率为32位正整数，占用两个连续的D寄存器；PLSR每个输出频率为16位正整数，占用1个D；

2. 不同的脉冲指令不能共享编号相同的脉冲Y，比如 DPLSR D0 D100 Y000和PLSF D0 Y000同时使用不合法，即使前提条件未导通也不可以，如果要对同一个输出口分别操作可以使用子程序的方式进行操作；

3. 对于高速脉冲输出，它是针对外部高速器件的，假如要对脉冲进行计数，只能使用高速脉冲输入计数器，不能使用内部计数器，也不能使用Y边沿变化进行计数，当作为高速输出时，不能作为普通输出口用；

4. 晶体管的OFF时间具有在轻负载时会延长的特性。所以请在需要响应性时设计成让负载在较轻时加负载电阻，增加负载电流；

5. 对于脉冲输出Y0，寄存器D8140（D8141）中累计其脉冲个数，D8141存储高16位，D8140存储低16位；

6. 脉冲累积计数寄存器（D8140~D8146）是重要寄存器，可读写，但具有写保护，只能使用MOVD指令写入‘0’作为清空寄存器用，不能写入其它值；

7. 由于本指令脉冲输出带方向，所以脉冲累积计数寄存器（D8140~D8146）根据方向计数；

8. 高速脉冲输出时，脉冲累积计数寄存器（D8140~D8146）内的值是不连续的、时刻变化的，用于判断时，最好大小比较，不要使用等于判断；

9. 当为n段脉冲时，第1段、第2段、第3段……第n段每段的脉冲频率和脉冲数的地址必须是依次连续的，且第n+1段的脉冲频率与脉冲数的地址必须为0，用来判断脉冲段是否结束；加减速时间的地址不能够紧跟在第n段后面；

10. 当脉冲个数为K-1或者Hffff(16位)/Hffffffff(32位)时，表示该段脉冲会一直输出，直到等到PLSNEXT指令才会切换分段；

11. 第一段的起始频率系统默认为100HZ，做高速脉冲输出时，第一段的稳定频率不要低于该值；

12. 当前脉冲段（D8124-D8127）只在脉冲发送过程中记录当前脉冲段，脉冲停止发送时自动归零。

实例：

接线图：

1）加减速点动进与点动退

设置第一段脉冲数K-1，脉冲一直输出。当置位M0时，电机逐渐加速到最高频率，保持M0持续输出，断开M0则脉冲发送减速停止，再次置位M0时，电机再加速从头启动，实现点动功能。若省去减速停部分，脉冲发送结束为立即中断，如果电机带有通电自锁（保持力矩）功能，最高频率不要设置太高；若机械传动部分带有反向自锁，最高频率请选择低速。若点动退，改变输出端口Y2状态即可。

指令表：

LD M8151

MOVD K1000 D0 //点动最高频率1000Hz

MOVD K-1 D2 //一直输出脉冲

FMOVD K0 D4 K2 //脉冲分段完成标志

MOVD K1000 D100 //加减速时间1000Ms

LD M0

OR M1

DPLSRD D0 D100 Y000 Y2 //当M0被置位，DPLSRD指令开始工作

OUT M1

LDN M0

AND M1

PLSNEXT Y000 //M0断开后，减速停

LDN M8134 //停止脉冲发送后，RST M0和M1

RST M1 K1

梯形图：

2）相对位置多段脉冲输出

指令表：

Network 000

LD M8151

MOVD K1000 D0 //第1段脉冲最高频率1000Hz

MOVD K1000 D2 //第1段脉冲数1000PLS

MOVD K500 D4 //第2段脉冲最高频率500Hz

MOVD K2000 D6 //第2段脉冲数2000PLS

MOVD K3000 D8 //第3段脉冲最高频率3000Hz

MOVD K2000 D10 //第3段脉冲数2000PLS

MOVD K800 D12 //第4段脉冲最高频率800Hz

MOVD K3000 D14 //第4段脉冲数3000PLS

MOVD K3000 D16 //第5段脉冲最高频率3000Hz

MOVD K4000 D18 //第5段脉冲数4000PLS

MOVD K1200 D20 //第6段脉冲最高频率1200Hz

MOVD K3000 D22 //第6段脉冲数3000PLS

FMOVD K0 D24 K2 //脉冲分段完成标志

MOVD K1000 D100 //加减速时间1000Ms

Network 001

LD M0

DPLSR D0 D100 Y000//当M0被置位，PLSR指令开始工作

Network 002

LDF M8134 //脉冲发送完成

RST M0 K1 //复位M0

梯形图：

时序图：

3）回归原点

如图，该回归原点方式需要两个传感器的输入信号，分别为减速信号X0和原点信号X1。当减速信号X0输入，电机立即开始减速，直到减速到回归速度，进入稳态，当原点信号输入时，脉冲发送立即停止。

指令表：

LD M8151

MOVD K1000 D0 //运行速度1000Hz

MOVD K-1 D2 //一直输出脉冲

MOVD K200 D4 //回归速度200Hz

MOVD K-1 D6 //一直输出脉冲

FMOVD K0 D8 K2 //脉冲分段完成标志

MOVD K1000 D100 //加减速时间1000Ms

LD M0

DPLSRD D0 D100 Y000 Y2 //当M0被置位，DPLSRD指令开始工作

LDP X0 //减速信号X0

PLSNEXT Y000 //X0上升沿，减速

LDP X1 //原点信号X1

PLSSTOP Y000 //X1上升沿，立即停

LDF M8134 //停止脉冲发送后，RST M0

RST M1 K1

梯形图：


脉冲段切换PLSNEXT

对应命令 | 注释/说明 | 操作数（寄存器）
PLSNEXT | 脉冲段切换 | 输出脉冲端口编号Y

指令说明：

在脉冲输出到达当前段最高频率，并且PLSNEXT指向下一段非结束段，在此频率下稳定输出时，如果M0由OFF—>ON，则以加减速时间进入下一段的脉冲输出。

注意：

1. 在脉冲输出的加减速过程中，执行此指令无效；当在最后一段脉冲达到最高频率并稳定输出时，执行PLSNEXT指令，则立即以减速时间结束脉冲输出；

2. 该指令只能对PLSR/DPLSR/PLSRD/DPLSRD指令进行脉冲段切换；

3. PLSNEXT指令只能使用边沿触发，否则会造成脉冲发送紊乱。

实例：

指令表：

Network 000

LD M8151

MOVD K1000 D0 //第1段脉冲最高频率1000Hz

MOVD K-1 D2 //第1段脉冲数为最大值，脉冲在频率稳定时一直输出，等待PLSNEXT指令

MOVD K500 D4 //第2段脉冲最高频率500Hz

MOVD K999999999 D6 //第2段脉冲数999999999PLS

FMOVD K0 D8 K2 //脉冲分段完成标志

MOVD K1000 D100 //加减速时间1000ms

Network 001

LD M0

DPLSR D0 D100 Y000//当M0被置位，PLSR指令开始工作

Network 002

LDF M8134 //脉冲发送完成

RST M0 K1 //复位M0

Network 003

LDP X000 //X000上升沿触发

PLSNEXT Y000 //Y000脉冲段切换

梯形图：

时序图：


脉冲停止PLSSTOP

对应命令 | 注释/说明 | 操作数（寄存器）
PLSSTOP | 脉冲停止输出 | 输出脉冲端口编号Y

指令说明：

当导通条件由OFF—>ON，Yn脉冲输出立即停止输出脉冲。

注意：

1. PLSSTOP指令为上升沿触发；

2. 其脉冲输出停止方式为立即停，谨慎使用。

实例：

指令表：

Network 000

LDP M0 //M0上升沿触发

RLSSTOP Y000 //Y000脉冲停止输出

梯形图：


回归原点ZRN/DZRN

对应命令 | 注释/说明 | 操作数（寄存器）
ZRN（16位）/DZRN（32位） | 回归原点 | 回归速度（K/H/D） 爬行速度（K/H/D） 近点信号（X/M） 输出脉冲（Y）

指令说明：

脉冲先以爬行速度的速度前进，当近点信号置位的时候，立即从爬行速度以设定的时间减速到回归速度，当近点信号复位时，停止脉冲发送。总继电器M0（下例）断开时，脉冲发送立即停止。

脉冲正在输出标志(只读)：

寄存器 | 脉冲输出Yn
M_8134 | Y000
M_8135 | Y001
M_8136 | Y002
M_8137 | Y003

脉冲累积计数(读写，只能写‘0’)：

寄存器 | 脉冲输出Yn
D_8140(D_8141) | Y000
D_8142(D_8143) | Y001
D_8144(D_8145) | Y002
D_8146(D_8147) | Y003

原点回归加减速时间（读写）：

寄存器 | 脉冲输出Yn
D_8076 | Y000
D_8077 | Y001
D_8078 | Y002
D_8079 | Y003

注意：

1. 使用该指令完成回原点动作后，对应输出口的脉冲累积寄存器（D8140~D8146）会自动清零，作为原点；

实例：

指令表：

Network 000

LD M8151

MOV K1000 D0 //爬行速度，脉冲频率1000Hz

MOV K200 D2 //回归速度，脉冲频率200Hz

MOV K500 D8076 //减速时间500ms

Network 001

LD M0

ZRN D0 D2 X0 Y0 //当M0为‘1’时，在Y0先输出D0频率的脉冲当X0处接收到上升沿时，Y0输出频率在D8076时间内将速度由D0转变至D2，X0处接收到下降沿则会直接停止脉冲发送

梯形图：

指令表：

Network 000

LD M8151

MOVD K1000 D0 //爬行速度，脉冲频率1000Hz

MOVD K200 D2 //回归速度，脉冲频率200Hz

MOVD K500 D8076 //减速时间500ms

Network 001

LD M0

DZRN D0 D2 M0 Y0 //当M0为‘1’时，在Y0先输出D0(D1)频率的脉冲当X0处接收到上升沿时，Y0输出频率在D8076时间内将速度由D0(D1)转变至D2(D3)，若X0处接收到下降沿则会直接停止脉冲发送

梯形图：

时序图：


相对位置多段脉冲控制（32位）

对应命令 | 注释/说明 | 操作数（寄存器）
PTO(32位) | 相对位置多段脉冲控制 | 指定分段脉冲参数起始软元件地址编号(D) 指定脉冲输出端口编号(Y) 指定脉冲输出方向（Y）

指令说明：

1）对于16/32点晶体管型的PLC，Y000~Y001为高速脉冲输出口，对于64点晶体管型的PLC，Y000~Y003为高速脉冲输出口；

2）对于单路脉冲：32位指令可输出频率范围0Hz~200KHz，脉冲量范围K0~K2147483647；16位指令对应的可输出频率范围为0~32767Hz，脉冲量范围K0~K32767，当频率为0时停止输出；

3）对于继电器型PLC，不具有高速脉冲功能，所有输出端口的最大输出频率由继电器的吸合时间决定；

4）参数地址是以Dn为起始地址的一段区域。下例：D0（D1）设定总的脉冲段数，D2(D3)设定第1段脉冲的起始频率、D4(D5)设定第1段结束频率，D6(D7)设定第1段脉冲的脉冲个数、D8(D9)设定第2段脉冲起始频率，……，Dn+1(Dn+2)设定第(n+6)/6段脉冲的最高频率、Dn+3（Dn+4）设定第(n+6)/6段脉冲的结束频率、Dn+5（Dn+6）设定第（n+6/6）段脉冲数；

5）在各段脉冲输出过程中，无加速度时间设置，频率从起始频率一直加速到结束频率，整个加速过程所走的步长为该段脉冲个数，如时序图；

6）方向信号在指令中指定，实例中指定Y3作为方向输出，其方向由寄存器地址中的值确定。

脉冲方向，正方向为1(只读)：

寄存器 | 脉冲输出Yn
M_8102 | Y000
M_8103 | Y001
M_8104 | Y002
M_8105 | Y003

脉冲累积计数(读写，只能写‘0’)：

寄存器 | 脉冲输出Yn
D_8140(D_8141) | Y000
D_8142(D_8143) | Y001
D_8144(D_8145) | Y002
D_8146(D_8147) | Y003

当前脉冲段(只读)：

寄存器 | 脉冲输出Yn
D_8124 | Y000
D_8125 | Y001
D_8126 | Y002
D_8127 | Y003

出错脉冲段位置，0表示无错误(只读)：

寄存器 | 脉冲输出Yn
D_8108 | Y000
D_8109 | Y001
D_8110 | Y002
D_8111 | Y003

注意：

1. 当为n段脉冲时，第1段、第2段、第3段……第n段每段的脉冲频率和脉冲数的地址必须是依次连续的；

2. 晶体管的OFF时间具有在轻负载时会延长的特性。所以请在需要响应性时设计成让负载在较轻时加负载电阻，增加负载电流；

3. 对于脉冲输出Y0，寄存器D8140（D8141）中累计其脉冲个数，D8141存储高16位，D8140存储低16位；

4. 脉冲累积计数寄存器（D8140~D8146）是重要寄存器，可读写，但具有写保护，只能使用MOVD指令写入‘0’作为清空寄存器用，不能写入其它值；

5. 由于本指令脉冲输出带方向，所以脉冲累积计数寄存器（D8140~D8146）根据方向计数；

6. 高速脉冲输出时，脉冲累积计数寄存器（D8140~D8146）内的值是不连续的、时刻变化的，用于判断时，最好大小比较，不要使用等于判断；

7. 第一段的起始频率系统默认为100HZ，做高速脉冲输出时，第一段的稳定频率不要低于该值；

8. 当前脉冲段（D8124-D8127）只在脉冲发送过程中记录当前脉冲段，脉冲停止发送时自动归零；

9. PTO指令不能使用PLSNEXT指令切换至下个脉冲段落。

实例：

指令表：

Network 000

LD M8151

MOVD K7 D0 //总的脉冲段数7，此处数量n对应下面有几段脉冲

MOVD K1 D2 //方向标志，0或1，此程序中设置Y3的状态

MOVD K200 D4 //第一段脉冲起始频率200HZ

MOVD K400 D6 //第一段脉冲结束频率400HZ

MOVD K1000 D8 //第一段脉冲的脉冲数1000PLS

MOVD K400 D10 //第二段脉冲起始频率400HZ

MOVD K650 D12 //第二段脉冲结束频率650HZ

MOVD K2000 D14 //第二段脉冲的脉冲数2000PLS

MOVD K650 D16 //第三段脉冲起始频率650HZ

MOVD K900 D18 //第三段脉冲结束频率900HZ

MOVD K5000 D20 //第三段脉冲的脉冲数5000PLS

MOVD K900 D22 //第四段脉冲起始频率900HZ

MOVD K900 D24 //第四段脉冲结束频率900HZ

MOVD K4000 D26 //第四段脉冲的脉冲数4000PLS

MOVD K900 D28 //第五段脉冲起始频率900HZ

MOVD K650 D30 //第五段脉冲结束频率650HZ

MOVD K3000 D32 //第五段脉冲的脉冲数3000PLS

MOVD K650 D34 //第六段脉冲起始频率650HZ

MOVD K500 D36 //第六段脉冲结束频率500HZ

MOVD K2500 D38 //第六段脉冲的脉冲数2500PLS

MOVD K500 D40 //第七段脉冲起始频率500HZ

MOVD K0 D42 //第七段脉冲结束频率0HZ

MOVD K1500 D44 //第七段脉冲的脉冲数1500PLS

Network 001

LD M0

PTO D0 Y0 Y3 //数据起始D0，脉冲输出Y0，方向Y3

梯形图：

时序图：


相对位置单段脉冲输出DRVI/DDRVI

对应命令 | 注释/说明 | 操作数（寄存器）
DRVI(16位)/DDRVI(32位) | 相对位置单段脉冲输出 | 输出频率(K/H/D) 输出脉冲数(K/H/D) 输出脉冲Y

指令说明：

1）对于16/32点晶体管型的PLC，Y000~Y001为高速脉冲输出口，对于64点晶体管型的PLC，Y000~Y003为高速脉冲输出口；

2）对于单路脉冲：32位指令可输出频率范围0Hz~200KHz，脉冲量范围K0~K2147483647；16位指令对应的可输出频率范围为0~32767Hz，脉冲量范围K0~K32767，当频率为0时停止输出；

3）对于继电器型的PLC，不具有高速脉冲功能，所有输出端口的最大输出频率有继电器的吸合时间决定；

4）该指令作用是输出一定频率的指定脉冲数的脉冲，启动的时候从100HZ均加速到固定速度均速输出，结束的时候从固定速度减速到0，完成一段脉冲输出；

5）脉冲个数和加减速时间满足如下关系式的才是合法的：

（起始频率Hz + 结束频率Hz）×（ 加减速时间ms÷1000） <= 脉冲个数 × 2

对于用户设置不合法的参数，以及设置得非常不合理的参数，当是否忽略错误标志M8070-M8073被置位时，不忽略错误，程序将会报错，ERR红灯变亮，出错脉冲指令不执行，其它程序会继续执行。用户可以读取D8176中的错误编号查看错误原因，错误码如下表，出错脉冲段位置可由D8108-D8111查看。修改完善后再次下载运行程序，错误状态会取消，并正确执行程序。当M8070-M8073被复位时，忽略错误，ERR灯不会亮，但错误依然会检测到，对应寄存器会显示错误状态，但脉冲会强制发送，此时脉冲频率可能存在跳变情况，但脉冲数量依然准确；

6）功能：单段梯形位置控制。

脉冲正在输出标志(只读)：

寄存器 | 脉冲输出Yn
M_8134 | Y000
M_8135 | Y001
M_8136 | Y002
M_8137 | Y003

脉冲累积计数(读写，只能写‘0’)：

寄存器 | 脉冲输出Yn
D_8140(D_8141) | Y000
D_8142(D_8143) | Y001
D_8144(D_8145) | Y002
D_8146(D_8147) | Y003

是否忽略错误，继续发送脉冲，默认忽略为0，若设为1，出错时停止脉冲输出(读写)：

寄存器 | 脉冲输出Yn
M_8070 | Y000
M_8071 | Y001
M_8072 | Y002
M_8073 | Y003

相对位置的加减速时间（读写）：

寄存器 | 脉冲输出Yn
D_8092 | Y000
D_8093 | Y001
D_8094 | Y002
D_8095 | Y003

注意：

1. 不同的脉冲指令不能共享编号相同的脉冲Y，比如 DPLSR D0 D100 Y000和PLSF D0 Y000同时使用不合法，即使前提条件未导通也不可以，如果要对同一个输出口分别操作可以使用子程序的方式进行操作；

2. 对于高速脉冲输出，它是针对外部高速器件的，假如要对脉冲进行计数，只能使用高速脉冲输入计数器，不能使用内部计数器，也不能使用Y边沿变化进行计数，当作为高速输出时，不能作为普通输出口用；

3. 晶体管的OFF时间具有在轻负载时会延长的特性。所以请在需要响应性时设计成让负载在较轻时加负载电阻，增加负载电流；

4. 对于脉冲输出Y0，寄存器D8140（D8141）中累计其脉冲个数，D8141存储高16位，D8140存储低16位；

5. 脉冲累积计数寄存器（D8140~D8146）是重要寄存器，可读写，但具有写保护，只能使用MOVD指令写入‘0’作为清空寄存器用，不能写入其它值；

6. 由于本指令脉冲输出带方向，所以脉冲累积计数寄存器（D8140~D8146）根据方向计数；

7. 高速脉冲输出时，脉冲累积计数寄存器（D8140~D8146）内的值是不连续的、时刻变化的，用于判断时，最好大小比较，不要使用等于判断。

实例：

指令表：

Network 000

LD M8151

MOV K10000 D0 //脉冲输出数

MOV K1000 D2 //脉冲输出频率

MOV K500 D8092 //加减速时间500ms

Network 001

LD M0

DRVI D0 D2 Y1 Y6 //当M0被置位DRVI开始工作

梯形图：

指令表：

Network 000

LD M8151

MOVD K10000 D0 //脉冲输出数

MOVD K1000 D2 //脉冲输出频率

MOV K500 D8092 //加减速时间500ms

Network 001

LD M0

DDRVI D0 D2 Y0 Y6 //当M0被置位DDRVI开始工作


多段脉冲定位输出TBL

对应命令 | 注释/说明 | 操作数（寄存器）
TBL | 多段脉冲定位输出 | 参数存放首地址 D 脉冲输出口Y 方向输出口 Y 表格参数

指令说明：

1）对于16/32点晶体管型的PLC，Y000~Y001为高速脉冲输出口，对于64点晶体管型的PLC，Y000~Y003为高速脉冲输出口；

2）对于单路脉冲：指令可输出频率范围0Hz~200KHz，脉冲量范围K0~K2147483647；当频率为0时停止输出；

3）对于继电器型的PLC，不具有高速脉冲功能，所有输出端口的最大输出频率有继电器的吸合时间决定；

4）该指令作用是输出一定频率的指定脉冲数的脉冲，启动的时候从100HZ均加速到固定速度均速输出，结束的时候从固定速度减速到0，完成一段脉冲输出；

5）脉冲个数和加减速时间满足如下关系式的才是合法的：

（起始频率Hz + 结束频率Hz）×（ 加减速时间ms÷1000） <= 脉冲个数 × 2

6）功能：条件位置控制。

7）使用简述：如下图，数据起始地址用于存放各段频率以及脉冲数值，M200接通后指令使能，数据将传送至D寄存器中，“当前脉冲段”为1，但不会立刻发送脉冲，需要第一段起始条件M500接通才开始发送第一段脉冲。D寄存器中的数据可以在程序中修改，运行到该段时会自动从D寄存器中取值。每段脉冲发送前都有一个等待事件和执行条件，等待事件由wait信号、ATC时间、脉冲发送完成组成。图中第一段，wait信号为M500，只有当前要执行的段落为第一段时，M500接通开始发送第一段，结束后接通结束标识位M501，并断开执行条件M500，“当前脉冲段”为“跳转至”的段落号。第一段执行完成后跳转至下一段，“跳转至”可填入任何已设置段落，图中为2。第二段的等待事件为ATC时间，等待事件为执行条件中设置的K2000单位毫秒，也可设置为D寄存器，从第一段运行结束开始计时，2000ms后开始运行第二段，第二段开始运行就会断开第一段M501的结束标志。第二段结束后接通M503。第三段等待事件为脉冲发送完成，即第二段脉冲发送完成就立即进入第三段脉冲发送，并立刻断开M503。第三段运行结束后跳转至第四段，第四段与第一段类似。第四段运行结束后跳转至第一段，构成一个循环。

说明: 说明: 捕获

梯形图：

说明: 说明: 捕获

脉冲正在输出标志(只读)：

寄存器 | 脉冲输出Yn
M_8134 | Y000
M_8135 | Y001
M_8136 | Y002
M_8137 | Y003

脉冲累积计数(读写，只能写‘0’)：

寄存器 | 脉冲输出Yn
D_8140(D_8141) | Y000
D_8142(D_8143) | Y001
D_8144(D_8145) | Y002
D_8146(D_8147) | Y003

相对位置的加减速时间（读写）：

寄存器 | 脉冲输出Yn
D_8092 | Y000
D_8093 | Y001
D_8094 | Y002
D_8095 | Y003

当前脉冲段(只读，正在等待或正在发送的段落)：

寄存器 | 脉冲输出Yn
D_8124 | Y000
D_8125 | Y001
D_8126 | Y002
D_8127 | Y003

注意：

1. 对于高速脉冲输出，它是针对外部高速器件的，假如要对脉冲进行计数，只能使用高速脉冲输入计数器，不能使用内部计数器，也不能使用Y边沿变化进行计数，当作为高速输出时，不能作为普通输出口用；

3. 晶体管的OFF时间具有在轻负载时会延长的特性。所以请在需要响应性时设计成让负载在较轻时加负载电阻，增加负载电流；

4. 对于脉冲输出Y0，寄存器D8140（D8141）中累计其脉冲个数，D8141存储高16位，D8140存储低16位；

5. 脉冲累积计数寄存器（D8140~D8146）是重要寄存器，可读写，但具有写保护，只能使用MOVD指令写入‘0’作为清空寄存器用，不能写入其它值；

6. 由于本指令脉冲输出带方向，所以脉冲累积计数寄存器（D8140~D8146）根据方向计数；

7. 高速脉冲输出时，脉冲累积计数寄存器（D8140~D8146）内的值是不连续的、时刻变化的，用于判断时，最好大小比较，不要使用等于判断；

8． 当等待事件为脉冲发送完成时，执行条件无需填写，默认为K0；

9. “模式”中的“相对”与“绝对”指填入的脉冲数为相对坐标还是绝对坐标；

10. “跳转至”可设置为任意已设置段落，最终都会构成一个循环；

11. 脉冲数即频率不可输入零，如果输入参数不满足加速合法性要求，将无加速过程。

12. TBL指令复制粘贴时,粘贴生成的指令与复制指令共用一个表格，若不想使用同一表格,可另行新建。

实例：

说明: 说明: 捕获

如图，分别设置Y0，Y1脉冲输出参数。M0接通后运动到第一点坐标（2000，200000），Y0第一段发送结束M10导通，Y1第一段结束M14导通。因为是相对坐标，M1导通后运动到点（6000，500000），之后依次类推。最后一段M3导通后回到原点，运动到点（0,0）。


高速计数指令

内容如下：

HCNT


高速脉冲计数HCNT

对应命令 | 注释/说明 | 操作数（寄存器）
HCNT | 高速脉冲输入计数 | CV，K/H/D

指令说明：

 | 高速计数器地址编号 | 高速计数器输入端接线
 |  | X000 | X001 | X002 | X003 | X004 | X005 | X006 | X007
无启动/复位的单相计数器 | C235 | U |  |  |  |  |  |  |
 | C236 |  | U |  |  |  |  |  |
 | C237 | 保留 |  |  |  |  |  |  |
 | C238 | 保留 |  |  |  |  |  |  |
 | C239 | 保留 |  |  |  |  |  |  |
 | C240 | 保留 |  |  |  |  |  |  |
指定启动/复位的单相计数器 | C241 | U | R |  |  |  |  |  |
 | C242 | 保留 |  |  |  |  |  |  |
 | C243 | 保留 |  |  |  |  |  |  |
 | C244 | U | R |  |  |  |  | S |
 | C245 | 保留 |  |  |  |  |  |  |
单相双计数器 | C246 | U | D |  |  |  |  |  |
 | C247 | U | D | R |  |  |  |  |
 | C248 | 保留 |  |  |  |  |  |  |
 | C249 | U | D | R |  |  |  | S |
 | C250 | 保留 |  |  |  |  |  |  |
A/B相计数器 | C251 | A | B |  |  |  |  |  |
 | C252 | A | B | R |  |  |  |  |
 | C253 | 保留 |  |  |  |  |  |  |
 | C254 | A | B | R |  |  |  | S |
 | C255 | 保留 |  |  |  |  |  |  |

如上表所示，高速计数器编号从C235到C255，脉冲输入口从X000到X0007；其中，U表示向上计数，D表示向下计数，R表示复位清零计数器（当R对应的X脚，出现上升沿时，计数器会被清零），S表示启动计数器（带有S端的计数器，需要在S对应的X脚，给予上升沿，才能启动相应的计数器），AB表示AB相。

当某一输入口（例如：X000）被某一高速计数器（例如：C235）使用，那么梯形图中不可以出现使用该输入口的其他高速计数器（例如：C241，C244，C246等），否则高速计数器将不能正常工作。

计数范围：-2,147,483,648 ~ +2,147,483,647；当计数值超出此范围时，会产生上溢或下溢现象。

注意：

1. 当使用高速计数输入或中断输入时，建议相应输入端口的线缆采用双绞屏蔽线，并将屏蔽层接地(同端子连接或连接信号地)，以提高抗干扰性；

2. 当使用了该类计数器后，这些端子不能再同时作为其他计数器的输入用，也不能作为普通输入方式使用；

3. 晶体管的OFF时间具有在轻负载时会延长的特性。所以请在需要响应性时设计成让负载在较轻时加负载电阻，增加负载电流；

4. A/B相计数的倍频设置要在指令初始化之前才有效。

实例：

无启动/复位的单相计数器

指令表：

Network 000

LD M8035

OUT Y000

Network 001

LD M0

HCNT CV235 K1000 //当M0为‘1’，M8035为‘0’时，CV235对X000的输入脉冲进行正向计数，当计数达到1000个时，将置位C235

Network 002

LD C235

OUT Y001

Network 003

LDP M1

RST C235 K1 //当M1上升沿来临时，清零C235和CV235

梯形图：

指定启动/复位的单相计数器

指令表：

Network 000

LD M0

HCNT CV244 K1000 //当M0为‘1’时，当X006上升沿来临时启动CV244，之后CV244对X000的输入脉冲进行正向计数（M8044为0时），当计数达到1000个时，将置位C244

//若M0变为‘0’后，再变为‘1’时，需用X006的上升沿再次启动计数器

Network 001

LD C244

OUT Y001

Network 002

LDP M1

RST C244 K1 //当M1上升沿来临时，清零C244和CV244，也可以通过给X001上升沿，来完成此功能

梯形图：

单相双计数器

指令表：

Network 000

LD M0

HCNT CV249 K1000 //当M0为‘1’时，当X006上升沿来临时启动CV249，之后CV249 对X000的输入脉冲进行正向计数，对X001的输入脉冲进行负向计数，当计数达到1000个时，将置位C249

//若M0变为‘0’后，再变为‘1’时，需用X006的上升沿再次启动计数器

Network 001

LD C249

OUT Y001

Network 002

LDP M1

RST C249 K1 //当M1上升沿来临时，清零C249和CV249，也可以通过给X002上升沿，来完成此功能

梯形图：

AB相计数器

AB相计数器分为两种计数模式，通过M8051~M8055来控制AB相计数器C251~C255倍频模式，当相应的M的为‘0’时，为一倍频模式。为‘1’时，为四倍频模式，倍频的设置要在计数器初始化之前，如下图：

一倍频模式：

四倍频模式：

指令表：

Network 000

LD M0

HCNT CV254 K1000 //当M0为‘1’时，当X006上升沿来临时启动CV254，之后CV254对输入X000和X001的AB相脉冲进行计数，当计数达到1000个时，将置位C254

//若M0变为‘0’后，再变为‘1’时，需用X006的上升沿再次启动计数器

Network 001

LD C254

OUT Y001

Network 002

LDP M1

RST C254 K1 //当M1上升沿来临时，清零C254和CV254，也可以通过给X002上升沿，来完成此功能

梯形图：


辅助功能指令

内容如下：

LOG

POW

FACT

CMP

CMPD

CMPF

ZCP

ZCPD

ZCPF

NEG

NEGD

XCH

XCHD

XCHF

CML

CMLD

SMOV

FMOV

FMOVD


以10为底的对数运算 (LOG)

对应命令 | 注释/说明 | 操作数（寄存器）
LOG | 以10为底的对数运算 | IN：D/K, OUT：D

指令说明：

对寄存器（IN）的浮点数值进行以10为底的对数运算，将浮点数结果传送到寄存器（OUT）。

实例：

指令表：

LD M1

LOG K1000 D4 //执行结果D4（D5） = 3.0

梯形图：


计算x的y次幂 （POW）

对应命令 | 注释/说明 | 操作数（寄存器）
POW | 计算X的Y次幂 | B（底数）：D/K, E（指数）：D/K, P（幂）：D

指令说明：

以寄存器（B）的浮点数值为底，寄存器（E）的浮点数值为指数进行幂运算，将结果传送到寄存器（P）。

实例：

指令表：

LD M3

POW K10 K3 D0 //执行结果D0(D1) = 1000.0

梯形图：


计算n的阶乘 （FACT）

对应命令 | 注释/说明 | 操作数（寄存器）
FACT | 计算N的阶乘 | D/H/K/TV/CV/AO/AI/V/Z, D(32位)

指令说明：

计算寄存器（IN）值的阶乘，N的最大值为12，将结果传送到寄存器（OUT）。

实例：

指令表：

LD M3

FACT K4 D0 //执行结果D0（D1） = 24

梯形图：


单字比较 （CMP）

对应命令 | 注释/说明 | 操作数（寄存器）
CMP | 单字比较 | D/H/K/CV/TV/AI/AO/V/Z, D/H/K/CV/TV/AI/AO/V/Z, Y/M/S(占用连续3个位)

指令说明：

比较单字IN1和IN2的大小，比较结果送到OUT：

若OUT为Y000

当IN1 > IN2: Y000为‘1’

当IN1 == IN2: Y001为‘1’

当IN1 < IN2: Y002为‘1’

实例：

指令表：

LD M0

CMP D0 D1 M100 // 比较D0和D1的大小

LD M100

OUT M1000 // 如果D0 > D1, M100= ON

LD M101

OUT M1001 // 如果D0 == D1, M101= ON

LD M102

OUT M1002 // 如果D0 < D1, M102= ON

梯形图：


双字比较 (CMPD)

对应命令 | 注释/说明 | 操作数（寄存器）
CMPD | 双字比较 | D/H/K, D/H/K, Y/M/S(占用连续3个位)

指令说明：

比较双字IN1和IN2的大小，比较结果送到OUT：

例如OUT为Y000

当IN1 > IN2: Y000为‘1’

当IN1 == IN2: Y001为‘1’

当IN1 < IN2: Y002为‘1’

实例：

指令表：

LD M0

CMPD D0 D2 M100 // 比较D0（D1）和D2（D3）的大小

LD M100

OUT M1000 // 如果D0（D1）> D2（D3）, M100= ON

LD M101

OUT M1001 // 如果D0（D1）== D2（D3）, M101= ON

LD M102

OUT M1002 // 如果D0（D1）< D2（D3）, M102= ON

梯形图：


浮点数比较 （CMPF）

对应命令 | 注释/说明 | 操作数（寄存器）
CMPF | 浮点数比较 | D /K, D /K, Y/M/S(占用连续3个位)

指令说明：

比较浮点数IN1和IN2的大小，比较结果送到OUT：

若OUT为Y000

当IN1 > IN2: Y000为‘1’

当IN1 == IN2: Y001为‘1’

当IN1 < IN2: Y002为‘1’

实例：

指令表：

LD M0

CMPF D0 D2 M100 // 比较D0（D1）和D2（D3）的大小

LD M100

OUT M1000 // 如果D0（D1）> D2（D3）, M100= ON

LD M101

OUT M1001 // 如果D0（D1）== D2（D3）, M101= ON

LD M102

OUT M1002 // 如果D0（D1）< D2（D3）, M102= ON

梯形图：


单字区间比较 （ZCP）

对应命令 | 注释/说明 | 操作数（寄存器）
ZCP | 单字区间比较 | IN1：D/H/K/TV/CV/AI/AO/V/Z, IN2：D/H/K/TV/CV/AI/AO/V/Z, IN：D/H/K/TV/CV/AI/AO/V/Z, OUT：Y/M/S(占用连续3个位)

指令说明：

比较值 IN 与下限 IN1 及上限 IN2 作比较，其比较结果在 OUT作表示。

当下限 IN1 不可以大于上限 IN2。

大小比较是以代数来进行，全部的数据是以有符号数二进制数值来作比较。

实例：

指令表：

LD M0

ZCP K100 K200 D0 Y000 //当D0 < K100时 Y000 = ON;

//当K100 <= D0 <= K200时 Y001 = ON;

//当D0 > K200时 Y002 = ON;

梯形图：


双字区间比较 （ZCPD）

对应命令 | 注释/说明 | 操作数（寄存器）
ZCPD | 双字区间比较 | IN1：D/H/K, IN2：D/H/K, IN：D/H/K, OUT：Y/M/S(占用连续3个位)

指令说明：

比较值 IN 与下限 IN1 及上限 IN2 作比较，其比较结果在 OUT作表示。

当下限 IN1 不可以大于上限 IN2。

大小比较是以代数来进行，全部的数据是以有符号数二进制数值来作比较。

实例：

指令表：

LD M0

ZCPD K100 K200 D0 Y000 //当D0（D1） < K100时 Y000 = ON;

//当K100 <= D0（D1）<= K200时 Y001 = ON;

//当D0（D1） > K200时 Y002 = ON;

梯形图：


浮点数区间比较 （ZCPF）

对应命令 | 注释/说明 | 操作数（寄存器）
ZCPF | 浮点数区间比较 | IN1：D /K, IN2：D /K, IN：D//K, OUT：Y/M/S(占用连续3个位)

指令说明：

比较值 IN 与下限 IN1 及上限 IN2 作比较，其比较结果在 OUT作表示。

当下限 IN1 不可以大于上限 IN2。

大小比较是以代数来进行，全部的数据是以有符号数二进制数值来作比较。

实例：

指令表：

LD M0

ZCPF K100 K200 D0 Y000 //当D0（D1） < K100.0时 Y000 = ON;

//当K100.0 <= D0（D1）<= K200.0时 Y001 = ON;

//当D0（D1） > K200.0时 Y002 = ON;

梯形图：


单字求补 （NEG）

对应命令 | 注释/说明 | 操作数（寄存器）
NEG | 单字求补 | IN：D/K/H/AI/AO/CV/TV/V/Z, OUT：D/CV/TV/AO/V/Z

指令说明：

对寄存器（IN）的值求补后传送到寄存器（OUT）。

实例：

指令表：

LD M0

NEG H00AA D0 //执行结果D0 = 0x7F56 = 32598;

梯形图：


双字求补 （NEGD）

对应命令 | 注释/说明 | 操作数（寄存器）
NEGD | 双字求补 | IN：D/K/H, OUT：D

指令说明：

对寄存器（IN）的值求补后传送到寄存器（OUT）。

实例：

指令表：

LD M0

NEGD K1000 D0 //执行结果D0（D1） = 0x7FFFFC18 = 2147482648;

梯形图：


单字交换 （XCH）

对应命令 | 注释/说明 | 操作数（寄存器）
XCH | 单字交换传送 | OUT1：D/AO/CV/TV/V/Z, OUT2：D/AO/CV/TV/V/Z

指令说明：

交换寄存器（OUT1），寄存器（OUT2）的值。

实例：

指令表：

LDP M7

XCH D5 D6 // 若该指令执行之前D5 = 100， D6 = 50， 则执行该指令后D5 = 50, D6 = 100;

梯形图：


双字交换 （XCHD）

对应命令 | 注释/说明 | 操作数（寄存器）
XCHD | 双字交换传送 | OUT1：D OUT2：D

指令说明：

交换寄存器（OUT1），寄存器（OUT2）的值。

实例：

指令表：

LDP M8

       XCHD           D0          D2                  // 若该指令执行之前D0（D1） = 100， D2(D3) =
50， 则在M8的上升沿来临后D0（D1） = 50， D2(D3) =
100;

梯形图：


浮点数交换 （XCHF）

对应命令 | 注释/说明 | 操作数（寄存器）
XCHF | 浮点数交换传送 | OUT1：D OUT2：D

指令说明：

交换寄存器（OUT1），寄存器（OUT2）的值。

实例：

指令表：

LDP M8

XCHF D0 D2 // 若该指令执行之前D0（D1） = 123.456， D2(D3) = 789.123， 则在M8的上升沿来临后D0（D1） = 789.123， D2(D3) = 123.456;

梯形图：


单字取反传送 （CML）

对应命令 | 注释/说明 | 操作数（寄存器）
CML | 单字取反传送 | D/H/K/AO/AI/CV/TV/V/Z, D/AO/CV/TV/V/Z

指令说明：

将源操作数（IN）中的数据逐位取反后传送到OUT寄存器。

实例：

指令表：

LD M5

CML HFF55 D0 // 执行结果D0 = 0x00AA = 170

梯形图：


双字取反传送 （CMLD）

对应命令 | 注释/说明 | 操作数（寄存器）
CMLD | 双字取反传送 | D/H/K，D

指令说明：

将源操作数（IN）中的数据逐位取反后传送到目标寄存器（OUT）。

实例：

指令表：

LD M6

CMLD HFF55FF55 D0 // 执行结果D0(D1) = 0x00AA00AA = 11141290

梯形图：


移位传送 SMOV

对应命令 | 注释/说明 | 操作数（寄存器）
SMOV | 移位传送 | D/AI/AO/TV/CV/V/Z, H/K, H/K, D/AO/TV/CV/V/Z, H/K

指令说明：

指令将首先将二进制的源数据（D1）转换成 BCD 码，然后将BCD码移位传送，实现数据的分配、组合。源数据 BCD码右起从第 4 位开始的 2 位移送到目标 D2的第 3 位和第 2 位，而 D2的第 4 和第 1 两位 BCD 码不变。然后，目标D2 中的 BCD码自动转换成二进制数，即为 D2 的内容。BCD 码值超过9999 时出错。

实例：

指令表：

LDP M1

MOV K4321 D1

MOV K8888 D2

LD M1

SMOV D1 K4 K2 D2 K3 //当M1为‘1’时，执行结果D2 = 8438

梯形图：


单字多点传送指令 （FMOV）

对应命令 | 注释/说明 | 操作数（寄存器）
FMOV | 单字多点传送 | SRC：D/H/K/AI/AO/TV/CV/V/Z, DST ：D/AO/CV/TV/V/Z, N ：D/K/H

指令说明：

将源元件（SRC）中的数据传送到指定目标（DST）开始的 N 个目标元件中，这 N 个元件中的数据完全相同。

实例：

指令表：

LD M1

FMOV K100 D5 K5 // 执行结果D5—D9的值均为100

梯形图：


双字多点传送指令 （FMOVD）

对应命令 | 注释/说明 | 操作数（寄存器）
FMOVD | 双字多点传送 | SRC : D/H/K, DST : D, N : D/K/H

指令说明：

将源元件（SRC）中的数据传送到指定目标（DST）开始的 N 个目标元件中，这 N 个元件中的数据完全相同。

实例：

指令表：

LD M4

FMOVD K100 D0 K4 // 执行结果D0（D1），D2（D3），D4（D5），D6（D7）的值均为100

梯形图：


PID指令

GC能够进行PID控制，支持模糊PID和手动PID，同时支持 PID自整定。最多支持10路PID控制(其中温控路数为8路)

PID是闭环控制系统的比例－积分－微分控制算法。

PID控制器根据设定值（给定）与被控对象的实际值（反馈）的差值，按照PID算法计算出控制器的输出量，控制执行机构去影响被控对象的变化。

PID控制是负反馈闭环控制，能够抑制系统闭环内的各种因素所引起的扰动，使反馈跟随给定变化。

根据具体项目的控制要求，在实际应用中有可能用到其中的一部分，比如常用的是PI（比例－积分）控制，这时没有微分控制部分。

使用该指令前请确保对PID控制有一定基础。

指令说明：

GC中PID功能是通过PID指令函数功能块实现。通过定时（按照采样时间）执行PID功能块，按照PID运算规律，根据当时的给定、反馈、比例－积分－微分数据，计算出控制量。

PID功能块通过一个PID回路表交换数据，这个表是在D数据存储区中的开辟，长度为17字节。因此每个PID功能块在调用时需要指定5点：PID控制回路号，控制回路表的起始地址（以D表示），PID设定值,PID输出(此地址与回路表输出类型相关,类型为0代表输出为位元件，1代表字元件)，以及PID自整定采样点数设置。

PID各个参数解释：

回路号:PID功能块总共支持10个PID回路(其中温控支持8路)

过程变量：

KP:比例环节，系统误差一旦产生，控制器立即就有控制作用，使被 PID 控制的对象朝着减小误差的方向变化，控制作用的强弱取决于比例系数 Kp，数据类型为32位浮点数

TI:积分时间(ms)，偏差值恒定时，积分时间决定了控制器输出的变化速率。积分时间越短，偏差得到的修正越快。过短的积分时间有可能造成不稳定。
积分时间的长度相当于在阶跃给定下，增益为“1”的时候，输出的变化量与偏差值相等所需要的时间，也就是输出变化到二倍于初始阶跃偏差的时间。
如果将积分时间设为最大值，则相当于没有积分作用。积分时间设置为0则KI为0，数据类型为32位浮点数

TD:微分时间(ms)，偏差值发生改变时，微分作用将增加一个尖峰到输出中，随着时间流逝减小。微分时间越长，输出的变化越大。微分使控制对扰动的敏感度增加，也就是偏差的变化率越大，微分控制作用越强。微分相当于对反馈变化趋势的预测性调整。设置为0则KD为0，数据类型为32位浮点数

PID控制死区:在PID产生控制作用时,当误差小于死区值时,PID将停止计算,维持前一状态输出 ，数据类型为32位浮点数

采样时间(ms):此时间为数据输入和PID输出刷新时间,需要根据系统不同设置不同值,不能小于扫描周期，数据类型为32位浮点数

给定值底限/给定值高限:PID输出限幅于此区间

方向:方向为1表示PID正向输出(加热),为0则表示反向输出

自整定状态:0表示整定完成,1表示正在整定,2表示整定失败

整定采样点数: 当采用PID自整定(即自整定状态为1),此值代表PID在设定点数内未完成整定则判失败(若设置为K30,则代表若在30个采样周期结束未完成PID自整定则失败,自整定状态位置2)

输出量:当输出类型为0时，此值表示位元件开启时间,输出类型为1此值无效。

PID输入：采样值存放地址

PID输出：当此地址为位元件时(确保输出类型为0)，PID控制量为此元件正脉冲脉宽，当此地址为字元件时，PID计算结果输出于此

PID设定值:设定PID最终目标值

PID模式：

GC系列PID分为手动模式和模糊PID,用户可根据不同系统采用不同模式PID

手动PID

根据用户输入参数执行PID运算输出，也可以先采用自整定完成PID参数设置

PID自整定：

先决条件

（1） 进行自整定的回路必须处于自动模式(自整定状态为1)

（2） PID控制量能使系统在设定值附近产生振荡

（3） 在进行自整定之前，系统需要确定以下几个参数(采样时间，给定值高低限，PID方向，整定状态置1，输出类型，设定值)

（4） 如果在自整定期间(整定状态为1)，系统在N(N=自整定采样点数)个采样周期内没有在设定值附近产生振荡，则整定状态置2，表示整定失败

自整定过程

自整定在整定状态位为1且PID指令使能时开始执行。系统首先会比较设定值和测量值大小，当测量值大于设定值时,PID将负向输出，产生第一个零相交事件，当测量值小于设定值,PID正向输出，再次产生一个零相交事件，在完成10次零相交事件后，整个PID整定序列采样完成，系统将会自动更新PID参数,从而系统开始PID控制，PID整定状态将会清0，表示整定完成。自整定过程变量的峰--峰值和零相交事件的产生速度都与控制过程的动态特性直接相关。

下图为PID自整定过程，系统首先会捕获10次零相交事件，10次零相交事件满足PID整定序列则输出PID参数从而转为PID控制

下图为PID控制过程,GC系列PID指令加入了抗积分饱和，加快了系统反应速度

PID自整定失败的原因

（1） 系统无法产生10次零相交事件,比如加热系统中加热器功率不足无法升温或者系统无法降温等

（2） 输入信号即测量值采样紊乱，系统无法获取整定序列

（3） 参数设置比如采样时间过长过短，高低限阈值不合理，方向，自整定状态设置错误以及整定采样次数过小从而失败


函数功能块

函数功能块是指通过编写C语言函数来实现梯形图的功能，它使PLC的功能变得更加强大。使用C语言编写函数，很多情况下几行C语言代码就可以实现复杂的梯形图功能，特别是涉及数学运算的时候。

    SAMSOAR Developer提供的函数功能块，全面兼容标准C 语言(ANSI C89)。由于介绍C 语言的各种书籍非常多，资料容易找到，故本章不会详细介绍语法和基础知识，主要帮助复习下函数功能块设计有相关的基础。

本章将首先简要讲解C语言基本知识，及宏指令相关的使用，及注意事项。

C语言入门

C语言程序设计初步

函数功能块功能简介

库函数附录


C语言入门

C语言数据类型

变量的初值和类型转换

基本运算符和表达式

一维数值组

小结


C语言数据类型

1.整型量

整型量包括整型常量、整型变量。整型常量就是整常数。在Ｃ语言中，使用的整常数有八进制、十六进制和十进制三种。

2.整型常量

1.八进制整常数八进制整常数必须以0开头，即以0作为八进制数的前缀。数码取值为0～7。八进制数通常是无符号数。

以下各数是合法的八进制数：

015(十进制为13)　0101(十进制为65)　0177777(十进制为65535)

以下各数不是合法的八进制数：

256(无前缀0) 03A2(包含了非八进制数码)　-0127(出现了负号)

2.十六进制整常数

十六进制整常数的前缀为0X或0x。其数码取值为0~9，A~F或a~f。

以下各数是合法的十六进制整常数：

0X2A(十进制为42)　　0XA0 (十进制为160)　　0XFFFF (十进制为65535)

以下各数不是合法的十六进制整常数：

5A (无前缀0X)　　0X3H (含有非十六进制数码)

3.十进制整常数

十进制整常数没有前缀。其数码为0～9。

以下各数是合法的十进制整常数：

237 -568 65535 1627

以下各数不是合法的十进制整常数：

023 (不能有前导0)　23D (含有非十进制数码)。

在程序中是根据前缀来区分各种进制数的。因此在书写常数时不要把前缀弄错造成结果不正确。

4.整型常数的后缀在16位字长的机器上，基本整型的长度也为16位，因此表示的数的范围也是有限定的。十进制无符号整常数的范围为0～65535，有符号数为-32768～+32767。八进制无符号数的表示范围为0～0177777。十六进制无符号数的表示范围为0X0～0XFFFF或0x0～0xFFFF。如果使用的数超过了上述范围，就必须用长整型数来表示。长整型数是用后缀“L”或“l”来表示的。例如：

十进制长整常数 158L (十进制为158) 358000L (十进制为-358000)

八进制长整常数 012L (十进制为10) 077L (十进制为63)　0200000L (十进制为65536)。

十六进制长整常数 0X15L (十进制为21) 0XA5L (十进制为165)　0X10000L (十进制为65536)。

    长整数158L和基本整常数158 在数值上并无区别。但对158L，因为是长整型量，Ｃ编译系统将为它分配4个字节存储空间。而对158，因为是基本整型，只分配2 个字节的存储空间。因此在运算和输出格式上要予以注意，避免出错。无符号数也可用后缀表示，整型常数的无符号数的后缀为“U”或“u”。例如： 358u,0x38Au,235Lu 均为无符号数。前缀，后缀可同时使用以表示各种类型的数。如0XA5Lu表示十六进制无符号长整数A5，其十进制为165。

3.整型变量

整型变量可分为以下几类：

1.基本型

类型说明符为int，在内存中占2个字节，其取值为基本整常数。

2.短整量

类型说明符为short int或short'C110F1。所占字节和取值范围均与基本型相同。

3.长整型

类型说明符为long int或long ，在内存中占4个字节，其取值为长整常数。

4.无符号型

类型说明符为unsigned。

无符号型又可与上述三种类型匹配而构成：

(1)无符号基本型类型说明符为unsigned int或unsigned。

(2)无符号短整型类型说明符为unsigned short

(3)无符号长整型类型说明符为unsigned long

各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符号位，故不能表示负数。 下表列出了ARM中各类整型量所分配的内存字节数及数的表示范围。

类型说明符　　　 　数的范围 　　　　 分配字节数

int 　　　　　　-2147483648~2147483647　　　　　 ■■■■

short int 　　　-2147483648~2147483647　　　　　 ■■■■

signed int 　　 -2147483648~2147483647　 　　　　 ■■■■

unsigned int 　 0~4294967295 　　　　　　 ■■■■

long int 　-922337203685477808~922337203685477807　 ■■■■■■■■

unsigned long 　0~18446744073709551615 　　　　 ■■■■■■■■

4.整型变量的说明

变量说明的一般形式为： 类型说明符 变量名标识符，变量名标识符，...；例如：

int a,b,c； (a,b,c为整型变量)

long x,y； (x,y为长整型变量)

unsigned p,q； (p,q为无符号整型变量)

在书写变量说明时，应注意以下几点：

1.允许在一个类型说明符后，说明多个相同类型的变量。各变量名之间用逗号间隔。类型说明符与变量名之间至少用一个空格间隔。

2.最后一个变量名之后必须以“；”号结尾。

3.变量说明必须放在变量使用之前。一般放在函数体的开头部分。

[Practice] //1int a,b；

short int c；

short d=100；

a=d-20；

b=a+d；

c=a+b+d；

d=d-a+c-b；

5.实型常量

实型也称为浮点型。实型常量也称为实数或者浮点数。在Ｃ语言中，实数只采用十进制。它有二种形式： 十进制数形式指数形式

1.十进制数形式

由数码0~ 9和小数点组成。例如：0.0，.25，5.789，0.13，5.0，300.，-267.8230等均为合法的实数。

2.指数形式

由十进制数，加阶码标志“e”或“E”以及阶码(只能为整数，可以带符号)组成。其一般形式为a E n (a为十进制数，n为十进制整数)其值为 a*10,n　如： 2.1E5 (等于2.1*10,5), 3.7E-2 (等于3.7*10,)-2*)　0.5E7 (等于0.5*10,7), -2.8E-2 (等于-2.8*10,)-2*)以下不是合法的实数 345 (无小数点)　E7 (阶码标志E之前无数字)　 -5 (无阶码标志)　53.-E3 (负号位置不对)　2.7E (无阶码)。

标准Ｃ允许浮点数使用后缀。后缀为“f”或“F”即表示该数为浮点数。如356f和356.是等价的。

6.实型变量

实型变量分为两类：单精度型和双精度型，其类型说明符为float 单精度说明符，double 双精度说明符。在Turbo C中单精度型占4个字节(32位)内存空间，其数值范围为3.4E-38～3.4E+38，只能提供七位有效数字。双精度型占8 个字节(64位)内存空间，其数值范围为1.7E-308～1.7E+308，可提供16位有效数字。

实型变量说明的格式和书写规则与整型相同。

例如： float x,y； (x,y为单精度实型量)

       double a,b,c； (a,b,c为双精度实型量)

实型常数不分单、双精度，都按双精度double型处理。

a ■■■■

b ■■■■■■■■

a<---33333.33333

b<---33333.33333333333；；

[Practice] //floatint a=32；

float b；

double d；

b=12345678；

d=b*100；

d=d+a；

d=d+58.123456；

7.字符型量

字符型量包括字符常量和字符变量。

字符常量

字符常量是用单引号括起来的一个字符。例如'a','b','=','+','?'都是合法字符常量。在Ｃ语言中，字符常量有以下特点：

1.字符常量只能用单引号括起来，不能用双引号或其它括号。

2.字符常量只能是单个字符，不能是字符串。

3.字符可以是字符集中任意字符。但数字被定义为字符型之后就

不能参与数值运算。如'5'和5 是不同的。'5'是字符常量，不能参与运算。

8.字符变量

字符变量的取值是字符常量，即单个字符。字符变量的类型说明符是char。字符变量类型说明的格式和书写规则都与整型变量相同。

例如：

char a,b； 每个字符变量被分配一个字节的内存空间，因此只能存放一个字符。字符值是以ASCII码的形式存放在变量的内存单元之中的。如x的

十进制ASCII码是120，y的十进制ASCII码是121。对字符变量a,b赋予'x'和'y'值： a='x'；b='y'；实际上是在a,b两个单元内存放120和121的二进制代码：

a　0 1 1 1 1 0 0 0

b　0 1 1 1 1 0 0 1

所以也可以把它们看成是整型量。 Ｃ语言允许对整型变量赋以字符值，也允许对字符变量赋以整型值。在输出时，允许把字符变量按整型量输出，也允许把整型量按字符量输出。整型量为二字节量，字符量为单字节量，当整型量按字符型量处理时， 只有低八位字节参与处理。

[Practice] //charint a=49；

char b；

char d；

b=a+10；

d=a+b；

[Practice] //char c1,c2；

c1='a'；c2='b'；

c1=c1-32；c2=c2-32；

9.字符串常量

字符串常量是由一对双引号括起的字符序列。例如： "CHINA" ，"C program:" ， "$12.5" 等都是合法的字符串常量。字符串常量和字符常量是不同的量。它们之间主要有以下区别：

1.字符常量由单引号括起来，字符串常量由双引号括起来。

2.字符常量只能是单个字符，字符串常量则可以含一个或多个字符。

3.可以把一个字符常量赋予一个字符变量，但不能把一个字符串常量赋予一个字符变量。在Ｃ语言中没有相应的字符串变量。

4.字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符"\0"(ASCII码为0)。这是字符串结束的标志。例如，字符串 "C program"在内存中所占的字节为：C program\0。字符常量'a'和字符串常量"a"虽然都只有一个字符，但在内存中的情况是不同的。

'a'在内存中占一个字节，可表示为：a

"a"在内存中占二个字节，可表示为：a\0符号常量

10.符号常量

在Ｃ语言中，可以用一个标识符来表示一个常量，称之为符号常量。符号常量在使用之前必须先定义，其一般形式为：

#define 标识符 常量

其中#define也是一条预处理命令，称为宏定义命令，其功能是把该标识符定义为其后的常量值。一经定义，以后在程序中所有出现该标识符的地方均代之以该常量值。习惯上符号常量的标识符用大写字母，变量标识符用小写字母，以示区别。

#define PI 3.14159

void main(){

float s,r；

r=5；

s=PI*r*r；

printf("s=%f\n",s)；

}

由宏定义命令定义PI 为3.14159 s,r定义为实数　5->r　PI*r*r->s

显示程序结果 float s,r；　r=5；　s=PI*r*r；本程序在主函数之前由宏定义命令定义PI 为3.14159，在程序中即以该值代替PI 。s=PI*r*r等效于s=3.14159*r*r。应该注意的是，符号常量不是变量，它所代表的值在整个作用域内不能再改变。也就是说，在程序中，不能再用赋值语句对它重新赋值。


变量初值和类型转换

1.变量赋初值

在程序中常常需要对变量赋初值，以便使用变量。语言程序中可有多种方法，在定义时赋以初值的方法，这种方法称为初始化。在变量说明中赋初值的一般形式为：

类型说明符 变量1= 值1，变量2= 值2，……； 例如：

int a=b=c=5；

float x=3.2,y=3f,z=0.75；

char ch1='K',ch2='P'；

应注意，在说明中不允许连续赋值，如a=b=c=5是不合法的。

2.变量类型的转换

变量的数据类型是可以转换的。转换的方法有两种， 一种是自动转换，一种是强制转换。

自动转换

自动转换发生在不同数据类型的量混合运算时，由编译系统自动完成。自动转换遵循以下规则：

1.若参与运算量的类型不同，则先转换成同一类型，然后进行运算。

2.转换按数据长度增加的方向进行，以保证精度不降低。如int型和long型运算时，先把int量转成long型后再进行运算。

3.所有的浮点运算都是以双精度进行的，即使仅含float单精度量运算的表达式，也要先转换成double型，再作运算。

4.char型和short型参与运算时，必须先转换成int型。

5.在赋值运算中，赋值号两边量的数据类型不同时，赋值号右边量的类型将转换为左边量的类型。 如果右边量的数据类型长度左边长时，将丢失一部分数据，这样会降低精度，丢失的部分按四舍五入向前舍入。

3.强制类型转换

强制类型转换是通过类型转换运算来实现的。其一般形式为： (类型说明符) (表达式) 其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。例如： (float) a 把a转换为实型(int)(x+y) 把x+y的结果转换为整型在使用强制转换时应注意以下问题：

1.类型说明符和表达式都必须加括号(单个变量可以不加括号)，如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。

2.无论是强制转换或是自动转换，都只是为了本次运算的需要而对变量的数据长度进行的临时性转换，而不改变数据说明时对该变量定义的类型。


基本运算符和表达式

运算符的种类、优先级和结合性

Ｃ语言中运算符和表达式数量之多， 在高级语言中是少见的。正是丰富的运算符和表达式使Ｃ语言功能十分完善。 这也是Ｃ语言的主要特点之一。

Ｃ语言的运算符不仅具有不同的优先级， 而且还有一个特点，就是它的结合性。在表达式中， 各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定，还要受运算符结合性的制约，以便确定是自左向右进行运算还是自右向左进行运算。这种结合性是其它高级语言的运算符所没有的，因此也增加了Ｃ语言的复杂性。

运算符的种类Ｃ语言的运算符可分为以下几类：

1.算术运算符

用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算，%)、自增(++)、自减(--)共七种。

2.关系运算符

用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六种。

3.逻辑运算符

用于逻辑运算。包括与(&&)、或(||)、非(!)三种。

4.位操作运算符

参与运算的量，按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。

5.赋值运算符

用于赋值运算，分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。

6.条件运算符

这是一个三目运算符，用于条件求值(?:)。

7.逗号运算符

用于把若干表达式组合成一个表达式(，)。

8.指针运算符

用于取内容(*)和取地址(&)二种运算。

9.求字节数运算符

用于计算数据类型所占的字节数(sizeof)。

10.特殊运算符

有括号()，下标[],等几种。


一维数值组

数组在程序设计中，为了处理方便， 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在Ｃ语言中，数组属于构造数据类型。一个数组可以分解为多个数组元素，这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同，数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

    本章介绍数值数组和字符数组，其余的在以后各章陆续介绍。数组类型说明在Ｃ语言中使用数组必须先进行类型说明。数组说明的一般形

式为： 类型说明符数组名 [常量表达式]，……； 其中，类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。 方括号中的常量表达式表示数据元素的个数，也称为数组的长度。

例如：

int a[10]； 说明整型数组a，有10个元素。

float b[10],c[20]； 说明实型数组b，有10个元素，实型数组c，有20个元素。

char ch[20]； 说明字符数组ch，有20个元素。

对于数组类型说明应注意以下几点：

1.数组的类型实际上是指数组元素的取值类型。对于同一个数组，其所有元素的数据类型都是相同的。

2.数组名的书写规则应符合标识符的书写规定。

3.数组名不能与其它变量名相同，例如：

void main()

{

int a；

float a[10]；

……

}是错误的。

4.方括号中常量表达式表示数组元素的个数，如a[5]表示数组a有5个元素。但是其下标从0开始计算。因此5个元素分别为a[0],a[1],a[2],a[3],a[4]。

5.不能在方括号中用变量来表示元素的个数， 但是可以是符号常数或常量表达式。例如：

#define FD 5

void main()

{

int a[3+2],b[7+FD]；

……

}

是合法的。但是下述说明方式是错误的。

void main()

{

int n=5；

int a[n]；

……

}

6.允许在同一个类型说明中，说明多个数组和多个变量。

例如： int a,b,c,d,k1[10],k2[20]；

1.数组元素的表示方法

    数组元素是组成数组的基本单元。数组元素也是一种变量，其标识方法为数组名后跟一个下标。 下标表示了元素在数组中的顺序号。数组元素的一般形式为：数组名[下标] 其中的下标只能为整型常量或整型表达式。如为小数时，C编译将自动取整。例如，a[5],a[i+j],a[i++]都是合法的数组元素。数组元素通常也称为下标变量。必须先定义数组， 才能使用下标变量。在Ｃ语言中只能逐个地使用下标变量，而不能一次引用整个数组。

    初始化赋值的一般形式为： static 类型说明符数组名[常量表达式]={值，值……值}； 其中static表示是静态存储类型，Ｃ语言规定只有静态存储数组和外部存储数组才可作初始化赋值(有关静态存储，外部存储的概念在第五章中介绍)。在{ }中的各数据值即为各元素的初值， 各值之间用逗号间隔。例如： static int a[10]={ 0,1,2,3,4,5,6,7,8,9 }； 相当于a[0]=0；a[1]=1...a[9]=9；

2.Ｃ语言对数组的初始赋值还有以下几点规定：

1.可以只给部分元素赋初值。当{ }中值的个数少于元素个数时，只给前面部分元素赋值。例如： static int a[10]={0,1,2,3,4}；表示只给a[0]～a[4]5个元素赋值，而后5个元素自动赋0值。

2.只能给元素逐个赋值，不能给数组整体赋值。 例如给十个元素全部赋1值，只能写为：static int a[10]={1,1,1,1,1,1,1,1,1,1}；而不能写为： static int a[10]=1；

3.如不给可初始化的数组赋初值，则全部元素均为0值。

4. 如给全部元素赋值，则在数组说明中， 可以不给出数组元素的个数。例如： static int a[5]={1,2,3,4,5}；可写为： static int a[]={1,2,3,4,5}；动态赋值可以在程序执行过程中，对数组作动态赋值。 这时可用循环语句配合scanf函数逐个对数组元素赋值。

3.字符数组

用来存放字符量的数组称为字符数组。 字符数组类型说明的形式与前面介绍的数值数组相同。例如： char c[10]；由于字符型和整型通用，也可以定义为int c[10]但这时每个数组元素占2个字节的内存单元。字符数组也可以是二维或多维数组，例如： char c[5][10]；即为二维字符数组。字符数组也允许在类型说明时作初始化赋值。例如： static char c[10]={`c`,` `,`p`,`r`,o`,g`,r`,`a`,`m`}；赋值后各元素的值为：数组C c[0]c[1]c[2]c[3]c[4]c [5]c[6]c[7]c[8]c[9]其中c[9]未赋值，由系统自动赋予0值。 当对全体元素赋初值时也可以省去长度说明。例如： static char c[]={`c`,` `,`p`,`r`,`o`,`g`,`r`,`a`,`m`}；这时C数组的长度自动定为9。

  Ｃ语言允许用字符串的方式对数组作初始化赋值。例如：

static char c[]={'c', ' ','p','r','o','g','r','a','m'}； 可写为：

static char c[]={"C program"}； 或去掉{}写为：sratic char c[]="C program"；

用字符串方式赋值比用字符逐个赋值要多占一个字节， 用于存放字符串结束标志'\0'。上面的数组c在内存中的实际存放情况为：C program\0`\0'是由C编译系统自动加上的。由于采用了`\0'标志，所以在用字符串赋初值时一般无须指定数组的长度，而由系统自行处理。在采用字符串方式后，字符数组的输入输出将变得简单方便。除了上述用字符串赋初值的办法外，还可用printf函数和scanf函数一次性输出输入一个字符数组中的字符串，而不必使用循环语句逐个地输入输出每个字符。


小结

1.Ｃ的数据类型

基本类型，构造类型，指针类型，空类型

2.基本类型的分类及特点

类型说明符 　　　　　 字节　　 　　　　数值范围

字符型char 　　　　 　 1 　　 　　　　　C字符集

基本整型int 　　　　　 4 　　 　　　　　-214783648～214783647

短整型short 　　　 2 　 　　　　 　-32768～32767

长整型 long 　　 8 -922337203685477808～922337203685477807

无符号型 unsigned 　　 4　　 　　　　　 0～4294967295

无符号长整型 unsigned long 8　　 　　　 0～1844744073709551615

单精度实型 float 　　　 4　　 　　　　　3/4E-38～3/4E+38

双精度实型 double　　　 8　　　 　　　　1/7E-308～1/7E+308

3.常量后缀

L或l 长整型

U或u 无符号数

F或f 浮点数

4.常量类型

整数，长整数，无符号数，浮点数，字符，字符串，符号常数，转义字符。

5.数据类型转换

·自动转换

在不同类型数据的混合运算中，由系统自动实现转换， 由少字节类型向多字节类型转换。 不同类型的量相互赋值时也由系统自动进行转换，把赋值号右边的类型转换为左边的类型。

·强制转换

由强制转换运算符完成转换。

6.运算符优先级和结合性

一般而言，单目运算符优先级较高，赋值运算符优先级低。 算术运算符优先级较高，关系和逻辑运算符优先级较低。 多数运算符具有左结合性，单目运算符、三目运算符、赋值

7.表达式

表达式是由运算符连接常量、变量、函数所组成的式子。 每个表达式都有一个值和类型。 表达式求值按运算符的优先级和结合性所规定的顺序进行。

8.数组

1.数组是程序设计中最常用的数据结构。数组可分为数值数组(整数组，实数组)，字符数组以及后面将要介绍的指针数组，结构数组等。

2.数组可以是一维的，二维的或多维的。

3.数组类型说明由类型说明符、数组名、数组长度 (数组元素个数)三部分组成。数组元素又称为下标变量。 数组的类型是指下标变量取值的类型。

4.对数组的赋值可以用数组初始化赋值，输入函数动态赋值和赋值语句赋值三种方法实现。 对数值数组不能用赋值语句整体赋值、输入或输出，而必须用循环语句逐个对数组元素进行操作。


C语言程序设计初步

Ø Ｃ程序的语句

Ø 分支结构程序

Ø switch语句

Ø 循环结构程序

Ø for语句

Ø break语句

Ø continue语句

Ø 小结


C程序的语句

Ｃ程序的执行部分是由语句组成的。 程序的功能也是由执行语句实现的。

C语句可分为以下五类：

1.表达式语句

2.控制语句

3.复合语句

4.空语句

1.表达式语句

表达式语句由表达式加上分号“；”组成。其一般形式为： 表达式； 执行表达式语句就是计算表达式的值。例如： x=y+z；赋值语句y+z； 加法运算语句，但计算结果不能保留，无实际意义i++；自增1语句，i值增1

2.控制语句

控制语句用于控制程序的流程， 以实现程序的各种结构方式。

它们由特定的语句定义符组成。Ｃ语言有九种控制语句。可分成以下三类：

(1) 条件判断语句

    if语句，switch语句

(2) 循环执行语句

    do while语句，while语句，for语句

(3) 转向语句

    break语句，goto语句，continue语句，return语句

3.空语句

只有分号“；”组成的语句称为空语句。 空语句是什么也不执行的语句。在程序中空语句可用来作空循环体。例如 while(getchar()!='\n')； 本语句的功能是，只要从键盘输入的字符不是回车则重新输入。这里的循环体为空语句。

4.赋值语句

赋值语句是由赋值表达式再加上分号构成的表达式语句。 其一般形式为： 变量=表达式； 赋值语句的功能和特点都与赋值表达式相同。它是程序中使用最多的语句之一。在赋值语句的使用中需要注意以下几点：

1.由于在赋值符“=”右边的表达式也可以又是一个赋值表达式，因此，下述形式变量=(变量=表达式)；是成立的，从而形成嵌套的情形。其展开之后的一般形式为：变量=变量=…=表达式；

例如：

a=b=c=d=e=5；按照赋值运算符的右接合性，因此实际上等效于：

e=5；

d=e；

c=d；

b=c；

a=b；

2.注意在变量说明中给变量赋初值和赋值语句的区别。给变量赋初值是变量说明的一部分，赋初值后的变量与其后的其它同类变量之间仍必须用逗号间隔，而赋值语句则必须用分号结尾。

3.在变量说明中，不允许连续给多个变量赋初值。 如下述说明是错误的： int a=b=c=5 必须写为 int a=5,b=5,c=5； 而赋值语句允许连续赋值

4.注意赋值表达式和赋值语句的区别。赋值表达式是一种表达式，它可以出现在任何允许表达式出现的地方，而赋值语句则不能。

下述语句是合法的： if((x=y+5)>0) z=x；语句的功能是，若表达式x=y+5大于0则z=x。下述语句是非法的： if((x=y+5；)>0) z=x； 因为=y+5；是语句，不能出现在表达式中。


分支结构程序

关系运算符和表达式

在程序中经常需要比较两个量的大小关系， 以决定程序下一步的工作。比较两个量的运算符称为关系运算符。 在Ｃ语言中有以下关系运算符：

< 小于

<= 小于或等于

> 大于

>= 大于或等于

== 等于

!= 不等于

关系运算符都是双目运算符，其结合性均为左结合。关系运算符的优先级低于算术运算符，高于赋值运算符。在六个关系运算符中，<,<=,>,>=的优先级相同，高于==和!=，==和!=的优先级相同。

关系表达式

关系表达式的一般形式为： 表达式 关系运算符 表达式 例如：a+b>c-d,x>3/2,'a'+1<c,-i-5*j==k+1；都是合法的关系表达式。由于表达式也可以又是关系表达式。因此也允许出现嵌套的情况，例如：a>(b>c),a!=(c==d)等。关系表达式的值是“真”和“假”，用“1”和“0”表示。

1.逻辑运算符和表达

逻辑运算符Ｃ语言中提供了三种逻辑运算符 && 与运算　|| 或运算　! 非运算 与运算符&&和或运算符||均为双目运算符。具有左结合性。 非

运算符!为单目运算符，具有右结合性。逻辑运算符和其它运算符优先级的关系可表示如下：

按照运算符的优先顺序可以得出：

a>b && c>d等价于(a>b) && (c>d)

!b==c||d<a等价于((!b)==c)||(d<a)

a+b>c && x+y<b等价于((a+b)>c) && ((x+y)<b)

逻辑运算的值

逻辑运算的值也为“真”和“假”两种，用“1”和“0 ”来表示。其求值规则如下：

1.与运算&&参与运算的两个量都为真时，结果才为真，否则为假。例如，5>0 && 4>2,由于5>0为真，4>2也为真，相与的结果也为真。

2.或运算||参与运算的两个量只要有一个为真，结果就为真。两个量都为假时，结果为假。例如：5>0||5>8,由于5>0为真，相或的结果也就为真

3.非运算!参与运算量为真时，结果为假；参与运算量为假时，结果为真。

例如：!(5>0)的结果为假。

虽然Ｃ编译在给出逻辑运算值时，以“1”代表“真”，“0 ”代表“假”。 但反过来在判断一个量是为“真”还是为“假”时，以“0”代表“假”，以非“0”的数值作为“真”。例如：由于5和3均为非“0”因此5&&3的值为“真”，即为1。

又如：5||0的值为“真”，即为1。

逻辑表达式逻辑表达式的一般形式为：表达式 逻辑运算符 表达式 其中的表达式可以又是逻辑表达式，从而组成了嵌套的情形。例如：(a&&b)&&c根据逻辑运算符的左结合性，上式也可写为： a&&b&&c 逻辑表达式的值是式中各种逻辑运算的最后值，以“1”和“0”分别代表“真”和“假”。

2.if语句

用if语句可以构成分支结构。它根据给定的条件进行判断， 以决定执行某个分支程序段。Ｃ语言的if语句有三种基本形式。

1.第一种形式为基本形式 if(表达式) 语句； 其语义是：如果表达式的值为真，则执行其后的语句，否则不执行该语句。

3.第二种形式为if-else形式

if(表达式)

语句1；

else

语句2；

其语义是：如果表达式的值为真，则执行语句1，否则执行语句2 。

输入两个整数，输出其中的大数。改用if-else语句判别a,b的大小，若a大，则输出a，否则输出b。

3.第三种形式为if-else-if形式

前二种形式的if语句一般都用于两个分支的情况。当有多个分支选择时，可采用if-else-if语句，其一般形式为：

if(表达式1)

语句1；

else if(表达式2)

语句2；

else if(表达式3)

语句3；

…

else if(表达式m)

语句m；

else

语句n；

其语义是：依次判断表达式的值，当出现某个值为真时，则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假，则执行语句n 。 然后继续执行后续程序。

在使用if语句中还应注意以下问题

(1) 在三种形式的if语句中，在if关键字之后均为表达式。 该表达式通常是逻辑表达式或关系表达式， 但也可以是其它表达式，如赋值表达式等，甚至也可以是一个变量。例如： if(a=5) 语句；if(b) 语句； 都是允许的。只要表达式的值为非0，即为“真”。如在if(a=5)…；中表达式的值永远为非0，所以其后的语句总是要执行的，当然这种情况在程序中不一定会出现，但在语法上是合法的。

又如，有程序段：

if(a=b)

printf("%d",a)；

else

printf("a=0")；本语句的语义是，把b值赋予a，如为非0则输出该值，否则输出“a=0”字符串。这种用法在程序中是经常出现的。

(2) 在if语句中，条件判断表达式必须用括号括起来，在语句之后必须加分号。

(3) 在if语句的三种形式中，所有的语句应为单个语句，如果要想在满足条件时执行一组(多个)语句，则必须把这一组语句用{} 括起来组成一个复合语句。但要注意的是在}之后不能再加分号。

例如：

if(a>b){

a++；

b++；

}

else{ a=0；

b=10；

}

4.条件运算符和条件表达式

如果在条件语句中，只执行单个的赋值语句时， 常可使用条件表达式来实现。不但使程序简洁，也提高了运行效率。

条件运算符为?和：，它是一个三目运算符，即有三个参与运算的量。由条件运算符组成条件表达式的一般形式为：

表达式1? 表达式2： 表达式3

其求值规则为：如果表达式1的值为真，则以表达式2 的值作为条件表达式的值，否则以表达式2的值作为整个条件表达式的值。 条件表达式通常用于赋值语句之中。

例如条件语句：

if(a>b) max=a；

else max=b；

可用条件表达式写为 max=(a>b)?a:b；执行该语句的语义是：如a>b为真，则把a赋予max，否则把b 赋予max。

使用条件表达式时，还应注意以下几点：

1. 条件运算符的运算优先级低于关系运算符和算术运算符，但高于赋值符。因此 max=(a>b)?a:b可以去掉括号而写为 max=a>b?a:b

2. 条件运算符?和：是一对运算符，不能分开单独使用。

3. 条件运算符的结合方向是自右至左。


Switch语句

Ｃ语言还提供了另一种用于多分支选择的switch语句，其一般形式为：

switch(表达式){

case常量表达式1: 语句1；

case常量表达式2: 语句2；

…

case常量表达式n: 语句n；

default : 语句n+1；

}

其语义是：计算表达式的值。 并逐个与其后的常量表达式值相比较，当表达式的值与某个常量表达式的值相等时，即执行其后的语句，然后不再进行判断，继续执行后面所有case后的语句。 如表达式的值与所有case后的常量表达式均不相同时，则执行default后的语句。

在使用switch语句时还应注意以下几点：

1.在case后的各常量表达式的值不能相同，否则会出现错误。

2.在case后，允许有多个语句，可以不用{}括起来。

3.各case和default子句的先后顺序可以变动，而不会影响程序执行结果。

4.default子句可以省略不用。


循环结构程序

循环结构是程序中一种很重要的结构。其特点是，在给定条件成立时，反复执行某程序段，直到条件不成立为止。 给定的条件称为循环条件，反复执行的程序段称为循环体。Ｃ语言提供了多种循环语句，可以组成各种不同形式的循环结构。

1.while语句

while语句的一般形式为： while(表达式)语句； 其中表达式是循环条件，语句为循环体。

while语句的语义是：计算表达式的值，当值为真(非0)时， 执行循环体语句。

使用while语句应注意以下几点：

1.while语句中的表达式一般是关系表达或逻辑表达式，只要表达式的值为真(非0)即可继续循环。

2.循环体如包括有一个以上的语句，则必须用{}括起来，组成复合语句。

3.应注意循环条件的选择以避免死循环。

2.do-while语句

do-while语句的一般形式为：

do语句；

while(表达式)；

其中语句是循环体，表达式是循环条件。

do-while语句的语义是：

先执行循环体语句一次， 再判别表达式的值，若为真(非0)则继续循环，否则终止循环。

do-while语句和while语句的区别在于do-while是先执行后判断，因此do-while至少要执行一次循环体。而while是先判断后执行，如果条件不满足，则一次循环体语句也不执行。

while语句和do-while语句一般都可以相互改写。

在本例中，循环条件改为--n，否则将多执行一次循环。这是由于先执行后判断而造成的。

对于do-while语句还应注意以下几点：

1.在if语句，while语句中， 表达式后面都不能加分号， 而在 do-while语句的表达式后面则必须加分号。

2.do-while语句也可以组成多重循环，而且也可以和while语句相互嵌套。

3.在do和while之间的循环体由多个语句组成时，也必须用{}括起来组成一个复合语句。

4.do-while和while语句相互替换时，要注意修改循环控制条件。


For语句

for语句是Ｃ语言所提供的功能更强，使用更广泛的一种循环语句。其一般形式为：

for(表达式1；表达式2；表达3)

语句；

表达式1　通常用来给循环变量赋初值，一般是赋值表达式。也允许在for语句外给循环变量赋初值，此时可以省略该表达式。

表达式2　通常是循环条件，一般为关系表达式或逻辑表达式。

表达式3　通常可用来修改循环变量的值，一般是赋值语句。

这三个表达式都可以是逗号表达式， 即每个表达式都可由多个表达式组成。三个表达式都是任选项，都可以省略。

一般形式中的“语句”即为循环体语句。for语句的语义是：

1.首先计算表达式1的值。

2.再计算表达式2的值，若值为真(非0)则执行循环体一次，否则跳出循环。

3.然后再计算表达式3的值，转回第2步重复执行。在整个for循环过程中，表达式1只计算一次，表达式2和表达式，3则可能计算多次。循环体可能多次执行，也可能一次都不执行。

在使用for语句中要注意以下几点

1.for语句中的各表达式都可省略，但分号间隔符不能少。如：for(；表达式；表达式)省去了表达式

<1>for(表达式；；表达式)省去了表达式

<2>for(表达式；表达式；)省去了表达式

<3>for(；；)省去了全部表达式。

2.在循环变量已赋初值时，可省去表达式1，如例3.27即属于这种情形。如省去表达式2或表达式3则将造成无限循环， 这时应在循环体内设法结束循环。

3.循环体可以是空语句。

#include"stdio.h"

void main(){

int n=0；

printf("input a string:\n")；

for(；getchar()!='\n'；n++)；

printf("%d",n)；

}

本例中，省去了for语句的表达式1，表达式3也不是用来修改循环变量，而是用作输入字符的计数。这样， 就把本应在循环体中完成的计数放在表达式中完成了。因此循环体是空语句。应注意的是，空语句后的分号不可少，如缺少此分号，则把后面的printf 语句当成循环体来执行。反过来说，如循环体不为空语句时， 决不能在表达式的括号后加分号， 这样又会认为循环体是空语句而不能反复执行。这些都是编程中常见的错误，要十分注意。


Break语句

break语句只能用在switch 语句或循环语句中， 其作用是跳出switch语句或跳出本层循环，转去执行后面的程序。由于break语句的转移方向是明确的，所以不需要语句标号与之配合。break语句的一般形式为： break； 上面例题中分别在switch语句和for语句中使用了break 语句作为跳转。使用break语句可以使循环语句有多个出口，在一些场合下使编程更加灵活、方便。


Continue语句？

continue语句只能用在循环体中，其一般格式是：

continue；

其语义是：结束本次循环，即不再执行循环体中continue 语句之后的语句，转入下一次循环条件的判断与执行。应注意的是，本语句只结束本层本次的循环，并不跳出循环。


小结

1.从程序执行的流程来看， 程序可分为三种最基本的结构： 顺序结构，分支结构以及循环结构

2.程序中执行部分最基本的单位是语句。Ｃ语言的语句可分为五类：

(1)表达式语句　　 任何表达式末尾加上分号即可构成表达式语句，常用的表达式语句为赋值语句。

(2)函数调用语句　　由函数调用加上分号即组成函数调用语句。

(3)控制语句　　 用于控制程序流程，由专门的语句定义符及所需的表达式组成。主要有条件判断执行语句，循环执行语句，转向语句等。

(4)复合语句　　 由{}把多个语句括起来组成一个语句。复合语句被认为是单条语句，它可出现在所有允许出现语句的地方，如循环体等。

(5)空语句　　 仅由分号组成，无实际功能。

3.关系表达式和逻辑表达式是两种重要的表达式， 主要用于条件执行的判断和循环执行的判断。

4.Ｃ语言提供了多种形式的条件语句以构成分支结构。

(1)if语句主要用于单向选择。

(2)if-else语句主要用于双向选择。

(3)if-else-if语和switch语句用于多向选择。

这几种形式的条件语句一般来说是可以互相替代的。

5.Ｃ语言提供了三种循环语句。

(1)for语句主要用于给定循环变量初值， 步长增量以及循环次数的循环结构。

(2)循环次数及控制条件要在循环过程中才能确定的循环可用 while或do-while语句。

(3)三种循环语句可以相互嵌套组成多重循环。循环之间可以并列但不能交叉。

(4)可用转移语句把流程转出循环体外，但不能从外面转向循环体内。

(5)在循环程序中应避免出现死循环，即应保证循环变量的值在运行过程中可以得到修改，并使循环条件逐步变为假，从而结束循环。

6.Ｃ语言语句小结

名 称　　　　　　　一 般形 式

简单语句　　　　　表达式语句表达式；

空语句 ；

条件语句　　　　　if(表达式)语句；

                  if(表达式)语句1； else语句2；

                 if(表达式1)语句1； else if(表达式2) 语句2…else语句 n；

开关语句 　　　　 switch(表达式){ case常量表达式: 语句…default: 语句； }

循环语句　　　　 while语句

                 while(表达式)语句；

                  for语句 for(表达式1；表达式2；表达式3)语句；

                  break语句 break；

                  continue语句 continue；

                  return 语句 return(表达式)；


函数功能简介

如何启动函数功能块进行程序设计


库函数附录

函数名称 | 函数功能
void CACI( WORD W , BIT B ) | 圆面积的计算【半径为整数】
void RPCI ( WORD W , BIT B ) | 圆周长的计算【半径为整数】
void CRCC( WORD W , BIT B ) | CRC校验生成
void DDO( WORD W , BIT B ) | 输入数据【整数】从大到小排序
void DSL( WORD W , BIT B ) | 输入数据【整数】从小到大排序
void CACF( WORD W , BIT B ) | 圆面积的计算【半径为浮点数】
void RPCF( WORD W , BIT B ) | 圆周长的计算【半径为浮点数】
void PCF( WORD W , BIT B ) | 求幂运算【底数为浮点数】
void NL10( WORD W , BIT B ) | 自然对数【以10为底数】
void NLO( WORD W , BIT B ) | 自然对数【以e为底数】
void ASSH ( WORD W , BIT B ) | 已知三角形的两直角边求斜边
void FAAS( WORD W , BIT B ) | 已知三角形一直角边和斜边求另一直角边
void QEF( WORD W , BIT B ) | 一元二次方程【浮点数】
void DSF32( WORD W , BIT B ) | 多个32位【浮点数】数据求和
void MDPF( WORD W , BIT B ) | 多个数据【浮点数】的乘积
void EIOF( WORD W , BIT B ) | 一元一次方程【浮点数】
void PCI( WORD W , BIT B ) | 求幂运算【底数为整数】
void FAC( WORD W , BIT B ) | 阶乘求法
void ITF( WORD W , BIT B ) | 反三角函数
void QEI( WORD W , BIT B ) | 一元二次方程【整数】
void SUMI16( WORD W , BIT B ) | 多个16位【整数】数据求和
void MULI( WORD W , BIT B ) | 多个数据【整数】的乘积
void EIOI( WORD W , BIT B ) | 一元一次方程【整数】


SamkoonSoar 系统寄存器

系统寄存器
存器名称 | 范围 | 存储单位 | 掉电保持范围
输入线圈X | [0,128) | BOOL | 无
输出线圈Y | [0,128) | BOOL | 无
模拟输入寄存器AI | [0,32) | WORD | 无
模拟输出寄存器AO | [0,32) | WORD | 无
继电器线圈M | [0,8192) | BOOL | [7488, 7504), [7504, 8000)
数据寄存器D | [0,8192) | WORD | [5952, 5968), [5968, 8000)
变址寄存器V | [0,8) | WORD | 无
变址寄存器Z | [0,8) | WORD | 无
系统状态寄存器S | [0,1000) | BOOL | [600, 1000)
计数器CV | [0, 235)低速，[235, 256)高速 | [0, 200)WORD, [200, 256)DWORD | [100, 200) , [220,235)
定时器TV | [0,256) | WORD | 无
计数器开关量C | [0,256) | BOOL | 无
定时器开关量T | [0,256) | BOOL | 无

系统特殊功能寄存器
存器名称 | 功能 | 读写权限
模拟量寄存器AI & AO
AI_0 | 预留 | Read
AI_1 | 预留 | Read
AI_2 | 预留 | Read
AI_3 | 预留 | Read
AI_4 | 预留 | Read
AI_5 | 预留 | Read
AI_6 | 预留 | Read
AI_7 | 预留 | Read
AI_26 | 预留 | Read
AI_27 | 预留 | Read
AI_28(AI_29) | 预留 | Read
AI_30(AI_31) | 预留 | Read
AO_30 | 预留 | Read & Write
AO_31 | 预留 | Read & Write
数据寄存器D
D_5952~D_5967 | PLC系统使用 | Read
D_8060 | X000滤波时间(0~32767ms) | Read & Write
D_8061 | X001滤波时间(0~32767ms ) | Read & Write
D_8062 | X002滤波时间(0~32767ms ) | Read & Write
D_8063 | X003滤波时间(0~32767ms ) | Read & Write
D_8064 | X004滤波时间(0~32767ms ) | Read & Write
D_8065 | X005滤波时间(0~32767ms ) | Read & Write
D_8066 | X006滤波时间(0~32767ms ) | Read & Write
D_8067 | X007滤波时间(0~32767ms ) | Read & Write
D_8068 | X010滤波时间(0~32767ms ) | Read & Write
D_8069 | X011滤波时间(0~32767ms ) | Read & Write
D_8070 | X012滤波时间(0~32767ms ) | Read & Write
D_8071 | X013滤波时间(0~32767ms ) | Read & Write
D_8072 | X014滤波时间(0~32767ms ) | Read & Write
D_8073 | X015滤波时间(0~32767ms ) | Read & Write
D_8074 | X016滤波时间(0~32767ms ) | Read & Write
D_8075 | X017滤波时间(0~32767ms ) | Read & Write
D_8076 | Y000原点回归加减速时间 | Read & Write
D _8077 | Y001原点回归加减速时间 | Read & Write
D_8078 | Y002原点回归加减速时间 | Read & Write
D_8079 | Y003原点回归加减速时间 | Read & Write
D_8092 | Y000绝对，相对定位指令的加减速时间 | Read & Write
D_8093 | Y001绝对，相对定位指令的加减速时间 | Read & Write
D_8094 | Y002绝对，相对定位指令的加减速时间 | Read & Write
D_8095 | Y003绝对，相对定位指令的加减速时间 | Read & Write
D_8108 | Y000出错脉冲段编号（用于多段脉冲） | Read
D_8109 | Y001出错脉冲段编号（用于多段脉冲） | Read
D_8110 | Y002出错脉冲段编号（用于多段脉冲） | Read
D_8111 | Y003出错脉冲段编号（用于多段脉冲） | Read
D_8124 | Y000当前脉冲段（用于多段脉冲） | Read
D_8125 | Y001当前脉冲段（用于多段脉冲） | Read
D_8126 | Y002当前脉冲段（用于多段脉冲） | Read
D_8127 | Y003当前脉冲段（用于多段脉冲） | Read
D_8140(D_8141) | Y000的32位脉冲累积计数 | Read & Write
D_8142(D_8143) | Y001的32位脉冲累积计数 | Read & Write
D_8144(D_8145) | Y002的32位脉冲累积计数 | Read & Write
D_8146(D_8147) | Y003的32位脉冲累积计数 | Read & Write
D_8173 | 中断定时器0设定值，设定值范围1~32767ms | Read & Write
D_8174 | 中断定时器1设定值，设定值范围1~32767ms | Read & Write
D_8175 | 扫描周期（ms） | Read
D_8176 | ERROR状态错误编号 | Read
D_8177 | 越界操作码编号 | Read
线圈寄存器M
M_7488~M_7503 | PLC系统使用 | Read
M_8035~M_8045 | 预留 | Read & Write
M_8051 | 高速计数器C251倍频设置（1—四倍频 0—一倍频） | Read & Write
M_8052 | 高速计数器C252倍频设置（1—四倍频 0—一倍频） | Read & Write
M_8053 | 预留 | Read & Write
M_8054 | 高速计数器C254倍频设置（1—四倍频 0—一倍频） | Read & Write
M_8055 | 预留 | Read & Write
M_8070 | Y000是否忽略错误，继续发送脉冲，默认忽略为0；停止脉冲输出为1 | Read & Write
M_8071 | Y001是否忽略错误，继续发送脉冲，默认忽略为0；停止脉冲输出为1 | Read & Write
M_8072 | Y002是否忽略错误，继续发送脉冲，默认忽略为0；停止脉冲输出为1 | Read & Write
M_8073 | Y003是否忽略错误，继续发送脉冲，默认忽略为0；停止脉冲输出为1 | Read & Write
M_8086 | Y000检查每段用户设置脉冲个数和频率是否正确(用于多段脉冲) | Read
M_8087 | Y001检查每段用户设置脉冲个数和频率是否正确(用于多段脉冲) | Read
M_8088 | Y002检查每段用户设置脉冲个数和频率是否正确(用于多段脉冲) | Read
M_8089 | Y003检查每段用户设置脉冲个数和频率是否正确(用于多段脉冲) | Read
M_8102 | Y000脉冲方向，正方向为1 | Read
M_8103 | Y001脉冲方向，正方向为1 | Read
M_8104 | Y002脉冲方向，正方向为1 | Read
M_8105 | Y003脉冲方向，正方向为1 | Read
M_8118 | Y000脉冲累积计数溢出标记，溢出为1 | Read
M_8119 | Y001脉冲累积计数溢出标记，溢出为1 | Read
M_8120 | Y002脉冲累积计数溢出标记，溢出为1 | Read
M_8121 | Y003脉冲累积计数溢出标记，溢出为1 | Read
M_8134 | Y000脉冲正在输出 | Read
M_8135 | Y001脉冲正在输出 | Read
M_8136 | Y002脉冲正在输出 | Read
M_8137 | Y003脉冲正在输出 | Read
M_8150 | 第一个扫描周期接通，接通一个扫描周期 | Read
M_8151 | 程序运行时闭合 | Read
M_8152 | 程序运行时断开 | Read
M_8153 | RTC电池电压低（ 注:1-ERROR 0-OK ） | Read
M_8154 | DC24V故障（ 注:1-ERROR 0-OK ） | Read
M_8155 | IO配置错误（ 注:1-ERROR 0-OK ） | Read
M_8156 | PLC硬件错误（ 注:1-ERROR 0-OK ） | Read
M_8157 | 输出刷新错误（ 注:1-ERROR 0-OK ） | Read
M_8158 | 10ms时钟脉冲输出（ 注:1-HIGH 0-LOW ） | Read
M_8159 | 100ms时钟脉冲输出（ 注:1-HIGH 0-LOW ） | Read
M_8160 | 1sec时钟脉冲输出（ 注:1-HIGH 0-LOW ） | Read
M_8161 | 1min时钟脉冲输出（ 注:1-HIGH 0-LOW ） | Read
M_8162 | 非锁存区内存全部清除（ 注:1-CLEAR 0-NONE ） | Read & Write
M_8163 | 锁存区内存全部清除（ 注:1-CLEAR 0-NONE ） | Read & Write
M_8164 | 所有输出禁止（ 注:1-DISABLE 0-ENABLE ） | Read & Write
M_8165 | 位移动指令方向指示（ 注:1-LEFT 0-RIGHT ） | Read
M_8166 | 移位指令溢出位（ 注:1-ERROR 0-OK ） | Read
M_8167 | 移位指令零标志（ 注:1-ERROR 0-OK ） | Read
M_8168 | BCD转换错误标记（ 注:1-ERROR 0-OK ） | Read
M_8169 | 运算结果溢出（ 注:1-ERROR 0-OK ） | Read
M_8170 | 运算负结果（ 注:1-ERROR 0-OK ） | Read
M_8171 | 运算结果为零（ 注:1-ERROR 0-OK ） | Read
M_8172 | 除数为零（ 注:1-ERROR 0-OK ） | Read
M_8173 | 偏移地址越界（ 注:1-ERROR 0-OK ） | Read
M_8174 | 错误状态（ 注:1-ERROR 0-OK ） | Read
M_8175 | 运行状态（ 注:1-RUN 0-STOP ） | Read
M_8176 | COM0（232）正在发送标志（以下几个标志位仅用在自由口通信中） | Read
M_8177 | COM1（485）正在发送标志 | Read
M_8178 | COM0（232）正在接收标志 | Read
M_8179 | COM1（485）正在接收标志 | Read
M_8180 | COM0（232）发送完成标志 | Read & Write
M_8181 | COM1（485）发送完成标志 | Read & Write
M_8182 | COM0（232）接收完成标志 | Read & Write
M_8183 | COM1（485）接收完成标志 | Read & Write


通信协议

一、MODBUS简介

FGs系列PLC采用的是MODBUS通信协议。Modbus 协议是应用于控制器上的一种通用语言。通过此协议，控制器相互之间、控制器经由网络和其它设备之间可以通信。通讯采用应答方式，由主机发起请求，从机执行请求并且

应答。PLC最大从站数为127个，设置的范围为1~127。PLC支持广播模式，广播地址为00。

二、接口方式

目前PLC支持MODBUS通信的接口为RS232、RS485以及USB接口。

串口通信默认的数据格式为：9600bps、8位数据位、1位停止位，无校验。波特率的可设置范围是：4800bps、9600bps、19200bps、38400bps、57600bps、115200bps

三、协议格式

协议支持的是MODBUS的RTU模式

从机地址

功能码

数据

CRC高字节

CRC低字节

四、功能码描述

本系列PLC支持的功能码如下：

功能码 | 名称 | 作用 | 支持的寄存器
0x01 | 读取线圈状态 | 取得一组逻辑线圈的当前状态（ON/OFF） | Y、X、M、S、T、C
0x02 | 读取输入状态 | 取得一组开关输入的当前状态（ON/OFF） | X
0x03 | 读取保持寄存器 | 在一个或多个保持寄存器中取得当前的二进制值 | D、TV、CV、CV32、AI、AO
0x04 | 读取输入寄存器 | 在一个或多个输入寄存器中取得当前的二进制值 | D
0x05 | 强置（写）单线圈 | 写一个逻辑线圈的通断状态 | Y、M、S、T、C
0x06 | 预置（写）单寄存器 | 把具体二进值装入一个数据寄存器 | D、TV、CV、CV32、AI、AO
0x08 | 回送诊断校验 | 把诊断校验报文送从机，以对通信处理进行评鉴 | 无
0x0f | 强置（写）多线圈 | 强置（写）一串连续逻辑线圈的通断 | Y、M、S、T、C
0x10 | 预置（写）多寄存器 | 把具体的二进制值装入一串连续的保持寄存器 | D、TV、CV、CV32、AI、AO

五、地址偏移表

寄存器 | 地址范围 | 数据类型 | 读功能码 | 写功能码 | 对应modbus 地址加上偏移量
X | 0~127 | bit | 0x01/0x02 | 0x05 | 0
Y | 0~127 | bit | 0x01 | 0x05/0x0f | 10000
M | 0~8191 | bit | 0x01 | 0x05/0x0f | 30000
T | 0~255 | bit | 0x01 | 0x05/0x0f | 60768
C | 0~255 | bit | 0x01 | 0x05/0x0f | 60512
D | 0~8191 | word | 0x03/0x04 | 0x06/0x10 | 40000
TV | 0~255 | word | 0x03 | 0x06/0x10 | 60256
CV | 0~199 | word | 0x03 | 0x06/0x10 | 60000
CV32 | 200~255 | Dword | 0x03 | 0x06/0x10 | 60000
AI | 0~31 | word | 0x03 | 0x06/0x10 | 20000
AO | 0~31 | word | 0x03 | 0x06/0x10 | 20512


PLC硬件手册

一、硬件参数表

项目 | FGs-64MR-A | FGs-32MR-A | FGs-16MR-A | FGs-64MT-A | FGs-32MT-A | FGs-16MT-A
尺寸(mm) | 216*92*80 | 147.6*92*80 | 109.5*92*80 | 216*92*80 | 147.6*92*80 | 109.5*92*80
重量(g) | 831 | 590 | 465 | 769 | 563 | 464
功耗 | 6.8W | 5.2W | 3.2W | 3.6W | 3W | 2.6W
SINK/SRCE输入接线 | 借由内部共点端子S/S及外部共线的接线来变换
输入信号电压 | 24VDC±10%
输入滤波 | 0~50ms可调
数字量输入 | 32 | 16 | 8 | 32 | 16 | 8
输入信号逻辑0 限值 | X000~X003最大10.6VDC，X004~X037最大12.2VDC | X000~X001最大10.6VDC，X002~X017最大12.2VDC | X000~X001最大10.6VDC，X002~X007最大12.2VDC | X000~X003最大10.6VDC，X004~X037最大12.2VDC | X000~X001最大10.6VDC，X002~X017最大12.2VDC | X000~X001最大10.6VDC，X002~X007最大12.2VDC
输入信号逻辑1限值 | X000~X003最小11.5VDC，X004~X037最小15.6VDC | X000~X001最小11.5VDC，X002~X017最小15.6VDC | X000~X001最小11.5VDC，X002~X007最小15.6VDC | X000~X003最小11.5VDC，X004~X037最小15.6VDC | X000~X001最小11.5VDC，X002~X017最小15.6VDC | X000~X001最小11.5VDC，X002~X007最小15.6VDC
模拟输入 | 无
高速计数 | 2路分别最高150KHz
AB相计数 | 1路最高150KHz
输出类型 | 继电器 |  |  | 晶体管
输出电压 | < 250VAC，30VDC |  |  | 6~30VDC
最大感应负载 | 80VA |  |  | 12W
最大电阻负载 | 1.2A/1点 |  |  | 0.5A/高速分别最高150KHz（Y0/Y1/Y2/Y3）；0.2A/低速200Hz (Y4~Y37)，共点不能超过3A | 0.5A/高速分别最高150KHz（Y0/Y1）；0.2A/低速200Hz (Y2~Y17)，共点不能超过3A | 0.5A/高速分别最高150KHz（Y0/Y1）；0.2A/低速200Hz (Y2~Y7)，共点不能超过3A
数字输出 | 32 | 16 | 8 | 32 | 16 | 8
脉冲输出 | ON/OFF用，不适合作频繁交换用途 |  |  | 4路分别最高150KHz | 2路分别最高150KHz | 2路分别最高150KHz
模拟量输出 | 无
扩展模块 | 8
X寄存器数量 | 128
Y寄存器数量 | 128
电源功率 | 30W
扩展模块负载 | 24VDC，200mA
工作电压（外部供电电压） | AC 100V ~ 240V
隔离保护 | 隔离3600V
容许瞬间断电时间 | 50ms
24V输出 | 隔离
工作环境温度 | 密闭：5℃～40℃，开放：5℃～55℃
保存环境温度 | -25℃~70℃
工作环境湿度 | 5～95%RH
保存环境湿度 | 5～95%RH
使用环境 | 无腐蚀性、可燃性气体，导电性尘埃不严重的地点
抗电磁干扰 | 由电磁干扰电压1000Vp-p、电磁干扰幅度1μS、上升沿触发1ns、周期30-100Hz的电磁干扰模拟器
防震度 | 10-25HZ(XYZ方向 2G/30分钟）
输入软件防抖功能 | 有
输入设备连接错误检测功能 | 有
掉电保存软件防抖功能 | 有
RS232 | 1个 mini232接口 支持下载，监视，串口通信 波特率 4800Bps~115200 Bps
RS485 | 1个 支持串口通信 波特率4800 Bps ~115200 Bps
RJ45 | 无
USB设备口 | 支持下载，在线监视
通讯协议 | 支持FGs 通信协议，Modbus RTU 主站，Modbus RTU从站， 自由协议通信 Modbus主站支持连接128个从站
电磁相容性(EMC) EN61000-6-4:2007+A1：2011 EN61000-6-2:2005 EN61000-3-2:2006+A1：2009+A2：2009 EN61000-3-3:2008 | 辐射噪音测试 传导噪音测试 抗静电能力测试
FCC Part 15 Subpart B(FCC) FCC:ANSI C63.4:2003 | PASS
抗静电 | +/-8KV

二、PLC输出端信号接线示意图

晶体管输出（漏型）连接示例：

继电器输出连接示例：

三、电源及输入端连接方式

DC24V输入的连接示意图（DC电源供电）

DC24V输入的连接示意图（AC电源供电）


创新 专业 引领 共赢

深圳市显控科技股份有限公司

Shenzhen Samkoon Technology Corporation Ltd。

地址：深圳市南山区高新中区深圳软件园一期1栋3楼

Address：ShenZhen Software Park 1st Building 3rd floor,the middle road of

High-tech zone，NanShan district,ShenZhen,China

电话(TEL)：0755—29419028 0755—29419038

0755—29419068 0755—29419098

传真（FAX）：0755-29455559

E-Mail：samkoon@samkoon.com.cn

公司网址：Http://www.samkoon.com.cn


更改PLC状态

单击菜单栏的在线->更改PLC状态命令或者直接单击工具栏上的 [image] 更改PLC状态图标，会打开如图4-1的更改PLC状态对话框：

图4-1更改PLC状态对话框

1、单击“获取PLC运行状态”按钮，可以得到当前连接的PLC状态。

2、“PLC置为RUN”按钮，可以将PLC改为运行状态。

3、“PLC置为STOP ”按钮，可以将PLC改为停止状态。

注意：在设置PLC停止和运行状态的时候请务必确认好相关的安全信息，防止PLC突然停机或开机导致财产损失或人员损伤！


SAMSOAR Developer编辑界面

SAMSOR Developer软件一共分为三大部分构成：工具栏、树形目录、梯形图编辑区域；如图3-1所示：

图3-1


前言

深圳市显控自动化技术有限公司是一家潜心于工业可视触摸控制产品---人机界面核心技术的研发与攻克，专业开发、制造、销售最先进的工控产品的民族高科技企业！经过六年多的沉淀与升华，深圳显控公司厚积薄发，以其强劲的研发创新能力、不基于任何系统、100%完全自主知识产权的核心技术和高性价比的优势深深引领我国及全球相关行业。

由于笔者水平有限，手册中难免有许多不妥与错误之处，诚请读者批评指正。若您需要更进一步的获得更多的技术支持请通过以下方式与我们联系，我们将真诚为您服务。

深圳市显控自动化技术有限公司

Shenzhen Samkoon Automation Technology Co.,Ltd

地址：深圳市宝安区西乡洲石公路恒丰工业城C6栋10楼

Address：10/F,Building C6 Hengfeng Industria1

Town,Xixiang Zhoushi Road,Baoan

District,Shenzhen,China.

电话(Tel)：0755-29419068

传真(Fax)：0755-29455559

E-Mail：szsamkoon@163.com

网址(Web)：Http://www.samkoon.com.cn


SamkoonSoar对计算机的硬件需求

SamkoonSoar硬件最低要求是：

· 最低Pentium 3-800MHz计算机。为有更佳性能，推荐Pentium 4-1GHz以上的计算机。

· 内存在Windows 98系统运行时，最少需要64M以上内存；在Windows 2000系统上运行时，最少需要128M以上的内存；在Windows XP上运行时，最少需要128M以上内存。推荐使用256M以上内存。

· 硬盘空间，安装SamkoonSoar至少需要50M。推荐可用硬盘空间至少在100M以上，如果没有足够的硬盘空间，SamkoonSoar无法安装；

· 显示卡:Windows系统兼容，含有1MB以上的显示内存，可工作于1024*768分辨率以上，32位真彩色；

· 计算机带USB接口；

· 两键鼠标和键盘。

低于以上配置的计算机，SamkoonSoar在计算机上运行有可能无法安装和运行。

推荐配置：

· CPU：使用相当于Intel公司的Pentium 800或以上级别的CPU；

· 内存：256M以上；

· 显卡：Windows系统兼容，含有1MB以上的显示内存，可工作于1024*768分辨率以上，32位真彩色；

硬盘：40G以上。


Redirect Page

Page Loader

If there is a security warning at the top of the page please click it and select "Allow blocked content".

If redirection does not occur click this link:


Contents

get link | sync toc | << | >>
*** No Title Found *** A_INPUT.htm
*** No Title Found *** A_INPUTIMME.htm
*** No Title Found *** ALT.htm
*** No Title Found *** ALTP.htm
*** No Title Found *** Appendix.htm
*** No Title Found *** ASSIST.htm
*** No Title Found *** ASSIST_CML_DW.htm
*** No Title Found *** ASSIST_CML_W.htm
*** No Title Found *** ASSIST_CMP_DW.htm
*** No Title Found *** ASSIST_CMP_F.htm
*** No Title Found *** ASSIST_CMP_W.htm
*** No Title Found *** ASSIST_FACT.htm
*** No Title Found *** ASSIST_FMOV_DW.htm
*** No Title Found *** ASSIST_FMOV_W.htm
*** No Title Found *** ASSIST_LOG.htm
*** No Title Found *** ASSIST_NEG_DW.htm
*** No Title Found *** ASSIST_NEG_W.htm
*** No Title Found *** ASSIST_POW.htm
*** No Title Found *** ASSIST_SMOV.htm
*** No Title Found *** ASSIST_XCH_DW.htm
*** No Title Found *** ASSIST_XCH_F.htm
*** No Title Found *** ASSIST_XCH_W.htm
*** No Title Found *** ASSIST_ZCP_DW.htm
*** No Title Found *** ASSIST_ZCP_F.htm
*** No Title Found *** ASSIST_ZCP_W.htm
*** No Title Found *** B_INPUT.htm
*** No Title Found *** B_INPUTIMME.htm
*** No Title Found *** BasicOperations.htm
*** No Title Found *** BitLogical.htm
*** No Title Found *** C_BranchStructure.htm
*** No Title Found *** C_Break.htm
*** No Title Found *** C_Continue.htm
*** No Title Found *** C_DataType.htm
*** No Title Found *** C_For.htm
*** No Title Found *** C_languageEntry.htm
*** No Title Found *** C_Programming.htm
*** No Title Found *** C_Statement.htm
*** No Title Found *** C_Switch.htm
*** No Title Found *** C_While.htm
*** No Title Found *** ChangePLCstate.htm
*** No Title Found *** CMPOP_EQ.htm
*** No Title Found *** CMPOP_G.htm
*** No Title Found *** CMPOP_GE.htm
*** No Title Found *** CMPOP_L.htm
*** No Title Found *** CMPOP_LE.htm
*** No Title Found *** CMPOP_NE.htm
*** No Title Found *** CommentEditMode.htm
*** No Title Found *** Communication.htm
*** No Title Found *** CompareElem.htm
*** No Title Found *** Contact.htm
*** No Title Found *** CONVERT_BCD2I.htm
*** No Title Found *** CONVERT_DI2I.htm
*** No Title Found *** CONVERT_DI2R.htm
*** No Title Found *** CONVERT_I2BCD.htm
*** No Title Found *** CONVERT_I2DI.htm
*** No Title Found *** CONVERT_ROUND.htm
*** No Title Found *** CONVERT_TRUNC.htm
*** No Title Found *** Counter.htm
*** No Title Found *** COUNTER_TYPE_CTD.htm
*** No Title Found *** COUNTER_TYPE_CTU.htm
*** No Title Found *** DeviceDrivers.htm
*** No Title Found *** EditAndSystemcomponents.htm
*** No Title Found *** EditInterface.htm
*** No Title Found *** Elementmoniter.htm
*** No Title Found *** ElemInit.htm
*** No Title Found *** ElemNoteView.htm
*** No Title Found *** ElemSerchReplce.htm
*** No Title Found *** ElemUsed.htm
*** No Title Found *** F32CALC_ADD.htm
*** No Title Found *** F32CALC_COS.htm
*** No Title Found *** F32CALC_DIV.htm
*** No Title Found *** F32CALC_EXP.htm
*** No Title Found *** F32CALC_LN.htm
*** No Title Found *** F32CALC_MUL.htm
*** No Title Found *** F32CALC_SIN.htm
*** No Title Found *** F32CALC_SORT.htm
*** No Title Found *** F32CALC_SUB.htm
*** No Title Found *** F32CALC_TAN.htm
*** No Title Found *** FEDGE.htm
*** No Title Found *** FloatingPoint.htm
*** No Title Found *** Foreword.htm
-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"'>一、硬件参数表 一、软件的安装

*** No Title Found *** INTCALC_ADD_DI.htm
*** No Title Found *** INTCALC_ADD_I.htm
*** No Title Found *** INTCALC_DEC_DW.htm
*** No Title Found *** INTCALC_DEC_W.htm
*** No Title Found *** INTCALC_DIV.htm
*** No Title Found *** INTCALC_DIV_DI.htm
*** No Title Found *** INTCALC_DIV_I.htm
*** No Title Found *** INTCALC_INC_DW.htm
*** No Title Found *** INTCALC_INC_W.htm
*** No Title Found *** INTCALC_MUL.htm
*** No Title Found *** INTCALC_MUL_DI.htm
*** No Title Found *** INTCALC_MUL_I.htm
*** No Title Found *** INTCALC_SUB_DI.htm
*** No Title Found *** INTCALC_SUB_I.htm
*** No Title Found *** IntegerArithmetic.htm
*** No Title Found *** Interrupt.htm
*** No Title Found *** INTERRUPT_ATCH.htm
*** No Title Found *** INTERRUPT_DISI.htm
*** No Title Found *** INTERRUPT_DTCH.htm
*** No Title Found *** INTERRUPT_ENI.htm
*** No Title Found *** INY.htm
*** No Title Found *** LGCCALC_INV_DW.htm
*** No Title Found *** LGCCALC_INV_W.htm
*** No Title Found *** LGCCALC_WAND_DW.htm
*** No Title Found *** LGCCALC_WAND_W.htm
*** No Title Found *** LGCCALC_WOR_DW.htm
*** No Title Found *** LGCCALC_WOR_W.htm
*** No Title Found *** LGCCALC_WXOR_DW.htm
*** No Title Found *** LGCCALC_WXOR_W.htm
*** No Title Found *** LogicOperation.htm
*** No Title Found *** Macro.htm
*** No Title Found *** MacroIntroduction.htm
*** No Title Found *** MacroRun.htm
*** No Title Found *** MBUS.htm
*** No Title Found *** MEF.htm
*** No Title Found *** Menu.htm
*** No Title Found *** MEP.htm
*** No Title Found *** MonitorMode.htm
n>

在编辑梯形图的

*** No Title Found *** Move.htm
*** No Title Found *** MV_BLKMOV_DW.htm
*** No Title Found *** MV_BLKMOV_W.htm
*** No Title Found *** MV_MOV_DW.htm
*** No Title Found *** MV_MOV_F.htm
*** No Title Found *** MV_MOV_W.htm
*** No Title Found *** Newpro.htm
*** No Title Found *** NewProStep.htm
*** No Title Found *** OCIOL_RST.htm
*** No Title Found *** OCIOL_RSTIMME.htm
*** No Title Found *** OCIOL_SETIMME.htm
*** No Title Found *** OCOIL_IMME.htm
*** No Title Found *** OCOIL_NORMAL.htm
*** No Title Found *** OCOIL_SET.htm
*** No Title Found *** OneDimensionalArray.htm
*** No Title Found *** OperatorExpression.htm
*** No Title Found *** OrderSerch.htm
*** No Title Found *** OrderSys.htm
*** No Title Found *** ParaSettings.htm
*** No Title Found *** PlcCheck.htm
*** No Title Found *** PlcParameterSetting.htm
*** No Title Found *** PlcRead.htm
*** No Title Found *** PLCsoftTitle.htm
*** No Title Found *** PlcWrite.htm
*** No Title Found *** PLSF.htm
*** No Title Found *** PLSNEXT.htm
*** No Title Found *** PLSR.htm
*** No Title Found *** PLSSTOP.htm
*** No Title Found *** PLSY.htm
*** No Title Found *** PrgCtrl.htm
*** No Title Found *** PRGCTRL_CALL.htm
*** No Title Found *** PRGCTRL_CALLM.htm
*** No Title Found *** PRGCTRL_FOR.htm
*** No Title Found *** PRGCTRL_JMP.htm
*** No Title Found *** PRGCTRL_LBL.htm
*** No Title Found *** PRGCTRL_NEXT.htm
*** No Title Found *** PRGCTRL_TEST.htm
*** No Title Found *** ProRun.htm
*** No Title Found *** PulseOutput.htm
*** No Title Found *** PWM.htm
*** No Title Found *** QuickStart.htm
*** No Title Found *** REDGE.htm
*** No Title Found *** RTC.htm
*** No Title Found *** RTC_RDRTC.htm
*** No Title Found *** RTC_SETRTC.htm
*** No Title Found *** Shift.htm
*** No Title Found *** SHIFT_ROLDW.htm
*** No Title Found *** SHIFT_ROLW.htm
*** No Title Found *** SHIFT_RORDW.htm
*** No Title Found *** SHIFT_RORW.htm
*** No Title Found *** SHIFT_SHLB.htm
*** No Title Found *** SHIFT_SHLDW.htm
*** No Title Found *** SHIFT_SHLW.htm
*** No Title Found *** SHIFT_SHRB.htm
*** No Title Found *** SHIFT_SHRDW.htm
*** No Title Found *** SHIFT_SHRW.htm
*** No Title Found *** SoftRequire.htm
*** No Title Found *** Summary.htm
*** No Title Found *** Summary1.htm
*** No Title Found *** Systemcomponents.htm
>一、SAMSOAR Developer硬件最低要求是：

*** No Title Found *** SystemSetting.htm
*** No Title Found *** SystemStay.htm
*** No Title Found *** Term.htm
*** No Title Found *** Timer.htm
*** No Title Found *** TIMER_TOF.htm
*** No Title Found *** TIMER_TON.htm
*** No Title Found *** TIMER_TONR.htm
*** No Title Found *** Toolbar.htm
*** No Title Found *** TransformElem.htm
*** No Title Found *** UnderstandSamkoonSoar.htm
*** No Title Found *** VariableTypes.htm
F32CALC_ADD.files
*** No Title Found *** F32CALC_ADD.files\header.htm
F32CALC_COS.files
*** No Title Found *** F32CALC_COS.files\header.htm
F32CALC_DIV.files
*** No Title Found *** F32CALC_DIV.files\header.htm
F32CALC_EXP.files
*** No Title Found *** F32CALC_EXP.files\header.htm
F32CALC_LN.files
*** No Title Found *** F32CALC_LN.files\header.htm
F32CALC_SIN.files
*** No Title Found *** F32CALC_SIN.files\header.htm
F32CALC_SORT.files
*** No Title Found *** F32CALC_SORT.files\header.htm
F32CALC_TAN.files
*** No Title Found *** F32CALC_TAN.files\header.htm
INTCALC_DEC_DW.files
*** No Title Found *** INTCALC_DEC_DW.files\header.htm
MV_BLKMOV_DW.files
*** No Title Found *** MV_BLKMOV_DW.files\header.htm
MV_BLKMOV_W.files
*** No Title Found *** MV_BLKMOV_W.files\header.htm
MV_MOV_DW.files
*** No Title Found *** MV_MOV_DW.files\header.htm
MV_MOV_F.files
*** No Title Found *** MV_MOV_F.files\header.htm
MV_MOV_W.files
*** No Title Found *** MV_MOV_W.files\header.htm
PlcCheck.files
*** No Title Found *** PlcCheck.files\header.htm
SHIFT_SHLDW.files
*** No Title Found *** SHIFT_SHLDW.files\header.htm


如何启动宏指令功能进行程序设计

本节主要介绍宏指令基本功能，简要说明相关控件功能及如何使用。

进入宏指令设计的方式：

1、右键点击树形框中的 “函数功能块”弹出菜单 [image] ->选择 “添加函数功能块”->弹出如图1-1的编辑界面：

图1-1

或者选择 “添加库函数”->弹出如图1-2的界面：

图1-2

此界面显示的是库函数。不可编辑。然后点击确定进入如图1-3所示的编辑界面：

图1-3

也可以点击 [image] 按钮进入图1-2的界面选择如图1-4所示的库函数：

图1-4

2、若编辑完成，可点击 [image] 按钮进行编译，编译结果如图2-1和图2-2所示：

图2-1

图2-1这样表示程序无错误，编译通过。

图2-2

像图2-2这样表示程序有错误需要检查。

3、点击 [image] 可以将调试信息框隐藏或者显示。如图3-1：

图3-1


SamkoonSoar创建新工程

当工程设计人员需要新建一个工程时，将需要进行此操作。选择文件菜单中的新建命令或者选择工具栏菜单中的新建工程按钮 [image] ，SamkoonSoar将会弹出“新建工程对话框”，可以选择勾上设置工程名，然后选择存储工程的路径，并为该工程取一个名字，选择工程对应的PLC型号。点击确定完成新建工程进入图元编辑窗口，点击取消退出对话框。如图1-1：

图1-1

也可以直接选择好工程对应的PLC型号后点击确定进入图元编辑窗口。如图1-2：

图1-2


PLC参数设置

PLC参数设置主要分为通信参数设置、密码设置、滤波设置、保持区设置、型号修改5个部分，如图1-1所示：

图1-1

1 通信参数设置：包括串口设置，通信协议选择，站号设置和超时时间设置。点击 [image] 会恢复到系统默认值。如图1-2所示：

图1-2

2 密码设置： 包括上载加密，下载加密和监控加密。如图1-3所示：

图1-3

3 滤波设置： 主要包括是否使用滤波和设置滤波时间。如图1-4所示：

图1-4

4 保持区设置： 主要是断电保持区的设置。如图1-5所示：

图1-5

5 型号修改： 包括PLC选择，ＣＰＵ型号选择。如图１-６所示:

图１-６


PLC校验

单击菜单栏的在线->PLC校验命令或者直接单击工具栏上的 [image] PLC校验图标，会打开如图4-1的PLC校验对话框：

图4-1

点击“校验PLC”按钮，若此时上下位的工程不一致的话则会弹出图4-2的对话框：

图4-2

点击“是”按钮，程序将会上载PLC内容与当前工程进行比较，上载成功后会直接切换到指令比较窗口，如图4-3所示：

图4-3


PLC上载

单击菜单栏的在线->PLC读取命令或者直接单击工具栏上的 [image] PLC上载图标，会打开如图4-1的PLC上载对话框：

图4-1PLC上载对话框

1、“连接方式”处 [image] 可以选择使用USB或者COM口进行数据传输

2、“通信参数设置”处 [image] 设置只针对于COM口，可以选中自动检测或者手动配置COM的通信参数

3、“通信测试”按钮 [image] 单击该按钮可以检测是否与PLC连接成功

4、在“选择上载数据” [image] 中可以有选择的上载PLC中的内容，其中：

·选中“程序”，会上载PLC内运行的梯形图数据以及MODBUS指令表格等内容

·选中“注释”，会上载PLC内部的注释，注释不能单独上载，选中注释之后会默认选中程序

·选中“软元件表”,会上载PLC中的软元件初始化信息

·选中“配置信息”，会上载PLC中的配置信息


PLC下载

单击菜单栏的在线->PLC写入命令或者直接单击工具栏上的 [image] PLC下载图标，会打开如图4-1的PLC下载对话框：

图4-1PLC下载对话框

1、“连接方式”处 [image] 可以选择使用USB或者COM口进行数据传输

2、“通信参数设置”处 [image] 设置只针对于COM口，可以选中自动检测或者手动配置COM的通信参数

3、“通信测试”按钮 [image] 单击该按钮可以检测是否与PLC连接成功

4、在“选择下载数据” [image] 中可以将选择的内容下载到PLC中，其中：

·选中“程序”，会下载已经编译好的梯形图数据以及MODBUS指令表格等内容

·选中“注释”，会下载梯形图注释内容，注释不能单独下载，选中注释之后会默认选中下载梯形图程序

·选中“软元件表”,会下载软元件初始化信息

·选中“配置信息”，会下载PLC配置信息，如串口通信波特率等数据以及涉及到的上载下载监控密码、掉电保持区等内容


SamkoonSoar对计算机的软件需求

SamkoonSoar组态软件可以在以下操作系统下运行：

1. 中、英文Microsoft Windows NT Server 4.0（需要安装SP3）或更高版本；

2. 中、英文Microsoft Windows NT Workstation 4.0（需要安装SP3）或更高版本；

3. 中、英文Microsoft Windows 98、Me、2000、 XP（Windows 95推荐安装IE5.0）或更高版本；

4. 中、英文Microsoft Windows VISTA系统 ；

5. 中、英文Microsoft Windows 7系统。

不满足以上版本的操作系统，SamkoonSoar将拒绝安装。

推荐系统：

推荐使用Windows XP SP2版本的操作系统。


SamkoonSoar 系统构成


SamkoonSoar常用术语