| 双极性? 双极性就是信号在变化的过程中要经过“零”,单极性不过零。由于模拟量转换为数字量是有符号整数,所以双极性信号对应的数值会有负数。在S7-200中,单极性模拟量输入/输出信号的数值范围是 0 - 32000;双极性模拟量信号的数值范围是 -32000-+32000。 56: 同一个模块的不同通道是否可以分别接电流和电压型输入信号? 可以分别按照电流和电压型信号的要求接线。但是DIP开关设置对整个模块的所有通道有效,在这种情况下,电流、电压信号的规格必须能设置为相同的DIP开关状态。如上面表1、表2中,0 - 5V和0 - 20mA信号具有相同的DIP设置状态,可以接入同一个模拟量模块的不同通道。 57:模拟量应该如何换算成期望的工程量值? 模拟量的输入/输出都可以用下列的通用换算公式换算: Ov = [(Osh - Osl)*(Iv - Isl)/(Ish - Isl)] + Osl 其中: Ov: 换算结果 Iv: 换算对象 Osh: 换算结果的高限 Osl: 换算结果的低限 Ish: 换算对象的高限 Isl: 换算对象的低限 58:S7-200模拟量输入信号的精度能达到多少? 拟量输入模块有两个参数容易混淆: 1)模拟量转换的分辨率 2)模拟量转换的精度(误差) 分辨率是A/D模拟量转换芯片的转换精度,即用多少位的数值来表示模拟量。S7-200模拟量模块的转换分辨率是12位,能够反映模拟量变化的最小单位是满量程的1/4096。 模拟量转换的精度除了取决于A/D转换的分辨率,还受到转换芯片的外围电路的影响。在实际应用中,输入的模拟量信号会有波动、噪声和干扰,内部模拟电路也会产生噪声、漂移,这些都会对转换的最后精度造成影响。这些因素造成的误差要大于A/D芯片的转换误差。 59:为什么模拟量是一个变动很大的不稳定的值? 可能是如下原因: 你可能使用了一个自供电或隔离的传感器电源,两个电源没有彼此连接,即模拟量输入模块的电源地和传感器的信号地没有连接。这将会产生一个很高的上下振动的共模电压,影响模拟量输入值。 另一个原因可能是模拟量输入模块接线太长或绝缘不好。 可以用如下方法解决: 1) 连接传感器输入的负端与模块上的公共M 端以补偿此种波动。(但要注意确保这是两个电源系统之间的唯一联系。) 背景是: 模拟量输入模块内部是不隔离的; 共模电压不应大于 12V; 对于60Hz干扰信号的共模抑制比为40dB。 2)使用模拟量输入滤波器。 60:EM231模块上的SF红灯为何闪烁? SF红灯闪烁有两个原因:模块内部软件检测出外接热电阻断线,或者输入超出范围。由于上述检测是两个输入通道共用的,所以当只有一个通道外接热电阻时,SF灯必然闪烁。解决方法是将一个100 Ohm的电阻,按照与已用通道相同的接线方式连接到空的通道;或者将已经接好的那一路热电阻的所有引线,一一对应连接到空的通道上。 通讯程序设计在自动化系统的应用越来越广泛,例如plc与操作界面的数据交换,通过通讯对变频器的控制,plc的连网等等。 要想实现plc的通讯编程,首先所选的plc必须有强大的通讯能力,就是说plc的操作系统能够支持多种通讯格式,通常一种品牌的plc如果能够提供给用户更多的编程自由度,那么这种品牌的技术开发能力就越强大,大多数品牌只能提供固定格式的通讯格式或协议,这就大大局限了plc与其他智能设备的数据交换。 我们的plc产品具有RS232和光电隔离的RS485两个自由通讯口,两个通讯口可以同时收发数据,几乎可以适应所有通讯格式,可以提供CRC和BCC等多种校验方式。 以一台PLC通过485通讯控制多个某品牌的变频器为例: 如果该变频器的波特率是9600b/s,8个数据位,奇校验,1个停止位。那么首先必须在plc的嵌入C窗口的初始化代码区编程一个通讯口设置语句:Set485Port(9600,o,8,1);仅仅一个语句就完成了对485通讯口的编程。 由于485通讯必须设定主从关系,这里是plc控制多台变频器,所以plc必须设置为主,因此还需在初始化代码区增加一个地址和主从设定语句:SetAddress(1,MASTER);事实上,对于主控制器来说,地址已经失去意义。 通讯口已经设置完毕,下面就是如何根据要求将数据发送给变频器。 例如一组8字节控制数据如下所示: 01h ---->变频器编号 03h ---->命令 21h ---->两字节参数地址 02h 00h ---->两字节参数 02h CRC --->两字节CRC校验马 CRC PLC程序: Set485TBAddPointer(0); AddNumberTo485TB(0x1); AddNumberTo485TB(0x3); AddNumberTo485TB(0x21); AddNumberTo485TB(0x2); AddNumberTo485TB(0x0); AddNumberTo485TB(0x2); AddCRCTo485TB(); Start485Transmit(); |