I/O设备范文
I/O设备范文(精选9篇)
I/O设备 第1篇
2个S7-300系列PLC站, 每个S7-300 PLC站主机架均有若干个通过PROFIBUS-DP总线网络 (RS-485电平) 连接的远程I/O分站。PLC1、PLC2、两台监控上位机以环形光钎以太网形式连成网络 (图1) , 其中1~3为带有光口及电口的工业以太网交换机, PC1和PC2为监控上位机。交换机光口分别插入多模光纤构成10/100 Mbps环形以太网, 普通网线连接PLC1、PLC2站中以太网模块和交换机电口。PC1、PC2分别为工程师站及操作员站, 均配有普通网卡, 通过网线插入以太网交换机, 采用杭州和利时自动化有限公司的FACVIEW 6.0组态软件。PLC1及PLC2的远程I/O站通过PROFIBUS-DP电缆与各自的主站以菊花链形式连接。
2014年7月开始, PLC站远程I/O站控制的设备在远程手动和自动运行时出现不明原因停机, 有时一个班停好几次, 有时好几天又正常。进一步观察不明原因停机分两种情况: (1) 设备停机后, 必须中控室操作人员从上位机手动重新启动, 才能正常运行; (2) 设备停机后, 经过短暂时间自行恢复正常运行。
2.故障处理
设备远程手动或自动运行时, 由PLC程序及中控室操作人员命令决定其运行规律。因此首先怀疑是PLC站中控制该设备的梯形图程序出现问题, 但监控西门子STEP7运行程序, 一切正常。而且PLC1及PLC2中程序已经稳定运行8年多, 无人修改程序, PLC程序中不应该有逻辑及其他编程错误。判断PLC硬件出现问题, 先后使用备品更换两个PLC站的主机架CPU模块、各远程I/O站PROFIBUS-DP通信接口模块IM153-2、各远程站I/O模块、主机架及远程I/O机架的底板等部件, 正常运行一段时间后, 问题重现。CPU模块也没有报硬件及与远程站通信故障, 据此初步判断PLC系统硬件正常。使用电脑连接PLC, 用STEP7在线, 打开PLC故障诊断缓冲区。根据故障信息中的日期时间及值班人员记录发现, 每出现1次CPU和某个远程I/O站通信失败, 就有一些设备异常停机。每次通信失败后均能自动恢复, 从通信失败到通信恢复, 时间一般就几秒钟。结合相应设备梯形图程序逻辑分析, 确认是CPU和远程I/O站通信失败, 导致设备异常停机。
2014年9月, PLC2站9#远程I/O站控制的1#二级提升泵异常停机。值班记录显示当日21:55, 泵出现异常停机, 导出的该时段PLC缓冲区部分信息见图2, 可以看出, 21:55:48:25时 (event 2 of 10) , CPU与9#远程I/O通信失败, 21:55:50:509 (event 1 of 10) 通信恢复, 通信中断2 s多。该台水泵部分梯形图程序见图3, I0.0为提升泵控制柜上的现场/远程转换开关, 当开关为远程位置时I0.0为1, 水泵故障时I0.1为1;M100.0为上位机设定的提升泵工作模式, 选定为远程自动模式运行时, M100.0为1, 选定为远程手动模式时为0;M100.1为上位机启/停命令, 当在上位机点动启动水泵时M100.1为1, 再次点动时M100.1为0, 再次点动又为1……M100.0、M100.1与上位机通信软件相连;M200.0为远程自动工作模式时启/停命令;Q0.0为输出继电器, 控制提升泵启/停。根据NETWORK 1, 在现场/远程开关转换选定在远程位置 (I0.0为1) , 无故障 (I0.1为0) , 上位机将该设备选定在远程手动模式时 (M100.0为0) , 在上位机点动开/停机按钮, 则M100.1为1, Q0.0就为1, 水泵运行, 如果要停机, 则需要再次点动开/停机按钮, M100.1为0, Q0.0为0, 水泵停止运行。
本段梯形图程序的输入点现场/远程I0.0、故障I0.1正好来自9#远程I/O站, 输出Q0.0来自另外1个远程I/O站。根据前面PLC故障诊断缓冲区信息分析, 结合NETWORK 1, CPU和9#远程I/O通信中断2 s多一点, 在此时间内Q0.0输出为0, 水泵短时停机后自动恢复运行。从NETWORK 2看, 短时间通信中断, CPU读不到该远程站输入模块的信息, 会自动将对应输入映像区的值设定为0。从程序中可以看出, 一旦I0.0为0, 就将上位机开/停机指令M100.1清0, M100.1为0后, Q0.0就为0, 设备停止运行。只有在上位机人为重新点动水泵启/停按钮, 将M100.1置位为1, 设备才能重新运行。逐一对照检查PLC故障诊断缓冲区中的通信中断信息、相应异常停机设备梯形图程序以及中控室值班记录发现, 每台设备异常停机后重新远程人为启动恢复正常运行, 均是上述原因。
分析发现, 第二类设备异常也是因CPU和相应远程I/O站通信中断引起。
短时间内通信中断后又恢复, 且无任何规律, 几天不出现或一天出现几次。一旦出现CPU上的通信故障, 指示LED灯也是一闪而过又恢复正常, 维护人员现场也无法使用常规的万用表等工具检测捕捉这一过程。
3.解决措施
经咨询西门子技术支持得知, 是电磁干扰进入PROFIBUS-DP总线, 引起CPU与远程I/O站瞬间或短时间通信中断。2014年10月, 按照西门子技术支持提供的减小电磁干扰方法, 进行整改。
(1) PLC CPU所在控制柜及远程I/O站所在控制柜良好接地, 等电位联结CPU所在控制柜与所有远程I/O站所在控制柜接地。该厂PLC2号站CPU所在主机架在1个控制柜, 其他6~14远程I/0站分布在3个控制柜, 4个控制柜紧靠在一起。检查每个柜接地情况, 发现个别接地不牢靠, 重新进行紧固;PLC1号站主机架和远程I/O机架在同一个控制柜, 也对其接地进行检查紧固。若这些控制柜距离较远, 在每一个柜接地良好前提下, 还应将所有控制柜接地做等电位联结。
(2) PLC主机架、远程I/O机架接地。PLC上安装模块的机架有接地点, 必须确保模块机架和本柜体接地良好。
(3) 为保证通信质量, 应优先选用西门子生产的PROFIBUS-DP通信电缆及PROFIBUS-DP接头。制作PROFIBUS-DP接头时, 应轻轻剥开电缆外皮, 不要损坏外包绕的电缆屏蔽层, 按要求将电缆屏蔽层牢固地压接在PROFIBUS-DP接头外壳上。PROFIBUS-DP电缆应该尽可能远离动力电缆, 特别要远离变频设备的动力电缆。检查发现, 该厂PLC1和PLC2站均存在PROFIBUS-DP接头处电缆屏蔽层断裂, 与接头外壳接触不好现象。
(4) 将网络起始两头站点PROFIBUS-DP接头外壳接地。
(5) 采取杜绝电源干扰措施。由于电网中变频设备应用, 大功率动力设备的开关等形成的谐波、浪涌等冲击, 会通过电源对通信造成干扰, 建议用UPS向PLC供电。
经过上述整改, 截至目前, 未再出现设备异常停机现象。
摘要:西门子S7-300系列PLC远程I/O站设备异常停机故障, 结合故障记录, 分析程序, 找出故障原因, 给出具体整改措施。
Python 文件I/O 第2篇
raw_input
input
raw_input函数
raw_input([prompt]) 函数从标准输入读取一个行,并返回一个字符串(去掉结尾的换行符):
#!/usr/bin/python str = raw_input(“Enter your input: ”);print “Received input is : ”, str
这将提示你输入任意字符串,然后在屏幕上显示相同的字符串。当我输入“Hello Python!”,它的输出如下:
Enter your input: Hello PythonReceived input is : Hello Python
input函数
input([prompt]) 函数和raw_input([prompt]) 函数基本可以互换,但是input会假设你的输入是一个有效的Python表达式,并返回运算结果。
#!/usr/bin/python str = input(“Enter your input: ”);print “Received input is : ”, str
这会产生如下的对应着输入的结果:
I/O设备 第3篇
在当前这种趋势下, 在竞赛训练中要培养学生能够根据比赛任务的要求选择模块, 合理配点。配点并不是把所有的模块上的控制和测试点往单片机I/O口上一连就可以了, 因为单片机只有32个I/O口肯定是不够的, 即使用了扩展模块也不够, 肯定有些单片机I/O口要被几个控制或测试点共用, 如果共用不合理对应模块功能将不能实现或不能稳定实现。对此我按多任务编程方法搭建编写了一个调试系统, 包含了所有的模块, 能实现除交直流电机的正反转控制以外的所有功能。
调试系统因用多任务系统原则编程, 每个功能块在使能控制下顺序工作, 在程序中不使用while语句保证任何模块都不会长时间占用CPU, 这为共用单片机I/O口提供了基本保证。在配点中8255扩展模块、DAC模块和数码管用总线法连接, 其余按时序法连接。下面按模块来谈谈我的I/O口分配。
8255扩展模块按总线连接把A1、A0和CS三个控制端作为地址线连到单片机P2口 (地址总线高8位) , 不要接P0口 (不支持) , RST端接在主机模块的单片机RST端口上。
显示模块中含有5个功能块, 其中点阵模块和1602液晶显示模块基本不会用到就不接了。数码管模块也用总线连接, CS1、CS2作为地址线接P2口, 本系统中一共有6根地址线都用P2口, 其中8255的CS端应独用1个点, 保证8255不用时数据口程高阻态, CS1、CS2与A1、A0可共用两个点, 也可分用4个点, 对功能实现没有影响。12864液晶显示模块的数据口接单片机P0口, CS1、CS2、E、R/W、和RS端接单片机P3.0-P3.4, 其中E端要独用其余可与其它模块的控制或测试端共用同一点不会影响液晶的显示。E端在出现下降沿时如其它几个控制端正巧符合写数据要求, 会在液晶上出现错误的显示, 而这种情况在E不独用1个点时是不可避免的, 所以必须独用1个点。液晶的RST端要悬空, 不然无论用单片机控制还是接5V电源正极都有可能在电路中出现干扰时显示复位, 而此端悬空就可避免干扰影响而不影响液晶使用。LED接8255的输出口, 每个LED都要独用一个点, 就算8个LED都用I/O口也够用的。
指令模块包含8个纽子开关、8个独立按钮和1个44矩阵按钮。对纽子开关来说接在8255输入端口上只要软件编写适当不会受8255复位影响, 所以接在8255上以节约单片机I/O口资源是最好的选择。独立按钮同样可接8255的输入口或单片机的I/O端口, 出于节约单片机I/O口资源的考虑, 也接在8255的输入口上同样独立配点。在设备中纽子开关和独立按钮各8个共要16个点, 如要用的多, 可能8255的输入点不够, 就要用到单片机的I/O口, 并与其它模块分配到的点共享同一I/O口, 理论上只要不影响按键的识别和其它模块的功能实现就可以共享I/O口, 我试下来在我搭建的系统中P2口效果最好。在我的系统中用了1个纽子开关, 5个独立按钮, 其中纽子开关和3个独立按钮接8255输入口, 其余2个独立按钮接P2口, 效果很好。矩阵键盘有8个端口对应4行4列, 因我用的是反转法测矩阵键盘, 每个I/O口既要输入也要输出, 如用8255, 每次输入输出变化都要重写控制字非常麻烦, 所以我直接用单片机I/O口, P1和P3口中有部分点是被独用的, 不能用, P0口理论上可以, 但实际效果不好, 特别对第2、3行识别有影响, 这与共享数据口有关, 应为除8255的数据线有高阻态, 其它数据线挂在P0口的模块, 数据线没有高阻态, 会出现相互影响, 使用下来可以通过软件克服, 只有矩阵键盘不行。所以只剩P2口可用, 用下来配合软件效果很好。
机械手模块有5个动作控制口, 9个传感器信号输出口, 使用24V电源。5个动作控制信号是24V低有效, 用单片机直控效果比较好, 我用的是P1.3至P1.7。机械手的传感器输出信号是24V的要通过传感器模块上的光耦进行电平转换才能被8255或单片机接收。为节约单片机I/O口资源用8255输入口就可以了。9个测试信号中机械手伸、缩、手开闭信号可以不测, 因为这几个动作很快只要给予一定延时就可以了。我的系统中只测3个工位位置信号和3个物料有无信号, 每个信号通过光耦接到8255的输入端, 用了8255的PA0到PA5, 运行很稳定。
步进电机模块有CP、DIR、LL、RL和FLT5个控制测试端, CP是步进脉冲输入端必须独用单片机1个点, 不然会影响行走精度或增大噪声。DIR是电机正反转控制信号输入端, 因步进电机禁止在转动时换向, 所以也必须独用单片机1个点, 保证信号稳定。FLT是空闲控制接5V地即可。
LL、RL是左右限位信号输出端, 输出信号类似与独立按钮的输出信号, 接线原则与独立按钮一样。
交直流电机模块上有交直流电机各1个, 各有1个停、转控制点PRI和1个光电传感器输出口。
PRI通过继电器间接控制电机转、停, 继电器的动作是有延时的, 但时间极短, 只要8255刷新及时可以保证继电器动作稳定, 所以接8255的输出口就可以了。光电传感器是用来电机测速的, 其输出信号与独立按钮一样, 接线也与独立按钮一样。
温度传感器模块有模拟、数字温度传感器各1个, 各有1个输出端和1个加热控制端。加热控制也是通过继电器间接控制的, 与交直流电机的PRI端一样, 所以接线原则也一样。模拟温度传感器的输出是0到5V的模拟信号要通过AD转换才能被单片机接收, 所以是接到AD的模拟信号输入端。模块中所用数字温度传感器采用单总线方式, 对时序要求极高, 传输时不能受到任何干扰, 必须独用单片机1个点。
ADC/DAC模块中DAC部分接线可按总线连接, 这样既能实现功能程序也好写。DAC的数据口千万不要用P0口, 因电路中DAC0809的OE端由CS和RD通过一个与非门控制, 而CS和RD是不需要独立分配单片机I/O口的, 那样只要CS或RD端出现低电平DAC的数据口就被打开, 影响P0口的使用。P1和P3口也不能用会影响其它模块的使用, 只能用P2口, 实际效果也很好, ADC的控制线用P1或P3口即可。
我按照上述方法分配I/O口, 配合软件可实现所有模块的可靠工作, 即时几个模块同时动作也可稳定工作。
参考文献
[1]苏平.单片机原理与接口技术
[2]刘春龙, 张炜.单片机控制装置安装与调试备赛
8086的I/O写周期 第4篇
8086在执行输出指令时进入I/0写周期,在I/O写周期中将指定寄存器的内容输出到指定的I/O端口,图2.1l是I/O写周期的时序图。I/O写周期和存储器写周期基本相同,
区别在于两点,一是M/在I/O写周期内为低电平,表示当前进行的是I/0操作;二是I/0端口的地址只有16位,因此图2.11中T1、T2期间没有出现A19~A16。
I/O设备 第5篇
1 XGate-DPS软件库结构
XGate-DPS系列模块都提供了软件库, 用户使用该软件库可以快速开发出设备软件。图1是该软件库的结构图, 整个软件架构将XGate-DPS的资源展示给用户, 这些资源包括输入数据、输出数据、用户参数数据、配置数据、诊断数据等等。图中, 灰色背景部分表示需要用户编程。软件库针对8051、ARM平台做了硬件相关的接口驱动, 一般不需要做任何更改, 如果使用新的硬件平台, 用户需要修改UART驱动。
软件库自行完成UART数据传输控制、命令发送和接收及相关分析处理, 即图中的“XGate数据处理”部分;在“XGate数据处理”的上层, 提供了用户接口函数API, 用户使用这些函数完成对XGate-DPS的操作;一些基于事件的操作, 如DP-V1的读写和数据传输请求, “XGate数据处理”将通过回调方式获取应答和处理;用户应用程序APP可以直接访问XGate资源, 但是, 必须使用API来更新这些资源。
2 XGate-DPS软件设计步骤
用户使用该软件库对XGate-DPS10的操作其实就是完成回调函数、使用API更新资源、访问资源数据。整个设计遵循图2所示的5个步骤, 每个步骤需要完成的工作在图中作了注释, 其中, 大多数场合不需要步骤3;在不使用DP-V1的情况下步骤4几乎也是可以忽略的。
3 总线I/O设备的GSD文件
GSD文件是设备描述文件, 当一个设备确定了其功能和参数后, GSD文件也就确定了。设备的GSD文件一般是通过修改示例GSD文件生成, 示例GSD文件中的大部分关键字和参数已经确定而不需要修改。本例中修改示例如下:
Vendor_Name="ZY Ltd.Co.";//公司名, 用户自行修改Model_Name="总线I/O";//设备名称, 也是组态时该产品的名称Order Number="I/O20100801";//产品序列号, 可按用户名修改Module="DO8 LEDs"0x20;//模块描述, 组态数据0x20表示1个字节输出, 对应了8位输出开关量1Ext_Module_Prm_Data_Len=1Ext_User_Prm_Data_Ref (0) =2End Module
修改的内容一部分是设备的名称、序列号等信息, 另一部分是设备组态数据和用户参数数据部分。设备组态数据指示了设备的输入输出大小, 决定了通信数据结构, 组态数据的设置可以查看XGate-DPS10数据手册的附录;用户参数数据是为了限定或指示设备数据的范围或意义的, 更详细的信息请参考《XGate-DPS10数据手册》。
4 APP设计及回调函数
软件库提供了demo示例代码, 一个软件库基础操作单元如图3所示。
在使用软件包前, 首先要配置cfg.h头文件的宏定义, 这包括与硬件相关的寄存器、缓冲区大小、设备属性等的定义。
使用软件包, 用户没有必要去考虑如何与模块通信, 也不必了解PROFIBUS技术细节, 只需要关心设备功能的实现及如何组织数据。一个典型的前后台用户程序框图如图4所示。
软件包中有两个非常重要的函数Data Update () 和Recv Process () , 调用这两个函数实现数据的交换。接收到的交换数据在sys.Out_data[]数组中, 要发送的数据需要放到sys.In_data[]中。例如:
sys.In_data[0]=red DI () ;//将数字量输入读回放到sys.In_data缓冲区中Data Update () ;//上传输入数据Recv Process () ;//获取输出数据Drive DO (sys.Out_data[0]) ;//将来自主站的输出数据DO输出到开关输出
放到sys数组中的数据顺序与GSD文件描述的设备信息顺序是一致的。在本例中, 8位开关输入量在sys.In_data[0]中, 而16位 (2 B) 计数器占用sys.In_data[12];8位开关输出在sys.Out_data[0]中。来自主站的用户参数数据放在sys.User_para[]数组中, 用户可以根据这些数据的意义设置设备相关功能。
XGate-DPS10支持用户诊断, 用户可以调用Set Diag_Channel () 、Set Diag_Identifier () 、Set Diag_Device () 等函数来完成用户诊断的发送, 在发送这些诊断前, 需要将诊断信息赋值到定义好的结构体中, 例如:
STRUCT_Diag_Channel diag_channel;//通道相关诊断diag_channel.Channel_Byte Type=Channel Byte_In;//字节、输入通道diag_channel.Channel_Number=2;//通道号diag_channel.Channel_Type=Channel Tpye_byte;//类型为字节diag_channel.Eerr Type=STATUS_OVERVOLTAGE;//错误为过压diag_channel.Module_Number=2;//通道所属模块Set Diag_Channel (0, &Diagbuf, &diag_channel) ;//发送诊断数据
当XGate-DPS收到DP-V1读写请求, 也将产生一个中断, 软件库将调用相应的回调函数。在这些回调函数中应首先判断访问的slot_num、index的合法性, 基本格式如下:
switch (slot_num) {case允许的:允许的处理;//在这里使用同样格式进一步对index的合法性判断;完全合法则应答请求数据break;case不允许的:返回访问错误;break;}
PROFIBUS-DP从站应用广泛, 使用通信接口模块来开发总线I/O设备可以有效地缩短开发周期、节省成本投入, 并在可靠性上得到保障。XGate-DPS10符合大多数应用场合, 其高可靠性、方便性、低成本性使其成为开发DP从站设备的首选。
产品调查:I/O模块 第6篇
需求量最大的I/O模块具有数字化和模拟功能。通过设计方案,I/O可插入基座或机架、使更多的I/O点进行对齐,并能同时将数字化和模拟功能组合使用。AutomationDirect公司的PLC、I/O和电脑控制产品经理Jeff Payne认为,在外壳内使用、诊断功能、光隔离功能和易于扩展等功能也颇受欢迎。在预算内将用于特定用途的离散、模拟和高速I/O功能相结合是一个关键的挑战。Payne说,供应商应提供为32个和64个点的高密度I/O,通过更严格的设计为用户节省成本。
例如,Ingersoll控制工程经理Gary Munger称,Ingersoll CM系统公司的新一代深圆角滚压机的成本比以前的I/O模块减少了60%。节省成本的同时,还减少了部件和使用了更经济BallufflO-Link集线器。Munger认为通过减少部件也能降低发生故障的可能性。
被调查者表示,可编程逻辑控制器可用于大多数I/O连接器。其用量比处于第二位的分布式控制系统(DCS)或流程自动化系统(PAS)多出2倍。供应商的应对措施是扩展连接器的功能。Omega工程公司称,该公司的通用远程I/O模块可与所有PLC相连接,并采用菊链式连接将31个I/O模块连接在每个RS-485上。它们可安装于DIN导轨上,具有光隔离功能,其尺寸为0.69-in.3.94-in.4.72-in.(17.5100120mm),适用于小型面板。
你是否用智能嵌入式微处理器I/O模块(装有内嵌式微处理器)替代其它控制器(例如PLC、PAC和循环控制器)?
你需要将I/O系统用于支持哪些网络?(请查看以下所有功能)
被调查者表示,工业以太网和以太网的连接器用于半数以上的网络协议其次是现场总线、设备级和传感器级别的网络,以及无线网络。据称,无线设计还能解决其他问题。
西门子称,西门子工业公司生产的Simatic ET 200pro IWLAN通过任何I/O站和模块进行无线连接,大大减少了通讯电缆与安装费用。坚固耐用的IP67级设计可加载在机器设备上,且无须采用电器外壳。
近三分之一(30%)的被调查者表示,他们使用有嵌入式智能的I/O模块取代其它控制器。伊顿逻辑控制器(ELC)采用的新型I/O,包含了可采用分散式I/O的智能I/O适配器模块,且只需要有限的本地逻辑控制输出。ELC的分散式I/O可通过以太网/IP和Modbus TCP以太网协议,以及Modbus RS-485和DeviceNet进行通信。
关于开发读写设备的计划
被调查者的读写设备包括供应商、价格、质量、生命周期、网络、电源和接地,以及测试等内容。一位被调查者称,应使所有人尽早参与选用过程,并使该过程简化。另外还要为备用I/O和插槽预留空间。另一位被调查者称,应为接线和标记线制定标准,并观察其转换率,从而确保其符合控制要求。通过寻觅分散功能,使I/O靠近使用点,并尽量减少安装和调试时间。
研究设备的用途、位置、客户要求和未来的扩展计划。为设备定径时,确定如何在图纸中查看已完成的控制项目、识别物理点、区分点类型和使用的信号,与现有物理点进行比较,并增设必要的控制硬件将其余点连接起来。
一位被调查者说,在联网和诊断方面“在I/O和连接的设备之间进行寻址是最大的问题。看来,几乎所有供应商都有自己的寻址方案。所以要仔细使用并要考虑到设备间的兼容性和通信的容易程度。”
远程I/O在简化配置、更新速度(现在可实时更新)和成本效益方面取得了长足的进步。另一位被调查者认为,可利用新协议的优势从事研究,尤其是基于以太网的研究。Wago-I/O-System的产品经理Charlie Norz认为,与I/O模块有关的迫切问题主要是关于协议的兼容性、为多种类型I/O的设备节点的功能,以及I/O模块的尺寸等。有些产品在用于通信时,采用的协议数超过16个,并可节省机内的储存空间。
关于生命周期问题,被调查者表示要为今后预留扩展空间,而且要检查现有机型可用于生产和提供支持的时间。另外,还要确保在为应用工程提供支持和编制文件时采用当地语言。种类多样的I/O具有优先权。用于国际标准化编程的IEC-61131-3的优先权更高。ABB公司称其生产的AC500-eCo I/O模块易于维护,具有多种扩展模块和采用IEC 61131-3标准的控制器。
用线性电源代替开关电源,可避免电源和接地时产生的噪音问题。I/O应能进行热插拔,连接后无需下载文件,通道之间相互隔离,与G3具有兼容性,而且功耗较少。Dataforth公司的全国销售经理Bill McGovern说,“通过隔离可消除接地回路,在电压过高时提供防护措施。而噪音过滤,可消除I/O信号中不必要的频率。”
I/O设备 第7篇
1 虚拟地址映射
对外设进行I/O操作即读写外设的寄存器,WinCE系统启动后,无法直接访问其物理地址,因此,我们要理解WindowsCE下的虚拟地址映射。
在WindowsCE中有两种类型的地址:物理地址和映射的虚拟地址[1]。
物理地址是需要被操作系统访问的实际的RAM或设备存储器,它由来自于CPU的物理地址定义,一旦MMU启动,CPU就不能直接访问。内核只能管理512MB的物理内存。
不同架构的CPU硬件上的区别导致虚拟地址映射也不同。SHx和MIPS处理器,不采用MMU,在CPU和内核里定义1G的物理地址,能对其直接进行操作;而ARM和X 86带有MMU单元,在OEMAddressTable中定义物理地址到虚拟地址间的映射关系或者是操作系统启动后调用函数CreateStaticMapping和NKCreateStaticMapping来实现从虚拟地址到物理地址的静态映射。经过静态映射的地址,可以由操作系统内核用于ISR(InterruptServiceRoutine)访问设备。如果我们要在应用程序中访问外设,必须在物理地址和虚拟地址间建立动态映射关系,我们可以使用VirtualAlloc和VirtualCopy(或者直接调用MmmapIoSpace函数)来实现。
静态映射允许OAL,尤其是中断服务历程ISR访问连接到系统的设备。物理的内存块在被映射到虚拟地址空间时,通常被映射两次,分别映射到两个不同的区域,位于512MB使用缓冲(Cached)的区域和512MB不使用缓冲(Uncached)的区域,如图1所示。OEMAddressTable负责创建第一个基于Cached的映射,而操作系统负责自动创建第二个基于Uncached的映射。
如果是操作通过总线挂接的I/O或者存储器,必须先把总线地址转化成CPU上的系统地址,再做物理地址到虚拟地址的映射。这里需要查CPU的Datasheet,找出所要操作的I/O地址。先调用HAL-TranslateBusAddress()把总线地址转化成CPU上的系统地址,再调用MmmapIoSpace函数实现虚实映射;也可以使用TransBusAddrToVirtual()直接把总线上的地址转化成系统的虚拟地址。
在一般的应用程序中访问I/O是访问它的缓存段虚拟地址,而驱动中必须访问无缓存段虚拟地址。缓存段虚拟地址与无缓存段虚拟地址之间的偏移量为0x20000000,即无缓存段虚拟地址=缓存段虚拟地址+0x20000000。
2 关键函数
在动态虚拟地址的映射过程中,需要用到以下3个函数:VirtualAlloc、VirtualCopy、VirtualFree。
VirtualAlloc用于在当前进程的虚拟地址空间中保留或者提交空间,在保留时以64kB为单位,提交时以4kB为单位。其函数原型为
这里需要注意的是fdwProtect参数。如果是驱动程序访问,需要设置为PAGE NOCACHE,以访问无缓存段虚拟地址。如果映射的物理地址范围在0x1FFFFFFF之上,必须使用PAGE PHYSICAL,此时必须把lpvSrc右移八位,实现地址对齐。(这是由内核中VirtualCopy的实现决定的,在那个函数中会判断如果是PAGE PHYSICAL就将PHYSADDR左移8位移回来,源代码位于private/winceos/coreos/nk/kernel目录下的virtmem.c中的DoVirtual-Copy)
3 实例操作
以S3C 2440为例,GPIO的基地址为0x56000000,映射到虚拟地址空间为0xB 1600000,通过对这段虚拟地址空间的操作,就能够完成对GPIO或者其他片内资源的控制、输入输出工作。
(1)首先在BSP中的s2440.h文件,找到虚拟地址映射以及操作GPIO的寄存器结构体(这个在自己制作一些特殊设备的BSP时,会依据需要而发生更改)。
(2)在EVC中建立一个应用程序工程,由于VirtualCopy函数没有在头文件中定义,但是在coredll.lib里面提供了符号连接,所以我们在工程头文件中直接添加一个函数定义就可以了。
v pIOPRegs->rGPFCON=0x5555;
这3个步骤之后,对v pIOPRegs的操作将直接和GPIO的寄存器关联。例如:设置GPF的控制寄存器为全部Output
v pIOPRegs->rGPFDAT=0xFF;
4 结束语
WindowsCE作为实时嵌入式窗口操作系统,是当今应用最多、增长最快的嵌入式操作系统。研究其I/O操作方法,对进一步深入开发具有一定的指导意义。
摘要:介绍Windows CE系统的虚拟地址映射机制,以I/O操作为基础,通用性较强。对关键函数进行了说明,并以S3C2440为例详细介绍了GPIO的操作步骤。
关键词:Windows CE,地址映射,I/O操作
参考文献
[1]张冬泉,谭南林,王雪梅,等.Windows CE实用开发技术.北京:电子工业出版社,2006
I/O设备 第8篇
随着微电子工业和半导体加工技术的不断发展,集成电路的规模不断增大。这使得将复杂系统集成在单个芯片上成为可能,于是便出现了片上系统SOC(System on a Chip)。SOC极大地缩小了系统体积;SOC减少了板级系统SOB(System on Board)中芯片与芯片之间的互连延时,从而提高了系统的性能;SOC采用基于IP(Intellectual Property)核的设计(Core-based Design),它允许在芯片设计过程中复用(Reuse)已经经过验证的高性能的IP核,从而提高了设计效率[1]。FPGA的飞速发展为SOC的发展开辟了新的方向SOPC(System On a Programmable Chip)。对于比较复杂的系统,仅仅使用基于硬件的FPGA对其进行协调控制还是比较困难的,因此通常把一个微处理器内核嵌入到FPGA芯片中,采用软硬件协同设计的技术,不仅使得对设备的控制更加灵活,调试也更加方便,并缩短了开发周期。
MicroBlaze是由Xilinx公司推出的一款32位RISC微处理器IP核,具有很高的可配置度,可以将外部存储器,液晶显示屏、键盘接口等外部设备连接在一起并协调它们的工作,适合设计针对网络、电信、数据通信等应用背景的复杂嵌入式系统。
本文以嵌入式I/O系统为例,介绍了基于MicroBlaze进行嵌入式系统设计开发的方法,给出了一种输入/输出系统的设计实现方案,分析了其开发流程,并讨论了设计开发过程中相应的软硬件设计问题。
2.嵌入式I/O系统总体设计
2.1 MicroBlaze的体系结构
MicroBlaze采用功能强大的32位流水线结构,包含32个32位通用寄存器和1个可选的32位移位器,时钟频率可达150 MHz[3]。MicroBlaze软核的结构框图如图1所示。它具有以下基本特征:
(1)32个32位通用寄存器和2个专用寄存器(程序计数器和状态标志寄存器)。
(2)32位指令系统,支持3个操作数和2种寻址方式。
(3)分离的32位指令和数据总线,符合IBM的OPB总线规范(与外设相连接的低速总线)。
(4)通过本地存储器总线(LMB,本地高速总线)直接访问片内块存储器(BRAM)。
(5)具有高速的指令和数据缓存(cache),三级流水线结构(取址、译码、执行)。
(6)具有硬件调试模块(MDM)。
(7)带8个输入和8个输出快速链路接口(FSL)。
2.2 MicroBlaze嵌入式开发工具EDK
Xilinx公司提供了完善的嵌入式开发工具EDK(Embedded Development Kit)。EDK是Xilinx公司于2003年推出的SOPC系统开发套件。该套件集成了丰富的开发工具和大量的IP核资源,其中集成的工具包括硬件平台生成器(Plat Gen)、硬件仿真模型生成器(Sim Gen)、硬件调试工具(XMD)、软件库生成器(Lib Gen)、应用软件编译工具(GNU Compilers)、软件调试工具(GNU Debuggers)等;IP核资源包括LMB和OPB总线接口、外部存储器控制器(EMC)、SDRAM控制器、UART接口、中断控制器、定时器等[2]。
所有这些工具和资源都由EDK中的XPS(Xilinx Platform Studio)集成开发环境统一管理。XPS提供一个友好的图形用户界面(GUI),使用非常方便。
2.3 系统的设计开发流程
在嵌入式系统的开发中,软硬件协同设计的方法可以降低开发成本,缩短开发时间,并使得设计更加灵活,从而逐步取代了传统的设计流程。其中涉及到的关键问题是系统资源的规划和利用,所以在系统设计前首先要考虑系统功能的软硬件划分,清楚地界定系统内部各项功能的最终实现形式;而在进行软硬件分割时,若想达到系统性能的最佳化,就必须考虑到各功能部件之间数据交换的性能以及不同功能部件之间的同步,确保系统在执行时能满足所需的时间约束(timing constraint)[3]。
EDK工具包括XPS工具和SDK工具,XPS工具完成主要软/硬件设计调试工作,SDK工具用于设计和调试应用软件。ISE工具,用于混合编程和定制IP核。ChipScope Pro工具,用于在线调试硬件系统。第三方工具,如Modelsim工具,用于仿真硬件系统。
在本系统的设计开发过程中就采用了软硬件协同设计的方法,其流程如图2所示。
3.系统的关键硬件模块实现
3.1 44键盘模块的硬件实现
键盘是计算机系统中最常用的人机交互输入设备,然而在应用中都采用通用的键盘扫描器件是不现实的,需要单独设计成专用的小键盘。
(1)44键盘工作原理
44键盘的工作原理如图3所示,其中P0~P3为输出口,P4~P7为输入口。无按键按下时,输入口被上拉为高电平。输出口以一定频率循环输出0111、1011、1101、1110。通过读输入口的状态,便可判断击键情况。键盘扫描电路键盘上的每一个按键其实是一个开关电路,当某键被按下时,该按键的接点会呈现逻辑0状态,反之,未被按下时则呈现逻辑1的状态。当尚未按下键盘时,依据表1所示编码方式逐一扫描键盘按键,键盘输入到按键检测电路的值均为1,使键盘无论扫描哪个键时,都检测到尚未按下键盘;当使用者按下键盘按钮,则键盘输入到按键检测电路的值为0,直到键盘扫描到此键时,检测到已按键。
(2)按键的去抖动问题
按键大多是机械式开关结构,在开关切换的瞬间会在接触点出现抖动的现象。因此,必须加上抖动消除电路。如果要防抖动,就不能用时钟去检测按键的按下状态,而要去检测按键按下或者抬起的边沿。例如按键按下的时候就检测与按键连接的FPGA管脚的下降沿,按键松开的时候就检测与按键连接的FPGA管脚的上升沿。这样就可以不用理会按键按下的时间长度,根据按键按下或者抬起的次数来确定计数。
(3)硬件实现
虽然EDK提供的IP核非常丰富,但不可能满足所有用户的需求,根据实际需求定制IP核是嵌入式设计中常需要的,也是实现“量身定制”系统的前提。EDK工具提供了简单的界面帮助用户完成IP核定制过程,其中非常重要的方式是通过IPIF接口定制IP核。IPIF(IP Interface)是EDK提供的标准IP接口,允许用户在系统内总线上构建自己的IP核,用户只需关注自己想要的功能逻辑,EDK工具会根据用户选择的总线方式实现相应的总线接口逻辑,合成完整的IP核模块[4]。
在接口电路设计中,我们使用IPIF接口定制一个KEY_IP核,用于对键盘进行扫描进而采样键盘输出,最终生成扫描码以及产生中断请求。键盘扫描信号频率只需在几百赫兹左右即可,实现时将50MHZ OPB总线频率分频,上升沿循环扫描,下降沿采样,根据采样结果生成扫描码。
考虑到机械式按键的不稳定性,需要对扫描结果进行防抖处理,故在扫描到有键按下时启动一个计数器,计数若干次同一键被扫描到后,即可认为此键已被人为按下,将其存储于本地寄存器后,产生一个中断请求通知CPU调度键盘中断处理程序。
3.2 LCD液晶显示模块的硬件实现
(1)工作原理
TS1620-1 LCD为162字符型液晶显示器,可显示两行,每行可显示16个字符,通过发送指令,可配置成不同模式。接口部分有1个8位的数据寄存器、1个8位的指令寄存器、一个7位的地址计数(AC)寄存器和1位的忙标志(BF);指令寄存器用于控制LCD内部电路,完成LCD读写、扫描、显示等功能;数据寄存器用于暂存LCD与外部数据的通信数据。基本操作时序如下:
1)读状态:
RW=H,RS=L,E在读状态期间应保持高电平;
2)读数据:
RW=H,RS=H,E在读数据期间应保持高电平;
3)写指令:
RW=L,RS=L,D0-D7指令码,E在指令码稳定后要产生一个下降沿触发LCD执行此指令;
4)写数据:
RW=L,RS=H,D0~D7为待写数据,E在指令码稳定后要产生一个下降沿触发LCD执行此指令;
AC6~AC0的值为CGRAM还是DDRAM地址取决于最近一次向AC写入的是DDRAM还是CGRAM地址。地址只有7位,在进行传的时候,要并上DB7,组成8位一并传,状态同样通过D0~D7读出,格式如表2所示。
(2)硬件实现
在接口电路的设计中,我们使用IPIF接口定制一个LCD_IP核,通过OPB总线对显示设备进行控制和数据传输。LCD_IP与液晶显示模块之间需要连接的主要有数据线和控制信号线,如图4所示,具体为:RS、R/W、EN、DB7-DB0共11位。
Data_I与数据端口连接,负责采集液晶的状态数据。Data_O与数据端口连接,负责将控制指令和显示数据送至液晶。用DataCmdSelect、Execute、Data_T分别控制EN、RS、R/W信号,通过对这些引脚的组合控制,按照一定的时序关系实现对LCD的控制。
LCD_IP核中需要实现以下四种操作:
(1)读状态:
检测忙标志以及AC的值;
(2)读数据:
读出最近一次由DDRAM地址设置指令处DDRAM单元的内容;
(3)写指令:
设置LCD的工作模式、AC值以及显示方式等;
(4)写数据:
向LCD的DDRAM写入要显示的数据,写之前需要设置DDRAM地址;
四种操作中除读状态外都需对忙标志位检测;若BF为高电平,则LCD正在工作中,此时LCD接口部分被锁定,任何指令都将不处理,故需等待知道BF为低时方可进行下一个操作。
在IP核模板的基础上,用周期计数延时获得读、写操作时序,将指令直接传送至LCD,读写操作在IP核中占用几个总线周期,为了防止应用软件在发送指令期间再次发送新指令,IP核提供一个标志位供应用软件读取,以指示是否正在进行读写操作,若是则应用软件需适当延时等待再通知IP核发送下一条指令。
3.3 系统硬件平台的创建
在键盘和LCD液晶的硬件接口设计完成后,我们利用Xilinx公司提供的EDK开发软件XPS中的工具Create and Import Peripheral将其以IP核的方式挂到OPB(On-Chip Peripheral Bus)总线上。创建IP核时,在IPIF提供的服务中选择用户逻辑中断支持以及软件用户逻辑地址寄存器支持,前者使得外围设备可以管理由用户逻辑产生的中断,后者使得外围设备的用户逻辑部分拥有可寻址的寄存器[1]。按照前面所介绍的连接关系进行硬件搭建后,键盘以及LCD液晶显示模块的硬件详细信息都保存在MHS文件中。该文件定义了系统结构、外围设备和嵌入式处理器,也定义了系统的连通性以及系统中每个外围设备的地址分配和对每个外围设备的可配置选项。平台生成工具将MHS文件用于输入,创建了硬件平台。在XPS中选择Generate bit stream,即可以产生硬件配置文件*.bit文件。硬件平台如图5所示。
4.系统的软件设计与实现
4.1 44键盘软件实现
在建立系统时,在OPB总线上添加EDK提供的中断IP核INTC_IP,该IP核INTC可控制多个中断信号。把键盘的用户逻辑产生的中断信号输入到INTC_IP核中,然后INTC_IP核将这个中断信号输入到MicroBlaze的中断端口上,由MicroBlaze进行中断管理。当有中断发生的时候,MicroBlaze会跳转到地址0x10。这是C运行库的一部分,它包括缺省时跳转到中断句柄(interrupt handler)函数,此功能是由Xilinx提供的BSP(Board Support Package)(它是一个最基本的核,为应用程序提供最基本的功能)完成的[7],由于在MSS文件中已经对中断操作路线进行了设置,因此它会跳转到中断处理函数中进行中断处理。同时在引入IP核后,系统会自动生成相关的驱动程序,可以方便使用软件对寄存器进行读写操作。中断处理程序主要是进行了扫描码和ASCII码的转换,并把ASCII码显示在LCD上。
引入中断IP核后,系统会自动生成相关的中断请求号,以及提供与此中断号相关联的默认中断处理句柄(interrupt handler),随后即可在系统初始化时调用XIntc_Register Handler函数注册自定义中断处理句柄替换默认处理句柄。MicroBlaze提供的通用中断处理机制通过XIntc,可以管理多个中断控制器,XIntc中CfgPtr为数组类型,数组元素类型为XIntc_Config用于为中断控制器提供中断管理。XIntc_Config中的HandlerTable用于管理中断请求号与中断处理句柄的关系,所以每个中断控制器可以接收多个中断请求。在发生中断时,MicroBlaze会根据产生中断的中断控制器设备,找到与此设备相关联的XIntc_Config结构,再取出中断发生时的中断请求号,在XIntc_Config结构中找到相应的中断处理句柄,并跳入此处理程序处理中断请求。
4.2 LCD液晶显示模块软件实现
系统上电后,首先根据液晶显示器模块的结构通过写寄存器的方式对各项控制指令代码和参数(如液晶的行数、光标的位置光标、光标是否闪烁等)进行设置,从而完成对液晶显示模块的初始化过程。在对系统进行正确的初始化以后,就可以通过MicroBlaze将数据送至LCD进行显示了。在初始化程序中设置系统控制指令及其参数的方法为:根据用户硬件电路的设计,将指令及参数送到LCD_IP核对应的寄存器地址。系统中每个外设都有自己对应的唯一地址,这个地址是XPS在添加了LCD_IP核后选择Generate Addresses自动产生的。
CheckBF()函数用于通知LCD_IP核发送读取忙标志指令,此函数运行后,LCD_IP核会发出读状态操作指令,在数据有效后,将数据(BF和AC)先缓存于IP核的本地寄存器,而后供应用软件读取;Send Cmd(cmd)函数用于向LCD写入控制命令,从而达到配置LCD和显示字符的目的。需传入有正确命令格式的参数,确定将要执行的操作,在发送之前,需要一直等待CheckBF()检测到BF为低电平;为方便写入数据设有WriteChar、WriteString等函数,此类函数直接调用Send Cmd发出写数据操作;若没有设置LCD工作方式为自动递增AC,则在每次写之前都需要先发出设置DDRAM地址指令。
需要注意的是LCD在写数据之前需发送一系列初始化命令,以配置其工作模式、显示方式等,都是间接通过Send Cmd(cmd)实现。
4.3 应用程序的实现
本系统中应用程序设计部分主要功能为读取按键值,通过查找表的方式完成扫描码到ASCII码的转换,并把键码转换后的值显示在LCD液晶显示模块上。由于前面已经创建好键盘的IP核,又通过LCD_IP核对LCD液晶进行了控制,在此仅需编写主函数即可。按键扫描码的获取可以使用查询或者中断的方式。在具体实现中我们采用中断驱动模式来接收键盘扫描码。采用这种方式,既提高了响应速度,又可实现程序的模块化设计,并便于以后系统的扩充。应用程序调试运行成功之后便会产生.elf可执行文件。
5.系统的开发调试经验
我们更多的采用硬件调试的方法,将系统通过JTAG接口连接到目标板上的XMD调试接口,并把软件代码可执行文件(*.elf)和FPGA硬件配置文件(*.bit)通过Data2Mem转换成新的FPGA位流文件(*.bit)下载到系统中后,通过设置断点,读写内存和寄存器的值等手段来进行调试。最后将调试通过的位流文件,下载到目标芯片上,系统即可正常工作。
另外,结合系统调试过程中的经验,我们发现在进行程序编写时,需要特别注意以下两点:
(1)MicroBlaze为big-endian模式,且其内部总线宽度为32位,因此在对寄存器进行读写时需要注意其数据格式及宽度。
(2)在软件设计中要注意,对于FPGA来说LCD是一个低速设备,因此对于指令的响应需要一定的延迟,需要写一个有延迟作用的函数。
6.结论
本文采用软硬件协同设计的思想,设计并实现了一种基于MicroBlaze处理器的I/O系统。在进行完软硬件功能划分并创建好硬件平台后,对于输入设备键盘的控制以及输出设备LCD液晶显示器的功能设置可以通过软件的方式进行更改。本设计已在Xilinx Spatan3开发板上进行了验证,取得了良好的效果。通过本设计的实现可以看出,MicroBlaze是一个功能强大、应用灵活的嵌入式软处理器,特别是其强大的用户自定义逻辑功能,极大地方便了系统设计。可以预见,基于嵌入式软处理器的SOPC开发方法,必将拥有广阔的应用前景。
摘要:随着微电子工业的不断发展和FPGA技术的不断提高,SOPC技术逐渐成为嵌入式系统技术发展的新方向。本文介绍了XILINX公司的SOPC集成开发环境EDK,以及在EDK中开发和利用用户IP的方法;利用ISE及EDK设计工具设计开发了I/O系统中常用的IP模块,并通过了仿真验证。
关键词:SOPC,MicroBlaze,IP核,软硬件协同设计
参考文献
[1]董代洁,郭怀理等.基于FPGA的可编程Soc设计[M].北京:北京航空航天大学出版社,2006.
[2]Xilinx,“MicroBlaze Processor Reference Guide”EDK(v8.1)[S].January,2006.
[3]Xilinx,“Embedded System Tools Guide”EDK(v8.1)[S].January,2006.
I/O设备 第9篇
研华此次将数据采集、智能处理与数据发布三个核心功能有效融合在单个I/O模块中, 以满足如环境监测、设备故障监测及智慧城市等更广泛的行业应用。
研华WISE-4000系列产品是基于以太网的无线I/O模块, 无需通过网关即可采集和传输信息。由于无限定数量的I/O模块可从传感器采集信息并连接到既有网络, 这意味着该配置将更加简单便捷。
WISE-4000系列内部集成HTML5文档, 无需任何接入点, 即可直接通过web浏览器在移动设备上进行访问和配置。由于WISE-4000采用了时下流行的RESTful API, 系统集成商可通过调整程序以满足其特定需求, 并以更少的工作量获得更多数据, 实现用户效率最大化。
通过WISE-4000系列的数据存储功能, 用户可将标记时间的数据发送到Dropbox或私有云平台, 亦可缓冲在模块中。如此, 当发生网络通信故障时, 即便暂未发送数据至管理员也不会丢失, 有效提高了数据的安全性。
I/O设备范文
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


