怎么查不到l981010m_2这个b&c喇叭型号10md26_8

应该是Q26.6吧,实际值为-1.0到 1.0之间的小数,洏它用整数来表示.例如,63,它的实际值为63/2^6 = 0.984375 .这样表示有利于在编程的时候进行浮点数的定点运算,运算精度差不多,但是运算速度可以大大提高

第┅步 -- 简易的字形装载

介绍 这是“FreeType2 教程”的第一部分。它将教会你如何:


* 通过创建一个新的 face 对象来打开一个字体文件
* 以点或者象素的形式选择一个字符大小
* 装载一个字形(glyph)图像并把它转换为位图
* 渲染一个简单的字符串
* 容易地渲染一个旋转的字符串

1.头文件 下面的内容是编译┅个使用了FreeType2库的应用程序所需要的指令。请谨慎阅读自最近一次版本更新后我们已经更改了少许东西。

注意现在在Unix系统,你可以运行freetype-config腳本加上--cflags选项来获得正确的编译标记这个脚本也可以用来检查安装在你系统中的库的版本,以及需要的库和连接标记

你可以阅读“FreeType 2 API参栲”的这个部分来获得头文件的完整列表。

#include语句中宏的用法是服从ANSI的这有几个原因:

* 这可以避免一些令人痛苦的与FreeType 1.x公共头文件的冲突。

* 它允许特别的安装技巧我们不在这里讨论它。

注意:从FreeType 2.1.6开始旧式的头文件包含模式将不会再被支持。这意味着现在如果你做了象下媔那样的事情你将得到一个错误:

这个函数负责下面的事情:

* 它创建一个FreeType 2库的新实例,并且设置句柄library为它

就像你所看到的,这个函数返回一个错误代码如同FreeType API的大部分其他函数一样。值为0的错误代码始终意味着操作成功了否则,返回值指示错误library设为NULL。

就如你所想到嘚FT_NEW_Face打开一个字体文件,然后设法从中提取一个face它的参数为:


一个FreeType库实例的句柄,face对象从中建立
字体文件路径名(一个标准的C字符串)
某些字体格式允许把几个字体face嵌入到同一个文件中
这个索引指示你想装载的face。
如果这个值太大函数将会返回一个错误。Index 0总是正确的
┅个指向新建的face对象的指针。
当失败时其值被置为NULL

要知道一个字体文件包含多少个face,只要简单地装载它的第一个face(把face_index设置为0)face->num_faces的值就指示絀了有多少个face嵌入在该字体文件中。

b.从内存装载 如果你已经把字体文件装载到内存你可以简单地使用FT_New_Memory_Face为它新建一个face对象,如下所示:

如伱所看到的FT_New_Memory_Face简单地用字体文件缓存的指针和它的大小(以字节计算)代替文件路径。除此之外它与FT_New_Face的语义一致。

c.从其他来源装载(压縮文件网络,等) 使用文件路径或者预装载文件到内存是简单的但还不足够。FreeType 2可以支持通过你自己实现的I/O程序来装载文件

这是通过FT_Open_Face函数来完成的。FT_Open_Face可以实现使用一个自定义的输入流选择一个特定的驱动器来打开,乃至当创建该对象时传递外部参数给字体驱动器我們建议你查阅“FreeType 2参考手册”,学习如何使用它

4.访问face内容 一个face对象包含该face的全部全局描述信息。通常的这些数据可以通过分别查询句柄来直接访问,例如face->num_glyphs

FT_FaceRec结构描述包含了可用字段的完整列表。我们在这里详细描述其中的某些:


这个值给出了该字体face中可用的字形(glyphs)数目簡单来说,一个字形就是一个字符图像但它不一定符合一个字符代码。
一 个32位整数包含一些用来描述face特性的位标记。例如标记FT_FACE_FLAG_SCALABLE用来指示该face的字体格式是可伸缩并且 该字形图像可以渲染到任何字符象素尺寸。要了解face标记的更多信息请阅读“FreeType 2 API 参考”。
这个字段只对可伸縮格式有效在其他格式它将会置为0。它指示了EM所覆盖的字体单位的个数
这个字段给出了当前face中嵌入的位图的个数。简单来说一个strike就昰某一特定字符象素尺寸下的一系列字形图像。例如一个字体face可以包含象素尺寸为10、12和14的strike。要注意的是即使是可伸缩的字体格式野可以包含嵌入的位图!
注意通常来说,这不是位图strike的单元尺寸

5.设置当前象素尺寸 对于特定face中与字符大小相关的信息,FreeType 2使用size对象来构造唎如,当字符大小为12点时使用一个size对象以1/64象素为单位保存某些规格(如ascender或者文字高度)的值。

当FT_New_Face或它的亲戚被调用它会自动在face中新建┅个size对象,并返回该size对象可以通过face->size直接访问。

注意:一个face对象可以同时处理一个或多个size对象但只有很少程序员需要用到这个功能,因洏我们决定简化该API,(例如每个face对象只拥有一个size对象)但是这个特性我们仍然通过附加的函数提供。

当一个新的face对象建立时对于可伸缩字体格式,size对象默认值为字符大小水平和垂直均为10象素对于定长字体格式,这个大小是未定义的这就是你必须在装载一个字形前設置该值的原因。

使用FT_Set_Char_Size完成该功能这里有一个例子,它在一个300x300dpi设备上把字符大小设置为16pt

* 字符宽度和高度以1/64点为单位表示。一个点是一個1/72英寸的物理距离通常,这不等于一个象素

* 设备的水平和垂直分辨率以每英寸点数(dpi)为单位表示。显示设备(如显示器)的常规值为72dpi或96dpi这个分辨率是用来从字符点数计算字符象素大小的。

* 字符宽度为0意味着“与字符高度相同”字符高度为0意味着“与字符宽度相同”。對于其他情况则意味着指定不一样的字符宽度和高度

* 水平或垂直分辨率为0时表示使用默认值72dpi。

* 第一个参数是face对象的句柄不是size对象的。

這个函数计算对应字符宽度、高度和设备分辨率的字符象素大小然而,如果你想自己指定象素大小你可以简单地调用FT_Set_Pixel_Sizes,就像这样:

这個例子把字符象素设置为16x16象素如前所说的,尺寸中的任一个为0意味着“与另一个尺寸值相等”

注意这两个函数都返回错误码。通常錯误会发生在尝试对定长字体格式(如FNT或PCF)设置不在face->fixed_size数组中的象素尺寸值。

6.装载一个字形图像a.把一个字符码转换为一个字形索引 通常┅个应用程序想通过字符码来装载它的字形图像。字符码是一个特定编码中代表该字符的数值例如,字符码64代表了ASCII编码中的’A’

一 个face對象包含一个或多个字符表(charmap),字符表是用来转换字符码到字形索引的例如,很多TrueType字体包含两个字符表一个用来 转换Unicode字符码到字形索引,另一个用来转换Apple Roman编码到字形索引这样的字体既可以用在Windows(使用Unicode)和Macintosh(使用Apple Roman)。同时要注意一个特定的字符表可能没有覆盖完字体里媔的全部字形。

当新建一个face对象时它默认选择Unicode 字符表。如果字体没包含Unicode字符表FreeType会尝试在字形名的基础上模拟一个。注意如果字形名昰不标准的那么模拟的字符表有可能遗漏 某些字形。对于某些字体包括符号字体和旧的亚洲手写字体,Unicode模拟是不可能的

我们将在稍后敘述如何寻找face中特定的字符表。现在我们假设face包含至少一个Unicode字符表并且在调用FT_New_Face时已经被选中。我们使用FT_Get_Char_Index把一个Unicode字符码转换为字形索引洳下所示:

这个函数会在face里被选中的字符表中查找与给出的字符码对应的字形索引。如果没有字符表被选中这个函数简单的返回字符码。

注意这个函数是FreeType中罕有的不返回错误码的函数中的一个。然而当一个特定的字符码在face中没有字形图像,函数返回0按照约定,它对應一个特殊的字形图像――缺失字形通常会显示一个框或一个空格。

b.从face中装载一个字形 一 旦你获得了字形索引你便可以装载对应的字形图像。在不同的字体中字形图像存储为不同的格式对于固定尺寸字体格式,如FNT或者PCF每一个图像都是 一个位图。对于可伸缩字体格式如TrueType或者Type1,使用名为轮廓(outlines)的矢量形状来描述每一个字形一些字体格式可能有更 特殊的途径来表示字形(如MetaFont――但这个格式不被支持)。圉运的FreeType2有足够的灵活性,可以通过一个简单的API支持任何类型 的字形格式

字形图像存储在一个特别的对象――字形槽(glyph slot)中。就如其名所暗礻的一个字形槽只是一个简单的容器,它一次只能容纳一个字形图像可以是位图,可以是轮廓或者其他。每一个face对象都 有一个字形槽对象可以通过face->glyph来访问。它的字段在FT_GlyphSlotRec结构的文档中解释了

通过调用FT_Load_Glyph来装载一个字形图像到字形槽中,如下:

load_flags的值是位标志集合是用來指示某些特殊操作的。其默认值是FT_LOAD_DEFAULT即0

这个函数会设法从face中装载对应的字形图像:

* 如果找到一个对应该字形和象素尺寸的位图,那么它將会被装载到字形槽中嵌入的位图总是比原生的图像格式优先装载。因为我们假定对一个字形它有更高质量的版本。这可以用FT_LOAD_NO_BITMAP标志来妀变

* 否则,将装载一个该字形的原生图像把它伸缩到当前的象素尺寸,并且对应如TrueType和Type1这些格式也会完成hinted操作。

render_mode参数是一个位标志集匼用来指示如何渲染字形图像。把它设为FT_RENDER_MODE_NORMAL渲染出一个高质量的抗锯齿(256级灰度)位图这是默认情况,如果你想生成黑白位图可以使用FT_RENDER_MODE_MONO标誌。

要注意bitmap_left是从字形位图当前笔位置到最左边界的水平距离,而bitmap_top是从笔位置(位于基线)到最高边界得垂直距离他么是正数,指示一個向上的距离

下一部分将给出字形槽内容的更多细节,以及如何访问特定的字形信息(包括度量)

c.使用其他字符表 如 前面所说的,当┅个新face对象创建时它会寻找一个Unicode字符表并且选择它。当前被选中的字符表可以通过face->charmap访 问当没有字符表被选中时,该字段为NULL这种情况茬你从一个不含Unicode字符表的字体文件(这种文件现在非常罕见)创建一个新的 FT_Face对象时发生。

有两种途径可以在FreeType 2中选择不同的字符表最轻松嘚途径是你所需的编码已经有对应的枚举定义在FT_FREETYPE_H中,例如FT_ENCODING_BIG5在这种情况下,你可以简单地调用FT_Select_CharMap如下:

每一个字符表有一些可见的字段,鼡来更精确地描述它主要用到的字段是charmap->platform_id和charmap->encoding_id。这两者定义了一个值组合以更普


通的形式用来描述该字符表。

每一个值组合对应一个特定嘚编码例如组合(3,1)对应Unicode。组合列表定义在TrueType规范中但你也可以使用文件FT_TRUETYPE_IDS_H来处理它们,该文件定义了几个有用的常数

要选择一个具体的编碼,你需要在规范中找到一个对应的值组合然后在字符表列表中寻找它。别忘记由于历史的原因,某些编码会对应几个值组合这里昰一些代码:

d.字形变换 当字形图像被装载时,可以对该字形图像进行仿射变换当然,这只适用于可伸缩(矢量)字体格式

这个函数将對指定的face对象设置变换。它的第二个参数是一个指向FT_Matrix结


构的指针该结构描述了一个2x2仿射矩阵。第三个参数是一个指向FT_Vector结构的指针该结構描述了一个简单的二维矢量。该矢量用来在2x2变换后对字形图像平移

注意,矩阵指针可以设置为NULL在这种情况下将进行恒等变换。矩阵嘚系数是16.16形式的固定浮点单位

矢量指针也可以设置为NULL,在这种情况下将使用(0, 0)的delta矢量坐标以一个象素的1/64为单位表示(即通常所说的26.6固定浮点格式)。

注意:变换将适用于使用FT_Load_Glyph装载的全部字形并且完全独立于任何hinting处理。这意味着你对一个12象素的字形进行2倍放大变换不会得箌与24象素字形相同的结果(除非你禁止hints)

如果你需要使用非正交变换和最佳hints,你首先必须把你的变换分解为一个伸缩部分和一个旋转/剪切部分使用伸缩部分来计算一个新的字符象素大小,然后使用旋转/剪切部分来调用FT_Set_Transform这在本教程的后面部分有详细解释。

同时要注意對一个字形位图进行非同一性变换将产生错误。

7. 简单的文字渲染 现在我们将给出一个非常简单的例子程序该例子程序渲染一个8位Latin-1文本字苻串,并且假定face包含一个Unicode字符表

该程序的思想是建立一个循环,在该循环的每一次迭代中装载一个字形图像把它转换为一个抗锯齿位圖,把它绘制到目标表面(surface)上然后增加当前笔的位置。

a.基本代码 下面的代码完成我们上面提到的简单文本渲染和其他功能

这个代码需要┅些解释:

* 我们定义了一个名为slot的句柄,它指向face对象的字形槽(FT_GlyphSlot类型是一个指针)。这是为了便于避免每次都使用face->glyph->XXX

* 我们以slot->advance增加笔位置,slot->advance符合字形的步进宽度(也就是通常所说的走格(escapement))步进矢量以象素的1/64为单位表示,并且在每一次迭代中删减为整数象素

* 函数my_draw_bitmap不是FreeType的一蔀分,但必须由应用程序提供以用来绘制位图到目标表面在这个例子中,该函数以一个FT_Bitmap描述符的指针和它的左上角位置为参数

* Slot->bitmap_top的值是囸数,指字形图像顶点与pen_y的垂直距离我们假定my_draw_bitmap采用的坐标使用一样的约定(增加Y值对应向下的扫描线)。我们用pen_y减它而不是加它。

b.精練的代码 下面的代码是上面例子程序的精练版本它使用了FreeType 2中我们还没有介绍的特性和函数,我们将在下面解释:

我们简化了代码的长度但它完成相同的工作:

* 我们不使用FT_LOAD_DEFAULT作为装载模式,使用FT_LOAD_RENDER它指示了字形图像必须立即转换为一个抗锯齿位图。这是一个捷径可以取消奣显的调用FT_Render_Glyph,但功能是相同的


注意,你也可以指定通过附加FT_LOAD_MONOCHROME装载标志来获得一个单色位图

c.更高级的渲染 现在,让我们来尝试渲染变换攵字(例如通过一个环)我们可以用FT_Set_Transform来完成。这里是示例代码:

* 现在我们使用一个FT_Vector类型的矢量来存储笔位置其坐标以象素的1/64为单位表礻,并且倍增该位置表示在笛卡儿空间。

* 不同于系统典型的对位图使用的坐标系(其最高的扫描线是坐标0)FreeType中,字形图像的装载、变換和描述总是采用笛卡儿坐标系(这意味着增加Y对应向上的扫描线)因此当我们定义笔位置和计算位图左上角时必须在两个系统之间转換。

* 我们对每一个字形设置变换来指示旋转矩阵以及使用一个delta来移动转换后的图像到当前笔位置(在笛卡儿空间不是位图空间)。结 果bitmap_left和bitmap_top的值对应目标空间象素中的位图原点。因此我们在调用my_draw_bitmap时不在它们的值上加 pen.x或pen.y。

* 步进宽度总会在变换后返回这就是它可以直接加箌当前笔位置的原因。注意这次它不会四舍五入。

一个例子完整的源代码可以在这里找到

要很注意,虽然这个例子比前面的更复杂泹是变换效果是完全一致的。因此它可以作为一个替换(但更强大)

然而该例子有少许缺点,我们将在本教程的下一部分中解释和解决

结论 在这个部分,你已经学习了FreeType2的基础以及渲染旋转文字的充分知识

下一部分将深入了解FreeType 2 API更详细的资料,它可以让你直接访问字形度量标准和字形图像还能让你学习到如何处理缩放、hinting、自居调整,等等

第三部分将讨论模块、缓存和其他高级主题,如如何在一个face中使鼡多个尺寸对象【这部分还没有编写】

* 便捷地管理字形图像
* 检索全局度量(包括字距调整)
* 渲染一个简单的字符串(采用字距调整)
* 渲染一个居中的字符串(采用字距调整)
* 渲染一个经变换的字符串(采用居中)
* 在需要时以预设字体单位的格式获取度量,以及把它们缩放箌设备空间

     顾名思义字形度量是对应每一个字形的特定距离,以此描述如何对文本排版
通常一个字形有两个度量集:用来排版水平文夲排列的字形(拉丁文、西里尔文、阿拉伯文、希伯来文等等)和用来排版垂直文本排列的字形(中文、日文、韩文等等)。
要注意的是呮有很少的字体格式提供了垂直度量你可以使用宏FT_HAS_VERTICAL测试某个给出的face对象是否包含垂直度量,当结果为真时表示包含垂直度量
每个的字形度量都可以先装载字形到face的字形槽,然后通过face->glyph->metrics结构访问其类型为
。我们将在下面详细讨论它现在,我们只关注该结构包含如下的字段:

这是字形图像的边框的宽度它与排列方向无关。
这是字形图像的边框的高度它与排列方向无关。千万不要把它和的height字段混淆
用於水平文本排列,这是从当前光标位置到字形图像最左边的边界的水平距离
用于水平文本排列,这是从当前光标位置(位于基线)到字形图像最上边的边界的水平距离 horiAdvance
用于水平文本排列,当字形作为字符串的一部分被绘制时这用来增加笔位置的水平距离。
用于垂直文夲排列这是从当前光标位置到字形图像最左边的边框的垂直距离。
用于垂直文本排列这是从当前光标位置(位于基线)到字形图像最仩边的边框的垂直距离。 vertAdvance
用于垂直文本排列当字形作为字符串的一部分被绘制时,这用来增加笔位置的垂直距离

下面的图形更清楚地圖解了度量。第一个图解了水平度量其基线为水平轴:

对于垂直文本排列,基线是垂直的与垂直轴一致:

这个字段是一个FT_Vector,保存字形嘚经 变换步长当你通过FT_Set_Transform使用变换时,这是很有用的这在第一部分的循环文本例子中已经展示过了。这个值是默认的 (metrics.horiAdvance,0)除非你在装载字形图像时指定FT_LOAD_VERTICAL,那么它将会为 (0,metrics.vertAdvance)这点与第一部分的例子不同。
这 个字段包含字形水平推进宽度的线性刻度值实际上,字形槽返回的metrics.horiAdvance值通瑺四舍五入为整数象素坐标(例如它是64的 倍数),字体驱动器用它装载字形图像linearHoriAdvance是一个16.16固定浮点数,提供了以1/65536象素为单位的原始字形嶊进 宽度的值它可以用来完成伪设备无关文字排版。
这与linearHoriAdvance类似但它用于字形的垂直推进高度。只有当字体face包含垂直度量时这个值才是鈳靠的

     装载到字形槽的字形可以转换到一幅字形位图中,这可以在装载时使用FT_LOAD_RENDER标志或者调用FT_Render_Glyph函数实现每一次你装载一个新的字形到字形槽,前面装载的字形将会从字形槽中抹去
但是,你可能需要从字形槽中提取这个字形并在你的应用程序中缓存它,或者进行附加的變换或者在转换成位图前测量它。
FreeType 2 API有一个特殊的扩展能够以一种灵活和普通的方式处理字形图像要使用它,你首先需要包含头文件洳下:

     你可以很简单地提取一个字形图像。这里有一向代码向你展示如何去做:


  

* 创建一个类型为FT_Glyph名为glyph的变量。这是一个字形图像的句柄(即指针)

* 装载字形图像(通常情况下)到face的字形槽中。我们不使用FT_LOAD_RENDER因为我们想抓取一个可缩放的字形图像以便后面对其进行变换。

* 通过调用FT_Get_Glyph把字形图像从字形槽复制到新的FT_Glyph对象glyph中。这个函数返回一个错误码并且设置glyph

     要非常留意,被取出的字形跟字形槽中的原始字形的格式是一样的例如,如果我们从TrueType字体文件中装载一个字形字形图像将是可伸缩的矢量轮廓。

     如果你想知道字形是如何建模和存储嘚你可以访问flyph->format字段。一个字形对象可以通过调用来销毁

     字形对象正好包含一个字形图像和一个2D矢量,2D矢量以16.16固定浮点坐标的形式表示芓形的推进步长后者可以直接通过glyph->advance访问它。

     注意不同于其他TrueType对象,库不保存全部分配了的字形对象的列表这意味着你必须自己销毁咜们,而不是依靠FT_Done_FreeType完成全部的清除

b.变换和复制字形图像

  

     注意,2×2矩阵变换总是适用于字形的16.16推进步长矢量所以你不需要重修计算它。

     伱也可以通过函数检索任意字形图像(无论是可伸缩或者不可伸缩的)的控制(约束)框如下:


  

     坐标是跟字形的原点(0, 0)相关的,使用y向上嘚约定这个函数取一个特殊的参数:bbox_mode来指出如何表示框坐标。

26.6象素格式为单位表示的不可缩放字体值FT_GLYPH_BBOX_SUBPIXELS是这个常量的另一个名字。

     要注意框(box)的最大坐标是唯一的,这意味着你总是可以以整数或26.6象素的形式计算字形图像的宽度和高度公式如下:


  

  
d.转换字形图像为位图

     当你巳经把字形对象缓存或者变换后,你可能需要转换它到一个位图这可以通过函数简单得实现。它负责转换任何字形对象到位图如下:


  

* 苐一个参数是源字形句柄的地址。当这个函数被调用时它读取该参数来访问源字形对象。调用结束后这个句柄将指向一个新的包含渲染后的位图的字形对象。

* 第二个参数时一个标准渲染模式用来指定我们想要哪种位图。它取FT_RENDER_MODE_DEFAULT时表示8位颜色深度的抗锯齿位图;它取FT_RENDER_MODE_MONO时表礻1位颜色深度的黑白位图

* 第三个参数是二维矢量的指针。该二维矢量是用来在转换前平移源字形图像的要注意,函数调用后源图像将被平移回它的原始位置(这样源图像便不会有变化)如果你在渲染前不需要平移源字形,设置这个指针为0

* 最后一个参数是一个布尔值,用来指示该函数是否要销毁源字形对象如果为false,源字形对象不会被销毁但是它的句柄丢失了(客户应用程序需要自己保留句柄)。

     洳果没返回错误新的字形对象总是包含一个位图。并且你必须把它的句柄进行强制类型转换转换为FT_BitmapGlyph类型,以此访问它的内容这个类型是FT_Glyph的一种“子类”,它包含下面的附加字段(看):

类似于字形槽的bitmap_left字段这是字形原点(0,0)到字形位图最左边象素的水平距离。它以整数潒素的形式表示

类似于字形槽的bitmap_top字段。它是字形原点(0,0)到字形位图最高象素之间的垂直距离(更精确来说到位图最上面的象素)。这个距离以整数象素的形式表示并且y轴向上为正。

这是一个字形对象的位图描述符就像字形槽的bitmap字段。

     不同于字形度量全局度量是用来描述整个字体face的距离和轮廓的。他们可以用26.6象素格式或者可缩放格式的“字体单位”来表示

     对于可缩放格式,全部全局度量都是以字体單位的格式表示的这可以用来在稍后依照本教程本部分的最后一章描述的规则来缩放到设备空间。你可以通过FT_Face句柄的字段直接访问它们

     然而,你需要在使用它们前检查字体face的格式是否可缩放你可以使用宏FT_IS_SCALEABLE来实现,当该字体是可缩放时它返回正

如果是这样,你就可以訪问全局预设度量了如下:

这是字体face的EM正方形的大小。它是可缩放格式用来缩放预设坐标到设备象素的我们在这部分的最后一章叙述咜。通常这个值为2048(对于 TrueType)或者1000(对于Type 1)但是其他值也是可能的。对于固定尺寸格式如FNT/FON/PCF/BDF,它的值为1

全局约束框被定义为最大矩形,該矩形可以包围字体face的所有字形它只为水平排版而定义。

Ascender是从水平基线到字体face最高“字符”的坐标之间的垂直距离不幸地,不同的字體格式对ascender的定义是不同的对于某 些来说,它代表了全部大写拉丁字符(重音符合除外)的上沿值(ascent);对于其他它代表了最高的重音符号嘚上沿值(ascent);最后,其他格 式把它定义为跟global_bbox.yMax相同

Descender是从水平基线到字体face最低“字符”的坐标之间的垂直距离。不幸地不同的字体格式对descender的萣义是不同的。对 于某些来说它代表了全部大写拉丁字符(重音符合除外)的下沿值(descent);对于其他,它代表了最高的重音符号的下沿值(descent);朂 后其他格式把它定义为跟global_bbox.yMin相同。这个字段的值是负数

这个字段是在使用这个字体书写文本时用来计算默认的行距的(例如,基线到基线之间的距离)注意,通常它都比ascender和descent的绝对值之和还要大另外,不保证使用这个距离后面就没有字形高于或低于基线

这个字段指絀了字体中所有字形得最大的水平光标推进宽度。它可以用来快速计算字符串得最大推进宽度它不等于最大字形图像宽度!

跟max_advance_width一样,但昰用在垂直文本排版它只在字体提供垂直字形度量时才可用。

当显示或者渲染下划线文本时这个值等于下划线到基线的垂直距离。当丅划线低于基线时这个值为负数

当显示或者渲染下划线文本时,这个值等于下划线的垂直宽度

注意这些值等于预设全局变量的伸缩版夲,但没有做舍入或网格对齐它们也完全独立于任何hinting处理。换句话说不要依靠它们来获取象素级别的精确度量。它们以26.6象素格式表示

原始预设ascender的伸缩版本。

原始预设ascender的伸缩版本

原始预设文本高度(text_height)的伸缩版本。这可能是这个结构中你真正会用到的字段

原始预设最大嶊进的伸缩版本。

     字距调整是调整字符串中两个并排的字形图像位置的过程它可以改善文本的整体外观。基本上这意味着当‘A’的跟著‘V’时,它们之间的间距可以稍微减少以此避免额外的“对角线空白”。

     注意理论上字距调整适用于水平和垂直方向的两个字形,泹是除了非常极端的情况外,几乎在所有情况下它只会发生在水平方向。

     不是所有的字体格式包含字距调整信息有时候它们依赖于┅个附加的文件来保存不同的字形度量,包括字距调整但该文件不包含字形图像。一个显著的例子就是 Type1格式它的字形图像保存在一个擴展名为.pfa或.pfb的文件中,字距调整度量存放在一个附加的扩展名为.afm或.pfm的文件中

     FreeType 2提供了FT_Attach_File和FT_Attach_Stream API来让你处理这种情况。两个函数都是用来装载附加嘚度量到一个face对象中它通过从附加的特定格式文件中读取字距调整度量来实现。例如你可以象 下面那样打开一个Type1字体:

{ ... 没能读取字距調整和附加的度量 ... }

最后,文件附加API是非常通用的可以用来从指定的face中装载不同类型的附加信息。附加内容的种类完全是因字体格式而异嘚


  

     正如你所见到的,这个函数的参数有一个face对象的句柄、字距调整值所要求的左边和右边字形索引以及一个称为字距调整模式的整数,和目标矢量的指针目标矢量返回适合的距离值。

     字距调整模式跟前一章描述的bbox模式(bbox mode)是很类似的这是一个枚举值,指示了目标矢量如哬表示字距调整距离

     默认值是FT_KERNING_DEFAULT,其数值为0它指示字距调整距离以26.6网格对齐象素(这意味着该值是64的倍数)的形式表示。对于可伸缩格式这意味着返回值是把预设字距调整距离先伸缩,然后舍入

     值FT_KERNING_UNFITTED指示了字距调整距离以26.6非对齐象素(也就是,那不符合整数坐标)的形式表示返回值是把预设字距调整伸缩,但不舍入

     最后,值FT_KERNING_UNSCALED是用来返回预设字距调整距离它以字体单位的格式表示。你可以在稍后用夲部分的最后一章描述的算式把它拉伸到设备空间

     注意,“左”和“右”位置是指字符串字形的可视顺序这对双向或由右到左的文本來说是很重要的。

4.简单的文本渲染:字距调整+居中

     为了显示我们刚刚学到的知识现在我们将示范如何修改第一部分给出的代码以渲染一個字符串,并且增强它使它支持字距调整和延迟渲染。

     要是我们只考虑处理从左到右的文字如拉丁文,那在我们的代码上添加字距调整是很容易办到的我们只要获取两个字形之间的字距调整距离,然后适当地改变笔位置代码如下:


  

* 因为字距调整是由字形索引决定的,我们需要显式转换我们的字符代码到字形索引然后调用FT_Load_Glyph而不是FT_Load_Char。

* 我们使用一个名为use_kerning的变量它的值为宏FT_HAS_KERNING的结果。当我们知道字体face不含囿字距调整信息不调用FT_Get_kerning程序将执行得更快。

* 我们在绘制一个新字形前移动笔位置

* 我们不检查FT_Get_kerning返回得错误码。这是因为这个函数在错误發生时总是把delta置为(0,0)

     我们的代码开始变得有趣了,但对普通应用来说仍然有点太简单了例如,笔的位置在我们渲染前就决定了通常,伱要在计算文本的最终位置(居中等)前布局它和测量它,或者执行自动换行

     现在让我们把文字渲染函数分解为两个截然不同但连续嘚两部分:第一部分将在基线上定位每一个字形图像,第二部分将渲染字形我们将看到,这有很多好处

     我们先保存每一个独立的字形圖像,以及它们在基线上面的位置这可以通过如下的代码完成:


  

     相对于我们之前的代码,这有轻微的变化:我们从字形槽中提取每一个芓形图像保存每一个字形图像和它对应的位置在我们的表中。


  

     最终得到的边界框尺寸以整数象素的格式表示并且可以随后在渲染字符串前用来计算最终的笔位置,如下:


* 笔位置以笛卡儿空间(例如y向上)的形式表示。

* 我们调用FT_Glyph_To_Bitmap时destroy参数设置为0(false)这是为了避免破坏原始字形图像。在执行该调用后新的字形位图通过image访问,并且它的类型转变为FT_BitmapGlyph

* 当调用FT_Glyph_To_Bitmap时,我们使用了平移这可以确保位图字形对象的左区域和上区域已经被设置为笛卡儿空间中的正确的象素坐标。

     相同的循环可以用来把字符串渲染到我们的显示面(surface)任意位置而不需要每一次嘟重新装载我们的字形图像。我们也可以决定实现自动换行或者只是绘制

5.高级文本渲染:变换 + 居中 + 字距调整

     现在我们将修改我们的代码,以便可以容易地变换已渲染的字符串例如旋转它。我们将以实行少许小改进开始:

     我们先把与一个字形图像相关的信息打包到一个结構体而不是并行的数组。因此我们定义下面的结构体类型:


  

     我们在装载每一个字形图像过程中在把它装载它在基线所在位置后便直接岼移它。我们将看到这有若干好处。我们的字形序列装载其因而变成:


  

     注意这个时候平移字形有若干好处。第一是当我们计算字符串嘚边界框时不需要平移字形bbox代码将会变成这样:


  

  
b.渲染一个已变换的字形序列

     无论如何,如果我们想重用字形来以不同的角度或变换方式繪制字符串直接变换序列中的字形都不是一个好主意。更好的方法是在字形被渲染前执行放射变换如下面的代码所示:


  

* 我们没改变原始的字形图像,而是变换该字形图像的拷贝

* 我们执行“剪取”操作以处理渲染和绘制的字形不在我们的目标表面(surface)的情况。

* 当调用FT_Glyhp_To_Bitmap时我們总是销毁字形图像的拷贝,这是为了销毁已变换的图像注意,即使当这个函数返回错误码该图像依然会被销毁(这就是为什么FT_Done_Glyph只在複合语句中被调用的原因)。

     可以多次调用这个函数以渲染字符串到不同角度的或者甚至改变计算start的方法以移动它到另外的地方。

     这份玳码是FreeType 2示范程序ftstring.c的基础它可以被简单地扩展,在第一部发完成高级文本布局或自动换行而第二部分不需改变。

     无论如何要注意通常嘚实现会使用一个字形缓冲以减少内存消耗。据个例子让我们假定我们的字符串是“FreeType”。我们将在我们的表中保存字母‘e’的三个相同嘚字形图像这不是最佳的(特别是当你遇到更长的字符串或整个页面时)。

6.以预设字体单位的格式访问度量并且伸缩它们

     可伸缩的字體格式通常会为字体face中的每一个字形保存一份矢量图像,该矢量图像称为轮廓每一个轮廓都定义在一个抽象的网格中,该网格被称为预設空间 (design space)其坐标以名义上(nominal)的字体单位(font unit)表示。当装载一个字形图像时字体驱动器通常会依照FT_Size对象所指定的当前字符象素尺寸把轮廓伸缩到設备空间。字体驱动器也能修改伸缩 过的轮廓以大大地改善它在基于象素的表面(surface)中显示的效果修改动作通常称为hinting或网格对齐。

     这一章描述了如何把预设坐标伸缩到设备空间以及如何读取字形轮廓和如何获取以预设字体单位格式表示的度量。这对许多事情来说都是重要的:

* 真正的所见即所得文字排版

* 为了字体转换或者分析的目的而访问字体内容

a.伸缩距离到设备空间

     我们使用一个简单的伸缩变换把预设坐标伸缩到设备空间变换系数借助字符象素尺寸来计算:


  
     这里,值EM_Size是因字体而异的并且对应预设空间的一个抽象矩形(称为EM)的大小。字體设计者使用该矩形创建字形图像EM_Size以字体单 元的形式表示。对于可伸缩字体格式可以通过face->unix_per_EM直接访问。你应该使用FT_IS_SCALABLE宏检查某个字体 face是否包含可伸缩字形图像当包含时该宏返回true。

     当你调用函数FT_Set_Char_Size你便以物理点的形式指定了字符尺寸。FreeType库将会使用该值和设备的解析度来计算芓符象素尺寸和相应的比例因子

这个字段代表了“每一个EM的x方向象素”,这是以整数象素表示EM矩形的水平尺寸也是字符水平象素尺寸,即上面例子所称的pixel_size_x

这个字段代表了“每一个EM的y方向象素”,这是以整数象素表示EM矩形的垂直尺寸也是字符垂直象素尺寸,即上面例孓所称的pixel_size_y

这是一个16.16固定浮点比例,用来把水平距离从预设空间直接伸缩到1/64设备象素

这是一个16.16固定浮点比例,用来把垂直距离从预设空間直接伸缩到1/64设备象素


当然,你也可以使用双精度浮点数更精确地伸缩该值:
b.访问预设度量(字形的和全局的)

     最后FT_Face句柄的字段包含尐数几个全局度量,我们已经在本部分的第三章叙述过了

     这是FreeType 2教程第二部分的结尾。现在你可以访问字形度量管理字形图像,以及更巧妙地渲染文字(字距调整测量,变换和缓冲)

     现在你有了足够的知识能够以FreeType2为基础构建一个相当好的文字服务,而且要是你愿意伱可以在这里止步了。

     下一部分将涉及FreeType2的内部(例如模块矢量轮廓,设备驱动器渲染器),以及少数的字体格式特有的问题(主要是如何访问某些TrueType或Type 1表)。【这部分还没有编写】

原标题:三菱PLC编程常见问题100问

【1】PLC的输出是不带电源的吗比如说我要控制个110V继电器。是不是要加个电源怎么接线?

答:PLC的输出端口仅仅是一个驱动负载的开关本身昰不带电源的,如果要控制个110V继电器要加个电源。PLC的输出端接到继电器的线圈继电器还要接到220V交流电源,PLC的COM端也接到220V交流电源

【2】為什么输入端口的地址没有X8,X9

答:三菱PLC的输入继电器和输出继电器都是以八进制进行编址的,所以只能是X0-X7而没有X8,X9X7后面的地址应该昰X10。

【3】PLC输出回路中需要加入保险丝吗

答:PLC输出回路中需要加入保险丝,因为当负载一旦发生短路或故障时容易烧坏触点或晶体管,還会烧坏输出电路所在的印制电路板因此,需要在负载回路上加入起短路保护作用的保险丝

【4】PLC我想利用编程口与变频器通信,可以嗎

答:三菱FX PLC可以使用自带的编程口和变频器通信,但是要使用变频器通信专用指令变频器通信指令由于受到通信协议的限制,并不是對所有品牌的变频器都适用一般来说,三菱PLC的变频器通信指令只能对三菱的变频器进行通信控制而不能对其他品牌的变频器进行通信控制。

【5】FX2N PLC怎么和触摸屏连接要设置什么参数吗?

答:FX2N PLC要和触摸屏连接可以用SC-09电缆的圆口插PLC的编程口,串口接到触摸屏的串口上此外,还要在触摸屏端的系统参数设置里面设置好使用的PLC类型为FX2N、接口类型为RS232、以及设置端口、波特率等在PLC编程软件的参数里面设置的端ロ、波特率、校验位、数据位、停止位等要与触摸屏的设置保持一致,这样就可以使FX2N PLC触摸屏连接起来

【6】 FX2N PLC如果拔掉电池程序会不会丢失啊?

答:一般来说因为PLC内部有充电电容,即使把电池拔掉电容上充电电量也足够RAM内的数据保持一段时间,所以如果拔掉电池后在短时間内(通常5分钟)再将新电池换上去程序是不会丢失的,如果拔掉电池长时间不更换新电池上去程序则会丢失。

【7】三菱FX1N和2N的PLC可以各鼡哪款直接代替三菱官网通知1N 和2N都停产了,我们有些设备都是用的这两款想赶紧找下可以直接代替的备上,以备急用

答:可以选择FX 3U嘚PLC,但是替换之前一定要查看原来的程序中所使用的指令在FX3U PLC是否支持以及原来的程序中所使用的相关系统存储器是否与FX3U PLC相同,如果相同財可以替换

【8】在FX3U PLC的输入端口接入无源开关,XO—X3使用内置24V电源而在X10—X13使用外置电源?应如何接线

【9】一个PNP型三线制接近开关,应如哬接入FX3U PLC的输入端口

答:把PNP型三线制接近开关的信号输出端接PLC的输入口如X0,PNP型接近开关的0V端接到PLC上的0V端子还要把S/S端子跟0V端子短接起来,PNP型接近开关的+24V端接到PLC上的24+端子如果是外接24V电源的话,那么把PNP型三线制接近开关的信号输出端接PLC的输入口如X0PNP型接近开关的0V端接到外接24V电源的负,还要把S/S端子跟外接24V电源的负短接起来PNP型接近开关的+24V端接到外接24V电源的正。

【10】PLC的扫描周期是固定的那么我怎么知道我写的程序超过固有的扫描周期呢,有什么方法知道 且怎么延长扫描周期呢?

答:如果要知道当前的扫描周期可以直接从PLC的特殊寄存器D8010中读取;如果PLC里面有特殊存储器可以用来设定恒定扫描周期,那么只需要给这个特殊存储器中设定指定的数值就可以改变扫描周期的时间。

答:指令中的K2Y0是组合位元件代表的是Y0-Y7,MOV K0 K2Y0指令传送0到K2Y0实质传送的是二进制数,0的二进制数是B 所以是将Y0-Y7复位,MOV K1 K2Y0指令传送1到K2Y01的二进制数是B ,所以是对Y0置位为1而不是把Y0-Y7都置位。

【12】在梯形图中输入T1K20显示软元件设置不正确是怎么回事

答:在梯形图中输入T1K20,显示软元件设置不囸确是因为T1和K20中间没有空格,空格多少没有规定但至少要空1格。正确的输入方法是:OUT T1 K20注意OUT和T1,T1和K20之间都要留有空格输入定时器指囹时还需要注意不要将字母O与数字0混淆。

【13】例如X001控制T5,T5的延时为50S,那X001是否需要接通50ST5才动作?还是只需接通就可以了

答:X001需要接通50秒,T5才動作因为X001是定时器的驱动条件,而T5是属于通用型定时器当驱动条件X001断开,那么定时器会复位不再计时。

答:因为输出负载包括接触器、继电器线圈、电磁阀线圈、指示灯、喇叭等各种负载的电源性质可能不相同。为了适应不同的负载电源所以PLC把输出端分成几组,哃一组端口的负载电源是相同的不同组的端口可以接不同的电源。

FX1N—40MR输出为4点共端即每个4个输出点一个公共端。称作4点共端其对应關系是COM1为YO—Y3的公共端。COM2为Y4—Y7的公共端以此类推。

【15】输出输入端的那几个黑点端有什么用的

答:输出输入端的那几个黑点端是为了配匼PLC的整体结构而留下的空端子,内部没有接线是无用的端子,不用做任何接线空端子不能作接线端子使用,如果使用会对PLC产生干扰。

【16】FX系列PLC的编程电缆b&c喇叭型号10md26_8是什么

答: [D<= D150 H0] 是触点比较指令,前面带D表示该指令是32位的触点比较指令比较32位数(D151,D150)的值是否小于等于0洳果满足该条件则触点接通,如果不满足条件则触点断开

答:[D<= D108 C251]是触点比较指令,前面带D表示该指令是32位的触点比较指令比较32位数(D109,D108)的徝是否小于等于计数器C251的当前值如果满足该条件则触点接通,如果不满足条件则触点断开

【19】在三菱PLC编程中置位和复位指令不是要一起使用吗?

答:在三菱PLC编程中置位和复位指令不一定要一起使用可以只出现置位指令,也可以只有复位指令也可以成对使用。

【20】请問如何替换三菱FX2N PLC中已损坏的X.Y点

答:仅当PLC有多余的正常的XY点时,才可以用多余的XY点替换已损坏的X,Y点替换时,首先把外部设备的接线莋相应更改其次,利用编程软件的查找替换的功能把已损坏的X,Y点查找替换成其他未使用过的正常的XY点。保证程序正常运行

【21】外部输入信号X0 在1秒钟内有10次输入,这个情况下是不是需要使用高速计数器?

答:是不是需要使用高速计数器决定PLC的扫描周期。计数器輸入脉冲信号的频率不能过高如果在一个扫描周期内,输入的脉冲信号多过1个时那其余的脉冲信号则不会被计数器进行计数。这样會产生计数不准确问题,因此对计数器输入脉冲的频率是有一定要求的。一般要求脉冲信号的周期要大于2倍的扫描周期保证不会发生計数丢数现象。

外部输入信号X0 在1秒钟内有10次输入时PLC的扫描周期最好在50ms之内。如超过100ms最好要使用高速计数器。

【22】FX2N系列的PLC 普通计数器 1秒鍾最大能响应多少次的输入信号呢

答:1秒钟最大能响应多少次的输入信号,决定PLC的扫描周期计算公式是:1000÷扫描周期(ms) = 输入信号的朂大频率。为保证不会发生计数丢数现象最好脉冲信号的周期要大于2倍的扫描周期,

程序第三行D0和D2下面分别出现了:262146请问是怎么出来的?

答:因为 (DMOV D0 D2)是32位的传送指令该指令是把(D1 D0)的数据传到到(D3 D2),而前面两条传送指令执行的结果是D0是K2,D1是K4实际上D0内部二进制数是B00 0010 ,D1内部二进淛数是B00 0100,所以(D1 D0)实际上是B00 00 ,该32位二进制数对应的十进制数就是262146

【24】请问在应用主控指令MC N0 M100时,左母线上的N0 M100触点应该怎么输入进去呢

答:咗母线上的N0 M100触点是不需要自己输入进去的,当编程软件的状态处于写入模式时左母线上没有该触点,只需要把模式切换成读出模式或监視模式就可以使该触点自动显示出来

【25】电脑上的编程软件和三菱PLC通讯不上是什么原因?通讯线的端口如何设置

答:通讯不上的原因囿多种,1、可能是没有给PLC通电;2、编程软件创建的工程类型与实际PLC类型不同;3、可能是是通信端口设置问题;4、用了USB转232线但没有安装驱動或者驱动没有安装好。原因可能有多种需要一个一个去排查。编程线主要有两种 SC-09 , USB-SC-09 在使用SC-09时,如果电脑没有RS232接口需配置USB/RS232转换器,购買该转换器时同时需要安装驱动,安装驱动后在电脑的设备管理器中会有该转换器的虚拟RS232端口号,如COM4编程时下载上载就要选取这个端口号。

【26】三菱PLC哪些编程软件可以通用

【27】触点比较指令[<= D10 K100] 应该怎么输入,为什么输入不进去

答:输入触点比较指令可以直接在键盘輸入LD<= D10 K100进行输入,注意LD和<=符号之间不需要空格而符号和D10之间,以及D10和K100直接需要空格还要注意假如触点比较指令是32位指令[D<= D10 K100],那么是直接在鍵盘输入LDD<= D10 K100注意是LD后面加D,而不是像DMOV等其他功能指令在前面加D

答:K2M0和K2Y0是组合位元件,K2是组合位元件的组数K2代表两组,而一组是四位位え件两组也就是8位,所以K2M0就代表M0-M7八个位K2Y0就代表Y0-Y7八个位。[MOV K2M0 K2Y0]这条指令是将K2M0的二进制数据传送到K2Y0里面实际上是通过M0-M7的二进制位去控制输出Y0-Y7嘚状态。

【29】三菱PLC上的ERR灯一直亮红色这是什么原因?

答:PLC ERR灯亮红色说明有故障故障有可能是硬件故障,也有可能是程序故障可以通過编程软件连接上PLC后,打开软件菜单的“诊断”里的“PLC诊断”中确认到底什么故障

【30】三菱编程软件GX Developer打开工程时提示“工程初始化失败”,要怎么解决

答:出现“工程初始化失败”的错误提示时,需要先将三菱编程软件卸载干净再删除注册表,然后再重新安装软件刪除注册表的方法是:1、点击“开始”按钮。2、选择“运行”再输入regedit,点击确定打开注册表,3、点击HKEY_LOCAL-MACHINE前面的加号在打开的文件夹中找到SOFTWARE,点击前面的加号找到MITSUBISHI,并点击鼠标右键将该文件夹删除。如果删除了该文件夹还没用那么再打开HKEY_CURRENT_UESR里面的SOFTWARE,再找到MITSUBISHI删除如果刪除了注册表还无法解决问题,建议重装系统

【31】在安装三菱GX Developer软件时点击setup没有任何反应怎么处理?

答:安装三菱GX Developer软件时如果双击setup之后沒有反应,且不会出现该图标那么可以在360安全卫士里面体检修复一下,加速一下清理下垃圾,在“任务管理器”的“进程”里将一些占内存的文件结束进程再重启下电脑。如果操作了以上步骤还是没有反应建议重装系统。

【32】为什么我安装完了GX Developer软件在桌面没有图标仿真软件也没有图标,是不是没有安装成功

答:GX Developer软件安装完成,快捷图标不会自动出现在桌面的可以在开始-所有程序-MELSOFT,找到GX Developer再点擊右键,发送到桌面快捷方式这样桌面就会出现图标了,而仿真软件是没有单独的图标它是集成在编程软件里面的,软件里面的“梯形图逻辑测试启动”图标即是开启/关闭仿真

【33】三菱PLC晶体管输出能带动多大的负载,能直接连接继电器吗用不用加保护装置?可以直接驱动固态继电器吗

答:晶体输出的PLC最大带载能力为0.5A左右,固态继电器是可以自己驱动的继电器看什么继电器,如果是24V这样的中间继電器是可以驱动的

【34】为什么说PLC系统可靠性高,抗干扰能力强

答:PLC硬件设计上,为了提高抗干扰性能开关量输入输出均采用光耦器件,PLC内部电路与外部电路之间做到了电隔离较好地消除了外部电磁干扰对PLC内部所产生的影响。而且PLC的电源线路与I/O回路还设计了多重滤波电路,如LC滤波器、RC滤波器、数字滤波器等以减少高频干扰的影响。以上硬件设计使得PLC具有抗干扰能力强,可靠性高等特点。

【35】8进制數35+47的结果用8进制表示是多少用10进制表示又是多少?

答:8进制数35+47的结果用8进制表示是104用10进制表示是82。8进制的数字只有 0 - 7逢 8 进 1,也就是说:8 进制的 10 就是10进制 88进制 11 就是10进制 9,以此类推

【36】FX1s-20m可以扩展模块吗?扩展模块怎么定义输入输出端口号的比如X13后面是不是X14?

答:三菱FX1s系列PLC只有基本单元,没有扩展I/O的扩展单元和扩展模块扩展模块后输入输出端口号应该按顺序使用,不能跳跃编号X13后面不是X14,而是X20

【37】16位和32位运算怎么理解?

答:数据寄存器是16位参与运算的因为三菱的每个数据寄存器都是16位,如果想进行32位运算就必须两个相邻的数据寄存器,比如B0和B1组成32位而且规定了B0是低16位,是低位B1是高16位,是高位它的符号位在高位的最高的位置,B31位叫做符号位16位在16位寄存器嘚最高位,也就是B15是符号位16位就是16位和16位加减乘除,32位就是32位

【38】在调试程序時,怎么利用END指令进行分段调试

答:PLC中的END指令为结束指令茬调试程序时可以将END指令插在各段程序之后,从第一段开始分段调试调试好以后必须删去程序中间的END指令,这种方法对程序的查错也很囿用处

【39】老师,梯形图的梯级与程序行是什么关系是不是一行程序就是一个梯级?

答:梯级是梯形图程序的一个逻辑单元一个梯級能够包含多个行和列,且所有的梯级都具有编号所以一行程序就是一个梯级的说法是错误的。

【40】SET、RST指令是不是功能指令

答:SET、RST是屬于基本逻辑控制指令,不属于功能指令基本逻辑指令主要用于开关量的处理,而功能指令则可以用于对数据的处理包括数据的传送、变换、运算,以及程序流程控制此外功能指令还能用来处理PLC与外部设备的数据传送和控制。

【41】为什么用三菱编程软件GX Developer,传送K59926到D0傳送不了,改成K29926就可以传送了

答:数据寄存器D是字元件,它所存储数据的最大值是K32767传送K59926到D0,传送不了是因为K59926大于K32767,已经超出了其最夶值所以是传送不了的,而K29926小于K32767所以改成K29926就可以传送了。

【42】当把程序保存到电脑中时“工程名设置”栏应如何填写?

答:当把程序保存到电脑中时“工程名设置”栏的名称可以自己命名。对于GX Developer只需要填写工程名即可,而对于GX WORKS2软件需要填写工作区名和工程名。

【43】为什么我在触点XO处注释了“起动”结果梯形图上所有XO触点位置处均出现了“起动”,能不能在XO不同的位置进行不同的注释

答:不能在XO不同的位置进行不同的注释,在触点XO处注释了“起动”那么X0对应的注释就是“起动”,定义好了后就相当于是唯一的注释了所以所有XO触点位置处均出现了“起动”。

【44】三菱plc中比较指令(LD=)能比较浮点吗

答:不能指令里有专门浮点数比较的指令。

答:可以以ASCII码嘚形式存储。

【46】在编辑PLC程序(写入模式)的时候在原程序里面修改时,老是自动跳出一行无法在原程序上修改。非要把原程序删除再写才行。具体现象打个简单的比方:X0的常开触点输出Y0我点击Y0,弹出修改菜单修改为Y1,完了按确定会自动在下一行并联输出Y0。还囿输出其他的功能指令也是一样这样太麻烦了。 请问是哪里的设置问题

答: 因为使用了“插入模式”,如果使用了在您的键盘上再按一下“Insert”键即可恢复。

答:FX系列的PLC没有“多CPU系统”不同b&c喇叭型号10md26_8的FXplc可以通过扩展485通信扩展板,进行N:N网络的连接详细通信方法和选型接线,建议参考《FX系列微型可编程控制器用户手册(通信篇)》手册

【48】登录关键字忘记了怎么办?

答:若有备份程序可先执行清除PLC內存后,再重新写入参数和程序即可

【49】中文版GX-DEVELOPER软元件列表中,有ERR的标志是为什么

答:由于中文软件,这个不是错误的意思是源处囷目的不成对出现。

【50】文件寄存器和普通寄存器的区别

答:文件寄存器是作为存放事先决定的数值(比如 产品检查的规格值)时很方便的。普通的寄存器是除了保持区域外PLC的电源OFF时,所有内容都被清除所以一般作为临时存放区域使用。

【51】电磁阀接在PLC上后反复的燒掉,这是为什么

答:电磁阀带感性负载,关断的时候由于自感会产生自感电动势积累在触点上,触点两端电压过高会击穿若为直鋶电磁阀,可以加一个续流二极管若为交流电磁阀,可以加一个浪涌保护器

答:在特殊数据寄存器中相对刻度位置设定从0 ~ 255的数值数據。作为数值的设定值指定为计时器接制定值,可以做成旋钮式的模拟量计时器?VR1→D8030(0 ~ 255的整数) ?VR2→D8031(0 ~ 255的整数)

【54】停电保持的软え件(补助继电器 状态 )作为一般用时的使用方法?

答:当PLC RUN時侯使用初始化脉冲通过ZRST命令清除必要的区域。需要清除所用的停电保持区域时请使用M8032。

【55】使用存储器盒时,需要电池吗?

答:RAM以外的存储器盒不需电池.但在使用时钟功能、辅助继电器、数据寄存器等中的保持软え件时需要电池维持.另外还有在使用特殊数据寄存器、特殊辅助继电器等时,也是需要电池的.详细内容请参考编程手册.

【56】PLC在运行中,电源LED发苼灯灭或是闪烁

答:拆除(工作电源)端子的接线确认是否恢复正常.如恢复正常的话,有可能是因为负载的短接或是过大的负载电流而造成笁作电源容量超载从而启动了保护功能.如不能恢复正常的话,请联系三菱电机售后服务部门.

【57】FX1S自带的模拟电位器所对应的寄存器是

【58】三菱PLC原装机和高仿机如何区分

答:目前我国市场上小型PLC产品的市场非常大其中用得最多的应该还是三菱系列的PLC产品了。但近几年来好多愙户反映其在市场上有遇到过类似三菱的仿货或翻新货。就目前市场上出现的一些类似的三菱PLC和三菱PLC扩展模块等产品的做一个比较细致的汾析以便提高大家对原装机和仿机及翻新机的辨别能力。

现在我国市场上三菱PLC及三菱PLC扩展模块用得较多的就是三菱FX1S系列和三菱FX2N系列PLC及对應的模块下面我们就以这两种产品来对其各种产品进行分析。随着仿制水平的提升单单从外观已经很难判断了。因此区分真假及新旧彡菱PLC及扩展模块主要还是看其内部的电路板

三菱PLC及扩展模块按着仿制的方法来分类,可以分为:抄板型和自主设计型 首先分析一下抄板型,这种产品的特点是:除了外观相同以外里面的PCB布局走线都完全一样,绝大部分的芯片都是拆机件特别是主CPU百分百是拆机件。初看还真看不出什么破绽但是只要你打开机箱,稍微仔细看一下主芯片的丝印就可以看出马脚上面的丝印一般都是经过打磨的。一般这種产品是通过回收过来坏或旧的三菱PLC的主CPU拆下来因为回收的量无法达到成规模的数量,所以这些PLC内部的丝印及产品批次都是不一样的為此,为了做成一个统一的b&c喇叭型号10md26_8造假者就只有把原来的丝印打磨掉,印上新的同批次的b&c喇叭型号10md26_8产品这样也就一眼就能看出其电蕗板有过打磨的痕迹。当然也有一些打磨技术较高的非专业人士一般看不出来,那只能利用后台软件查看三菱PLC及扩展模块的版本号就能讓它立现原形只要是什么26210,26212等等凡是不是26214或者26215的肯定是拆机件,要么就是翻新货三菱的当前版本已经到了26215了,目前市场上的新机器┅般都是26214和26215的所以不是这两个版本的一般就是有问题的产品。

自主设计型:其中这又里面又可以分为部分自主设计型和完全自主设计型兩种部分自主设计型意思是一部分自主设计,一部分抄板因为目前大陆暂时还没有能力设计出三菱的CPU ,所以CPU板都是抄板IO板和电源板洎主设计。判断这种高仿机的方法也和抄板型的判断方法一样完全自主设计型:这种高仿机在大陆很少见,一般是来自台湾技术含量吔是最高的,从上到下都是新开发而且也是采用三菱FX2N系列PLC的方案。而且方案有可能还是直接就用了三菱最新推出的3G的方案这类产品从整个产品的外观和内部工艺来看应该还是有一定水平和技术的。让人更加震惊的是这类仿机竟然也是采用松下的继电器和原装三菱PLC用的昰一样的b&c喇叭型号10md26_8。

【59】三菱PLC仿真软件和编程软件是一样的吗?

答:编程软件叫GX Developer仿真软件叫GX Simulator,这是两个软件要想仿真,得先安编程软件再安仿真软件,这个仿真软件就相当于编程软件的一个插件给编程软件增加了一个仿真功能。 GX Simulator软件是给GX Developer软件包加入仿真功能的插件昰三菱公司用于其Q 系列、A 系列、和FX系列可编程控制器产品的梯形图程序仿真软件。它使得GX Developer软件上编写的顺序控制程序无须写入PLC本体中在個人计算机上就可以进行仿真运行。而且如果将智能化模块用软件包GX Configurator也加入其中,则还可以进行智能化功能模块(A/D转换模块、D/A转换模块、通信转换模块)的初始参数设定、自动刷新参数设定等状态的仿真利用GX Simulator,可编程控制器相关专业的工程技术人员可以摆脱PLC硬件条件的束缚灵活自主的进行设计和调试工作,可以在很大程度上提高工作效率GX Simulator 需要和GX Developer梯形图程序设计软件联合使用,GX Simulator运行在Windows操作系统下软件安装时需要首先设置系统环境,其次安装GX Developer然后安装GX Simulator。使用时运行GX Developer软件,在菜单栏“工具”子菜单下运行“梯形图逻辑测试起动”命囹即可进行梯形图程序的仿真调试。

【60】GX developer软件编写程序时会有修改完,对应程序未取消反而多了一步程序。此时光标显示为紫色

答:插入模式/改写模式的切换可以通过Insert 键进行。插入模式时光标为紫色;改写模式时光标为蓝色

答:点击工具=>选项=>运行时写入设置(变換后,不写入PLC;变换后设定写入PC后每次变换都会实行PC写入。)

【62】进行浮点数计算时,当把二进制浮点数转换成十进制浮点数时在監控模式下看到的数值,与计算的理论值有误差

答:FX PLC CPU浮点数运算是单精度的,存在微小偏差使用的CPU不同,运算的结果会有一些差别

【63】FX PLC是否有时钟功能?

【64】PLC断电后程序是否会丢失?

答:FX1S、FX1N、FX1NC、FX3G程序由EEPROM保存,断电后程序不会丢失;FX2N、FX2NC、FX3U、FX3UC程序由电池支持,更换时若电池電量低报警,程序会丢失;无电池电量低报警不会丢失。

【65】PLC更换电池时程序是否会丢失?

答:在电池插座拔出20秒内插入新电池的插座,程序不会丢失电池LED点灯后,长时间被放置的情况下交换前电池的电压有可能比规定值要低。这种情况下PLC的电源切断时,程序会消失

【66】FX PLC是否支持浮点运算?

【67】FX PLC内置有几轴脉冲输出

答:基本单元都需要是晶体管输出型。FX1S、FX1N、FX1NC、FX2N、FX2NC内置有独立2轴脉冲输出但是FX2N囷FX2NC除了V3.0以上对应[D]ABS指令外,不支持定位指令;FX3U、FX3UC内置有独立3轴脉冲输出;FX3G:40/60点I/O型内置有独立3轴脉冲输出14/24点I/O型内置有独立2轴脉冲输出。

【68】鼡GX Developer怎么把一个工程的注释复制到另一个工程

答:点击菜单栏里的“工程”→“复制”,点击浏览找到工程然后可以选择复制程序、软え件注释、参数或软元件内存。或者直接将程序文件夹中“Resource”→“Others”下的COMMENT.wcd直接复制到对应文件夹中还可以使用合并方式复制。

【69】怎样確认FX系列PLC的版本

答:可以通过监控特殊数据寄存器D8001(10进制数)来确认可编程控制器的版本。前2位数字代表PLCb&c喇叭型号10md26_8后3位数字代表版本信息。例如:D8001的数值是2425124代表PLCb&c喇叭型号10md26_8为FX2N,FX3U,FX3NC,FX3UC系列,251代表版本信息为Ver 2.51

【70】抑制PLC干扰措施的原因分析。有几台FX2N的PLC常出现输入点闪烁,造成系統误动作经人指点,在输入点与COM之间并以104的电容即可解决果然如此,请问这是啥原因呢为何电容非要并104的呢?有啥理论依据

答:偠将理论依据,非常简单就是消噪滤波。所以要用104是因为你的现场噪声频率正好能被104衰减,而且我告诉你这是绝大部分场合使用的消噪率参数(我指的是开关量信号)。我觉得管这叫“万金油”更确切因为用了他只好不坏啊,如果是频率信号就不一定是104了,也可能是103或102哦

【71】FX3U、FX3UC、FX3G系列可编程控制器中的扩展寄存器(R)是什么?

答:扩展寄存器(R)是数据寄存器(D)的扩展软元件FX3U、FX3UC可编程控制器的情况丅,通过电池进行停电保持FX3G可编程控制器中,一般用软元件在使用电池的情况下能够进行停电保持。

【72】FX系列可编程控制器在STOP时可以保持RUN中的输出状态吗

答:FX系列可编程控制器,驱动特殊辅助继电器M8033则可编程控制器从RUN变为STOP后,RUN时的输出状态还能原样保持

【73】什么昰变址寄存器(V、Z)?

答:三 变址寄存器是除了可与数据寄存器的使用方法相同以外还可以通过在应用指令的操作数中组合使用其他的軟元件编号和数值,从而在程序中更改软元件的编号和数值内容的特殊寄存器 在寄存器中,被称为变址(修饰)用的有V、Z两种寄存器 V、Z是洳下所示地附加在其他软元件上的。 [V0、Z0=5时] D100V0=D105、C20Z0=C25←软元件编号 V□或是 Z□的值 数据寄存器和变址寄存器可用于间接指定定时器和计数器的设定徝,以及用于应用指令中

【74】FX3U、FX3UC系列可编程控制器电池的电压降低时,会造成什么后果

答:电池的电压由于寿命等原因而降低时,不能正常保持程序(未使用存储器盒时)、以及停电保持软元件和时钟的状态

【75】FX3U、FX3UC系列可编程控制器能够将停电保持软元件作为非停电保持軟元件使用吗?

答:FX3U、FX3UC系列可编程控制器根据参数设定情况,可将部分停电保持软元件的一部分更改成非停电保持软元件 停电保持专鼡的软元件不可以更改成非停电保持软元件。 这种情况下在程序中使用初始化脉冲(M8002)清除保持软元件,这样就可以将其作为非停电保持软え件使用

【76】FX3G系列可编程控制器的电池有什么作用?

答:电池在需要将以下内容进行掉电保持(电池备份)时使用 另外,要对软元件内存、当前时刻进行掉电保持时需要设定参数。 通过电池备份的内容: 辅助继电器M1536~M7679状态S1000~S4095,数据寄存器D1100~D7999扩展寄存器R0~R23999。 当前时间的計时(出厂时已由可编程控制器内置的大电容备份)

【77】FX3U、FX3UC、FX3G系列可编程控制器存储器的允许写入次数是多少?

答:存储器盒允许写入次数茬1万次以下FX3G可编程控制器内置存储器(EEPROM)允许写入次数在2万次以下。

【78】2进制浮点数的有效位数和处理范围是多少

答:有效位数:2进制浮點数的有效数如用10进制数表示,大约为7位数 2进制浮点数的处理范围如下所示。 -最小绝对值-44 -最大绝对值32

【79】10进制常数指定的范围是多尐

答:[K]是表示10进制整数的符号,主要用于指定定时器和计数器的设定值或是应用指令的操作数中的数值。(例如: K1234) 10进制常数的指定范围如丅所示 -使用字数据(16位)时:K-32768~K32767 -使用2个字数据(32位)时:K-2,147,483,648~K2,147,483,647

答:在FX3U、FX3UC、FX3G系列可编程控制器中,[E]是表示实数(浮点数数据)的符号主要用于指定應用指令的操作数的数值。 (例如: E1.234或是E1.234 3) 实数的指定范围为-1.0×2128~-1.0×2-126、0、1.0×2-126~1.0×2128。 在顺控程序中实数可以指定“普通表示”和“指数表示”兩种。 -普通表示

【81】字软元件的位可以直接指定将其作为位数据使用吗?

答:FX3UFX3UC系列可编程控制器指定字软元件的位,可以将其作为位数据使用 指定字软元件的位时,请使用字软元件编号和位编号(16进制数)进行设定 (例如: D0.0 表示数据寄存器D0的0位编号。) 在软元件编号、位编號中不能执行变址修饰 对象的字软元件 : 数据寄存器或特殊数据寄存器 位编号 : 0~F(16进制) 例如: LD D0.F OUT

【82】FX3U、FX3UC系列可编程控制器可以对缓冲寄存器直接指定吗?

答:FX3U、FX3UC系列可编程控制器可以直接指定特殊功能模块和特殊功能单元的BFM(缓冲存储器)。BFM为16位或32位的字数据主要用于应用指令操作数。 BFM是接着特殊功能模块或特殊功能单元的模块号(U)和BFM编号(\G)后指定的 (例如: U0\G0表示模块号为0的特殊功能模块或特殊功能单元嘚BFM #0号) 此外,在BFM编号中可以进行变址修正

【83】LD和LDI指令使用的软元件是否可以用变址寄存器(V、Z)进行修饰?

答:FX3U、FX3UC系列可编程控制器LD和LDI指令中使用的软元件,可以用变址寄存器(V、Z)进行修饰(状态(S)特殊辅助继电器(M)、32位计数器(C)、D□.b不能修饰。)

【84】LD和LDI指令使鼡的软元件中是否可以指定数据寄存器(D)的位?

答:FX3U、FX3UC系列可编程控制器LD和LDI指令使用的软元件中,可以直接指定数据寄存器(D)的位 执行数据寄存器是位指定时,请在数据寄存器(D)的编号后输入“.”然后接着输入位编号(0~F)。 可以使用的数据寄存器仅16位的有效 请从低位开始按照0,1,2,…9,A,B,…F的顺序指定位编号。 例如:LD D0.3 OUT Y0 D0的第3位决定LD触点ON(导通)/OFF(不导通)

【85】三菱FX系列的plc输入端连接npn和pnp的问题。三菱FX系列的plc输入低电平有效也就是npn型光电开关可以使用,但pnp型的光电开关(三线制)信号(黑线)串个470欧的电阻然后在程序里逻辑反也能使鼡。

答:PNP需要外接电源本身FX系列都是漏型,外接正常NPN正好,PNP是源型输出,直接接无法工作

【86】三菱PLC怎么实现自动循环具体是这样嘚,写了个程序它是从一边抓起东西,然后放到传送带上到达某点后,传送停止推板的马达启动将东西退到下面的筐里,现在问题昰每次都要点下开关给抓东西的命令,它才能自己抓东西起来胆寒司改成常闭后又不动作。用什么指令可以让它自己抓起东西也就昰循环工作?

答:触发开关的命令先导通M0.0然后M0.0导通了实现抓东西的步骤。 现在实现自动循环的功能就是在东西退下去后,再次触发M0.0,相當于你手动再按下开关自然就能再次抓东西

答:菜单编辑——文档生成,选择注释的类型然后双击梯形图中需要添加注释的位置。

【89】三菱plc编程软件中上升沿触点和向下沿触点是什么意思

答:三菱plc编程软件中上升沿触点和向下沿触点指令 PLS上升沿微分脉冲输出指令它将指定信号上升沿进行微分后,输出一个脉冲宽度为一个扫描周期的脉冲信号 PLF下降沿微分脉冲输出指令。它将指定信号下降沿进行微分后输出一个脉冲宽度为一个扫描周期的脉冲信号。 PLS和PLF只有在输入信号变化时才有效

含义是M8000接通将数据0传送到DO

【91】三菱PLC寄存器最高位为符號位是什么意思

答:在寄存器中的符号位是用来表示存储器内存储数据的正数或负数的,符号位假如为1则这个数值为负数为0则为正数。

答:意思是T10的计时时间由内置电位器VR1调整的VR1 D的整数)所以最大是25.5秒

【94】在线看程序时是有注释的但是备份下来后放到其他的电脑上面看僦没有注释了,怎么回事?

答:注释是随原程序一起保存的三菱PLC注释不能保存到程序里面,只有用带注释原程序在显示注释时才能看到

【95】三菱和台达plc哪个好?

答:肯定是三菱的性能好了,三菱是日本产的小型系列PLC性能比较稳定,但是价格相对台达要贵点;台达的是台湾產的PLC发展时间较短,性能的稳定性不如三菱但是价位较低。 所以看你的应用了如果应用场合比较干净,现场条件不复杂并且经济點的话可以选择台达PLC

【96】如何将三菱PLC编程软件中的梯形图放到word中?

答:可以使用打印的方式安装一个pdf文件打印机,就可以将程序打印成攵件然后再将这些文件插入到word文件中。

【97】三菱PLC在程序里怎么控制直流电机的正反转

答:用数字量转模拟量模块输出信号0-5V,然后找外蔀专用直流调速器输入信号是0-5V,输出根据输出的电压不一样进行正反馈对应给电压,从小到大当然最小是0V,最大是你电机正常工作電压详细参数可以参考一下直流调速器的参数。

【98】三菱PLC编程软件的快捷键 三菱的编程软件有F1~F10. 还有sF5 sF9之类的请问这些怎么按呢?

答:打開三菱的软件打开显示菜单,点工具条然后在工具条选项里《梯型图符号》前点变实点后确定。这样就出来《梯型图符号》工具条紦它放到窗口边上。所有快捷键都在里面了对照使用就是了。比如你按一下F1就在光标下出一个常开点sF5表示同时按S和F5组合键,出来的就昰对应的向上并联的常开点地址可是要另外写的。

【99】三菱PLC中的INCP什么意思

答:INCP只是对寄存器进行+1,前面加个条件接通一次 1. 如INCP D100,即使D100內部的数据 1 一直接通只算一次哦。

【100】三菱PLC M500以上为断电保持 怎样设定使之为非断电保持型

答:1:点击显示菜单选工程数据列表。2:点击左邊参数选PLC参数。 3:FX参数设置对话框选软元件。 4:在辅助继电器项锁存起始项里更改。

我要回帖

更多关于 m710m什么型号 的文章

 

随机推荐