- 发布
- 浔之漫智控技术-西门子PLC代理商
- 手机
- 15221406036
- 发布时间
- 2023-12-01 03:37:18
6ES7223-1PL22-0XA8方法说明
一、系统简介
1、 系统是利用人机给PLC信号控制伺服启动、停止和旋转圈数。
2、 所用硬件有FBS—24MCT、台达人机(DOP-A57BSTD)、东元伺服驱动器(TSTA15)和东元伺服马达(TSB07301C-2NL3-1)
二、写好PLC、人机的程式如下:
1、人机组态
下载到人机
有关人机编程详细应用请参考《DOP人机界面使用手册》
2、PLC程式
程序注解
单相高速脉冲输出指令
在编程软件里将PLC的Y0和Y1输出切换到SCO内部的HSPSO电路,并决定输出脉冲的工作模式,操作如下:
在项目窗口中点选I/O组态: 专案名称→系统组态→I/O组态→选择“输出设定”,出现输出设定画面后,便可以决定欲输出的形态(如下图)。
在编程软件里编辑伺服命令表格:
在项目窗口中点选辑伺服命令表格: 专案名称→表格编辑→辑伺服命令表格→右键单击后,点选“新增辑伺服命令表格”会跳出如下图:
表格类别:伺服命令表格。
表格名称:可为联机表格输入一容易辨识的名称,方便日后修改或错用。
表格起始地址:输入指令(FUN140)所用的数据表格起始缓存器SR的起始位置。
设定好后点击确定,跳到以下界面:
点击新增转到下面的画面:
速度:脉冲输出的频率。
运转:脉冲输出量。
等待:当脉冲输出完成时,欲执行下一步等待指令。
跳至:当等待指令条件满足时,描述将要执行的步数。
设定完毕点击确定:
点击确定,伺服命令表格设定完成。
有关FUN140(HSPSO)单轴高速脉冲输出指令的详细应用请参考《使用手册—Ⅱ》第十三章:FBS-PLC的NC定位控制。
三、接好所有的硬件连接线路,设定好伺服驱动器的参数
1、伺服参数:
1)位置控制参数→pn301.0(位置脉波命令型式选择)→选“0”(脉冲(pujse)符号(singn))。
2)位置控制参数→pn302(电子齿轮比分子1) →输入“32768”
3)位置控制参数→pn306(电子齿轮比分母) →输入“3600”
2、伺服与PLC的硬件接线,参见下图:
在接线时45#、47#和41#三脚短接,1#脚由PLC的Y2控制,4#、5#和48#三脚短接,15#和17#位置脉冲命令输入。
注:伺服驱动器的接线、参数设置和其他功能的使用请参考东元伺服说明书。
校验和在信息帧的尾部,用来判断传输的正确与否。当数据从信息源出发,由于信道总是有一定的噪声存在,在信号达到信宿之前会与噪声发生叠加,使接收端收到的二进制数位和发送端实际发送的二进制数位不一致,因而产生差错。进行差错检验的方法很多,常用的有奇偶校验码,水平垂直冗余校验lrc,目前广泛使用的是lrc校验码,它可以查出99%以上18位或更长的突出错误,因而在计算机与plc进行点对点的短程通讯时,采用这种校验方法出错的几率较小。plc接收到计算机发送的命令后,如果没有错误,plc会发出确认码“0”;若有错误,plc会发出错误代码“1”。
4 软件编程
软件编程采用微软的vc++6.0作为开发工具。系统主监控画面要求不断扫描下位机的信号的通断状态,以及读取plc的内部存取单元加以显示。此外手动按钮可以直接控制,由此主程序结构流程图如图2所示。
为了确保通信的成功,在pc机和永宏plc之间开始数据传送前,常采用握手通讯的方法,即pc机发送特征字符,下位机接收并回送同一特征字符,由pc机进行检测正确后开始数据传送,以保证串行通讯数据的可靠。此外在通讯过程中,常因某些原因不能保证每次通讯成功,遇到这种情况,不能简单地宣布通讯失败,本程序设置了通讯重复次数计数器,只有在规定次数后握手通讯仍未完成时,才宣布通讯失败,从而大大提高了通讯的成功率和系统的容错能力。另外,程序中应用定时器对通讯时间加以限制,以免发生死锁情况。定时器的打开和关闭由程序进行控制。握手通讯成功后,设置握手连接成功标志位,这样,pc机和永宏plc之间就可以开始数据传送。握手通讯程序如下:
void cscommplcdlg::onscommstart()
{ m_mscomm.setcommport(1); file://选择com1
m_mscomm.setportopen(true); file://打开串口
m_mscomm.setsettings("9600,e,7,1");
file://波特率9600,偶校验,7个数据位,1个停止位
m_mscomm.setbbbbbmode(1);
file://1:表示以二进制方式检取数据
m_mscomm.setrthreshold(1); file://参数1表示每 file://当收到一只字符时引发一个接收数据的oncomm事件
m_mscomm.setbbbbblen(0); file://设置当前接收区 file://数据长度为0
cbbbbbb sendstr="";//设置要发送的字符串
sendstr+=0x02;
sendstr+="014eabcdefgb8";
sendstr+=0x03;
m_mscomm.setoutput(colevariant(sendstr));
file://发送数据
char sendcount=0;
while(m_mscomm.getinbuffercount==0)
{ sendcount+=1;
if(sendcount0)
{ data=m_mscomm.getbbbbb();
recstr=(char *)(unsigned char *)data.parray->pvdata;
if(strcmp(sendstr,recstr)==0)
{ bbbbsuccess=1; file://设置连接成功标志
m_timer=settimer(1,1000,null);
file://开启定时器
}
}
}
4.1 实时数据监控的实现
在本系统的主监控画面上,如图3所示。要求实时监控现实合格产品数。在下位机plc程序中,每当合格产品经过特定传动待时,光电开关便感应信号,plc对此信号计数,存放于一内存单元。上位机就要定时不断读取此单元内容显示。
程序代码如下:
void cscommplcdlg::ontimer(uint nidevent)
{ cbbbbbb sendstr="";//设置要发送的字符串
sendstr+=0x02;
sendstr+="0";
sendstr+=0x03;
m_mscomm.setoutput(colevariant(sendstr));//发送数据
sleep(50);
variant data;
char s;
char *recstr=&s;
short recdata=0;
short l=m_mscomm.getinbuffercount();
if(l>0)
{ data=m_mscomm.getbbbbb();
recstr=(char *)(unsigned char *)data.parray->pvdata;
recstr[l]=`