原创 LDMicro 单片机做的 PLC 梯形图软件

2009-9-12 01:14 11171 4 9 分类: MCU/ 嵌入式

http://www.ouravr.com/bbs/bbs_upload509835/files_7/armok01149785.rar

LDMicro入门教程https://static.assets-stash.eet-china.com/album/old-resources/2009/4/17/c6472395-011a-49f6-a052-3e903a40fdb2.rar



ldmicro简单的操作屏幕录象https://static.assets-stash.eet-china.com/album/old-resources/2009/9/12/a9646374-85c8-46e2-85ac-2223cfcbd630.rarhttps://static.assets-stash.eet-china.com/album/old-resources/2009/9/12/73587a3a-c440-4ae5-9777-90769d6530f3.rarhttps://static.assets-stash.eet-china.com/album/old-resources/2009/9/12/607919d9-66f5-454b-940d-236f381ff101.rar




V1.9版 https://static.assets-stash.eet-china.com/album/old-resources/2009/9/12/3283a205-2997-4b3d-9fac-0befdccca8a1.rar


1.9源码https://static.assets-stash.eet-china.com/album/old-resources/2009/9/12/8cdbaa9b-60db-4613-83ae-56e811ec4e92.zip  官网 http://www.cq.cx/ladder.pl

  LDMicro是一款AVR/PIC单片机梯形图编译软件,目前支持的单片机如下:



    * PIC16F877

    * PIC16F628

    * PIC16F876 (未测试)

    * PIC16F88 (未测试)

    * PIC16F819 (未测试)

    * ATmega128

    * ATmega64

    * ATmega162 (未测试)

    * ATmega32 (未测试)

    * ATmega16 (未测试)

    * ATmega8 (未测试)


  LDMicro最新版本为1.7,其梯形图格式如下:


   ||          Xa                   Ya          ||

1 ||-------] [--------------( )-------||

   ||                                              ||


  LDMicro能将梯形图直接编译成HEX格式,写入单片机后就成了一个PLC.


  软件启动后的界面如下:







  下面以ATMEGA8单片机,电机启动停止为例,介绍LDMicro的应用.


LDMicro是绿色软件,只有一个文件,双击启动软件.


1.首先设置单片机


1)settings--MCU Parameters--设置PLC扫描周期以及单片机时钟频率


2)settings--Microcontroller--选择单片机


2.画梯形图


  所有元件在Instruction菜单中插入,元件后面的英文或字符代表元件的快捷键,比如常用的Contacts(常开/闭接点)的快捷键是C,Coil(线圈)的快捷键是L.


  点Instruction--Insert Contacts(或按C)在当前位置插入一个接点,移动光标到接点右边,按C插入一个另接点与之串联,移到光标到接点右边,按L插入一个线圈.将光标移到第一个接点的下面,按C插入一个接点与之并联,如下图所示:







3.修改元件名称


  双击第一个接点Xnew,将名字改为0,双击并联的接点Xnew,将名字改为0,同时将Output Pin选中,双击串联的接点Xnew,将名字改为1,同时选中|/| Negated,这样常开点就变成了常闭点,双击线圈Ynew,将名字改为0.见下图:







4.设置单片机引脚


  双击梯形图下面一栏的X0,设置与之对应的单片机引脚,本例中X0对应PB0,X1对应PB1,Y0对应PC0,设好后如下图:







5.保存文件(File--Save--在打开的对话框中输入文件名)


6.编译文件


  点Compile--Compile--出现如下提示表示编译成功.







  将编译好的HEX文件写入单片机即可.


  LDMicro还提供PLC仿真功能,点Simulate--Simulation Mode,再点Simulate--Start Real-Time Simulation即进入仿真状态.


介绍 


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





LDmicro 为一定微片PIC16 和Atmel AVR 产生本机码 


microcontrollers。 通常这些microcontrollers的软件被写 


用编程语言喜欢装配机器,C,或者基本。 一个计划合而为一 


这些语言中,包括一个陈述的目录。 这些语言是 


强有力和好适合的处理器的建筑, 


内部执行一个指示的目录。 





PLCs, 另一方面,经常被在'梯子逻辑里编程序。 ' 单纯 


计划可以看起来象这样: 





| | | | 


| | Xbutton1 Tdon Rchatter            Yred | | 


1 | | -------]/[---------[吨1.000 s ]-+ - ]/[--------------( ) -------| | 


| | | | | 


| | Xbutton2 Tdof | | | 


| | -------]/[---------[TOF 2.000 s ]-+ | | 


| | | | 


| | | | 


| | | | 


| | Rchatter吨Tnew            Rchatter | | 


2 | | -------]/[---------[吨1.000 s ]----[TOF 1.000 s ]---------( ) -------| | 


| | | | 


| | | | 


| | | | 


| | ------[结束 ]---------------------------------------------------------| | 


| | | | 


| | | | 





(吨是一次在变化上的延迟; TOF是一次厌恶的事延迟。 - ][--陈述 


输入是,这象在接替上的接触一样表现类。 


--( ) -- 陈述产量,这象A的线圈一样表现类 


接替。 很多梯子逻辑的好证明书在因特网上可得到 


并且在别处; 仅限于这实施的细节在下面被给.) 





许多差别是明显的: 





*计划被用图表的形式而不是一个原文的目录提出 


陈述。 很多人将最初发现这更容易 


理解。 





*在非常初级,计划电路图,有 


继电器触点(输入)和线圈(输出)。 这直觉对 


有电的电路理论的知识的程序员。 





*梯子逻辑编译器照顾计算的所拿到的 


在哪里。 你不必作品代码确定什么时候产量 


必须被基于在输入或者A方面的一种变化再合算 


记时事件, 并且你不必指定命令在里哪个 


这些计算必须进行; 股票上市公司工具为你做那。 





LDmicro 编辑梯子逻辑到PIC16或者AVR 代码。 如下内容 


处理器被支持: 


*PIC16F877 


*PIC16F628 


*PIC16F876(未受测试) 


*PIC16F88(未受测试) 


*PIC16F819(未受测试) 


*ATmega128 


*ATmega64 


*ATmega162(未受测试) 


*ATmega32(未受测试) 


*ATmega16(未受测试) 


*ATmega8(未受测试) 





支持更多的AVR或者PIC16 片将容易,但是我没有 


测试他们的任何方法。 如果你需要一,尤其那么与我联系和 


我看能帮什么忙。 





使用LDmicro,你能为你的计划画一张梯子图解。 你能 


在你的PC 以实时的方式模拟逻辑。 那么你确信 


因为正确,你分配能钉住那些microcontroller 对 


计划输入和输出。 一旦你已经分配别针,你能 


编辑你的程序的电影或者AVR 代码。 编译器生产是.hex 


你能使用任何PIC/AVR编程输入你的microcontroller的文件 


程序员。 





LDmicro被用于有点类似于非常商业的股票上市公司 


编程系统。 有一些例外和许多事情 


不是在anyways 工业里的标准。 仔细读描述 


每条指示, 即使它看起来熟悉。 这份资料以为 


梯子逻辑和股票上市公司软件的结构的基础知识 


(那些完成周期:读输入,计算,作品输出)。 








另外的目标 


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





产生ANSI C 代码也是可能的。 你能使用有任何的这 


你有一个C 编译器的处理器,但是你对负责 


运行时间提供。 那表明LDmicro 只产生来源 


一功能PlcCycle()。 你负责叫PlcCycle 


每个周期, 并且你负责实现全部I/O 


(读/写数字化输入,等等)功能那些PlcCycle()电话。 看见 


在被产生的更多的细节的来源里的那些意见。 





最后,LDmicro 能为A 产生独立处理器的bytecode 


用于运行梯子逻辑代码的实际上的机器。 我已经提供A 


interpreter/VM的样品实施,在相当便于携带里写 


这个目标将为差不多任何平台工作的C.,象你一样长 


能提供你自己的VM。 这可以对有用应用在哪里你 


希望使用梯子逻辑当时' 语言,写稿' 定制一大 


计划。 为细节在样品翻译内看见那些意见。 








命令行选择 


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





ldmicro.exe被通常运转而没有命令行选择。 那个方法 


你可以对程序做一个快捷方式,或者把它保留成你的 


桌面和在你想要运转它时,双击图象, 以及你 


能从GUI的里面做一切事情。 





如果LDmicro被在命令行上递给单个的文件名 


(例如' ldmicro.exe asd.ld '), 然后LDmicro 将努力打开' asd.ld ', 


如果它存在。 如果' asd.ld '不存在,一个错误被生产。 这 


表明你能把ldmicro.exe与.ld 文件联系起来,它跑 


自动你双击一个.ld 文件。 





如果LDmicro被递给命令行以形式的辩论 


' ldmicro.exe / c src.ld dest.hex ', 然后它努力编辑' src.ld ', 


并且保留生产作为' dest.hex '。 在编辑之后,LDmicro 出口, 


是否编辑成功。 任何消息被打印 


到操纵台。 这方式有用只有当时跑LDmicro从 


命令行。 








基础 


======





如果你运转LDmicro而没有辩论,那么它开始空瓶 


计划。 如果你带着一个梯子计划(xxx.ld)的名字运转LDmicro 


然后在命令行上它将努力在开始装那个计划。 


LDmicro 为计划使用它自己的内部的形式; 不能进口 


来自任何其他工具的逻辑。 





如果你没装一个现有的计划,那么你将被给一个计划 


由于一条空的梯子横木。 你能给它添加一条指示; 例如 


你增加套能与联系(指示->插入联系)命名 


' Xnew '。 ' X '的意思是那些接触将被系到输入钉住 


microcontroller。 你过后能把一个别针归因于它,在选择A之后 


microcontroller和给接触重新命名。 一个名字的第一个信 


表明它是哪种物体。 例如: 





*Xname -- 系到一次输入钉住microcontroller 


*Yname -- 系到生产钉住microcontroller 


*Rname -- ' 内部的接替': 一点用记忆 


*Tname -- 一只定时器; 取决于延迟,厌恶的事延迟,或者易潮温 


*Cname -- 一个柜台,计数完了或者倒数 


*Aname -- 一个整数从一台模数转换器读 


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





选择其余名字,以便它描述物体做什么, 


并且这在计划内独特。 相同的名字总是谈及 


对相同的物体在计划内。 例如,它将是一个错误 


有一次在变化上的延迟(吨)叫' Tdelay ' 和一次厌恶的事延迟(TOF) 


在相同的计划里叫' Tdelay ',每个柜台需要它自己的 


记忆。 另一方面,有一只易潮温的定时器将是正确的 


(RTO)叫' Tdelay ' 和与相关的一条复位指令(调查) 


' Tdelay ',从它起你想要两条指示与合作的那个情况 


相同的定时器。 





易变的名字能由字母,数目组成,并且强调 


( _ ). 一个易变的名字不可从数目开始。 易变的名字是 


探查敏感。 





一般的易变的指示(MOV,增加,EQU,等等)能继续工作 


有任何名字的变量。 这表明他们能访问定时器和 


柜台蓄电池。 这可能有时有用; 例如,你 


能检查是否一只定时器的数字在特别的范围内。 





变量总是16位整数。 这表明他们能去 


从-32768到32767。 变量总被看作签字。 你能 


指定文字为正常的十进位数(0,1234,-56)。 你也能 


通过把性格放进指定ASCII 字符值(' A ' ' z ') 


单个引语。 你能使用符号代码在大多数方面安置那的一ASCII 


你能使用一个十进位数。 





在屏幕的底部你将看见一个全部物体的目录在里 


计划。 这个目录被自动从计划产生; 


不必亲手保持它最新。 大多数物体不 


需要任何构造。 ' Xname ',' Yname ',和' Aname ' 物体一定是 


但是,在microcontroller上分配到一个别针。 首先选择哪个 


microcontroller 你使用(放置->Microcontroller)。 然后分配 


通过在目录上双击他们的你的I/O 别针。 





你能通过插入或者删除指示修改计划。 


光标在计划内展示眨眼表明目前选择 


指示和当今的插入点。 如果那么它没眨眼 


压<选中>或者点击一条指示。 现在你能删除电流 


指示或者你罐头插入物新指示对向右或者向左 


(与串联)或者高于或低于(随着)选择 


指示。 一些行动不被允许。 例如,没有指示 


被允许在一种线圈的右边。 





计划开始按的仅仅一。 你能通过选择增加更多的梯子横木 


插入在逻辑里以前/ 以后按的菜单。 你能得到相同的效应 


通过在一内并联放很多错综复杂的支路按, 


但是是更多晴朗使用按的倍数。 





一旦你已经写一个计划,你能在模拟过程中测试它, 然后 


你能编辑它到目标microcontroller的一个六角形的文件。 








模拟 


==========





在进入模拟方式,选择模拟 -> 模拟方式或者强调 


<Ctrl+M>。 计划被用模拟方式不同放映。 有 


不再一个光标。 提供能量的指示出现明亮 


红; 那不的指示似乎被变成灰色。 把空间障碍紧贴在上 


经营股票上市公司一个循环。 为了连续以实时的方式骑自行车,选择 


模拟 -> 开始实时模拟,或者压<Ctrl+R>。 展示 


计划将被作为计划状态变化以实时的方式更新。 





你能通过双击把输入的状况确定成计划 


在目录内在屏幕的底部,或者通过双击A 他们 


' Xname '联系在计划里的指示。 如果你改变状态 


然后输入别针那种变化将不被反映在上怎样那些计划 


被展示直到股票上市公司循环; 这将自动发生,如果 


你正经营一次实时模拟,你压空间酒吧。 








编辑到本机码 


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





最后那些点产生.hex 文件那你能计划 


进你的microcontroller。 第1 你必须选择分开号码 


microcontroller,在底座下 -> Microcontroller 菜单。 然后你 


必须把一个I/O 别针归因于每' Xname '或者' Yname ' 物体。 做这通过 


在屏幕的底部在目录里双击目标名。 


一次对话将在你能从一个目录中挑选一个未划分的别针的地方突然跳出。 





那么你必须选择你将跑用的周期, 并且你必须 


告诉微将运转在什么钟速度的编译器。 这些 


被确定在底座下 -> MCU 参数 ... 菜单。 在一般的你里 


不应该需要改变周期; 10 ms是最的高质量 


应用。 键入你将使用的水晶的频率 


由于microcontroller(或者陶器的谐振器,等等)和好点击。 





现在你能从你的程序产生代码。 选择编辑 -> 编辑, 


或者编辑 -> 编辑作为 ... 如果你以前已经编辑这个计划了 


并且你想要指定一个不同的输出文件名字。 如果没有 


错误然后LDmicro 将产生一准备的Intel IHEX 文件 


编程输入你的片。 





使用任何编程软件和硬件你必须装六角形 


进microcontroller的文件。 记得确定构造一点儿 


(保险丝)! PIC16 处理器,构造一点儿被归入 


六角形的文件,和大多数编程软件将自动在那里看。 


对AVR 处理器来说你必须亲手确定构造一点儿。 








指示参考 


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





>接触,通常打开         Xname Rname Yname 


----][--------][--------][----





如果调查指示的信号是假的, 然后生产 


信号是假的。 如果调查指示的信号是真实的, 


如果和只要规定的输入别住,然后输出信号是真实的, 


生产别针,或者内部的接替是真实的,否则它是错误的。 这 


指示能检查一个输入别针,一个输出别针的状况, 


或者内部的接替。 








>接触,通常关闭       Xname Rname Yname 


----]/[--------]/[--------]/[----





如果调查指示的信号是假的, 然后生产 


信号是假的。 如果调查指示的信号是真实的, 


如果和只要规定的输入别住,然后输出信号是真实的, 


生产别针,或者内部的接替是错误的,否则它是错误的。 这 


指示能检查一个输入别针,一个输出别针的状况, 


或者内部的接替。 这是一个常开触点的相反。 








>线圈,正常                   Rname Yname 


----( ) -      ----( ) ----





如果调查指示的信号是假的, 然后给 


内部接替或者产量别针弄清楚错误。 如果信号去 


进这条指示是真实的, 然后被给的内部的接替或者生产 


别针被设置真实。 把一个输入变数归因于A没是有意义的 


线圈。 这条指示一定是在它的梯子横木里的rightmost 指示。 








>线圈,否认                  Rname Yname 


----(/)--------(/)----





如果调查指示的信号是真实的, 然后给 


内部接替或者产量别针弄清楚错误。 如果信号去 


进这条指示是假的, 然后,给内部转播或者 


生产别针被设置真实。 分配一次输入没是有意义的 


一种线圈易变。 这是一种正常的线圈的相反。 这 


指示一定是在它的梯子横木里的rightmost 指示。 








>线圈,仅用于确定                 Rname Yname 


----(S)--------(S)----





如果调查指示的信号是真实的, 然后给 


内部的接替或者生产别针被设置真实。 否则内部 


接替或者生产别针国家没被改变。 这条指示只能 


兑换州一既真实又错误的线圈,因此通常 


与一种仅用于重新安放的线圈联合在一起使用。 这条指示必须 


是在它的梯子横木里的rightmost 指示。 








>线圈,仅用于重新安放               Rname Yname 


----(R)--------(R)----





如果调查指示的信号是真实的, 然后给 


内部接替或者产量别针弄清楚错误。 否则 


内部的接替或者生产别针国家没被改变。 这条指示 


指示只能从到错误真实中改变一种线圈的状况, 


因此它被与一种仅用于确定的线圈联合在一起通常使用。 这 


指示一定是在它的梯子横木里的rightmost 指示。 








>取决于延迟Tdon 


-[吨1.000 s ]-





当调查指示的信号从假进行到真实时, 


在变真实之前,输出信号对于1.000 s 保持假。 什么时候 


调查指示的信号从真实进行到错误,生产 


信号立即变假。 定时器重放每当输入 


变错误; 输入必须保持真实连续1000毫秒 


在生产将变真实之前。 延迟是configurable。 





来自用扫描时代的单位的零的' Tname ' 易变的计数完了。 


真实的吨指示产量柜台变量更大 


比或者等于给延迟。 今天可能操作 


例如用一条MOV 指示,在别处相反易变。 








>厌恶的事延迟Tdoff 


-[TOF 1.000 s ]-





当调查指示的信号从真实进行到错误时, 


在变错误之前,输出信号对于1.000 s 保持真实。 什么时候 


调查指示的信号从假进行到真实, 


输出信号立即变真实。 定时器是每重放 


时间输入变错误; 输入必须为1000 保持错误 


在生产将变错误之前,连续的毫秒。 延迟 


是configurable。 





来自用扫描时代的单位的零的' Tname ' 易变的计数完了。 


真实的吨指示产量柜台变量更大 


比或者等于给延迟。 今天可能操作 


例如用一条MOV 指示,在别处相反易变。 








>易潮温的定时器Trto 


-[RTO 1.000 s ]-





这条指示跟踪它的输入真实多久。 如果 


它的输入为至少1.000 s 真实, 然后生产是 


真实。 否则生产是错误的。 输入不必是 


连续1000毫秒真实; 如果输入变真实 


1世纪6年代, 适合3世纪0年代那时错误, 然后1世纪4年代真实, 然后 


生产将变真实。 在生产变真实之后,它将保持真实 


即使在输入变错误之后,只要输入真实 


比1.000 s.长久因此这只定时器必须被手工调节, 


使用复位指令。 





来自用扫描时代的单位的零的' Tname ' 易变的计数完了。 


真实的吨指示产量柜台变量更大 


比或者等于给延迟。 今天可能操作 


例如用一条MOV 指示,在别处相反易变。 








>重新安放Trto Citems 


----{调查 }--------{调查 }----





这条指示调节一只定时器或者一个计数器。 吨和TOF 定时器是 


当他们的输入变错误或者真实时,自动重新安放,因此调查是 


不要求这些定时器。 RTO 定时器和CTU/CTD计数器是 


不自动重新安放,因此他们必须被亲手使用一次调查重新安放 


指示。 当输入是真实的时,计数器或者定时器被调节; 


当输入是错误的时,没有行动被采取。 这条指示必须 


是在它的梯子横木里的rightmost 指示。 








>单独提高 _ 


--[OSR _ /]--





这指示通常错误的产量。 如果指示的输入 


在这次扫描期间是真实的,这在以前的扫描期间错误 


然后生产是真实的。 因此它产生一次脉搏一次扫描 


在每一个提高它的输入信号的边缘上宽。 这条指示是 


你想要离引发事件变大的一个信号的边缘如果有用。 








>单独下降 _ 


--[OSF \ _ ]--





这指示通常错误的产量。 如果指示的输入 


在这次扫描期间是错误的,这在以前的扫描期间真实 


然后生产是真实的。 因此它产生一次脉搏一次扫描 


在每一个下降它的输入信号的边缘上宽。 这条指示是 


你想要离引发事件下降的一个信号的边缘如果有用。 








>短路,断路 


----+ - + -       ----+ + ----





短路的生产状态总等于它的 


输入状态。 一条开路的生产状态总是 


错误。 这些主要对调试有用。 








>掌握控制继电器 


-{掌握RLY }-





因对方未出场,在梯子横木里的每条梯子横木的状态是真实的。 如果一位主人 


控制继电器指示被一种在梯子横木里的条件执行 


错误, 状态适合全部以下的梯子横木变得的在梯子横木的然后 


错误。 这将继续直到下一个主人控制继电器 


指示被达成(不管在梯子横木里的那的状态 


指示)。 因此这些指示必须被成对使用: 


一(或许条件)开始也许残疾的部分, 


以及结束它的一。 








>移动 {destvar:= }{Tret:=      }


-{123 MOV }--{srcvar MOV }-





当对这条指示的输入是真实的时,它确定给 


目的地变量等于规定的来源变量或者 


恒定。 当对这条指示的输入假没有什么时 


发生。 你能用行动指示分配到任何变量; 


这包括定时器和计数器状态变量,那个罐头是 


通过主要' T '或者' C ' 区分。 例如,一条指示 


输入' Tretentive '相当于一条重新安放的(调查)指示 


对于那只定时器来说。 这条指示一定是rightmost 指示 


在它的梯子横木里。 








>算术运算 {增加kay:= }{附属Ccnt:= }


-{' A ' + 10    }--{Ccnt-10 }-





>{MUL目的地:= }{DIV dv:= }


-{变量 * -990 }--{dv /-10000 }-





当对这条指示的输入是真实的时,它确定给 


目的地变量等于规定的表示。 运算数 


可能是两个变量中的任一个(包括定时器和计数器变量) 


或者常量。 在数学上签字,这些指示使用16位。 记得 


那些结果被评价每个循环什么时候那些输入状态 


真实。 如果你 incrementing或者decrementing一易变(即如果 


然后目的地变量也是运算数之一)你 


或许不想要那; 通常你决心使用一单独以便 


只在提高或者下降的输入的边缘之后它被评价 


状态。 界限削去; 8 / 3 = 2 . 这条指示一定是 


在它的梯子横木里的rightmost 指示。 








>比较 [变量 ==][变量> ][1 > = ]


-[var2 ]--[1 ]--[吨 ]-





>[变量/ = ][-4 < ][1 < = ]


-[var2 ]--[vartwo ]--[杯子 ]-





如果对这条指示的输入是假的,那么生产是错误的。 如果 


那些输入然后真实,那些产量真实如果和只要给 


状态是真实的。 这条指示能用来比较(等于, 


大比,大比或者等于,不等于, 


少于,小于或等于)一变量在一变量, 


或者把一个变量比作16位带符号常数。 








>柜台Cname Cname 


--[CTU>= 5 ]----[CTD>= 5 ]--





一个柜台增值(CTU,加起来)或者减量(CTD,数 


沿着)由每上升开出的那些相关数字边缘的被给打电话的输入 


状态(即输入状态通向什么那些梯子横木从错误到 


真实)。 如果柜台,来自柜台的生产状态是正的 


变量伟大比或者等于5,和错误不这样。 


按的生产状态可能是真实的,即使输入状态是 


错误; 它只取决于柜台变量。 你能有CTU 


以及有相同的名字的CTD 指示, 为了增加和 


减量相同的柜台。 调查指示能重新安放一个柜台, 


或者你能关于易变数字进行一般的易变的手术。 








>圆的柜台Cname 


--{CTC 0:7 }--





一个圆的柜台象一个正常的CTU 柜台一样工作, 除了 


在到达它的上限之后,它重新安放它的柜台变量 


回到0。 例如,上面显示的柜台将算0,1, 


2 , 4 , 5 , 6 , 7 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 0 , 2 , .... 这有用在里 


有在易变的' Cname '上的条件语句的结合; 


你能象一种顺序电子乐器一样使用这。 CTC 柜台上班打卡提高 


被按的输入状态状态的边缘。 这条指示必须 


是在它的梯子横木里的rightmost 指示。 








>移位寄存器 {转嫁调整 }


-{reg0.。 3 }-





一个移位寄存器与一套变量有关。 例如, 


这个移位寄存器与变量' reg0 ',' reg1 '有关, 


' reg2 '以及' reg3 '。 对移位寄存器的输入是' reg0 '。 在上 


每边缘给打电话在内状态,那些移位寄存器意愿 


右移。 那表明分配'的那reg3:= reg2 ',' reg2:= 


reg1 '。 并且' reg1:= reg0 '。 ' reg0 '被留下不变。 大的变化 


登记能容易消耗许多记忆。 这条指示必须 


是在它的梯子横木里的rightmost 指示。 








>查找桌子 {目的地:=      }


-{LUT }-





一张查找桌子是一套预订的n价值。 什么时候在梯子横木里 


状态真实,易变的那些整数'目的地'被确定胜任 


在易变符合整数的查找桌子过程中的进入 


' i ' . 索引从零开始,因此' i ' 一定是在0之间和 


(n-1)。 行为这指示不确定如果 


索引是在这范围外边。 这条指示一定是rightmost 


在它的梯子横木里的指示。 








>分段线性的桌子     {yvar:=      }


-{PWL [xvar ]}-





这是接近一个错综复杂的功能的一种好方法或者 


曲线。 如果你试图申请,可能,例如,有用 


一条校准曲线从一台传感器中转变未加工的输出电压 


进更方便的单位。 





以为你试图接近转变的一个功能 


一整数输入变数,x,你的在整数输出变量,y。 


在几个点知道功能; 例如,你可以知道那 





f ( 0 )    =2 


f ( 5 )    =10 


f(10)= 50 


f(100)= 100 





这表示那这点 





(x0,y0)    =( 0 ,    2)


(x1,真棒)    =( 5 , 10 ) 


(x2,y2)    =( 10 , 50 ) 


(x3,y3)    =( 100 , 100 ) 





躺在那条曲线上。 你能把那4个点输入一张桌子 


与piecewise相关线的指示。 piecewise 线 


指示将看xvar的价值,并且确定价值 


yvar。 它将确定在这样的一种方法内的yvar piecewise 线的曲线 


将通过所有点你给它; 例如, 


如果你确定xvar = 10, 然后指示将确定yvar = 50。 





如果你给指示躺在两之间的xvar的价值 


你已经给它点的x的价值, 然后 


指示将确定yvar,因此(xvar,yvar)躺在直上 


线在表格里连结那两个点。 例如,xvar = 


55 给yvar = 75的产量。 (两个点在表格里是 


(10,50)和(100,100)。 55在10 和100,和75之间几乎 


几乎在50 和100之间是,(55,75)依赖于产品那个 


连结那两个点.) 





点必须被同等x在递升秩序里指定。 它 


可能不可能进行要求的数学手术 


一定查找桌子使用16位整数数学; 如果这 


情况, 然后LDmicro 将警告你。 例如,这查桌子 


将生产一个错误: 





(x0,y0)     =( 0 ,    0)


(x1,真棒)     =( 300 , 300 ) 





你能通过犯在点之间的距离在里修理这些错误 


桌子小。 例如,这张桌子相当于那个 


在上面给, 并且它不生产一个错误: 





(x0,y0)     =( 0 ,    0)


(x1,真棒)     =( 150 , 150 ) 


(x2,y2)     =( 300 , 300 ) 





使用超过5 或者6 很少应该是必要的 


点。 增加更多的点使你的代码更大和更慢 


执行。 行为你递给价值' xvar '更大比 


在表格里的最大的x同等物或者少于最小的x 


同等的在表格里是未下定义的。 这指示一定 


在它的梯子横木里的rightmost 指示。 








>模数转换器读            Aname 


--{读ADC }--





LDmicro 产生代码兑一使用能,那些模数转换器建造在方面对 


一定microcontrollers。 如果对这条指示的输入状态 


真实, 然后来自模数转换器的一个单个的样品被获得和 


储存在易变的' Aname '里。 这个变量能后来是 


操作与一起将军易变行动(少于,大比, 


算术,等等)。 把一个别针分配给' Axxx ' 易变在方面 


你将把一个别针分配给一次数字化的输入或者输出的相同的方式, 


通过在屏幕的底部在目录里双击它。 如果 


按的这的输入状态然后是错误的易变的' Aname ' 


被留下不变。 





全部目前配套器件,0伏特输入相当于 


ADC看到0,以及一次等于Vdd的输入(电源电压) 


符合看到1023的ADC。 如果你正使用AVR, 那时 


把AREF和Vdd 连结起来。 你罐头使用算术运算按比例 


后来对更方便的单位的阅读,但是记得你 


正使用整数数学。 通常不全部别针将是可提供的 


供模数转换器使用。 软件将不允许你 


分配非一/D 钉住一模拟输入。 这条指示一定是 


在它的梯子横木里的rightmost 指示。 








>确定PWM工作循环           职责 _ 循环 


-{PWM 32.8 kHz }-





LDmicro 产生能代码使用外围设备建造的那些PWM在方面对 


一定microcontrollers。 如果对这条指示的输入状态 


真实, 然后工作循环 PWM 外围设备调整到 


差价税的价值 _ 循环。 工作循环一定是数目 


在0 和100之间; 0总是在低处符合,并且100 符合 


总是高。 (你擅长如果PWM 外围设备怎样工作, 


然后那表明的通知那LDmicro自动按比例绘制 


工作循环易变从百分之在PWM时钟周期.) 





你能指定目标PWM 频率,用赫兹。 频率那个 


你指定可能不确切做得成,取决于怎样它 


分成microcontroller的时钟脉冲频率。 LDmicro 将 


选择最近的做得成的频率; 如果错误那时是大的 


它将警告你。 更快的速度可以牺牲决定。 





这条指示一定是在它的梯子横木里的rightmost 指示。 


梯子逻辑运行时间消耗一定时器测量循环 


时间。 那表明PWM 只是在microcontrollers上可提供的 


由于至少两只合适定时器。 PWM使用别针CCP2(并非CCP1) 


在PIC16 片和OC2(并非OC1A)上在AVRs上。 








>持久牌子储蓄 _ 变量 


--{坚持 }--





什么时候给打电话在状态的这指示准确,它原因 


易变指定的整数被自动保留成EEPROM。 那 


表明它的价值将坚持,即使当微失败的时候 


能力。 不必明确地把变量节省成EEPROM; 


那将自动发生,无论何时易变的变化。 


变量在有电复置之后被自动从EEPROM 装。 如果 


改变的一个变量经常被弄成持久, 然后 


EEPROM在微方面可能非常迅速用旧,因为只是 


有益于有限的(100 000)作品的数量。 什么时候在梯子横木里 


状态是错误的,没有什么发生。 这指示一定 


在它的梯子横木里的rightmost 指示。 








>UART(连续)收到           变量 


--{UART RECV }--





LDmicro 能产生代码使用在对肯定里建造的UART 


microcontrollers。 在有多UARTs的AVRs上仅UART1(不 


UART0)被支持。 使用底座使波特率成形 -> MCU 


参数。 某些波特率可能不用肯定做得成 


水晶频率; LDmicro 将警告你是否情况是如此。 





如果这条指示的输入状态是假的, 然后没有什么 


发生。 如果输入状态是真实的,那么这条指示试试 


从UART 收到一种单个的性格。 如果没有性格被读 


然后生产状态是错误的。 那么一种性格被读它的 


ASCII 价值被储存用' 变量',并且生产状态是真实的 


对于一个单个的股票上市公司循环来说。 








>UART(连续)送              变量 


--{UART 送 }--





LDmicro 能产生代码使用在对肯定里建造的UARTs 


microcontrollers。 在有多UARTs的AVRS上仅UART1(不 


UART0)被支持。 使用底座使波特率成形 -> MCU 


参数。 某些波特率可能不用肯定做得成 


水晶频率; LDmicro 将警告你是否情况是如此。 





如果这条指示的输入状态是假的, 然后没有什么 


发生。 那么输入状态是真实的指示写的这 


一种单个的性格到UART。 性格的ASCII 价值对 


寄在' 变量被储存以前能'。 生产状态 


如果UART是忙的(目前传送的A,按的是真实的 


性格),和不这样错误。 





记得性格花费一些时间传送。 检查生产 


保证第一个字符的这条指示的状态 


被传送,在努力送第2种性格,或者使用之前 


一只定时器把一次延迟插入在性格之间。 你只必须使 


真实的那些输入状态(努力寄性格)什么时候那些产量 


状态是错误的(UART不忙)。 





在使用这之前,调查被格式化的线指示(下一个) 


指示。 被格式化的线指示易于使用得多, 


并且这几乎当然能做你想要的。 








>在UART上方格式化线                 变量 


-{"压力:\ 3 \ r \ n" }-





LDmicro 能产生代码使用在对肯定里建造的UARTs 


microcontrollers。 在有多UARTs的AVRS上仅UART1(不 


UART0)被支持。 使用底座使波特率成形 -> MCU 


参数。 某些波特率可能不用肯定做得成 


水晶频率; LDmicro 将警告你是否情况是如此。 





去这指示的在那些梯子横木状态通向从错误到 


真实,它开始在连续的港口上方送一根整个线。 如果 


这根线包含特别的顺序' \ 3 ', 然后那个顺序 


将被替换' 变量'的价值,这自动 


变为一根线。 变量将被格式化带 


正好3个字符; 例如,如果' 变量'等于35, 那时 


精确线打印将' 压力: 35 \ r \ n '(注意到额外 


空间)。 如果不是那样而是' 变量'等于1432, 然后行为将 


未下定义,因为1432有超过3 位数字。 那样的话 


改为使用' \ 4 ' 将是必要的。 





如果变量可以是负的, 然后使用' \-3d '(或者' \-4d ' 


改为等等)。 那将引起LDmicro 打印前导空白 


正数和负数的主要负号。 





如果倍数格式化线指示,被立刻提供能量 


如果(或者在另一个完成之前,一个人被提供能量),或者如果这些 


指示被UART TX 指示混合, 然后 


行为是未下定义的。 





使用对产量的这条指示也是可能的一根固定的线, 


没有把整数变量的价值插入进正文那个 


被在连续上方送。 那样的话完全不包括特别 


躲开顺序。 





使用' \\' 为一个文字的反斜杠。 除逃离顺序之外 


为插入一个整数易变,下列的控制 


性格是可提供的: 


*\r -- 回车 


*

 -- newline 


*\f -- formfeed 


*\b -- backspace 


*\xAB -- 有ASCII 的性格估价0xAB(六角形) 





当它是时,这条指示的被响的状态是真实的 


传送数据,其他假。 这指示消耗一 


大数量的计划记忆,因此它应该被节约使用。 


目前的实施没有效率,但是更好的将 


对全部背面结束需要修改。 








关于使用数学的笔记 


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





记得LDmicro 只执行16位整数数学。 那个方法 


你执行的任何计算的最后的结果一定是A 


在-32768 和32767之间的整数。 它也想那为中间 


你的计算的结果全部必须是在那范围内。 





例如,假如你想要计算y = (1 /x)* 1200, 


这里x是在1 和20之间。 然后y调停1200 和60, 


适应16位整数,因此理论上是至少可能对 


进行计算。 有你可以编码这的两种方式: 


你能执行相互, 然后增加: 





| | {DIV温度:= }| | 


| | ---------{1 / x        }----------| | 


| | | | 


| | {MUL y:= }| | 


| | ----------{温度* 1200 }----------| | 


| | | | 





或者你可以直接做划分,用单步: 





| | {DIV y:= }| | 


| | -----------{1200 / x }-----------| | 





数学上,这两个相等; 但是如果你试验他们, 然后你 


将发现第一个给一个y = 0的错误的结果。 那 


是因为易变的'温度' underflows。 例如,x = 3, 


(1 / x)= 0.333, 但是那不是一个整数; 划分操作 


接近这作为温度= 0。 然后y = 临时工* 1200 = 0。 在第二里 


情况对underflow没有中间结果,因此一切工作。 





如果你正用你的数学看问题, 然后检查媒体 


underflow结果(或者溢出,这'裹住'; 例如, 


32767 + 1 = -32768). 可能时,选择那把价值放进的单元 


-100到100的范围。 





你按比例需要被一些变量因素,使用做它一增加 


以及一个界限。 例如,按比例y = 1.8 * x,计算y = (9/5)*x 


(哪个相同,从1.8年起= 9/5)和代码这作为y = ( 9 * x ) / 5 , 


首先执行乘: 





| | {MUL温度:= }| | 


| | ---------{x *9 }----------| | 


| | | | 


| | {DIV y:= }| | 


| | -----------{温度/ 5 }-----------| | 





这去全部x的工作<(32767 / 9),或者x<3640。 对于x的更大的价值来说, 


易变的'温度' 将溢出。 在x上有相似的下限。 








编码风格 


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





我允许多进线端并行输入一条单个的梯子横木。 这表示那 


你能做这: 





| | Xa经常大声说yah的雅皮士 | | 


1 | | -------][--------------( ) -------| | 


| | | | 


| | Xb Yb | | 


| | -------][------+ - ( ) -------| | 


| | | | | 


| | | Yc | | 


| | + - ( ) -------| | 


| | | | 





不是这: 





| | Xa经常大声说yah的雅皮士 | | 


1 | | -------][--------------( ) -------| | 


| | | | 


| | | | 


| | | | 


| | | | 


| | Xb Yb | | 


2 | | -------][--------------( ) -------| | 


| | | | 


| | | | 


| | | | 


| | | | 


| | Xb Yc | | 


3 | | -------][--------------( ) -------| | 


| | | | 





这表明理论上你能写任何计划作为一条巨大梯子横木, 


并且不必使用确实按的倍数。 实际上那 


将一严重想法是,当按变得更复杂时他们变得 


更难编辑而没有删除和重画许多逻辑。 





仍然,将逻辑相关起来作为一间单人房,聚集经常是一种好想法 


按。 这对如果你做单独的梯子横木产生差不多相同的代码, 


但是它显示当你在梯子上看他们时,他们有关 


图解。 





***





通常,用这样的一种方式给代码写那个被认为为无礼貌的行为 


它的生产取决于按的命令。 例如,这条代码 


如果Xa和Xb可能是真实的,不非常好: 





| | Xa {v  := }| | 


1 | | -------][--------{12 MOV }--| | 


| | | | 


| | Xb {v  := }| | 


| | -------][--------{23 MOV }--| | 


| | | | 


| | | | 


| | | | 


| | | | 


| | [v >]Yc | | 


2 | | ------[15]-------------( ) -------| | 


| | | | 





如果在此过程中我能做一条代码,我将毁坏这个规章 


可是,相当更紧密。 例如,这里是我将怎样 


在Xb3:0上转变4 位的二进制的数量成一个整数: 





| | {v  := }| | 


3 | | -----------------------------------{0 MOV }--| | 


| | | | 


| | Xb0 {增加v:= }| | 


| | -------][------------------{v + 1 }-----------| | 


| | | | 


| | Xb1 {增加v:= }| | 


| | -------][------------------{v + 2 }-----------| | 


| | | | 


| | Xb2 {增加v:= }| | 


| | -------][------------------{v + 4 }-----------| | 


| | | | 


| | Xb3 {增加v:= }| | 


| | -------][------------------{v + 8 }-----------| | 


| | | | 





那些MOV 陈述被移到屁股那些梯子横木而不是 


顶, 然后,读什么时候的v的价值在别处在计划内将 


是0。 产量的代码因此取决于的这那些命令在里哪个 


指示被评价。 它将多么麻烦,考虑到 


为了编码这种任何其他方式,我接受那。 








缺陷 


====





LDmicro不产生非常有效率的代码; 执行是慢的,和 


闪光和RAM 浪费。 尽管这,一部中型电影或者AVR 能 


做一家小的股票上市公司能的一切事情,因此这不很多打扰我。 





易变的名字的最大长度被非常限制。 这以便 


他们很好地适合到梯子图解上,因此我没看见一个好解决办法 


对那。 





如果你的计划对于时间,计划记忆或者数据存储器来说太大 


那时你或许将不的你已经选择的设备的限制条件 


得到一个错误。 它将在某处拧紧。 





粗心编程在文件内装/ 救常规或许打它 


要坠毁或者执行任意给的代码的可能一腐败或者存心不良 


.ld 文件。 





请报告另外缺陷或者特征给作者请求。 





由于: 


*马赛洛Solano,为在Win98下报告一个UI 缺陷 


*不仅注意到那RA3:0,瑟奇V. Polubarjev关于 


PIC16F628不工作而且告诉我怎样修理它 


*马克西姆Ibragimov,为报告和诊断主要的问题 


由于直到那时未受测试的ATmega16 和ATmega162 目标 


*报告,比尔Kishonti那些假装者失败的那什么时候 


梯子逻辑程序除以零 


*穆哈默德Tayae,为报告持久的变量被毁坏 


在PIC16F628上 


*大卫·罗思韦尔,为报告几个用户界面缺陷和A 


有"作为正文的出口"功能的问题 








复制,以及免责声明 


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





但是你可以以unmodified 形式重新分配LDmicro 你将 


相象。 你可以不修改LDmicro。 LDmicro的源码不是 


普遍可提供。 商业用途被允许,在限制条件内 


在上面给。 为支持或者提高与我联系。 





这个计划被分配而没有保证,对允许通过的程度 


适用的法律。 不要使用在应用过程中被LDMICRO 产生在里的代码 


软件失效能处境危险导致到人生命或者损坏的 


对财产。 作者没有假装对导致的任何损害负有责任 


从LDMICRO 产生的LDMICRO或者代码的操作中。

PARTNER CONTENT

文章评论5条评论)

登录后参与讨论

用户377235 2013-9-19 13:20

博主是猛猪头一个啊,这种破文章也敢放上来。

用户269609 2012-2-18 21:32

这个文章翻译的,看的晕晕乎乎的,头都大了

用户1531550 2010-7-9 22:07

现改正上述说法,其实是软件正确的,向软件作者请教才知道自己设计错误导致,AVR和PIC都没问题,现在最新是2.2版

用户1531550 2010-5-24 19:16

翻译的这是什么呀?很有意思吗。不过这个软件有问题,节点并联串联是错的,置位复位是错的,ON延时也是错的,但自己仿真没问题,proteus仿真是错的。liuguangfeng@shanghai-fanuc.com.cn

microsys_486665368 2009-6-16 16:10

Freemark: 你好。 我是弘飞。 阅读了你的BLOG文章节LDMicro 单片机做的 PLC 梯形图软件(http://www.ouravr.com/bbs/bbs_upload509835/files_7 /armok01149785.rar),非常感兴趣。前段时间我使用MICROCHIP公司单片机PIC16F727做了一个简易的类PLC的装置,为拓展使用范围,我正使寻找梯形图转换成HEX的方法,在网上SEARCH到了你,给我一些资料好吗,详细一些。 我的联络方法: microsysdeve@hotmail.com
相关推荐阅读
用户816647 2013-04-15 08:43
PIC16F877A I2C 24C02 24C01 模拟端口
  #include <16F877A.h> #device adc=8   #FUSES NOWDT                    //No Watch Do...
用户816647 2011-11-14 10:35
三菱FX系列PLC手册
工控下载 - 首页 http://down.ymmfa.com/?type=fx 资料名称及链接 所需积分 ...
用户816647 2011-06-25 11:25
六个元件取3V---50V
其中你想要多少电压,D3  D4  选用相应的稳压二极管就可以。...
用户816647 2011-06-17 17:11
成功开发EMC扫频仪
扫频范围  2G  ...
用户816647 2011-04-24 22:01
网友的 USB 开发相关资料
PIC USB 相关网站 主要是mcuee网友收集的。 http://forum.microchip.com/tm.aspx?m=123533 PIC USB related web sites 转贴...
用户816647 2011-04-22 10:05
关于 CHM 文件不能打开或打开后没有索引列表的解决方法
总结方法可以尝试 regsvr32 hhctrl.ocx regsvr32 itss.dll regsvr32 itircl.dll      //  这个很重要,是关于全文搜索的...
EE直播间
更多
我要评论
5
4
关闭 站长推荐上一条 /3 下一条