企业信息

    浔之漫智控技术(上海)有限公司

  • 7
  • 公司认证: 营业执照已认证
  • 企业性质:私营企业
    成立时间:2017
  • 公司地址: 上海市 松江区 永丰街道 上海市松江区广富林路4855弄52号3楼
  • 姓名: 聂航
  • 认证: 手机已认证 身份证已认证 微信未绑定

    重庆西门子中国授权代理商电源供应商

  • 所属行业:电气 工控电器 DCS/PLC系统
  • 发布日期:2024-11-19
  • 阅读量:15
  • 价格:666.00 元/台 起
  • 产品规格:模块式
  • 产品数量:1000.00 台
  • 包装说明:全新
  • 发货地址:上海松江永丰  
  • 关键词:西门子代理商,西门子一级代理商

    重庆西门子中国授权代理商电源供应商详细内容

    重庆西门子中国授权代理商电源供应商


    一般讲,PLC分为箱体式和模组式两种。但它们的组成是相同的,对箱体式PLC,有一块CPU板、I/O板、显示面板、内存块、电源等,当然按CPU性能分成若干型号,并按I/O点数又有若干规格。对模组式PLC,有CPU模组、I/O模组、内存、电源模组、底板或机架。无任哪种结构类型的PLC,都属于总线式开放型结构,其I/O能力可按用户需要进行扩展与组合。PLC的基本结构框图如下:


    硬件结构
     
    可编程逻辑控制器硬件构成
    可编程逻辑控制器(Programmable Logic Controller)简称PLC,是一种具有微处理机的数位电子设备,可以将控制指令随时加载内存内储存与执行。
    可编程控制器由内部CPU,指令及资料内存、输入输出单元、电源模组、数位类比...等单元所模组化组合成.


    处理单元
    PLC中的CPU是PLC的,起神经的作用,每台PLC至少有一个CPU,它按PLC的系统程式赋予的功能接收并存贮用户程式和资料,用扫描的方式采集由现场输入装置送来的状态或资料,并存入规定的寄存器中,同时,诊断电源和PLC内部电路的工作状态和编程过程中的语法错误等。进入运行后,从用户程式存贮器中逐条读取指令,经分析后再按指令规定的任务产生相应的控制信号,去指挥有关的控制电路,与通用电脑一样,主要由运算器、控制器、寄存器及实现它们之间联系的资料、控制及状态总线构成,还有周边芯片、总线界面及有关电路。它确定了进行控制的规模、工作速度、内存容量等。内存主要用于存储程式及资料,是PLC不可缺少的组成单元。
    CPU的控制器控制CPU工作,由它读取指令、解释指令及执行指令。但工作节奏由震荡信号控制。CPU的运算器用于进行数位或逻辑运算,在控制器指挥下工作。
    CPU的暂存器参与运算,并存储运算的中间结果,它也是在控制器指挥下工作。
    CPU虽然划分为以上几个部分,但PLC中的CPU芯片实际上就是微处理器,由于电路的高度集成,对CPU内部的详细分析已无必要,我们只要弄清它在PLC中的功能与性能,能正确地使用它就够了。
    CPU模组的外部表现就是它的工作状态的种种显示、种种接口及设定或控制开关。一般讲,CPU模组总要有相应的状态指示灯,如电源显示、运行显示、故障显示等。箱体式PLC的主箱体也有这些显示。它的总线界面,用于接I/O范本或底板,有内存接口,用于安装内存,有外设口,用于接外部设备,有的还有通讯口,用于进行通讯。CPU模组上还有许多设定开关,用以对PLC作设定,如设定起始工作方式、内存区等。
    PLC的CPU内部包含CU、ALU、暂存器三大部分:
    CU:(控制单元-指令) 负责将储存在内存内的程式解码成控制信号,用以决定各单元模组的工作状态,是PLC的指挥部。
    ALU:(算数及逻辑运算单元)专门负责做加减乘除的算术运算及AND、OR、NOT逻辑运算
    暂存器:CPU内部内存可以暂时存放运算的结果,等待下一次运算。
     
     
    内存
    PLC内部存放撰写完成编辑的程式指令及资料的地方,通常也可使用RAM或EEPROM等内存卡片方式扩充(但扩充能力得依各厂牌与型号有所不同)。


    应用体会
    (1)选型:在 PLC选型是时主要是根据所需功能和容量进行选择,并考虑维护的方便性, 备件的通用性, 是否易于扩展, 有无特殊功能要求等。PLC输入/输出点确定: I/O点数选择时要留出适当余量;PLC存储容量: 系统有模拟量信号存在或进行大量数据处理时容量应选择大一些;存储维持时间: 一般存储约保持 1~3 年(与使用次数有关)。若要长期或掉电保持应选用 EEPROM存储(不需备用电源) , 也可选外用存储卡盒;PLC的扩展: 可通过增加扩展模块、 扩展单元与主单元连接的方式。 扩展模块有输入单元、 输出单元、 输入/输出一体单元。 扩展部分出主单元驱动能力时应选用带电源的扩展模块或另外加电源模块给以支持;PLC 的联网: PLC 的联网方式分为 PLC 与计算机联网和 PLC之间相互联网两种。与计算机联网可通过 RS232C 接口直接连接、RS422+RS232C/422 转换适配器连接、 调制解调通讯连接等方式; 一台计算机与多台 PLC联网, 可通过采用通讯处理器、 网络适配器等方式进行连接, 连接介质为双绞线或光缆; PLC之间互联时可通过通讯电缆直接连接、 通讯板卡或模块+数据线连接等方式。

    (2)充分合理利用软、 硬件资源:不参与控制循环或在循环前已经投入的指令可不接入 PLC;多重指令控制一个任务时, 可先在 PLC外部将它们并联后再接入一个输入点;尽量利用 PLC内部功能软元件, 充分调用中间状态, 使程序具有完整连贯性, 易于开发。同时也减少硬件投入, 降低了成本;条件允许的情况下立每一路输出, 便于控制和检查, 也保护其它输出回路; 当一个输出点出现故障时只会导致相应输出回路失控;输出若为正/反向控制的负载, 不仅要从 PLC内部程序上联锁,并且要在 PLC外部采取措施, 防止负载在两方向动作;PLC紧急停止应使用外部开关切断, 以确保。

    (3)使用注意事项不要将交流电源线接到输入端子上, 以免烧坏 PLC;接地端子应立接地, 不与其它设备接地端串联, 接地线裁面不小于 2mm2;辅助电源功率较小, 只能带动小功率的设备(光电传感器等) ;一般 PLC均有一定数量的占有点数 (即空地址接线端子) , 不要将线接上;输出有继电器型, 晶体管型(高速输出时宜选用) , 输出可直接带轻负载( LED指示灯等) ;PLC输出电路中没有保护, 因此应在外部电路中串联使用熔断器等保护装置, 防止负载短路造成损坏 PLC;输入、 输出信号线尽量分开走线, 不要与动力线在同一管路内或捆扎在一起, 以免出现干扰信号, 产生误动作; 信号传输线采用屏蔽线, 并且将屏蔽线接地; 为保证信号, 输入、 输出线一般控制在 20米以内; 扩展电缆易受噪声电干扰, 应远离动力线、 高压设备等。输入/断开的时间要大于 PLC扫描时间;PLC存在 I/O响应延迟问题, 尤其在快速响应设备中应加以注意。

    (4)工作环境PLC虽然适合工业现场, 使用中也应注意尽量避免直接震动和冲击、 阳光直射、 油雾、 雨淋等; 不要在有腐蚀性气体、 灰尘过多、 发热体附近应用; 避免导电性杂物进入控制器


    PLC输入、输出故障的排除

    一般PLC均有LED指示灯可以帮助检查故障是否由外部设备引起。不论在模拟调试还是实际应用中,若系统某回路不能按照要求动作,应检查PLC输入开关电接触点是否(一般可通过查看输入LED指示灯或直接测量输入端),若输入信号未能传到PLC,则应去检查输入对应的外部回路;若输入信号已经采集到,则再看PLC是否有相应输出指示,若没有,则是内部程序问题或输出LED指示灯问题;若输出信号已确信发出,则应去检查外部输出回路(从PLC输出往后检查)。

    在输出回路中,由于短路或其它原因造成PLC输出点在内部粘滞,只需将其接线换至另一予留的空接线点上,同时修改相应程序,将原输出标号改为新号即可。

    PLC虽然适合工业现场,使用中也应注意尽量避免直接震动和冲击、阳光直射、油雾、雨淋等;不要在有腐蚀性气体、灰尘过多、发热体附近应用;避免导电性杂物进入控制器。

    随着自动化程度的提高,小型plc的应用领域比以前为广泛,越来越多的行业开始使用小型PLC。小型PLC产品加多元化,不仅有度很高的,国内一些自动化企业也看到小型PLC广大的市场,纷纷推出自主的小型PLC产品,这为不同细分市场的中国用户提供了多的选择。
        我个人还是建议大家使用的产品,因为,从技术角度来讲,保证PLC在复杂的工业环境下的高性仍然是很多新加入小型PLC领域的厂家面临的技术难题。从角度来讲,持续的大规模的研发投入是不断,满足市场的日益增长的需求的保证,而这种投入对许多厂家来说也是很大的考验。从市场开发角度来看,大厂商拥有明显的强势和领域,拥有优势的技术,成熟的解决方案,和适合行业和市场开发的销售网络。西门子小型PLC经过十多年的市场考验,与服务已经得到了市场的广泛认可,这不仅靠市场宣传,靠的产品品质和完整的解决方案。

        近几年自动化产品用户除了稳定性、性价比等因素之外,越来越重视项目的维护成本,现在中国用户都已将维护成本列入整个自动化系统的成本中。西门子小型PLC为用户提供灵活多样的远程服务解决方案,可以基于固定电话,网络,GPRS无线通讯等,为客户后期维护节约可观的成本。为了进一步为广大用户降,2005年,西门子成功完成了S7-200PLC的本地化生产,同时还本地化生产了S7-200PLC触摸屏KTP-178和四行中文文本显示器TD400,进一步提高了西门子小型PLC整体解决方案的性价比,开放性已达到同类中型机水平,支持PPI、RS-485、Profibus-DP、以太网等多种通讯协议,保证了的无缝连接。

        我认为小型PLC的市场份额会持续保持快速的发展。随着中国加入WTO,出口额逐年提高,中国正逐步成为机械设备的制造基地,使得国内OEM厂商迅猛发展。一些OEM厂商为了避免激烈竞争,追求高的利润,将用小型PLC替代继电器或单片机控制方案。而且,小型PLC不再仅仅进行单机单站的控制,工厂信息化的潮流将会使多的生产设备联网,进行集中监控。西门子小型PLC开放的平台为工厂生产设备联网和工厂信息化提供了可能性,使客户增加额外的硬件投资即可实现联网。


    自来水厂PLC的选择

        1  提倡选择模快式PLC

        按结构形式PLC可分为整体式和模块式。整体式PLC将电源、CPU、I/O部件都集中装在一个机箱内。模块式PLC结构是将PLC各部分分成若干个单的模块,如CPU模快、I/O模快等。考虑到自来水厂改建(特别是节能、换旧设备方面)、扩建和PLC故障率95%都是发生在I/O部件损坏;同时模块式PLC的配置灵活,装配和维修方便,水厂设备、工艺的改变只要将相应的I/O模快换或扩展再经编程就可方便实现自动化。因此,从长远来看,提倡选择模块式PLC。

        2  统一选择机型
        在选择PLC时,要注意售后服务是否,同时兼顾水厂日后维修上的便利、备用件的库存和软件编程方面。而常见的制取自来水的步骤主要分为:混凝、沉淀、过滤、和储存。在功能满足要求的前提下,选择的机型都选择同一间公司的产品。

        3  根据输入和输出选择

        自来水厂中的主要设备有:反应池、澄清池、滤池、清水池、加氯机、氯吸收装置、空气压缩机、鼓风机、加药设备、阀门、泵、混合设备、计量设备。根据控制系统的要求和采用的控制方法,对于每一个被控对象,所用的I/O点数不会轻易发生变化,根据需要的I/O点数选用I/O模块可与主机灵活地组合使用,但是考虑到以后工艺和设备的改动,或I/O点的损坏、故障等,一般应保留1/8的裕量。

        除了I/O点的数量,还要注意输入和输出信号的性质、参数和特性要求等。如水厂中阀门是模拟量还是开关量控制;PH计、流量计、浊度计、余氯计、液位计等水质监控仪表信号源是电压输出型还是电流输出型,是有源输出还是无源输出,及其继电器输出是NPN输出型还是PNP输出型。另外,还要注意输出端点的负载特点(负载电压、电流的类型),数量等级以及对响应速度的要求等。

        据此,来选择和配置适合输入输出信号特点和要求的I/O模块。

        4  根据存储器容量选择

        通常,PLC的存储器容量以字为单位,如64k字等,应用程序所需存储器容量可以预行估算。选择和计算的种方法是:根据编程使用的节点数计算存储器的实际使用容量。二种为估算法,用户可根据控制规模和应用目的,按照附表的公式来估算。

        使用时可以根据程序及数据的存储需要来选用合适的机型,必要时也可专门进行存储器的扩充设计。为了使用方便同时考虑到水厂工艺、设备的改动和编程时的需要,一般应该留有25%~30%的裕量。

        5  根据通信要求选择

        目前,PLC采用了各种工业标准,如IEC 61131、IEEE802.3以太网、TCP/IP、UDP/IP等,各种事实上的工业标准,如bbbbbbs NT、OPC等,融合了IT技术,可与智能MCC马达控制、其它运行控制系统、电控设备、变频器和软起动器等连成系统。

        而当前自来水厂自动化应用的多的是工业电脑和PLC组成控制系统,系统中一般PLC分为取水泵站、投加站、滤池站和送水泵站,站与站之间要传递监控的参数,如余氯、流量、浊度等,并且由中控室的电脑集中控制,通讯的基本要求是实时、稳定、经济。水厂要根据自身的设备、投入的资金、响应速度、以后的发展,选择易于扩展、连接、发展成熟的现场总线、网络,如以太网、PROFIBUS、Modbus、FIPIO、Asi等,从而有侧重地选定PLC通讯模块。


    20220222173907301904.jpg202202221739073176584.jpg202202221739072455394.jpg


    一、 系统结构配置:

    全厂按工艺流程分为四个PLC子站进行数据采集和控制:

    1#PLC站:取水深进泵站;

    2#PLC站:厂区净化部分;(加矾、加氯、反应沉淀池、滤池)

    3#PLC站:送水泵站;

    4#PLC站:中控室通讯控制站;

    其中:取水泵站与中控室通讯控制站是采用SIEMENS的无线通讯SINAUT系统进行远距离无线传输,2#PLC与3#PLC、4#PLC则是通过PROFIBUS现场总线相联。

    二、 系统功能简介:

    1. 取水泵站:

    PLC除采集监视泵机、阀门、配电设备的运行状态和相关数据外,对水泵、阀门、开关柜、800KW变频调速等设备可进行远距离操作及全自动优化操作。

    通过取水、无线通讯系统SINAUT,将所有的数据采集并传到厂中控室进行处理,由中控室发指令对现场设备进行远遥操作。

    2. 厂区净化部分:

    反应沉淀池部分:

    — 反应池为PLC自动投矾,由游动电流仪检测SCD值,反馈到加矾间变频调速计量泵,通过PID调节投矾量,排泥方式为PLC控制进行周期排泥。

    — 沉淀池为行车排泥,全过程由PLC程序控制,排泥方式为检测泥位值与周期排泥两方式。

    滤池部分:

    — 所有滤池由声波水位计检测水位,PLC根据水位设定值对清水阀门进行连续PID调节,达到衡水位过滤运行效果。

    — 滤池反冲洗全过程由PLC程序控制,冲洗条件为水头损失值与周期反冲洗相结合两种方式。单口滤池冲洗设备程序联动。滤池之间冲洗互锁,达到合理调度的效果。

    加矾部分:

    加矾间的成品矾配制。成品矾浓度测量和耗矾量均由PLC完成。投加计量由沉淀池的SCD反馈控制,控制方式分调频率和调冲程两种,运用合理的数学模型使沉淀水出水浊度长期保持在0.5-3NTU之间。

    加氯部分:

    整套加氯系统分为氯库,切换系统、加氯机、及水射器部分,除人工换氯瓶外,其它过程由PLC来完成;加氯系统配有漏氯报警器和余氯分析仪,以确保加氯全过程,,出厂水指标准确合格。前加氯为流量配比型;后加氯为余氯反馈型;

    3. 送水泵站:

    PLC采集泵机、阀门配电设备的运行状态、相关数据,对各类泵机、阀门、配电设备等可操作设备进行远距离操作或优化调度控制,对全厂变电站的所有数据参数采集传到中控室工作站上(如:电压、电流、电度、有功功率、无功功率、功率因素等)。

    4. 中控室通讯控制站:

    本站PLC专门负责PLC1-PLC3的网络管理,并直接与工作站相连并进行全厂的数据交换;本站的SINAUT无线通讯系统与取水泵站PLC1组成无线通讯网。

    5. 工作站:

    工作站采用FIX DMAC人机界面软件,可浏览所有工艺过程画面,能完成各类数据的记录、存盘、报警;处理打印各种生产报表、曲线图和直方图等。同时,全厂所有可操作的设备均可通过操作员在工作站上通过鼠标和权限进行遥控操作,完成生产指挥调度过程;同时,它还通过以太网将水厂的到公司总调度室,让公司总调度室能实时地掌握水厂的生产情况。

    工业现场电磁环境复杂,有时只采用硬件措施不能干扰的影响,用软件措施加以配合。可采用如下的软件措施:
        一、延时确认
        对于开关量输入,可采用软件延时20ms,对同一信号作两次或两次以上读入,结果一致才确认输入有效。
        二、封锁干扰
        某些干扰是可以预知的,如可编程序控制器的输出命令使执行机构(如大功率电动机、电磁铁)动作,常常会伴随产生火花。电弧等干扰信号,它们产生地干扰信号可能使可编程序控制器接收错误的信息。在容易产生这些干扰的时间内,可用软件可编程序控制器的某些输入信号,在干扰易发期过去后,再取消封锁。
        三、软件滤波
        对于模拟信号可以采取软件滤波措施,目前的大型PLC编程大都支持SFC、结构化文本编程方式,这可以很方便的编制比较复杂的程序,完成相应的功能。
        四、故障的检测与诊断
        可编程序控制器的性很高,本身有完善的自诊断功能,可编程序控制器如出现故障,借助自诊断程序可以方便的找到故障的部位与部件,换后就可以恢复正常工作。
        大量的工程实践表明,可编程序控制器外部的输入、输出元件,如限位开关、电磁阀、接触器等的故障率远远可编程序控制器本身的故障率,而这些元件出现故障后,可编程序控制器一般不能觉察出来,不会自动停机,可能使故障扩大,直至强电保护装置动作后停机,有时甚至会造成设备和人身事故。停机后,查找故障也要花费很多时间。为了及时发现故障,在没有酿成事故之前使可编程序控制器自动停机和报警,也为了方便查找故障,提高维修效率,可以使用梯形图程序实现故障的自诊断和自处理。
        现代的可编程序控制器拥有大量的软件资源,如FX2N 系列可编程序控制器有几千点辅助继电器、几百点定时器和计数器,有相当大的裕量。可以这些资源利用起来,用于故障检测。
        1、时检测
        机械设备在各自工步的动作所需的时间一般是不变的,即使变化也不会太大,因此可以以这些时间为参考,在可编程序控制器发出输出信号,相应的外部执行机构开始动作时启动一个定时器定时,定时器的设定值比正常情况下该动作的持续时间长20%左右。例如设某执行机构(如电动机)在正常情况下运行10s后,它驱动的部件使限位开关动作,发出动作结束信号。若该执行的动作时间过12s(即对应定时器的设定时间),可编程序控制器还没有接收到动作结束信号,定时器延时接通的常开触点发出故障信号,该信号停止正常的循环程序,起动报警和故障显示程序,使操作人员和维修人员能顺速判别故障的种类,及时采取排除故障的措施。
        2、逻辑错误检测
        在系统正常运行时,可编程序控制器的输入、输出信号和内部的信号(如辅助继电器的状态)相互之间存在着确定的关系,如出现异常的逻辑信号,则说明出现了故障。因此,可以编制一些常见故障的异常逻辑关系,一旦异常逻辑关系为ON状态,就应该按故障处理。例如某机械运动过程中先后有两个限位开关动作,这两个信号不会同时为ON状态,若它们同时为ON,说明至少有一个限位开关被卡死,应停机进行处理。在梯形图中,用这两个限位开关对应的输入继电器的常开触点串联,来驱动一个表示限位开关故障的辅助继电器。

    完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如NOT等)。其中的操作数是指令要执行的目标,也就是指令要进行操作的地址。
    我们知道,在PLC中划有各种用途的存储区,比如物理输入输出区P、映像输入区I、映像输出区Q、位存储区M、定时器T、计数器C、数据区DB和L等,同时我们还知道,每个区域可以用位(BIT)、字节(BYTE)、字(Word)、双字(DWord)来衡量,或者说来确切的大小。当然定时器T、计数器C不存在这种衡量体制,它们仅用位来衡量。由此我们可以得到,要描述一个地址,至少应该包含两个要素:
    1、存储的区域
    2、这个区域中具体的位置
    比如:A Q2.0
    其中的A是指令符,Q2.0是A的操作数,也就是地址。这个地址由两部分组成:
    Q:指的是映像输出区
    2.0:就是这个映像输出区二个字节的0位。
    由此,我们得出, 一个确切的地址组成应该是:
    〖存储区符〗〖存储区尺寸符〗〖尺寸数值〗.〖位数值〗,例如:DBX200.0。
    DB X 200 . 0
    其中,我们又把〖存储区符〗〖存储区尺寸符〗这两个部分合称为:地址标识符。这样,一个确切的地址组成,又可以写成:
    地址标识符 + 确切的数值单元
    【间接寻址的概念】
    寻址,就是指令要进行操作的地址。给定指令操作的地址方法,就是寻址方法。
    在谈间接寻址之前,我们简单的了解一下直接寻址。所谓直接寻址,简单的说,就是直接给出指令的确切操作数,象上面所说的,A Q2.0,就是直接寻址,对于A这个指令来说,Q2.0就是它要进行操作的地址。
    这样看来,间接寻址就是间接的给出指令的确切操作数。对,就是这个概念。
    比如:A Q[MD100] ,A T[DBW100]。程序语句中用方刮号 [ ] 标明的内容,间接的指明了指令要进行的地址,这两个语句中的MD100和DBW100称为指针Pointer,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。间接由此得名。
    西门子的间接寻址方式计有两大类型:存储器间接寻址和寄存器间接寻址。
    【存储器间接寻址】
    存储器间接寻址的地址给定格式是:地址标识符+指针。指针所指示存储单元中所包含的数值,就是地址的确切数值单元。
    存储器间接寻址具有两个指针格式:单字和双字。
    单字指针是一个16bit的结构,从0-15bit,指示一个从0-65535的数值,这个数值就是被寻址的存储区域的编号。
    双字指针是一个32bit的结构,从0-2bit,共三位,按照8进制指示被寻址的位编号,也就是0-7;而从3-18bit,共16位,指示一个从0-65535的数值,这个数值就是被寻址的字节编号。
    指针可以存放在M、DI、DB和L区域中,也就是说,可以用这些区域的内容来做指针。
    单字指针和双字指针在使用上有很大区别。下面举例说明:
    L DW#16#35 //将32位16进制数35存入ACC1
    T MD2 //这个值再存入MD2,这是个32位的位存储区域
    L +10 //将16位整数10存入ACC1,32位16进制数35自动移动到ACC2
    T MW100 //这个值再存入MW100,这是个16位的位存储区域
    OPN DBW[MW100] //打开DBW10。这里的[MW100]就是个单字指针,存放指针的区域是M区,
    MW100中的值10,就是指针间接的地址,它是个16位的值!
    --------
    L L#+10 //以32位形式,把10放入ACC1,此时,ACC2中的内容为:16位整数10
    T MD104 //这个值再存入MD104,这是个32位的位存储区域
    A I[MD104] //对I1.2进行与逻辑操作!
    =DIX[MD2] //赋值背景数据位DIX6.5!
    --------
    A DB[MW100].DBX[MD2] //读入DB10.DBX6.5数据位状态
    =Q[MD2] //赋值给Q6.5
    --------
    A DB[MW100].DBX[MD2] //读入DB10.DBX6.5数据位状态
    =Q[MW100] //错误!!没有Q10这个元件
    ---------------------------------------------------------------------------------------------------
    从上面系列举例我们至少看出来一点:
    单字指针只应用在地址标识符是非位的情况下。的确,单字指针描述过,它确定的数值是0-65535,而对于byte.bit这种具体位结构来说,只能用双字指针。这是它们的个区别,单字指针的另外一个限制就是,它只能对T、C、DB、FC和FB进行寻址,通俗地说,单字指针只可以用来指代这些存储区域的编号。
    相对于单字指针,双字指针就没有这样的限制,它不仅可以对位地址进行寻址,还可以对BYTE、Word、DWord寻址,并且没有区域的限制。不过,有得必有失,在对非位的区域进行寻址时,确保其0-2bit为全0!
    总结一下:
    单字指针的存储器间接寻址只能用在地址标识符是非位的场合;双字指针由于有位格式存在,所以对标识符没有限制。也正是由于双字指针是一个具有位的指针,因此,当对字节、字或者双字存储区地址进行寻址时,确保双字指针的内容是8或者8的倍数。
    现在,我们来分析一下上述例子中的A I[MD104] 为什么后是对I1.2进行与逻辑操作。
    通过L L#+10 ,我们知道存放在MD104中的值应该是:
    MD104:0000 0000 0000 0000 0000 0000 0000 1010
    当作为双字指针时,就应该按照3-18bitbyte,0-2bitbit来确定终指令要操作的地址,因此:
    0000 0000 0000 0000 0000 0000 0000 1010 = 1.2
    详解西门子间接寻址<2>
    【地址寄存器间接寻址】
    在先前所说的存储器间接寻址中,间接指针用M、DB、DI和L直接,就是说,指针指向的存储区内容就是指令要执行的确切地址数值单元。但在寄存器间接寻址中,指令要执行的确切地址数值单元,并非寄存器指向的存储区内容,也就是说,寄存器本身也是间接的指向真正的地址数值单元。从寄存器到得出真正的数值单元,西门子提供了两种途径:
    1、区域内寄存器间接寻址
    2、区域间寄存器间接寻址
    地址寄存器间接寻址的一般格式是:
    〖地址标识符〗〖寄存器,P#byte.bit〗,比如:DIX[AR1,P#1.5] 或 M[AR1,P#0.0] 。
    〖寄存器,P#byte.bit〗统称为:寄存器寻址指针,而〖地址标识符〗在上帖中谈过,它包含〖存储区符〗+〖存储区尺寸符〗。但在这里,情况有所变化。比较一下刚才的例子:
    DIX [AR1,P#1.5]
    X [AR1,P#1.5]
    DIX可以认为是我们通常定义的地址标识符,DI是背景数据块存储区域,X是这个存储区域的尺寸符,指的是背景数据块中的位。但下面一个示例中的M呢?X只是了存储区域的尺寸符,那么存储区域符在哪里呢?毫无疑问,在AR1中!
    DIX [AR1,P#1.5] 这个例子,要寻址的地址区域事先已经确定,AR1可以改变的只是这个区域内的确切地址数值单元,所以我们称之为:区域内寄存器间接寻址方式,相应的,这里的[AR1,P#1.5] 就叫做区域内寻址指针。
    X [AR1,P#1.5] 这个例子,要寻址的地址区域和确切的地址数值单元,都未事先确定,只是确定了存储大小,这就是意味着我们可以在不同的区域间的不同地址数值单元以给定的区域大小进行寻址,所以称之为:区域间寄存器间接寻址方式,相应的,这里的[AR1,P#1.5] 就叫做区域间寻址指针。
    既然有着区域内和区域间寻址之分,那么,同样的AR1中,就存有不同的内容,它们代表着不同的含义。
    【AR的格式】
    地址寄存器是专门用于寻址的一个特殊指针区域,西门子的地址寄存器共有两个:AR1和AR2,每个32位。
    当使用在区域内寄存器间接寻址中时,我们知道这时的AR中的内容只是指明数值单元,因此,区域内寄存器间接寻址时,寄存器中的内容等同于上帖中提及的存储器间接寻址中的双字指针,也就是:
    其0-2bit,bit位,3-18bitbyte字节。其31bit固定为0。
    AR:
    0000 0000 0000 0BBB BBBB BBBB BBBB BXXX
    这样规定,就意味着AR的取值只能是:0.0 ——65535.7
    例如:当AR=D4(hex)=0000 0000 0000 0000 0000 0000 1101 0100(b),实际上就是等于26.4。
    而在区域间寄存器间接寻址中,由于要寻址的区域也要在AR中,显然这时的AR中内容肯定于寄存器区域内间接寻址时,对AR内容的要求,或者说规定不同。
    AR:
    1000 0YYY 0000 0BBB BBBB BBBB BBBB BXXX
    比较一下两种格式的不同,我们发现,这里的31bit被固定为1,同时,24、25、26位有了可以取值的范围。聪明的你,肯定可以联想到,这是用于存储区域的。对,bit24-26的取值确定了要寻址的区域,它的取值是这样定义的:
    区域标识符
    26、25、24位
    P(外部输入输出)
    000
    I(输入映像区)
    001
    Q(输出映像区)
    010
    M(位存储区)
    011
    DB(数据块)
    100
    DI(背景数据块)
    101
    L(暂存数据区,也叫局域数据)
    111
    如果我们把这样的AR内容,用HEX表示的话,那么就有:
    当是对P区域寻址时,AR=800xxxxx
    当是对I区域寻址时,AR=810xxxxx
    当是对Q区域寻址时,AR=820xxxxx
    当是对M区域寻址时,AR=830xxxxx
    当是对DB区域寻址时,AR=840xxxxx
    当是对DI区域寻址时,AR=850xxxxx
    当是对L区域寻址时,AR=870xxxxx
    经过列举,我们有了初步的结论:如果AR中的内容是8开头,那么就一定是区域间寻址;如果要在DB区中进行寻址,只需在8后面跟上一个40。84000000-840FFFFF指明了要寻址的范围是:
    DB区的0.0——65535.7。
    例如:当AR=840000D4(hex)=1000 0100 0000 0000 0000 0000 1101 0100(b),实际上就是等于DBX26.4。
    我们看到,在寄存器寻址指针 [AR1/2,P#byte.bit] 这种结构中,P#byte.bit又是什么呢?
    【P#指针】
    P#中的P是Pointer,是个32位的直接指针。所谓的直接,是指P#中的#后面所跟的数值或者存储单元,是P直接给定的。这样P#XXX这种指针,就可以被用来在指令寻址中,作为一个“常数”来对待,这个“常数”可以包含或不包含存储区域。例如:
    ● L P#Q1.0 //把Q1.0这个指针存入ACC1,此时ACC1的内容=82000008(hex)=Q1.0
    ★ L P#1.0 //把1.0这个指针存入ACC1,此时ACC1的内容=00000008(hex)=1.0
    ● L P#MB100 //错误!按照byte.bit结构给定指针。
    ● L P#M100.0 //把M100.0这个指针存入ACC1,此时ACC1的内容=83000320(hex)=M100.0
    ● L P#DB100.DBX26.4 //错误!DBX已经提供了存储区域,不能重复。
    ● L P#DBX26.4 //把DBX26.4这个指针存入ACC1,此时ACC1的内容=840000D4(hex)=DBX26.4
    我们发现,当对P#只是数值时,累加器中的值和区域内寻址指针规定的格式相同(也和存储器间接寻址双字指针格式相同);而当对P#带有存储区域时,累加器中的内容和区域间寻址指针内容相同。事实上,把什么样的值传给AR,就决定了是以什么样的方式来进行寄存器间接寻址。在实际应用中,我们正是利用P#的这种特点,根据不同的需要,P#指针,然后,再传递给AR,以确定终的寻址方式。
    在寄存器寻址中,P#XXX作为寄存器AR指针的偏移量,用来和AR指针进行相加运算,运算的结果,才是指令真正要操作的确切地址数值单元!
    无论是区域内还是区域间寻址,地址所在的存储区域都有了,因此,这里的P#XXX
    只能纯粹的数值,如上面例子中的★。
    【指针偏移运算法则】
    在寄存器寻址指针 [AR1/2,P#byte.bit] 这种结构中,P#byte.bit如何参与运算,得出终的呢?
    运算的法则是:AR1和P#中的数值,按照BYTE位和BIT位分类相加。BIT位相加按八进制规则运算,而BYTE位相加,则按照十进制规则运算。
    例如:寄存器寻址指针是:[AR1,P#2.6],我们分AR1=26.4和DBX26.4两种情况来分析。
    当AR1等于26.4,
    AR1:26.2
    + P#: 2.6
    ---------------------------
    = 29.7 这是区域内寄存器间接寻址的终确切地址数值单元
    当AR1等于DBX26.4,
    AR1:DBX26.2
    + P#: 2.6
    ---------------------------
    = DBX29.7 这是区域间寄存器间接寻址的终确切地址数值单元
    = 29.7 这是区域内寄存器间接寻址的终确切地址数值单元
    当AR1等于DBX26.4,
    AR1:DBX26.2
    + P#: 2.6
    ---------------------------
    = DBX29.7 这是区域间寄存器间接寻址的终确切地址数值单元
    【AR的地址数据赋值】
    通过的介绍,我们知道,要正确运用寄存器寻址,重要的是对寄存器AR的赋值。同样,区分是区域内还是区域间寻址,也是看AR中的赋值。
    对AR的赋值通常有下面的几个方法:
     
    1、直接赋值法
    例如:
    L DW#16#83000320
    LAR1
    可以用16进制、整数或者二进制直接给值,但确保是32位数据。经过赋值的AR1中既存储了地址数值,也了存储区域,因此这时的寄存器寻址方式肯定是区域间寻址。
    2、间接赋值法
    例如:
    L [MD100]
    LAR1
    可以用存储器间接寻址指针给定AR1内容。具体内容存储在MD100中。
    3、指针赋值法
    例如:
    LAR1 P#26.2
    使用P#这个32位“常数”指针赋值AR。
    总之,无论使用哪种赋值方式,由于AR存储的数据格式有明确的规定,因此,都要在赋值前,确认所赋的值是否符合寻址规范。
    详解西门子间接寻址<3>
    使用间接寻址的主要目的,是使指令的执行结果有动态的变化,简化程序是目的,在某些情况下,这样的寻址方式是的,比如对某存储区域数据遍历。此外,间接寻址,还可以使程序具柔性,换句话说,可以标准化。
    下面通过实例应用来分析如何灵活运用这些寻址方式,在实例分析过程中,将对帖
    子中的笔误、错误和遗漏做纠正和。
    【存储器间接寻址应用实例】
    我们先看一段示例程序:
    L 100
    T MW 100 // 将16位整数100传入MW100
    L DW#16#8 // 加载双字16进制数8,当把它用作双字指针时,按照BYTE.BIT结构,
    结果演变过程就是:8H=1000B=1.0
    T MD 2 // MD2=8H
    OPN DB [MW 100] // OPN DB100
    L DBW [MD 2] // L DB100.DBW1
    T MW[MD2] // T MW1
    A DBX [MD 2] // A DBX1.0
    = M [MD 2] // =M1.0
    在这个例子中,我们思想其实就是:将DB100.DBW1中的内容传送到MW1中。这里我们使用了存储器间接寻址的两个指针——单字指针MW100用于DB块的编号,双字指针MD2用于DBW和MW存储区字地址。
    -------------------------------------------------------------------------------------------------------------------------------------------------
    DB[MW100].DBW[MD2] 这样的寻址是错误的提法,这里做个解释:
    DB[MW100].DBW[MD2] 这样的寻址结构就寻址原理来说,是可以理解的,但从SIEMENS程序执行机理来看,是非法的。在实际程序中,对于这样的寻址,程序语句应该写成:
    OPN DBW[WM100], L DBW[MD2]-------------------------------------------------------------------------------------------------------------------------------------------------
    事实上,从这个例子的思想来看,根本没有必要如此复杂。但为什么要用间接寻址呢?
    要澄清使用间接寻址的优势,就让我们从比较中,找答案吧。
    例子告诉我们,它终执行的是把DB的某个具体字的数据传送到位存储区某个具体字中。这是针对数据块100的1数据字传送到位存储区1字中的具体操作。如果我们现在需要对同样的数据块的多个字(连续或者不连续)进行传送呢?直接的方法,就是一句一句的写这样的具体操作。有多少个字的传送,就写多少这样的语句。毫无疑问,即使不知道间接寻址的道理,也应该明白,这样的编程方法是不合理的。而如果使用间接寻址的方法,语句就简单多了。
    【示例程序的结构分析】
    我将示例程序从结构上做个区分,重新输入如下:
    =========================== 输入1:数据块编号的变量
    || L 100
    || T MW 100
    ===========================输入2:字地址的变量
    || L DW#16#8
    || T MD 2
    ===========================操作主体程序
    OPN DB [MW 100]
    L DBW [MD 2]
    T MW[MD2]
    显然,我们根本不需要对主体程序(红色部分)进行简单而重复的复写,而只需改变MW100和MD2的赋值(部分),就可以完成应用要求。
    结论:通过对间接寻址指针内容的修改,就完成了主体程序执行的变,这种修改是可以是动态的和静态的。
    正是由于对真正的目标程序(主体程序)不做任何变动,而寻址指针是这个程序中要修改的地方,可以认为,寻址指针是主体程序的入口参数,就好比功能块的输入参数。因而可使得程序标准化,具有移植性、通用性。
    那么又如何动态改写指针的赋值呢?不会是另一种简单而重复的复写吧。
    让我们以一个具体应用,来完善这段示例程序吧:
    将DB100中的1-11数据字,传送到MW1-11中
    在设计完成这个任务的程序之前,我们先了解一些背景知识。
    【数据对象尺寸的划分规则】
    数据对象的尺寸分为:位(BOOL)、字节(BYTE)、字(Word)、双字(DWord)。这似乎是个简单的概念,但如果,MW10=MB10+MB11,那么是不是说,MW11=MB12+MB13?如果你的回答是肯定的,我建议你继续看下去,不要跳过,因为这里的疏忽,会导致终的程序的错误。
    按位和字节来划分数据对象大小时,是以数据对象的bit来偏移。这句话就是说,0bit后就是1bit,1bit后肯定是2bit,以此类推直到7bit,完成一个字节大小的,再有一个bit的偏移,就进入下一个字节的0bit。
    而按字和双字来划分数据对象大小时,是以数据对象的BYTE来偏移!这就是说,MW10=MB10+MB11,并不是说,MW11=MB12+MB13,正确的是MW11=MB11+MB12,然后才是MW12=MB12+MB13!
    这个概念的重要性在于,如果你在程序中使用了MW10,那么,就不能对MW11进行任何的操作,因为,MB11是MW10和MW11的交集。
    也就是说,对于“将DB100中的1-11数据字,传送到MW1-11中”这个具体任务而言,我们只需要对DBW1、DBW3、DBW5、DBW7、DBW9、DBW11这6个字进行6次传送操作即可。这就是单分出一节,说明数据对象尺寸划分规则这个看似简单的概念的目的所在。
    【循环的结构】
    要“将DB100中的1-11数据字,传送到MW1-11中”,我们需要将指针内容按照顺序逐一指向相应的数据字,这种对指针内容的动态修改,其实就是遍历。对于遍历,简单的莫过于循环。
    一个循环包括以下几个要素:
    1、初始循环指针
    2、循环指针自加减
    2、继续或者退出循环体的条件判断
    被循环的程序主体位于初始循环指针之后,和循环指针自加减之前。
    比如:
    初始循环指针:X=0
    循环开始点M
    被循环的程序主体:-------
    循环指针自加减:X+1=X
    循环条件判断:X≤10 ,False:GO TO M;True:GO TO N
    循环退出点N
    如果把X作为间接寻址指针的内容,对循环指针的操作,就等于对寻址指针内容的动态而循环的修改了。
    【将DB100中的1-11数据字,传送到MW1-11中】
    L L#1 //初始化循环指针。这里循环指针就是我们要修改的寻址指针
    T MD 102
    M2: L MD 102
    T #COUNTER_D
    OPN DB100
    L DBW [MD 102]
    T MW [MD 102]
    L #COUNTER_D
    L L#2 // +2,是因为数据字的偏移基准是字节。
    +D
    T MD 102 //自加减循环指针,这是动态修改了寻址指针的关键
    L L#11 //循环次数=n-1。n=6。这是因为,进入循环是无条件的,
    但已事实上执行了一次操作。
    <=D
    JC M2
    有关于T MD102 ,L L#11, <=D的详细分析,请按照的内容推导。
    【将DB1-10中的1-11数据字,传送到MW1-11中】
    这里增加了对DB数据块的寻址,使用单字指针MW100存储寻址地址,同样使用了循环,嵌套在数据字传送循环外,这样,要完成“将DB1-10中的1-11数据字,传送到MW1-11中”这个任务 ,共需要M1循环10次 × M2循环6次 =60次。
    L 1
    T MW 100
    L L#1
    T MD 102
    M1: L MW 100
    T #COUNTER_W
    M2: 对数据字循环传送程序,同上例
    L #COUNTER_W
    L 1 //这里不是数据字的偏移,只是编号的简单递增,因此+1
    +I
    T MW 100
    L 9 //循环次数=n-1,n=10
    <=I
    JC M1
    通过示例分析,程序是让寻址指针在对要操作的数据对象范围内进行遍历来编程,完成这个任务。我们看到,这种对存储器间接寻址指针的遍历是基于字节和字的,如何对位进行遍历呢?
    这就是下一个帖子要分析的寄存器间接寻址的实例的内容了。
    详解西门子间接寻址<4>
    L [MD100]
    LAR1

    L MD100
    LAR1
    有什么区别?
    当将MD100以这种 [MD100] 形式表示时,你既要在对MD100赋值时考虑到所赋的值是否符合存储器间接寻址双字指针的规范,又要在使用这个寻址格式作为语句一部分时,是否符合语法的规范。
    在你给出个例程的句:L [MD100]上,我们看出它犯了后一个错误。
    存储器间接寻址指针,是作为的存储区域的确切数值单元来运用的。也就是说,指针不包含区域标识,它只是指明了一个数值。因此,要在 [MD100]前加上区域标识如: M、DB、I、Q、L等,还要加上存储区尺寸大小如:X、B、W、D等。在加存储区域和大小标识时,要考虑累加器加载指令L不能对位地址操作,因此,只能非位的地址。
    为了对比下面的寄存器寻址方式,我们这里,修改为:L MD[MD100]。并定MD100=8Hex,同时我们也定MD1=85000018Hex。
    当把MD100这个双字作为一个双字指针运用时,其存储值的0-18bit将会按照双字指针的结构Byte.bit来重新“翻译”,“翻译”的结果才是指针指向的地址,因而MD100中的8Hex=1000B=1.0,所以下面的语句:
    L MD[MD100]
    LAR1
    经过“翻译”就是:
    L MD1
    LAR1
    我们已经定了MD1=85000018,同样道理,MD1作为指针使用时,对0-18bit应该经过Byte.bit结构的“翻译”,由于是传送给AR地址寄存器,还要对24-31bit进行区域寻址“翻译”。这样,我们得出LAR1中终的值=DIX3.0。就是说,我们在地址寄存器AR1中存储了一个指针,它指向DIX3.0。
    -----------------------------
    L MD100
    LAR1
    这段语句,是直接把MD100的值传送给AR,当然也要经过“翻译”,结果AR1=1.0。就是说,我们在地址寄存器AR1中存储了一个指针,它指向1.0,这是由MD100直接赋值的。
    似乎,两段语句,只是赋值给AR1的结果不同而已,其实不然。我们事先定的值是考虑到对比的关系,特意的。如果MD100=CHex的呢?
    对于段,由于CHex=1100,其0-3bit为非0,程序将立即出错,无法执行。(因为没有MD1.4这种地址!!)
    后一段AR1的值经过翻译以后,等于1.4,程序能正常执行。



    http://zhangqueena.b2b168.com
    欢迎来到浔之漫智控技术(上海)有限公司网站, 具体地址是上海市松江区永丰街道上海市松江区广富林路4855弄52号3楼,联系人是聂航。 主要经营电气相关产品。 单位注册资金单位注册资金人民币 100 万元以下。 价格战,是很多行业都有过的恶性竞争,不少厂家为了在价格战役中获胜,不惜以牺牲产品质量为代价,而我们公司坚决杜绝价格战,坚持用优质的原材料及先进的技术确保产品质量,确保消费者的合法利益。