全国地磅电子秤销售、维修电话158-8101-1465
皮带秤梯形图程序目录
皮带秤的瞬时流量和累计重量怎么在AB PLC中编程?用CPT指令可以吗?
S7-200的皮带秤程序,皮带开启时种序里的数据正负正负的变,不能保持正值,如1233.35 -750 1346.25 -750
皮带秤梯形图程序
皮带秤的梯形图程序可以用于控制和调整皮带秤的运行。下面是一个简单的皮带秤梯形图程序的示例:
```c
#include u003cstdio.hu003e
// 定义皮带秤的相关参数
#define BELT_LENGTH 10.0 // 皮带长度(单位:米)
#define BELT_SPEED 1.0 // 皮带速度(单位:米/秒)
#define TARGET_LOAD 50.0 // 目标负载(单位:千克/秒)
// 定义梯形图中的时间间隔和增益系数
#define TIME_INTERVAL 0.1 // 时间间隔(单位:秒)
#define GAIN_MOTOR 1.0 // 电动机增益系数
#define GAIN_SENSOR 0.5 // 传感器增益系数
// 定义变量
double current_load = 0.0; // 当前负载(单位:千克)
double target_load = TARGET_LOAD; // 目标负载(单位:千克/秒)
double belt_speed = BELT_SPEED; // 皮带速度(单位:米/秒)
double belt_length = BELT_LENGTH; // 皮带长度(单位:米)
// 主函数
int main() {
double delta_time = TIME_INTERVAL; // 时间增量(单位:秒)
double motor_power = 0.0; // 电动机功率(单位:瓦)
double sensor_signal = 0.0; // 传感器信号(单位:电压或电流)
double motor_control_signal = 0.0; // 电动机控制信号(单位:电压或电流)
double belt_motor_current = 0.0; // 电动机电流(单位:安培)
double belt_motor_voltage = 0.0; // 电动机电压(单位:伏特)
double belt_motor_resistance = 0.0; // 电动机电阻(单位:欧姆)
double belt_motor_power = 0.0; // 电动机功率(单位:瓦)
double belt_motor_efficiency = 0.0; // 电动机效率(无单位)
double belt_motor_rpm = 0.0; // 电动机转速(单位:转/分钟)
double belt_motor_torque = 0.0; // 电动机扭矩(单位:牛顿米)
double sensor_signal_offset = 0.0; // 传感器信号偏置(单位:电压或电流)
double iir_filter_coeff = 0.95; // IIR滤波器系数
double previous_sensor_signal = sensor_signal; // 上一个传感器信号值
int loop_count = 0; // 控制循环计数器
int normal_operation = 1; // 正常操作标志,1表示正常,0表示异常
int stop_flag = 0; // 停止标志,1表示停止,0表示继续
int encoder_count = 0; // 编码器计数器,用于测量皮带位移
double encoder_count_prev = encoder_count; // 上一个编码器计数器值
double belt_displacement = 0.0; // 皮带位移(单位:米)
double load_adjustment = 0.0; // 负载调整值(单位:千克/秒)
double current_load_prev = current_load; // 上一个当前负载值
double power_adjustment = 0.0; // 电功率调整值(单位:瓦)
double motor_control_signal_prev = motor_control_signal; // 上一个电动机控制信号值
double rpm_adjustment = 0.0; // 电动机转速调整值(单位:转/分钟)
double previous_rpm = belt_motor_rpm; // 上一个电动机转速值
while (normal_operation) { // 控制循环,直到异常情况发生或停止标志置位
loop_count++; // 控制循环计数器加1
if (loop_count u003e= int(60 / TIME_INTERVAL)) { // 每秒钟至少执行一次循环
loop_count = 0; // 重置控制循环计数器
encoder_count++; // 编码器计数器加1,用于测量皮带位移
if (encoder_count u003e= int(belt_length / BELT_SPEED /TIME_INTERVAL)) {
encoder_count = 0; // 重置编码器计数器
belt_displacement = encoder_count BELT_SPEED TIME_INTERVAL; // 计算皮带位移
load_adjustment = belt_displacement belt_length / (BELT_SPEED TIME_INTERVAL); // 计算负载调整值
current_load = previous_load + load_adjustment; // 更新当前负载值
}
}
// 读取传感器信号
sensor_signal = read_sensor();
// 计算传感器信号偏置
sensor_signal_offset = iir_filter_coeff (sensor_signal - previous_sensor_signal) + (1 - iir_filter_coeff) sensor_signal_offset;
// 计算电动机控制信号
motor_control_signal = motor_control(motor_power, sensor_signal, sensor_signal_offset);
// 计算电动机电流和电压
belt_motor_current = motor_control_signal / belt_motor_resistance;
belt_motor_voltage = belt_motor_current belt_motor_resistance;
// 计算电动机功率和效率
belt_motor_power = belt_motor_voltage belt_motor_current;
belt_motor_efficiency = belt_motor_power / motor_power;
// 计算电动机转速和扭矩
belt_motor_rpm = belt_motor_current (60 / pi); // RPM=p(i/n) [p=pole pair数, i=相数, n=电机的转速]
belt_motor_torque = belt_motor_voltage / belt_motor_rpm;
// 更新变量值
previous_sensor_signal = sensor_signal;
previous_load = current_load;
previous_rpm = belt_motor_rpm;
previous_motor_control_signal = motor_control_signal;
}
return 0; // 程序正常结束
}
设计皮带运料系统的PLC控制程序
这是步进梯形图的一个典型应用例子,你可参照《三菱FX系统编程手册》,里面就有这样一个例子程序。
书不贵,在电子市场大概80-100元,这书将来工作中也非常有用(假如你使用三菱PLC的话)
皮带秤的瞬时流量和累计重量怎么在AB PLC中编程?用CPT指令可以吗?
CPT指令表达式执行表达式中定义的算术运算。
当指令被使能时,CPT指令表达式的数值并且存放结果于目的单元内。
与其他算术指令相比,CPT指令的运算速度稍慢而且占用更多的内存。
CPT指令的优点是它允许用户在一条指令内输入复杂的表达式
你当然可以定时调用这个指令来做
S7-200的皮带秤程序,皮带开启时种序里的数据正负正负的变,不能保持正值,如1233.35 -750 1346.25 -750
只是皮带开启时跳变还是一直跳变?
估计是干扰问题,将PLC可靠接地,并且尽量远离变频器等干扰源。
信号线选择屏蔽线,并且屏蔽层靠近PLC端接地。
如果还是没有改善,可以尝试将信号负通过一个8uF左右的电容接地。