⑴ plc与C语言有什么关系啊!
PLC与C语言一点关系都没有
PLC是一种专门为在工业环境下应用而设计的数字运算操作的电子装置。它采用可以编制程序的存储器,用来在其内部存储执行逻辑运算、顺序运算、计时、计 数和算术运算等操作的指令,并能通过数字式或模拟式的输入和输出,控制各种类型的机械或生产过程。PLC及其有关的外围设备都应该按易于与工业控制系统形 成一个整体,易于扩展其功能的原则而设计。
目前,PLC在国内外已广泛应用于钢铁、石油、化工、电力、建材、机械制造、汽车、轻纺、交通运输、环保及文化娱乐等各个行业,使用情况大致可归纳为如下几类。
3.1开关量的逻辑控制
这是PLC最基本、最广泛的应用领域,它取代传统的继电器电路,实现逻辑控制、顺序控制,既可用于单台设备的控制,也可用于多机群控及自动化流水线。如注塑机、印刷机、订书机械、组合机床、磨床、包装生产线、电镀流水线等。
3.2模拟量控制
在工业生产过程当中,有许多连续变化的量,如温度、压力、流量、液位和速度等都是模拟量。为了使可编程控制器处理模拟量,必须实现模拟量(Analog) 和数字量(Digital)之间的A/D转换及D/A转换。PLC厂家都生产配套的A/D和D/A转换模块,使可编程控制器用于模拟量控制。
3.3运动控制
PLC可以用于圆周运动或直线运动的控制。从控制机构配置来说,早期直接用于开关量I/O模块连接位置传感器和执行机构,现在一般使用专用的运动控制模 块。如可驱动步进电机或伺服电机的单轴或多轴位置控制模块。世界上各主要PLC厂家的产品几乎都有运动控制功能,广泛用于各种机械、机床、机器人、电梯等 场合。
3.4过程控制
过程控制是指对温度、压力、流量等模拟量的闭环控制。作为工业控制计算机,PLC能编制各种各样的控制算法程序,完成闭环控制。PID调节是一般闭环控制 系统中用得较多的调节方法。大中型PLC都有PID模块,目前许多小型PLC也具有此功能模块。PID处理一般是运行专用的PID子程序。过程控制在冶 金、化工、热处理、锅炉控制等场合有非常广泛的应用。
3.5数据处理
现代PLC具有数学运算(含矩阵运算、函数运算、逻辑运算)、数据传送、数据转换、排序、查表、位操作等功能,可以完成数据的采集、分析及处理。这些数据 可以与存储在存储器中的参考值比较,完成一定的控制操作,也可以利用通信功能传送到别的智能装置,或将它们打印制表。数据处理一般用于大型控制系统,如无 人控制的柔性制造系统;也可用于过程控制系统,如造纸、冶金、食品工业中的一些大型控制系统。
3.6通信及联网
PLC通信含PLC间的通信及PLC与其它智能设备间的通信。随着计算机控制的发展,工厂自动化网络发展得很快,各PLC厂商都十分重视PLC的通信功能,纷纷推出各自的网络系统。新近生产的PLC都具有通信接口,通信非常方便。
PLC软件系统由系统程序和用户程序两部分组成。系统程序包括监控程序、编译程序、诊断程序等,主要用于管理全机、将程序语言翻译成机器语言,诊断机器故 障。系统软件由PLC厂家提供并已固化在EPROM中,不能直接存取和干预。用户程序是用户根据现场控制要求,用PLC的程序语言编制的应用程序(也就是 逻辑控制)用来实现各种控制。STEP7是用于SIMATIC可编程逻辑控制器组态和编程的标准软件包,也就是用户程序,我们就是使用STEP7来进行硬 件组态和逻辑程序编制,以及逻辑程序执行结果的在线监视。
3.2 PLC提供的编程语言
3.2.1 标准语言梯形图语言也是我们最常用的一种语言,它有以下特点
3.2.1.1 它是一种图形语言,沿用传统控制图中的继电器触点、线圈、串联等术语和一些图形符号构成,左右的竖线称为左右母线。
3.2.1.2 梯形图中接点(触点)只有常开和常闭,接点可以是PLC输入点接的开关也可以是PLC内部继电器的接点或内部寄存器、计数器等的状态。
3.2.1.3 梯形图中的接点可以任意串、并联,但线圈只能并联不能串联。
3.2.1.4 内部继电器、计数器、寄存器等均不能直接控制外部负载,只能做中间结果供CPU内部使用。
3.2.1.5 PLC是按循环扫描事件,沿梯形图先后顺序执行,在同一扫描周期中的结果留在输出状态暂存器中所以输出点的值在用户程序中可以当做条件使用。
3.2.2 语句表语言,类似于汇编语言。
3.2.3 逻辑功能图语言,沿用半导体逻辑框图来表达,一般一个运算框表示一个功能左边画输入、右边画输出。
⑵ arino舵机控制问题
舵机是一种位置伺服的驱动器,主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由接收机或者单片机发出信号给舵机,其内部有一个基准电路,产生周期为20ms,宽度为1.5ms 的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。经由电路板上的IC 判断转动方向,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回信号,判断是否已经到达定位。适用于那些需要角度不断变化并可以保持的控制系统。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。一般舵机旋转的角度范围是0 度到180 度。
舵机有很多规格,但所有的舵机都有外接三根线,分别用棕、红、橙三种颜色进行区分,由于舵机品牌不同,颜色也会有所差异,棕色为接地线,红色为电源正极线,橙色为信号线。
舵机的转动的角度是通过调节PWM(脉冲宽度调制)信号的占空比来实现的,标准PWM(脉冲宽度调制)信号的周期固定为20ms(50Hz),理论上脉宽分布应在1ms到2ms 之间,但是,事实上脉宽可由0.5ms 到2.5ms 之间,脉宽和舵机的转角0°~180°相对应。有一点值得注意的地方,由于舵机牌子不同,对于同一信号,不同牌子的舵机旋转的角度也会有所不同。
用Arino 控制舵机的方法有两种,一种是通过Arino 的普通数字传感器接口产生占空比不同的方波,模拟产生PWM 信号进行舵机定位,第二种是直接利用Arino 自带的Servo 函数进行舵机的控制,这种控制方法的优点在于程序编写,缺点是只能控制2 路舵机,因为Arino 自带函数只能利用数字9、10 接口。Arino 的驱动能力有限,所以当需要控制1 个以上的舵机时需要外接电源。
方法一:
将舵机接数字 9 接口上。
编写一个程序让舵机转动到用户输入数字所对应的角度数的位置,并将角度打印显示到屏幕上。
int servopin=9;//定义数字接口9 连接伺服舵机信号线
int myangle;//定义角度变量
int pulsewidth;//定义脉宽变量
int val;
void servopulse(int servopin,int myangle)//定义一个脉冲函数
{
pulsewidth=(myangle*11)+500;//将角度转化为500-2480 的脉宽值
digitalWrite(servopin,HIGH);//将舵机接口电平至高
delayMicroseconds(pulsewidth);//延时脉宽值的微秒数
digitalWrite(servopin,LOW);//将舵机接口电平至低
delay(20-pulsewidth/1000);
}
void setup()
{
pinMode(servopin,OUTPUT);//设定舵机接口为输出接口
Serial.begin(9600);//连接到串行端口,波特率为9600
Serial.println("servo=o_seral_simple ready" ) ;
}
void loop()//将0 到9 的数转化为0 到180 角度,并让LED 闪烁相应数的次数
{
val=Serial.read();//读取串行端口的值
if(val>'0'&&val<='9')
{
val=val-'0';//将特征量转化为数值变量
val=val*(180/9);//将数字转化为角度
Serial.print("moving servo to ");
Serial.print(val,DEC);
Serial.println();
for(int i=0;i<=50;i++) //给予舵机足够的时间让它转到指定角度
{
servopulse(servopin,val);//引用脉冲函数
}
}
}
方法二
先具体分析一下 Arino 自带的Servo 函数及其语句,来介绍一下舵机函数的几个常用语句吧。
1、attach(接口)——设定舵机的接口,只有数字9 或10 接口可利用。
2、write(角度)——用于设定舵机旋转角度的语句,可设定的角度范围是0°到180°。
3、read()——用于读取舵机角度的语句,可理解为读取最后一条write()命令中
的值。
4、attached()——判断舵机参数是否已发送到舵机所在接口。
5、detach()——使舵机与其接口分离,该接口(数字9 或10 接口)可继续被用作PWM 接口。
注:以上语句的书写格式均为“舵机变量名.具体语句()”例如:myservo.attach(9)。
仍然将舵机接在数字9 接口上即可。
参考源程序B:
#include <Servo.h>//定义头文件,这里有一点要注意,可以直接在Arino 软件菜单栏单击Sketch>Importlibrary>Servo,调用Servo 函数,也可以直接输入#include <Servo.h>,但是在输入时要注意在#include 与<Servo.h>之间要有空格,否则编译时会报错。
Servo myservo;//定义舵机变量名
void setup()
{
myservo.attach(9);//定义舵机接口(9、10 都可以,缺点只能控制2 个)
}
void loop()
{
myservo.write(90);//设置舵机旋转的角度
}
⑶ 在proteus中,用80C51单片机怎么控制四线二相步进电机每个脉冲信号走1.8度
1、在proteus中需要修改步进电机的属性,将step angle 改成1.8,它默认是90的。
2、Proteus软件是英国Lab Center Electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前比较好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上着名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MATLAB等多种编译器。
⑷ 步进电机怎样跟随译码器动作
用弹性联轴器把步进电机和编码器连起来,编码器就能测出步进电机的动作了。
⑸ 机器人控制器的选择方法有哪些
在选购机器人微控制器时候,最先要考虑的一个是速度问题,主要的一个指标就是运行速度MHz,这个计算机的评价指标是一样的,越高的MHz意味着越快的执行速度和你付出越多的钱。这第二个存储容量的指标是决定你的控制器可以实现的功能的多少和复杂程度,越多的存储空间可以让你存储更多的程序代码,从而实现更多,更复杂的功能。编程语言是一个控制器能够接受的语言类型,一般有C语言,汇编语言或者basic语言,这些通常能被高级一点的控制器直接执行,因为在高级控制器里面内置了编译器能够直接把一些高级语言翻译成机器码,建议想玩机器人的人们都学一点C,毕竟这个是目前被绝大多数编译器或者控制器所接受的语言。
最后一个要考虑的是,如何考虑功耗的问题,由于机器人不太好拖一根长长的电源线在屁股上,所以,除了考虑执行电机的功耗以外,另外一个耗电大户就是控制器了。数控的控制系统可以完全实现机器人的功能,但是他没有机器人的手臂,机器人也可以完成数控系统同的工作,看看5轴数铣中心,与你说的机器人差不多。对于PLC的功能就单一一些,属于直接控制到电机了,按照设定好的步骤进行,能够完成简单一些的工作,虽然没有数控系统那么多功能,但是可以说是简化版本的数控系统。
⑹ 基于51单片机控制的绕线机系统 望高手帮忙!!!
ycu.e.cn/zzz/jdsyzx/view.asp?id=8918" target="_blank">http://autoweb.ycu.e.cn/zzz/jdsyzx/view.asp?id=8918
masm是微软出的汇编编译器,支持8088/8086架构的汇编语言,在DOS下运行,需要下载。masm包括:
(1)编辑程序edit.exe
(2)汇编程序masm.exe
(3)连接程序link.exe
(3)调试程序debug.exe
基本使用方法如下,仅供参考:
用之前最好把上面的几个文件保存到盘符下的文件夹里,文件夹名字尽量简单明了,一切为了操作简单。
(1)最好不要用edit.exe,而用记事本编辑汇编程序,这样操作比较方便。保存时,文件类型选为所有文件,再在文件名后面加上.asm,保存即可。
(2)打开命令提示行(运行-->输入cmd-->确定),敲命令进入masm所在文件夹,输入masm *.asm(*表示文件名)回车。
这时会提示
Object filename [*.OBJ]:
表示要生成的目标文件名称,必须填,然后回车。提示
Source listing [NUL.LST]:
表示是否要生成列表文件,填写这生成.lst文件,不填则放弃生成.lst文件。.lst文件用记事本打开能看到源代码的语法错误,查错想当方便,****强烈建议生成****。回车后提示
Cross-reference [NUL.CRF]:
表示生成交叉引用文件.crf,如果有多个.obj文件参与连接就要生成,回车后显示错误数量等信息,编译完成。
(3)输入link *(.obj文件名)
一路回车,返回时已经生成了*.exe。
(4)debug使用比较复杂,不多介绍
⑺ 你好,有C语言写的STM32 摇杆电位器控制步进电机程序吗
C语言之所以命名为C,是因为 C语言源自Ken Thompson发明的B语言,而 B语言则源自BCPL语言。
1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。
20世纪60年代,美国AT&T公司贝尔实验室(AT&T Bell Laboratory)的研究员Ken Thompson闲来无事,手痒难耐,想玩一个他自己编的,模拟在太阳系航行的电子游戏--Space Travel。他背着老板,找到了台空闲的机器--PDP-7。但这台机器没有操作系统,而游戏必须使用操作系统的一些功能,于是他着手为PDP-7开发操作系统。后来,这个操作系统被命名为--UNIX。
1970年,美国贝尔实验室的 Ken Thompson,以BCPL语言为基础,设计出很简单且很接近硬件的B语言(取BCPL的首字母)。并且他用B语言写了第一个UNIX操作系统。
1971年,同样酷爱Space Travel的Dennis M.Ritchie为了能早点儿玩上游戏,加入了Thompson的开发项目,合作开发UNIX。他的主要工作是改造B语言,使其更成熟。
1972年,美国贝尔实验室的 D.M.Ritchie 在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。
1973年初,C语言的主体完成。Thompson和Ritchie迫不及待地开始用它完全重写了UNIX。此时,编程的乐趣使他们已经完全忘记了那个"Space Travel",一门心思地投入到了UNIX和C语言的开发中。随着UNIX的发展,C语言自身也在不断地完善。直到今天,各种版本的UNIX内核和周边工具仍然使用C语言作为最主要的开发语言,其中还有不少继承Thompson和Ritchie之手的代码。
在开发中,他们还考虑把UNIX移植到其他类型的计算机上使用。C语言强大的移植性(Portability)在此显现。机器语言和汇编语言都不具有移植性,为x86开发的程序,不可能在Alpha,SPARC和ARM等机器上运行。而C语言程序则可以使用在任意架构的处理器上,只要那种架构的处理器具有对应的C语言编译器和库,然后将C源代码编译、连接成目标二进制文件之后即可运行。
1977年,Dennis M.Ritchie发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。
C语言继续发展,在1982年,很多有识之士和美国国家标准协会为了使这个语言健康地发展下去,决定成立C标准委员会,建立C语言的标准。委员会由硬件厂商,编译器及其他软件工具生产商,软件设计师,顾问,学术界人士,C语言作者和应用程序员组成。1989年,ANSI发布了第一个完整的C语言标准--ANSI X3.159-1989,简称"C89",不过人们也习惯称其为"ANSI C"。C89在1990年被国际标准组织ISO(International Standard Organization)一字不改地采纳,ISO官方给予的名称为:ISO/IEC 9899,所以ISO/IEC9899: 1990也通常被简称为"C90"。1999年,在做了一些必要的修正和完善后,ISO发布了新的C语言标准,命名为ISO/IEC 9899:1999,简称"C99"。 在2011年12月8日,ISO又正式发布了新的标准,称为ISO/IEC9899: 2011,简称为"C11"。
⑻ 如何用树莓派驱动一个马达
第一步,我先将树莓派的系统安装好, 确定gcc编译器,GPIO口都能正常使用.这些操作大家都可以在design spark中搜到,此处就不细讲.
图2
第二步,准备一个小的马达,再到买一个L298N 电机驱动板. L298N是ST公司生产的一种高电压、大电流电机驱动芯片。该芯片采用15脚封装。主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。
图3
将树莓派上的GPIO 0 1 2 3 分别接到电机驱动板上的IN1、IN2、IN3、IN4口.我们使用的马达连接驱动板后,IN1 IN2 是控制底盘左边的马达, IN3 IN4是控制底盘右边的马达. 控制的原理拿左边的电机来讲: 依次把驱动板的IN1~IN2置为高电平,就可以驱动马达,也就是说,要把树莓派的2个GPIO输出口依次置为高电平。例如,假设用0代表低电平,1代表高电平的话,GPIO 0、1口的电平第一次被置为1、0,第二次被置为0、1,持续下去,电机就会运作。
我修改好的代码如下:
#include
#include
#include
#include
#define CLOCKWISE 1
#define COUNTER_CLOCKWISE 2
void delayMS(int x);
void rotate(int* pins, int direction);
int main(int argc,char* argv[]) {
if (argc < 4) {
printf("Usage example: ./motor 0 1 2 3 \n");
return 1;
}
/* number of the pins which connected to the stepper motor driver board */
int pinA = atoi(argv[1]);
int pinB = atoi(argv[2]);
int pinC = atoi(argv[3]);
int pinD = atoi(argv[4]);
int pins[4] = {pinA, pinB, pinC, pinD};
if (-1 == wiringPiSetup()) {
printf("Setup wiringPi failed!");
return 1;
}
/* set mode to output */
pinMode(pinA, OUTPUT);
pinMode(pinB, OUTPUT);
pinMode(pinC, OUTPUT);
pinMode(pinD, OUTPUT);
int i;
delayMS(50); // wait for a stable status
for (i = 0; i < 500; i++) {
rotate(pins, CLOCKWISE);
}
return 0;
}
/* Suspend execution for x milliseconds intervals.
* @param ms Milliseconds to sleep.
*/
void delayMS(int x) {
usleep(x * 1000);
}
/* Rotate the motor.
* @param pins A pointer which points to the pins number array.
* @param direction CLOCKWISE for clockwise rotation, COUNTER_CLOCKWISE for counter clockwise rotation.
*/
void rotate(int* pins, int direction) {
int i=0;
int j=0;
for (i = 0; i < 2; i++) {
if (CLOCKWISE == direction) {
for (j = 0; j < 2; j++) {
if (j == i) {
digitalWrite(pins[3 - j], 1); // 控制GPIO 2 3为高电平
digitalWrite(pins[1 - j], 1); // 控制GPIO 0 1为高电平
} else {
digitalWrite(pins[3 - j], 0); // 控制GPIO 2 3为低电平
digitalWrite(pins[1 - j], 0 );// 控制GPIO 0 1为低电平
}
}
} else if (COUNTER_CLOCKWISE == direction) {
for (j = 0; j < 2; j++) {
if (j == i) {
digitalWrite(pins[j+2], 1); // 控制GPIO 2 3为高电平
digitalWrite(pins[j], 1); // 控制GPIO 0 1为高电平
} else {
digitalWrite(pins[j+2], 0); // 控制GPIO 2 3为低电平
digitalWrite(pins[j], 0); // 控制GPIO 0 1为低电平
}
}
}
delayMS(4);
}
⑼ 89c51单片机最多能控制几个二相四线步进电机需要同时控制
理论上不添加外设,可以像楼上说的,32个IO口接8个电机,如果接外设,可以和2楼说的一样,接满地球,因为有专用的控制步进电机的芯片,单片机控制电机就非常方便了,不过这样可能就没体会到提问者的意思。我们仅就不添加外设进行讨论。
但是除了IO口的限制,还有单片机的限制,由于单片机运行指令是一条一条执行的,没有并发机制,所以如果对多个步进电机进行同时操作,如果操作频率并不高,可以做到几乎同时(不是严格意义上的完全同时,因为指令一次只执行一条,当然两个电机同步操作同步运转不在讨论范围之内)。但如果接上比较精密的高速度高频率操作的步进电机时,可能就会有问题。
通俗的说,你给步进电机发一个指令,电机会运动一个步距,在电机运动到下一个步距之后,单片机再发送下一个指令,在这两个指令之间单片机可以去做别的事情,比如去控制另一个电机。如果电机操控精细,在最极端的情况下,两个指令之间的间隔,还不足以执行额外的一条指令,那么单片机就只能控制一个电机了。即使用中断也是没用的,第一个电机的运转会受到影响。
所以可以控制多少个电机,要参考你单片机的晶振,和你电机到底需要什么样的控制,如果需要的操作并不太精细,在第一个电机的两条指令间隔能够有时间发送多条指令,那么就能够增加控制电机的数量,这个数量需要根据实际情况来看。
⑽ 数控g代码控制机床 和 plc 控制的关系
数控机床中G代表是一种文本格式的代码,数控系统中G格式不能够直接被PLC辨别的,一般需要另外转换工具或者通过I/O等方式实现与PLC的对接,而PLC本身就是用普通的PLC指令,伺服电机接受的信号有些是PLC给的,有些是数控系统给的(一般是通过G代码控制运控卡来实现)