搜档网
当前位置:搜档网 › LDmicro中文用户手册

LDmicro中文用户手册

LDmicro中文用户手册
LDmicro中文用户手册

LDMicro 用户手册引言

============

翻译工具:谷歌

翻译编辑:都市放羊LDmicro产生一定的Microchip P IC16和Atmel AVR本地代码微控制器。通常这些微控制器的软件编写在这样的汇编,C或BASIC编程语言。在一个方案这些语言包括一个语句的列表。这些语言强大和架构的处理器,非常适合在内部执行指令的列表。

PLC,另一方面,往往是在梯形逻辑编程。一个简单的程序可能看起来像这样:

(TON是开启延迟,TOF是一个关断延迟“- ] [ - ”物理输入。这个有点像继电器触点。“- ()-”物理输出,有点像一个继电器线圈。在互联网上提供许多很好的参考梯形逻辑和其他地方执行这项计划的具体细节如下)。

一些差异是显而易见的:

*该方案是图形格式,而不是作为一个文本列表语句。最初很多人会发现这更容易理解。

*在最基本的层面上,程序看起来像电路图,继电器触点(输入)和线圈(输出)。这是直观程序员与电路理论知识。

*梯形逻辑编译器获取计算哪里。您不必编写代码来确定当输出重新计算的基础上在输入改变或计时器事件,和你不指定该命令,这些计算必须考虑的地方; PLC的工具为你做。

LDmicro PIC16或者AVR代码编译梯形逻辑。以下支持处理器:

* PIC16F877

* PIC16F628

* PIC16F876(未经测试)

* PIC16F88(未经测试)

* PIC16F819(未经测试)

* PIC16F887(未经测试)

* PIC16F886(未经测试)

* ATmega128

* ATMEGA64

* ATmega162的(未经测试)

* ATMEGA32(未经测试)

* ATmega16的(未测试)

* ATmega8的(未经测试)

支持更多的AVR或PIC16系列芯片,这将是容易的,但我没有以任何方式对其进行测试。如果你需要一个特殊的,然后与我联系,我会看看我能做些什么。

使用LDmicro,你可以得出你的程序梯形图。您可以您的PC上模拟实时逻辑。然后,当你相信这是正确的,您

器的输出是一个六角文件,您可以使用任何PIC / AVR微控制器程序进入程序员。

LDmicro被设计成有点类似于大多数商业PLC编程系统。也有一些例外,而且很多东西没有标准的行业不管怎么说。请仔细阅读说明每个指令,即使它看起来很熟悉。本文档假定梯形图和PLC软件结构的基本知识(执行周期:读取输入,计算,写输出)。

额外的目标:

==================

它也可以产生ANSI C代码。你可以使用任何处理器,你有一个C编译器,但你负责提供运行时。这意味着,LDmicro只生成源函数PlcCycle()。你是负责调用PlcCycle每个周期的时间,你是负责执行所有的I / O(读/写,数字输入等),PlcCycle()调用的功能。请参阅有关详细信息,生成的源代码的意见。

最后,LDmicro可以生成独立于处理器的一个bytecode虚拟机运行的梯形逻辑代码。我提供了一个口译/ VM,书面相当便携的样本实施这一目标将工作几乎任何平台,只要您可以提供自己的虚拟机。这可能是有用的应用程序,您希望使用梯形逻辑作为一个脚本语言“定制较大方案。在有关详细信息,样品口译,请参阅的意见。

命令行选项:

====================

ldmicro.exe通常是不带任何命令行选项运行。这意味着你可以直接到程序做一个快捷方式,或将其保存到您的台式机和双单击该图标时,你要运行它,然后你可以从GUI内的一切。

如果LDmicro是通过一个单一的文件名在命令行(如`ldmicro.exe asd.ld“),然后LDmicro将尝试打开`asd.ld”如果它存在。如果`asd.ld'不存在,则会产生错误。这意味着,您可以联系在一起。LD文件ldmicro.exe,所以它运行您双击时自动点击。LD文件。

如果LDmicro的形式传递命令行参数`ldmicro.exe / C src.ld dest.hex“,然后尝试编译`src.ld”,并保存为`dest.hex'输出。LDmicro编译后退出,是否编译成功与否。任何消息都印到控制台。这种模式是有用的,仅在运行的LDmicro命令行。

基本知识:

======

如果不带参数运行的LDmicro然后它开始于一个空方案。如果您运行的梯形图程序的名称(xxx.ld)LDmicro在命令行上,然后它会尝试在启动时加载该程序。LDmicro程序使用其自己的内部格式,不能导入从任何其他工具的逻辑。

如果你没有加载一个现有的程序,然后你会得到一个程序一个空的梯级。您可以添加到它的指令;例如你可以添加一组触点(指令- >插入联系)命名`Xnew“。`X“指的接触,将绑在一个输入引脚微控制器。你可以给它分配一个针后,选择后,微控制器和重新命名的接触。名称的第一个字母表明它是什么样的对象。例如:

* XName的- 绑在微控制器的输入引脚

* Yname - 微控制器上的一个输出引脚并列

* RNAME - `内部继电器“:在内存中的位

* Tname - 定时器;开启延迟,关闭延迟,或保持

* CNAME - 一个柜台,无论是向上计数或倒计时

* Aname - 从一个A / D转换器读取一个整数

*名字- 一个通用变量(整数)

选择名称的其余部分,它描述的对象做什么,等,这是计划内的独特。相同的名字总是指在程序的同一个对象。举例来说,将是一个错误有开启延迟(TON)称为`TDELAY'和关断延时(TOF)`TDELAY“在同一程序中,因为每个计数器都需要自己的内存。在另一方面,这将是正确的,有一个保持定时器(RTO)称为`TDELAY“和与复位指令(RES)`TDELAY“,因为它这种情况下,你既要说明工作相同的定时器。

变量名可以由字母,数字和下划线(_)。一个变量的名称不能以数字开头。变量名区分大小写。一般变量指令(MOV,地址,EQU等)可以工作变量与任何名称。这意味着它们可以访问定时器和计数器累加器。这有时可能会非常有用,例如,你检查定时器的计数是在特定的范围。

变量总是16位整数。这意味着,他们可以去从-32768到32767。变量始终被视为签署。您可以正常的十进制数(0,1234,-56)指定文字。您还可以通过将字符指定ASCII字符值('A','Z')单引号。您可以使用ASCII字符代码,在大多数地方你可以使用一个十进制数。

在屏幕的底部,你会看到所有对象的列表该程序。此列表是从程序自动生成;有没有必要保持它由专人。大多数对象不需要任何配置。`XName的','Yname',和`Aname的对象必须是

分配到微控制器上的针,但是。首先选择哪个微控制器使用(设置- >微控制器)。然后分配您的I / O引脚通过双击列表。

您可以通过插入或删除指示修改方案。“在程序中显示的光标闪烁,表明当前选定指令和当前插入点。如果它不闪烁,然后按或点击指令。现在,您可以删除当前指令,或者你可以插入一个新的指令向左或向右

(串联)或高于或低于(并联)选定指令。有些操作是不允许的。例如,没有说明允许线圈的权利。

该计划开始只用一个梯级。您可以通过选择更多的梯级逻辑“菜单中的前/后插入梯级。你可以得到同样的效果平行放置在一个梯级的许多复杂子电路,但它是更清楚地使用多个梯级。

一旦你编写的程序,你可以在模拟测试,然后你可以编译为目标单片机HEX文件。

模拟:

==========

要进入模拟模式,选择“模拟- >模拟模式或按”。该方案是不同的仿真模式。有不再是一个光标。通电显示了光明的说明红色;指示不出现变灰。按空格键运行PLC的一个周期。实时连续周期,选择模拟- >开始实时仿真,或按。显示该方案将实时更新程序状态的变化。

您可以设置输入状态,通过双击程序在屏幕底部的列表,或由他们按两下`XName的“接触指令程序。如果你改变了状态然后输入引脚改变不会反映在程序如何直到PLC周期显示会出现这种情况时自动您正在运行一个实时仿真,或当你按下空格键。

编译为本地代码:

========================

最后一点是生成一个hex文件,你可以计划到你的微控制器。首先,你必须选择的一部分微控制器,在设置- >微控制器菜单。然后,你必须分配一个I / O引脚每个`XName的'或'Yname“对象。这样做所在屏幕底部的列表中双击对象的名称。会弹出一个对话框,在那里你可以从列表中选择一个未分配的引脚。

然后,你必须选择循环时间,你将运行,你必须告诉编译器的微将时钟速度运行。这些正在设置- > MCU参数...菜单。一般来说,你不应该需要改变周期时间; 10毫秒是一个最良好的价值应用。晶体,您将使用的频率类型

与微控制器(或陶瓷谐振器等),并点击确定。

现在你可以从你的程序生成代码。选择编译- >编译,或编译- >编译成...如果你以前编译的这个方案你要指定一个不同的输出文件的名称。如果没有错误然后LDmicro将产生一个英特尔IHEX文件准备就绪到你的芯片编程。

使用任何编程软件和硬件,你要加载的hex文件到微控制器。请记住,设置配置位(保险丝)!PIC16系列处理器,配置位都包含在hex文件,和大多数编程软件会自动寻找。针对AVR处理器,您必须手工设置配置位。

指令参考:

======================

>常开触点【C】:

如果进入指令信号是假的,则输出信号是假的。如果进入指令信号是真实的,然后输出信号是真实的,当且仅当给定的输入引脚,输出引脚或内部继电器是真实的,否则它是假的。这指令可以检查输入引脚的状态,输出引脚,或内部继电器。

>常闭触点【C】:

如果进入指令信号是假的,则输出信号是假的。如果进入指令信号是真实的,然后输出信号是真实的,当且仅当给定的输入引脚,输出引脚或内部继电器是假的,否则它是假的。这指令可以检查输入引脚的状态,输出引脚,或内部继电器。这是一个常开触点的对面。

>线圈,正常【L】:

>开启延迟【O】:

当信号进入指令时真亦假,输出信号保持为1.000小号才去假的。当信号进入指令从false为true,输出信号立即变为true。定时器复位每输入变为false;输入必须保持虚报为1000 连续毫秒输出前将假的。延迟是可配置的。Tname“变量计数扫描时间为单位的零。“TON指令输出时,计数器变量大于或等于给定的延迟。这是可能的操纵计数器变量在其他地方,例如MOV指令。

>保持定时器【T】:

这个指令通常输出虚假的。如果指令输入是真实的,在此扫描和虚假的,它是在以前的扫描然后输出是真实的。因此,它产生一个脉冲,一次扫描其输入信号的每个上升沿宽。此指令有用的,如果你想关闭的一个信号的上升沿触发事件。

>下降沿【\】:

默认情况下,每一个梯级条件的梯级是真实的。如果主控制继电器指令执行梯级条件假的,那么以下所有梯级条件的梯级变为假的。这将继续下去,直到下一个主控继电器指令到达(不论梯级条件的,在指令)。因此,这些指令必须成对使用:

之一(也许是有条件的)开始可能禁用部分,和一个结束。

>移动【M】:

当此指令输入的是真实的,它设置给定的源变量或等于目标变量常数。当此指令输入是假的什么发生。移动指令,可以分配给任何变量;这包括计时器和计数器的状态变量,它可以领先的'T'或'C'的区别。例如,一个指令移动到`Tretentive“0相当于一个复位(RES)指令,该定时器。这个指令必须是最右边的指令在它的梯级。

>算术运算:

当此指令输入的是真实的,它设置目的地变量等于给定的表达。操作数可以是变量(包括定时器和计数器变量)或常量。这些指令使用16位有符号数学。记住评估的结果是每个周期时的输入条件真实的。如果你是递增或递减一个变量(即,如果目标变量也是其中一个操作数),那么您可能不希望出现这种情况,通常你会使用一杆,使它是只计算输入的上升沿或下降沿条件。除法截断; 8 / 3 = 2。这个指令必须最右边的指令在其梯级。

>比较:

如果是假的,那么此指令输入输出是假的。如果输入的是真实的,则输出真当且仅当给定条件为真。此指令可用于比较(等于,大于,大于或等于,不等于,小于,小于或等于)给一个变量变量,或比较变量16位符号常数。

>计数器:

一个计数器递增(职工盟,计数)或递减(CTD,计数下)梯级输入的每一个上升沿计数条件(即梯级输入条件从false真)。从计数器的输出条件为真,如果计数器变量是大于或等于5,否则返回假。“梯级输出条件可能是真实的,即使是输入条件假的;它不仅取决于计数器变量。您可以有职工盟具有相同的名称CTD的指示,以增量和递减计数器。RES指令复位计数器,或者您可以执行count变量一般的变量操作。

一个移位寄存器与一组变量。例如,这个移位寄存器与变量`REG0','REG1“`REG2'和`REG3“。移位寄存器的输入`REG0“。在每个上升沿梯级条件,移位寄存器右移。这意味着它分配`REG3:= REG2',`REG2:=REG1“。和`REG1:= REG0“。`REG0“保持不变。一个大的转变寄存器可以很容易地消耗了大量的内存。此指令必须在其梯级的最右边指令

>查阅表:

这是一个很好的的近似复杂的函数或方法曲线,例如,它可能是有用的,如果你想申请校准曲线转换从一个传感器的原始输出电压到更方便的单位。

假设你是试图近似,转换函数一个整数的输入变量,X,一个整数,输出变量,Y.您知道在几个点的功能,例如,你可能知道,

F(0)= 2

F(5)= 10

F(10)= 50

F(100)= 100

这意味着,在分

(X0,Y0)=(0,2)

(X1,Y1)=(5,10)

(X2,Y2)=(10,50)

(X3,Y3)=(100,100)

趴在该曲线。你可以进入表4分与分段线性指令。分段线性指令将着眼于xvar价值,并设置值yvar。它会以这样的方式,分段线性曲线设置yvar将通过所有的点,你给它,例如,如果你设置xvar = 10,那么指令将设置yvar = 50。

如果你给的xvar的价值,在于两指令你有给定的x值点,则指令将设置yvar(xvar,yvar),以便在直道上在于线连接表中的这两点。例如,xvar =55给出了一个yvar = 75的输出。(表中的两点(10,50)和(100,100)。

点必须指定升序x坐标。它可能无法执行所需的数学运算

某些查找表使用16位的整数运算;如果是这样的情况,然后LDmicro将警告您。例如,查表将产生一个错误:(X0,Y0)=(0,0)

(X1,Y1)=(300,300)

您可以修复这些错误,点与点之间的距离表较小。例如,此表相当于一个上面给出的,它不会产生一个错误:(X0,Y0)=(0,0)

(X1,Y1)=(150,150)

(X2,Y2)=(300,300)

它应该未落必须使用超过五六分。添加更多的积分,使你的代码要慢执行。如果你传递一个值大于`xvar'的行为最大的x坐标,以表或更少比最小的x表中的坐标是不确定的。此指令必须最右边的指令在其梯级。

>的A / D转换器读取:

LDmicro可以生成代码,使用内置的PWM外设某些微控制器。如果这个指令的输入条件是真实的,那么占空比的PWM外设设置为值的变量DUTY_CYCLE。占空比必须是一个数字在0和100; 0对应之间总是低的,和100对应始终居高不下。(如果你是熟悉的PWM外设是如何工作的,然后请注意,这意味着,LDmicro自动缩放占空比可变%,PWM时钟周期。)

您可以指定目标PWM频率,以Hz为单位。频率您指定可能无法完全实现的,这取决于它是如何分为微控制器的时钟频率。LDmicro将选择最接近实现的频率,如果误差较大,则它会警告你。更快的速度可能会牺牲的决议。

此指令必须在其梯级的最右边的指令。梯形逻辑运行时消耗的测量周期的一个定时器时间。这意味着,PWM 是仅微控制器至少有两个合适的定时器。PWM的使用CCP2的引脚(没有CCP1的)PIC16系列芯片和OC2的AVR(OC1A)。

>持久性:

>(UART串行)接收:

LDmicro可以生成代码使用某些内置的UART微控制器。在具有多个UART车牌自动辨认系统仅UART1(不UART0)的支持。配置波特率设置- > MCU参数。某些波特率可能无法与某些实现晶体频率; LDmicro将警告你,如果是这种情况。

如果这个指令的输入条件是假的,再没有什么,发生。如果输入条件为真,则本指令写入单个字符到UART。字符的ASCII值发送必须先前已存储在'VAR'。输出条件梯级是真实的,如果UART是忙(目前转递字符),否则返回假。

请记住,字符需要一些时间来传输。检查输出此指令的条件,以确保第一个字符被传输之前要发送的第二个字符,或使用定时器插入一个字符之间的延迟。你必须只能带来当输出输入条件为真(尝试发送一个字符)条件为假(UART是不是忙)。

调查使用之前格式化字符串指令(下)指令。格式化字符串指令更容易使用,它几乎肯定能够做你想要的。

>格式化字符串超过的UART:

LDmicro可以生成代码使用某些内置的UART微控制器。在具有多个UART车牌自动辨认系统仅UART1(不UART0)的支持。配置波特率设置- > MCU参数。某些波特率可能无法与某些实现晶体频率; LDmicro将警告你,如果是这种情况。

当此指令条件的梯级变为从false真实的,它开始通过串口发送整个字符串。如果字符串中包含的特殊序列'\ 3',那么该序列将取代'VAR'的价值,这是自动转换成字符串。采取的变量将被格式化整整3个字符,例如,如果'VAR'等于35,然后确切的字符串打印将'压力:35 \ R \ N'(注额外空间)。相反,如果'VAR'等于1432,那么行为是不确定的,因为1432已经超过三位数。在这种情况下就必须使用'\ 4',而不是。

如果变量可能是负面的,然后使用'\ - 3D“(或`\ - 4D”等)来代替。这将导致LDmicro打印前导空格正数和负数领先的减号。

如果多个格式化字符串指令一次通电(或如果是另一个完成通电之前),或者如果这些说明混合使用UART发送指令,则行为是不确定的。

它也可以使用此指令输出一个固定的字符串,不插成一个整数变量的值的文本通过串口发送。在这种情况下根本不包括特殊转义序列。

使用一个反斜杠'\ \'。除了转义序列插一个整型变量,以下控制字符可用:

* \ R - 回车

* \ N - 换行符

* \ F - 换页

* \ B - 退格

* \ xAB - 字符与ASCII值0xAB(十六进制)

此指令的梯级条件为真,虽然这是传输数据,否则为假。此指令消耗很大量的程序存储器,所以应谨慎使用。“目前执行的效率不高,但一个更好的需要修改所有的后端。

使用数学的一个注记:

====================

记住LDmicro只执行16位的整数运算。这意味着您执行任何计算的最终结果必须是-32768和32767之间的整数。这也意味着,中间你的计算结果都必须在该范围内。

例如,让我们说,你想要计算Y =(1 / X)* 1200,其中x是1到20之间。然后按Y继续1200和60之间,适用于16位的整数,所以至少在理论上是可能的执行计算。有两种方法,你可能会代码:您可以执行的倒数,然后乘以:

或者你可以直接做师,在一个单一的步骤:

在数学上,这两个是等价的,但如果您尝试,那么你会发现,第一个给出了一个不正确的结果Y = 0。这是因为变量'温度'下溢。例如,当X = 3,(1 / X)= 0.333,但不是一个整数的除法运算,接近这个TEMP = 0。那么Y = TEMP * 1200 = 0。在第二万一有溢,所以没有中间结果一切正常。

如果你看到你的数学问题,然后检查中间结果下溢(或溢出,`环绕“,例如,32767 + 1 = -32768)。在可能的情况下,选择单位,把值的-100到100的范围。

当你需要一些因素的变量规模,做乘法和鸿沟。例如,规模Y = 1.8 * X,计算y =(9 / 5)* X(这是相同,自1.8 = 9 / 5)和代码此为y =(9 * X)/ 5,先执行乘法:

这适用于所有x <(32767 / 9),或X <3640。对x的值越大,把'temp'变量会溢出。有类似的X上的限制

编码风格:

============

我在一个梯级允许多个平行线圈。这意味着你可以做这样的事情:

而不是:

这意味着,在理论上,你可以写任何一个巨大的梯级方案,有没有需要使用多个梯级。在实践中将是一个坏主意,因为作为梯级变得更加复杂,他们成为更加困难,编辑,但不删除并重绘大量的逻辑。

尽管如此,它往往是一个好主意,集团相关的逻辑,作为一个单一的梯级。这会产生几乎相同的代码,如果您做了单独的梯级,但它表明,它们是相关的梯子上,当你看他们图。

在一般情况下,它被认为是差的形式,在这样一种方式,写代码其输出取决于梯级顺序。例如,这段代码不是很好,如果xA和xB可能永远是真实的:

我会打破这个规则,如果我在这样做可以使一段代码显著更加紧凑,虽然。例如,这里是我会怎样转换上Xb3 4位二进制数:0成一个整数:

如果MOV语句被转移到梯级的底部,而不是顶部,然后V值时,读取程序为0。因此,该代码的输出取决于顺序评估说明。鉴于这将是多么繁琐代码任何其他的方式,我接受。

错误:

====

LDmicro不产生非常高效的代码,它是缓慢的执行,并闪存和RAM浪费。尽管如此,一个中等规模的PIC或AVR尽一切的小型PLC,所以这不打扰我非常。

变量名的最大长度是非常有限的。这是为了让他们很好地适应到梯形图,所以我没有看到一个很好的解决方案这一点。

如果你的程序是太大的时间,程序存储器或数据存储器。设备的约束,你有选择,然后你可能不会得到一个错误。它只会搞砸了某处。

粗心的编程文件中载入/保存例程可能使得可能崩溃或执行任意代码由于舞弊或恶意。LD文件。

请报告作者额外的错误或功能要求。

感谢:

*马塞洛索拉诺,一个Win98下的UI错误报告

*塞尔诉Polubarjev,不仅注意,RA3:0上PIC16F628没有工作,但也告诉我如何解决它

*马克西姆易卜拉欣莫夫,报告和诊断的主要问题与钱柜,然后未经检验的ATmega16的和ATmega162的目标

*条例草案Kishonti报告,模拟器坠毁时梯形逻辑程序除以零

*穆罕默德T ayae,报告被打破,持久变量在PIC16F628

*大卫罗思韦尔,和几个用户界面错误报告导出为文本“功能”的问题

复制,及免责声明:

=======================

不使用代码生成的应用了软件按LDMICRO故障可能导致危险的人的生命或财产损害。作者假设任何从操作所造成的损害不承担任何责任,LDMICRO LDMICRO或代码生成。

这是一个免费软件:您可以重新分配和/或修改它,GNU通用公共许可证的条款下,由出版自由软件基金会,无论是牌照的第3版,或(在您的选择)任何随后的版本。

请参阅GNU通用公共许可证了解更多详情。

您应该已经收到的GNU通用公共许可证的副本沿这一计划。如果没有看到。乔纳森Westhues

赖斯韦克- 2004年12月

滑铁卢开- 6月,2005年7月

马萨诸塞州剑桥- 9月,2005年12月

2006年二月,三月

2007年2月

华盛顿州西雅图- 2009年2月

邮箱:用户jwesthues,主机cq.cx

相关主题