单片机与昆仑通态通讯
基于Modbus的飞思卡尔单片机与MCGS触摸屏通信的实现
基于Modbus的飞思卡尔单片机与MCGS触摸屏通信的实现刘先越; 朱娜; 郭隆军【期刊名称】《《机电设备》》【年(卷),期】2019(036)004【总页数】7页(P28-34)【关键词】船舶电力系统; ModbusRTU; 飞思卡尔单片机; MCGS触摸屏【作者】刘先越; 朱娜; 郭隆军【作者单位】中国人民武装警察部队海警学院浙江宁波 315801; 中国舰船设计研究中心湖北武汉 430064; 中国船舶重工集团第七一一研究所上海 201108【正文语种】中文【中图分类】TN910 引言传统的PLC与触摸屏进行通信实现人机交互的方式虽然有着功能可靠、触点多等优点,但随着船舶电力系统集成度变高,PLC的数据处理和管理能力已无法满足现代船舶要求。
因此,随着单片机嵌入式系统在船舶领域应用越来越广泛,在Modbus协议下的单片机与触摸屏人机交互控制方式得以实现。
根据船舶环境恶劣、工况复杂等特点,本文采用成本低、可靠性高、抗干扰性强的飞思卡尔单片机与昆仑通态 MCGS进行通信试验,详细阐述了 MCGS触摸屏所支持的ModbusRTU协议指令系统的组成及其应答格式,软件设计和试验测试。
1 Modbus RTU协议1.1 Modbus RTU报文格式Modbus通信协议是工业中最开放、通用的协议之一,该协议采用主从应答通信,详细规定了主从应答通信行为,定义了设备能够识别和使用的报文结构。
Modbus 报文帧分为ASCII帧和RTU帧,两种帧格式只在起始位、结束符和校验码上有所区别,其中,RTU帧被MCGS中的“莫迪康Modbus RTU”设备驱动所支持。
这里只介绍RTU帧,ASCII帧可以参考该介绍。
RTU报文帧格式见表1。
使用RTU帧的报文发送需延时≥3.5个字符;设备地址及功能码为1字节;数据区由n个字节组成,每个字节8位;校验区为16位,分两个字节承载低八位和高八位。
表1 RTU报文帧格式帧格式所占字符数起始位≥3.5字符设备地址 8位功能代码8位数据 n个8位CRC校验 16位结束符≥3.5字符网络设备不断侦测网络总线,包括停顿间隔;每个设备都进行解码,以判断数据是否是发给自己的;在最后一个字符结束之后,当接收数据延时≥3.5个字符后,一个新的报文可在此之后开始[1]。
EC20系列PLC与昆仑通态通讯手册
EC20系列PLC与昆仑通态通讯手册感谢您购买艾默生网络能源有限公司的可编程控制器(PLC),在使用我公司EC20系列PLC产品之前,请仔细阅读EC20的相关资料。
本手册主要介绍EC20系列PLC与昆仑通态人机界面(HMI)的通讯设置以及如何通过昆仑通态人机界面访问PLC内部软元件资源(X、Y、M、SM、S、T、C、D、SD、Z)。
昆仑通态人机界面通过EC20PLC协议可与我公司EC20系列PLC进行通讯,硬件通讯接口为RS232或RS485。
下面介绍昆仑通态人机界面与PLC的通讯设置和软元件访问。
目录一、EC20系列PLC通讯设置(ControlStar) (1)二、昆仑通态—MCGS5.5(05.0000) (3)1、通讯设置 (3)2、软元件访问 (6)3、硬件接线 (13)附件 (15)一、EC20系列PLC通讯设置(ControlStar)双击ControlStar中“工程管理器”的“系统块”,弹出系统块。
选择“通讯口”选项卡,将通讯口(0)或(1)(和硬件通讯接口一致)参数设置中选MODBUS协议。
通讯口(1)既可RS232通讯又可RS485通讯,但只能选择其中一种通讯方式。
点击“Modbus设置”按钮,将弹出“Modbus协议参数”对话框;设置PLC的通讯串口,包括波特率、奇偶校验、数据位、停止位和站号,确认是否与人机界面软件的设置一致。
注:PLC设置为“从站”,“传送模式”设置为“RTU模式”,并保证站号的唯一性,无重复站号。
二、昆仑通态—MCGS5.5(05.0000)1、通讯设置点击“工作台”的“设备窗口”选项卡,若列表框中无“设备窗口”,请先点击“新建窗口”按钮新建“设备窗口”。
双击列表中的“设备窗口”或选中“设备窗口”后点击“设备组态”按钮,将弹出“设备组态:设备窗口”和“设备工具箱”对话框;若未出现“设备工具箱”对话框,请点击菜单“查看”的“设备工具箱”子选项。
点击“设备管理”按钮,将弹出“设备管理”对话框;分别将“可选设备”列表中的“EC20PLC(也可能在“用户定制设备”中)”和“通用串口父设备”增加到“选定设备”列表框中,点击“确定”后,在“设备工具箱”中将出现这两个设备。
安川MP2300控制器与昆仑通态触摸屏的通讯设计
安川MP2300控制器与昆仑通态触摸屏的通讯设计发表时间:2019-07-22T15:41:56.210Z 来源:《科技新时代》2019年5期作者:康茂[导读] 本文设计了基于Modbus TCP协议的通讯方案,使MP2300控制器与触摸屏实现数据交换,通讯性能稳定,满足实际使用要求。
佛山市多谱光电科技有限公司 528200 摘要本文介绍安川MP2300控制器与昆仑通态触摸屏的通讯实现方法,详细介绍基于Modbus TCP协议的通讯系统构成、MP2300参数设置和昆仑通态触摸屏的通讯设置,采用MSG-RCV函数实现MP2300与昆仑通态触摸屏数据交互。
关键字 MP2300控制器;触摸屏;Modbus TCP;MSG-RCV;1 引言在工业控制领域中,大多数设备都是采用PLC控制和人机界面作为系统控制方式。
PLC作为逻辑控制、运动控制及过程控制等的控制核心,而参数设置、状态监控、报警提示等信息由人机界面实现。
人机界面有多种形式实现,本文使用触摸屏与PLC控制器实现通讯,进行数据交互。
Modbus TCP具有公开协议、应用范围广、灵活性、性能稳定等特点,因此本文以昆仑通态触摸屏和安川MP2300控制器实例介绍怎样通过Modbus TCP协议构建通讯系统。
2 通讯系统设计安川MP2300是一款采用选配件插槽的运动控制一体机,要实现Modbus TCP通讯功能,需要选配一个具有支持TCP/IP协议的通讯模块218IF-01。
218IF-01模块可支持:Memobus、扩展Memobus、Melsec、Modbus TCP和无协议等。
触摸屏选用昆仑通态的TPC1062K型号,该触摸屏具有10.2英寸的TFT液晶显示,以太网接口,支持Modbus TCP协议。
在此系统中,MP2300作为服务器端,触摸屏做客户端。
3 Modbus TCP通讯实现要实现MP2300与触摸屏Modbus TCP通讯,需要进行相应的218IF-01通讯设置、触摸屏通讯设置和MP2300调用MSG-RCV通讯函数。
ATMEGA16单片机与MCGS通信(MODBUS-RTU协议)
#include <avr/io.h>#include <avr/interrupt.h>#include <util/delay.h>#include "ds18b20.h"#define uchar unsigned char#define uint unsigned intvolatile uchar reve_data,renum=0,mend=0,nend=0,a1=1,a2=1,a3=1,a4=1,a5=1,a6=1,a7=1,a8=1,a9=1; void INT_Init();#define BAUD 38400 //波特率38.4kbp/svolatile uchar rx[7]={0x01,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00};uchar tx[30];volatile uchar crcl=0x00,crch=0x00;uchar led=0xff;//发送字符void send_char( uchar data ){/* 等待发送缓冲器为空 */while ( !( UCSRA & (1<<UDRE)) );/* 将数据放入缓冲器,发送数据 */UDR = data;}void inti_port(){DDRB=0xff;PORTB=0xff;DDRC=0xff;PORTC=0x00;}//CRC效验,将结果存储到CRCok变量中。
checkcrc(uchar *q,uchar nend){uint wcrc=0xffff;int j=0,i=0;for(i=0;i<nend;i++){wcrc ^= *q++;for(j=0;j<8;j++){if(wcrc&1){wcrc>>=1;wcrc ^= 0xa001;}else{wcrc>>=1;}}}crcl = wcrc;crch = wcrc>>8;}int main(void){inti_uart();inti_port();INT_Init();sei();while(1){gettemp();_delay_ms(1050);}}SIGNAL(SIG_UART_RECV){rx[renum++]=UDR;if(renum==8){renum=0;switch(rx[1]){case 0x01:if(!rx[3]){tx[0]=rx[0];//leD灯tx[1]=rx[1];tx[2]=0x01;DDRB=0X00;tx[3]=PORTB;DDRB=0XFF;checkcrc(tx,4);tx[4]=crcl;tx[5]=crch;send_string(tx,6);break;}else{tx[0]=rx[0];//继电器和蜂鸣器tx[1]=rx[1];tx[2]=0x01;DDRC=0X00;tx[3]=PORTC;tx[3]>>=7;DDRC=0XFF;checkcrc(tx,4);tx[4]=crcl;tx[5]=crch;send_string(tx,6);break;}case 0x04:tx[0]=rx[0];tx[1]=rx[1];tx[2]=rx[5]<<1;tx[3]=0x00;tx[4]=teml;tx[5]=0x00;tx[6]=temh;checkcrc(tx,nend=tx[2]+3);tx[tx[2]+3]=crcl;tx[tx[2]+4]=crch;send_string(tx,mend=tx[2]+5);break;case 0x05:DDRB=0XFF;switch(rx[3]){case 0x00:if(!rx[4])PORTB &= ~(1<<PB0);elsePORTB |= (1<<PB0);break;case 0x01:if(!rx[4])PORTB &= ~(1<<PB1);elsePORTB |= (1<<PB1);break;case 0x02:if(!rx[4])PORTB &= ~(1<<PB2);elsePORTB |= (1<<PB2);break;case 0x03:if(!rx[4])PORTB &= ~(1<<PB3);elsePORTB |= (1<<PB3);break;case 0x04:if(!rx[4])PORTB &= ~(1<<PB4);elsePORTB |= (1<<PB4);break;case 0x05:if(!rx[4])PORTB &= ~(1<<PB5);elsePORTB |= (1<<PB5);break;case 0x06:if(!rx[4])PORTB &= ~(1<<PB6);elsePORTB |= (1<<PB6);break;case 0x07:if(!rx[4])PORTB &= ~(1<<PB7);elsePORTB |= (1<<PB7);break;case 0x08:if(rx[4])PORTC |= (1<<PC7);elsePORTC &= ~(1<<PC7);break;}send_string(rx,8);break;default : break;}}}//*****************************红外线接收**********************************************////外部中断初始化void INT_Init(void){MCUCR |= _BV(ISC01); //选择外部中断0,下降沿触发中断MCUCR &= ~_BV(ISC00); //10:INT0的下降沿产生异步中断请求GICR |= (1 << INT0); //使能外部中断请求0DDRD &= ~_BV(PD2); //设置为输入,PORTD |= _BV(PD2); //使能上拉电阻}SIGNAL(SIG_INTERRUPT0){cli();uchar i,j,k = 0,addr[4] = {0};renum=0;GICR &= ~(1 << INT0); //禁止外部中断INT0 关闭外部中断,开始接受数据 for(i = 0;i < 14;i++){_delay_us(400);if(PIND & (1 << PD2)) //9MS内有高电平,则判断为干扰,退出处理程序 {GICR |= (1 << INT0); //使能外部中断INT0return;}}while(!(PIND & (1 << PD2))); //等待9ms低电平过去for(i = 0;i < 4;i++) //{for(j = 0;j < 8;j++)//{while(PIND & (1 << PD2)); //等待4.5ms高电平过去while(!(PIND & (1 << PD2))); //等待变高电平while(PIND & (1 << PD2))//计算高电平时间{_delay_us(100);k++;if(k >= 30) //高电平时间过长,则退出处理程序{GICR |= (1 << INT0); //使能外部中断INT0return; //}}addr[i] = addr[i] >> 1; //接受一位数据if(k >= 8){addr[i] = addr[i] | 0x80; //高电平时间大于0.56,则为数据1 }k = 0; //计时清零}}switch(addr[3]){DDRB=0XFF;case 0x07: if(a1){PORTB &= ~(1<<PB0);a1=0;}else{PORTB |= (1<<PB0);a1=1;}break;//1case 0x0b: if(a2){PORTB &= ~(1<<PB1);a2=0;}else{PORTB |= (1<<PB1);a2=1;}break;//2case 0x0f: if(a3){PORTB &= ~(1<<PB2);a3=0;}else{PORTB |= (1<<PB2);a3=1;}break;//3case 0x13: if(a4){PORTB &= ~(1<<PB3);a4=0;}else{PORTB |= (1<<PB3);a4=1;}break;//4case 0x17: if(a5){PORTB &= ~(1<<PB4);a5=0;}else{PORTB |= (1<<PB4);a5=1;}break;//5case 0x1b: if(a6){PORTB &= ~(1<<PB5);a6=0;}else{PORTB |= (1<<PB5);a6=1;}break;//6case 0x1f: if(a7){PORTB &= ~(1<<PB6);a7=0;}else{PORTB |= (1<<PB6);a7=1;}break;//7case 0x23: if(a8){PORTB &= ~(1<<PB7);a8=0;}else{PORTB |= (1<<PB7);a8=1;}break;//8case 0x03: if(a9)//蜂鸣器和继电器{PORTC |= (1<<PC7);a9=0;}else{PORTC &= ~(1<<PC7);a9=1;}break;//8case 0x27: PORTB=0X00;break;//9case 0x2b: PORTB=0XFF;break;//空格*/ default : break;}GICR |= (1 << INT0); //使能外部中断INT0sei();}#ifndef __ds18b20__H#define __ds18b20__H#include <avr/io.h>#include <util/delay.h>#include <avr/interrupt.h>#define uchar unsigned char#define uint unsigned int#define CLR_DIR_1WIRE DDRC &= ~(1<<PC6)//不再变化#define SET_DIR_1WIRE DDRC |= (1<<PC6) //IO改为输入口,高阻态,外部上拉电阻拉高#define SET_OP_1WIRE PORTC|= (1<<PC6) //改为输出口,输出低电平#define CLR_OP_1WIRE PORTC &=~(1<<PC6)#define CHECK_IP_1WIRE ( PINC & 0x40)void init_1820(void);void write_1820(unsigned char x);unsigned char read_1820(void);void gettemp(void);volatile uint Temperature;volatile unsigned char temh,teml;volatile uchar Num[4];void init_1820(void){SET_DIR_1WIRE; //设置PA0 为输出 SET_OP_1WIRE; //输出1CLR_OP_1WIRE; //输出0_delay_us(480); //480us以上SET_OP_1WIRE; //输出1CLR_DIR_1WIRE; //设置PA0 为输入 _delay_us(20); //15~60uswhile(CHECK_IP_1WIRE);SET_DIR_1WIRE;SET_OP_1WIRE;_delay_us(140); //60~240ussei();}void write_1820(unsigned char x){unsigned char m;for(m=0;m<8;m++){CLR_OP_1WIRE;if(x&(1<<m)) //写数据了,先写低位的! SET_OP_1WIRE;else{CLR_OP_1WIRE;}_delay_us(40); //15~60usSET_OP_1WIRE;}SET_OP_1WIRE;}unsigned char read_1820(void){unsigned char temp,k,n;temp=0;for(n=0;n<8;n++){CLR_OP_1WIRE;SET_OP_1WIRE;CLR_DIR_1WIRE;k=(CHECK_IP_1WIRE); //读数据,从低位开始 if(k)temp|=(1<<n);elsetemp&=~(1<<n);_delay_us(50); //60~120usSET_DIR_1WIRE;}return (temp);}void gettemp(void) //读取温度值{cli();init_1820(); //复位18b20write_1820(0xcc); // 发出转换命令write_1820(0x44);//_delay_ms(10); //不延时也好使,不知道怎么回事! init_1820();write_1820(0xcc); //发出读命令write_1820(0xbe);teml=read_1820(); //读数据temh=read_1820();sei();}#endif。
三菱FX2nPLC与昆仑通态(MCGS)无线通讯经典案例
三菱FX2nPLC与昆仑通态(MCGS)无线通讯经典案例■ 系统组成昆仑通态使用三菱 PLC FX2N 通信口扩展 485 接口通过专用协议对 PLC 站点相应寄存器进行读写操作, 从而实现对站点工作状态的控制。
这种情况下三菱PLC专用无线通讯终端——DTD435MC,可以使计算机远程无线监控远程站点。
西安达泰电子,组态王无线,工业无线通讯,无线plc,达泰电子,无线收发模块,工厂改造成功案例,PLC无线通讯实例■ 昆仑通态组态搭建首先创建工程画面,本实例通过组态软件实时控制 PLC 相应输出寄存器,演示无线通信实时性和稳定性,分别创建 Y000-Y007 等八个按键,用于写输出状态,创建 8 个文本显示框分别显示当前本地按键状态(0 或者 1)0,表示断开状态,1 表示导通状态,再创建 8 个指示灯分直接读取 PLC 端的输出寄存器状态,工程界面如下图所示:西安达泰电子,组态王无线,工业无线通讯,无线plc,达泰电子,无线收发模块,工厂改造成功案例,PLC无线通讯实例剩余步骤详见下文说明文档■ PLC参数设定PLC 按照以下参数设定,专用通信协议,7 E 1,波特率为 9600,H/W 类型选择为 485,传送顺序格式与组态软件相同,这里为格式 4,站号设置为 0 与设备地址对应。
设置超时判定时间 50 以上:西安达泰电子,组态王无线,工业无线通讯,无线plc,达泰电子,无线收发模块,工厂改造成功案例,PLC无线通讯实例■ 实例总结使用两块DTD435MC无线通讯终端,可以取代原有的485通讯线,实现三菱FX2N系列PLC与昆仑通态组态软件的无线通信,并能实时稳定的进行检测控制。
■完整例程下载【西安达泰电子提供】三菱PLC和昆仑通态无线通信(通信口).pdf■ 无线通讯方案的好处1. 节能环保:功耗小,节省大量供电费用2. 高效:解决移动设备的布线困扰,接电即用3. 可靠:达泰电子专注工业无线通讯领域17年。
昆仑通态人机界面与单片机通信实战教程二:脚本驱动的设计
昆仑通态⼈机界⾯与单⽚机通信实战教程⼆:脚本驱动的设计⼤家好,我是『芯知识学堂』的SingleYork,前⾯给⼤家介绍了“昆仑通态⼈机界⾯与单⽚机通信实战教程⼀:⼯程界⾯的设计”,今天笔者就要来给⼤家介绍“昆仑通态⼈机界⾯与单⽚机通信实战教程⼆:脚本驱动的设其实昆仑通态的软件也⾃带了很多标准设备的驱动,如:西门⼦PLC的驱动、三菱PLC的驱动等,直接加载驱动就可以⽤了,但是对于我们⾃⼰开发的单⽚机板的话,就需要⾃⼰编写驱动了。
⼀说到脚本驱动,⾃然就⽀持标准的modbus协议,也⽀持⾃定义协议,对于我们这些不是很复杂的设备来说,个⼈觉得,没必要去深⼊研究modbus协议,尤其是菜鸟,⾃定义协议可能会更加实⽤,所以,笔者重点给⼤家介绍“⾃动义协议”。
我们先来看⼀下,我们之前设计好的HDMI⼯程:从这个HDMI⼯程中我们可以看到,⼀共有14个输⼊状态、12个输出状态和12个输出控制,其中:14个输⼊状态可以⽤2个字节(BYTE),按位操作来实现状态的显⽰;12个输出状态也可以⽤2个字节(BYTE),按位操作来实现状态的显⽰;12个输出控制,我们可以也可以⽤2个字节(BYTE)来按位控制,也可以⽤12个BYTE来按控制,只是按位操作来控制的话,可能操作会⿇烦⼀些,为了操作简单,我们就⽤12个BYTE来实现控制吧;这样⼀来,我们就可以制定以下通信协议:(1)触摸屏读指令(0x80:⼀次性读取多个数据)格式(⼗六进制):主机发送(触摸屏):帧头(2)+ 长度(1)+ 功能码(1)+ 起始地址(2)+和校验(从长度位开始累加)从机应答(单⽚机):帧头(2)+ 长度(1)+ 功能码(1)+ 数据⼀(输⼊状态⼀:X00-X07)+数据⼆(输⼊状态⼆:X10-X17)+ 数据三(输出状态⼀:Y00-T07))+ 数据四(输出状态⼆:Y10-X17)+和校验(从例:主机发送:37 73 04 80 0000 84从机返回:5A A5 06 80 00 00 00 00 86(2)触摸屏写指令(0x81:写单个寄存器操作)格式(⼗六进制):主机发送(触摸屏):帧头(2)+ 长度(1)+ 功能码(1)+ 寄存器地址(2)+寄存器值(2)+和校验(从长度位开始累加)例:37 73 06 81 0000 0001 88写指令从机就不设置单独的返回指令了,在写完之后,可以通过读指令来查询状态来判断有没有写成功。
NA200H PLC与昆仑通态触摸屏以太网通讯
NA200H PLC与昆仑通态触摸屏以太网通讯2016-7-11陈云目录NA200H PLC与昆仑通态触摸屏以太网通训 (1)1、NA200HPLC通讯口设置 (2)1.1NA200HPLC通讯口定义 (2)1.2NA200HPLC通讯口设置 (3)2、NA200HPLC内部测点与MODBUS协议对应关系 (3)3、昆仑通态通触摸屏通讯口 (5)4、昆仑通态通触摸屏通讯设置 (5)4.1设备管理添加添加MODBUS TCP设备 (5)4.2MODBUS TCP设备设置 (6)4.3增加PLC通讯变量 (7)5、M ODBUS协议对昆仑通态通触摸屏例程画面 (8)NA200H PLC本体提供带有一个以太网口,4路内置串口,RS485接口。
以太网接口支持100M以太网,支持MODBUS/TCP协议,4个通讯口都支持Modbus RTU主从站通讯。
本文介绍NA200HPLC与昆仑通态触摸屏通过以太网进行通讯。
1、NA200HPLC通讯口设置1.1NA200HPLC通讯口定义⏹以太网接口定义模块提供1个RJ45接口的以太网,通过以太网与上位机软件通讯。
定义如下图所示:⏹串口接口定义CPU提供4个RS485接口,其中COM1采用DB9F接口方式,COM2既可选择DB9F接口也可采用端子接线方式连接设备(二种方式选择一种),COM3和COM4采用端子接线方式(RS485端子接线定义见CPU模块端子定义),支持波特率9600-115200bps。
DB9F接口定义如下图所示:端子接线的RS485接口定义如下表C2+RS485接口2信号线AC2-RS485接口2信号线BC3+RS485接口3信号线AC3-RS485接口3信号线BC4+RS485接口4信号线AC4-RS485接口4信号线B本文介绍以太网与触摸屏连接使用,所以使用RJ45口与触摸屏连接,连接网线使用标准的直连线即可。
1.2NA200HPLC通讯口设置NA200HPLC的通讯口设置如下图图1.2.1以太网设置:IP地址,PLC以太网口的地址,必须设置。
MA01系列与昆仑通态组态屏通讯例程
MA01系列串口IO联网模块与昆仑通态触摸屏通信例程一、案例简介本案例主要讲解MA01系列串口IO设备与昆仑通态组态屏(以下简称组态屏)操作细则,本文MA01系列以MA01-AACX2240为例,昆仑通态组态屏以TPC7062TX为例。
二、硬件准备MA01-AACX2240串口IO联网模块一台;USB方形口数据线一根;昆仑通态组态屏TPC7062TX一台;12V电源一个;24V电源一个;开关按钮(自锁型)一个;信号发生器一个;通讯电缆若干;电脑一台;三、软件准备MCGS组态软件;亿佰特IO模块配置测试工具V1.6上位机,可在亿佰特官网相对应位置下载;四、工程创建1、新建工程项目选择触摸屏的型号。
如图所示:在设备窗口,建立串口父设备,因为MA01-AACX2240支持标准的ModBus协议,所以建立莫迪康RTU子设备。
如图所示:双击通用串口父设备,设置串口通信参数,串口端口号选择COM2(COM2为RS485通讯);设置通信波特率,数据位数,停止位数,数据校验方式等,与MA01-AACX2240一致。
如图所示:双击子设备,设置设备的地址为1(与MA01-AACX2240一致,MA01-AACX2240地址为1)。
如图所示:2、定义变量可在用户手册中查找MA01-AACX2240相关通道的寄存器地址。
如图所示:增加通道,根据查找的寄存器地址,建立对应的通道,以DO为例,通道类型选择【0区】输出继电器,通道地址设置为1(MCGS通道地址编号=ModBus寄存器地址号+1),通道个数为4。
如图所示:点击快速连接变量,然后自定义变量连接,对应数据对象的别名,设置开始通道以及通道个数。
如图所示:按照上面的方式,新增AI和DI通道。
完成后,如图所示:3、建立组态界面1)、在工作台中点击用户窗口,然后在用户窗口中点击新建窗口,然后进入新建的窗口进行编辑,如图所示:2)、这里以DO为例,首先建立一个控制DO状态的按钮,点击工具箱里的标准按钮,然后在窗口拖动建立一个按钮。
昆仑通态案例程序
昆仑通态案例程序一、设备连接与前期准备。
1. 硬件连接。
首先呢,我们要把昆仑通态触摸屏和PLC(就假设是西门子的S7 200吧)连接起来。
一般是用通讯线,就像给它们俩牵根线让它们能对话似的。
要确保连接牢固,不然信号就可能传不过去,就像打电话信号不好一样,那可就乱套了。
2. 软件设置。
在昆仑通态的编程软件里(比如MCGS嵌入版),我们得先设置好通讯参数。
这就好比告诉触摸屏到哪儿去找PLC这个小伙伴,通信协议得选对喽,波特率、数据位、停止位这些都得和PLC那边设置成一样的。
要是设置错了,触摸屏就会像找错门牌号一样,找不到PLC这个家,也就获取不到数据啦。
二、触摸屏画面制作。
1. 创建画面。
在MCGS里创建一个新的画面,这就像是在触摸屏上画一幅画一样。
我们可以给这个画面取个名字,比如“电机控制与状态显示”,就像给一幅画取个标题。
2. 添加控件。
电机启停按钮。
我们在画面上添加两个按钮,一个是“启动电机”按钮,另一个是“停止电机”按钮。
这两个按钮就像是控制电机的小开关。
我们可以给按钮设置一下外观,让它们看起来好看点,比如说把“启动电机”按钮设置成绿色的,像交通信号灯里的绿灯表示通行一样,这里绿色就表示启动电机这个动作是可以进行的;把“停止电机”按钮设置成红色的,就像红灯表示停止。
电机状态指示灯。
再添加一个指示灯,用来显示电机的运行状态。
当电机运行的时候,这个指示灯就亮起来,就像小灯在说“我在工作呢”;当电机停止的时候,指示灯就灭掉。
我们可以把这个指示灯设置成黄色的,这样比较醒目。
运行时间显示。
还要添加一个文本框来显示电机的运行时间。
这个文本框就像是一个小黑板,专门用来写电机运行了多久。
三、PLC程序逻辑(简单示例)1. 变量定义。
在PLC程序里,我们要定义一些变量。
比如说定义一个位变量来表示电机的运行状态,我们可以叫它“Motor_Running”,当这个变量为1的时候,表示电机在运行;当它为0的时候,表示电机停止。
S7-200SMART和昆仑触摸屏通信方式汇总
S7-200SMART和昆仑触摸屏通信方式汇总常用的通讯方式有以太网通讯和485通讯。
一、以太网通讯形式讲解S7-200 SMART CPU 模块本体标配以太网接口,集成了强大的以太网通信功能。
一根普通的网线即可将程序下载到PLC 中,方便快捷,省去了专用编程电缆。
通过以太网接口还可与其它CPU 模块、触摸屏、计算机进行通信,轻松组网。
符号表比S7-200改进了,添加硬件后,I/O数字量与模拟量地址都在I/O显示出来,用户可将符号添加到模块地址上,点击将符号应用到项目,用户程序就能显示符号,使程序易读。
模拟量输入及输出通道可灵活设置电压输入,电流输入,两个通道一组,模拟量输出是对单一通道设置的。
S7-200 SMART比s200在数字量输入输出端子改了,S7-200数字量输出在CPU上端,输入在 S7-200 CPU下端,和其他CPU不同,有时容易混淆,S7-200 SMART数字量输入在CPU上端,输出在CPU 的下端,另外S7-200 SMART没有PLC运行开关,只能在软件中起动停止CPU.针对S7-200 SMART的优点,在去年接到一个无负压两用一备恒压供水项目,决定用S7-200 SMART作,以前用S7-200做的项目多,触摸屏用昆仑的,由于昆仑触摸屏支持S7-200 SMART以太网通信,于是买了S7-200 SMART CPU和模拟量模块,买了昆仑触摸屏。
接下来安装软件,当时S7-200 SMART软件版本是2.0不支持CPU SR30【AC/DC/REALY】恰好我们买的是CPU SR30【AC/DC/REALY】,在软件中选其他CPU,下载程序可运行,没过几天200 SMART软件更新了,STEP 7 MicroWIN SMART V2.1 Updt1在西门子网站上申请,然后下载,安装,硬件有CPU SR30【AC/DC/REALY】。
至于PLC编程和S7-200没太大区别,接下来编昆仑触摸屏画面,昆仑触摸屏画面编好,连接昆仑触摸屏和PLC,分别下载PLC和触摸屏程序,调试程序,不对的修改。
昆仑通态MCGS软件与欧姆龙PLC串口连接通讯的方法
昆仑通态MCGS软件与欧姆龙PLC串口连接通讯的方法1.硬件连接:首先,需要通过串口线将昆仑通态MCGS软件的计算机与欧姆龙PLC连接起来。
欧姆龙PLC通常具有RS232、RS485或USB串口接口,选择适当的串口线连接到计算机的串口。
确保连接正确,如RS232连接时要确认TXD、RXD、GND等引脚连接准确。
2.配置串口通信参数:在MCGS软件中,打开项目并进入"配置"菜单。
选择"串口参数",配置正确的串口号、波特率、数据位、停止位、奇偶校验等通信参数。
通常情况下,欧姆龙PLC的串口参数默认为9600bps,8数据位,1停止位,无奇偶校验,可根据实际情况进行调整。
3.设置PLC的通信参数:在欧姆龙PLC中,可以通过CX-Programmer软件或其他相关软件进行通信参数的设置。
通过PLC的串口参数设置,将波特率、数据位、停止位等参数与MCGS软件中的设置保持一致。
确保PLC的串口配置正确,并保存设置。
4.编写MCGS软件中的通信程序:在MCGS软件中,可以使用VB脚本或宏命令等方式编写通信程序。
根据PLC的通信协议,通过串口读写数据,实现与PLC的通信。
通常可以通过MODBUS协议、Host Link协议或FINS协议等方式实现。
需要注意的是,通信程序的编写需要根据PLC的具体模块和通信地址进行,需了解PLC的寄存器分配,如D区、C区、W区的地址范围、读写权限等。
在编写通信程序时,可以使用MCGS软件中提供的相关函数或命令来实现读写PLC寄存器的操作。
主要步骤包括:建立通信连接、发送读写命令、接收响应数据等。
根据具体需求,可以实现数据的读取、写入、监控、报警等功能。
总结:昆仑通态MCGS软件与欧姆龙PLC串口连接通讯的方法包括硬件连接、配置串口通信参数、设置PLC的通信参数和编写MCGS软件中的通信程序。
通过正确的配置和编写,实现MCGS软件与欧姆龙PLC之间的数据交互,提供监控、控制和报警等功能。
昆仑通态工程例程
昆仑通态工程例程
昆仑通态工程是一项具有重大意义的科技创新,它的目标是打造一个全球互联的通信网络。
通过该工程,人类将能够实现全球范围内的高速、可靠的通信和信息传输。
这将极大地推动人类社会的发展,并为我们带来无限的可能性。
昆仑通态工程的核心思想是将全球各地的通信设备和网络连接起来,形成一个紧密相连的网络。
通过这个网络,人们可以随时随地进行高清视频通话、快速传输大量数据、共享资源和知识。
这将极大地提升人类的生活质量和工作效率。
昆仑通态工程的实施需要各国政府、企业和科研机构之间的紧密合作。
只有通过合作,才能实现设备的互联互通,网络的稳定运行和数据的安全传输。
同时,昆仑通态工程也需要大量的人才支持,从网络工程师到数据分析师,各个领域的专业人士都能为该工程做出贡献。
昆仑通态工程的实施将带来许多挑战,其中包括网络安全、数据隐私和技术标准等方面的问题。
这些挑战需要各方共同努力来解决,确保网络的安全和稳定。
同时,昆仑通态工程也需要不断创新,以适应科技发展的速度和需求的变化。
昆仑通态工程的成功将彻底改变人类的通信方式,并对各个领域产生深远的影响。
无论是商业领域的跨国合作,还是科学研究的国际
合作,都将因为昆仑通态工程的实施而变得更加便捷和高效。
昆仑通态工程是人类社会发展的重要里程碑,它将为我们带来更加广阔的发展空间。
通过全球互联的通信网络,人们将能够更加便捷地交流、合作和分享。
让我们共同努力,推动昆仑通态工程的实施,为人类的未来创造更美好的前景。
基于单片机的多点分布式温度监控系统
基于单片机的多点分布式温度监控系统摘要本文设计了一个多点分布式温度测控系统,该系统结构简单、性能可靠,可以进行远程多点数据采集与控制,并具有数据存储、温度曲线显示等数据库功能。
关键词单片机;mcgs;通讯;dde中图分类号tp29 文献标识码a 文章编号 1674-6708(2011)45-0210-021 总体方案本集散控制系统包括上位机和下位机两部分。
下位机是一个以at89s51 单片机为核心的数据采集系统,温度测量采用单线数字温度传感器ds18b20,温度传感器采集的数据通过单总线方式传送给单片机进行数据处理;上位机由一台微机构成,采用昆仑通态mcgs[1] 完成组态软件设计,具有良好的菜单操作方式,可以在线监控和显示所有测温点实时温度值。
并具有数据库管理功能:实时温度曲线和历史温度曲线显示以及数据打印等功能。
上位机和下位机通过vb[2]程序实现通讯连接。
2 单片机与ds18b20通讯ds18b20 是dallas 生产的数字式温度传感器,采用数字化技术,能以数字形式直接输出被测点温度值。
同时采用“单线(1-wire)总线”,可以通过单总线直接与at89s51 单片机i/o 口相连接,进行数据传送。
单片机对18b20 操作流程:1)复位;2)存在脉冲;3)控制器发送rom指令;4)控制器发送存储器操作指令;5)执行或数据读写。
3 单片机与vb通讯采用vb6.0的通信控件mscomm与单片机实现通讯,该通信控件提供了标准的事件处理函数、事件、方法,并通过控件属性对串口参数进行设置,比较容易地解决了串口通信问题[3]。
首先,利用vb6.0建立一个工程,将其命名为at51-vb-mcgs;包含一个窗体form1,将窗体form1的linkmode属性设置为1-source,保证链接数据改变时,目标控件都能自动更新;在窗体上建立一个textbox控件和一个mscomm控件,同时建立一个timer 控件,将其interval属性设置为1000ms,控件timer1用于接受单片机数据。
汇川PLC与昆仑通态触摸屏多种方式通讯
汇川PLC与昆仑通态触摸屏多种方式通讯一、PLC通讯硬件此项目选用的PLC型号是汇川的H2u-3232MTQ,按照说明书的介绍,此型号的PLC整机硬件配置两通讯口,COM0口为RS485和RS422,通过跳线JP0选择。
若跳线插入,为纯RS422模式;若跳线断开,为RS485/RS422兼容模式。
COM1硬件为RS485,接口为接线端子。
图1 PLC构造二、触摸屏通讯硬件触摸屏选用的是昆仑通态的TPC7062HI,通讯接口有串口COM(DB9)、USB1(USB2.0)、USB2(B型),与PLC连接通讯选用串口,触摸屏工程下载选用USB口,制作U盘综合功能包,直接把U盘插入USB2.0口下载比用打印线连电脑下载快。
图2 触摸屏背部图三、PLC与触摸屏通讯1.RS232通讯PLC与触摸屏RS232通讯是比较普遍且方便的,需准备一条三菱FX系列的通讯线(触摸屏侧为9针D形母头,PLC侧为8针Din圆形公头),分别插入触摸屏与PLC中。
硬件连接好后进行软件的设置。
打开PLC的编程软件AutoShop进行通讯设置,工程管理——通讯设置——双击COM0进入通讯参数配置,配置参数如图3所示。
图3 PLC编程软件通讯设置打开触摸屏软件MCGS组态软件进行通讯设置,工作台面双击“设备窗口”进入——右键进入设备工具箱添加“通用串口父设备”——设置“通用串口父设备0”的通讯参数——进入设备工具箱添加“三菱_FX系列编程口”——设置“设备0——三菱_FX系列编程口”的通讯参数。
具体操作如图4.1—图4.5所示。
图4.1 触摸屏软件设备窗口图4.2 触摸屏软件设备工具箱图4.3通用串口参数设置图4.4添加通讯口图4.5设置“设备0—三菱_FX系列编程口”通讯参数设置好后,PLC与触摸屏就可以正常通讯了。
正常情况下,这种通讯方式就能满足大部分需求。
但是,当设备出现故障,需要一边操作设备一边监控PLC的程序时,就让人犯了难。
昆仑通态触摸屏与stm32通信方法研究
敬请登录网站在线投稿(t o u g a o.m e s n e t.c o m.c n)2020年第5期51昆仑通态触摸屏与S T M32通信方法研究曹雪花,杨立志(江阴职业技术学院计算机科学系,江阴214433)摘要:昆仑通态触摸屏是当前工业控制中常用的一种人机交互界面,通过该触摸屏与S TM32控制器通信作为部分工业产品的人机交互手段,能够有效简化开发环节,降低开发难度,提高开发效率㊂本文结合实践应用,对两者的通信方法进行了探讨㊂关键词:昆仑通态触摸屏;工业控制;S TM32控制器中图分类号:T P317.4文献标识码:AR e s e a r c h o n C o m m u n i c a t i o n M e t h o d B e t w e e n M C G S a n d S T M32C a o X u e h u a,Y a n g L i z h i(C o m p u t e r S c i e n c e D e p a r t m e n t,J i a n g y i n P o l y t e c h n i c C o l l e g e,J i a n g y i n214433,C h i n a)A b s t r a c t:M C G S i s a k i n d o f h u m a n-c o m p u t e r i n t e r a c t i o n i n t e r f a c e c o mm o n l y,w h i c h i s u s e d i n i n d u s t r i a l c o n t r o l a t p r e s e n t.A s a m e a n s o f h u m a n-c o m p u t e r i n t e r a c t i o n f o r s o m e i n d u s t r i a l p r o d u c t s,c o mm u n i c a t i o n b e t w e e n t h e t o u c h s c r e e n a n d S TM32c o n t r o l l e r c a n e f f e c-t i v e l y s i m p l i f y t h e d e v e l o p m e n t p r o c e s s,r e d u c e t h e d i f f i c u l t y o f d e v e l o p m e n t a n d i m p r o v e t h e e f f i c i e n c y o f d e v e l o p m e n t.C o m b i n i n g w i t h p r a c t i c a l a p p l i c a t i o n,t h e c o mm u n i c a t i o n m e t h o d s b e t w e e n t h e m i s i n t r o d u c e d.K e y w o r d s:M C G S t o u c h s c r e e n;i n d u s t r i a l c o n t r o l;S TM32c o n t r o l l e r引言昆仑通态触摸屏除支持与多种P L C通信外,还可以通过通用串口设备通道与其他仪器仪表进行通信, S TM32控制器作为一种32位处理器被广泛应用在物联网技术㊁工业自动化㊁机器人技术等领域,其HM I多采用F S M C技术,与8080接口L C D屏连接,开发人员需要了解相关型号的L C D屏的各种寄存器功能,需要对F S M C 接口有充分的了解,还需要对触摸功能进行设置,如果是电阻屏还需要进行校准,如果借助第三方库还需要做大量的移植工作,开发周期及实现效果受多方面因素的制约,对于需要快速实现开发效果的场合,采用常用的工业触摸屏与控制器结合来完成是一种不错的选择㊂1昆仑通态触摸屏串行通信口设置串行通信口由于通信协议简单,编程实现相对方便,在工业控制㊁物联网等领域具有较广泛的应用,以下主要围绕串口通信进行讨论㊂在设备窗口中添加 通用串口父设备 ,随后添加子设备,选择 莫迪康M o d b u s R T U ,双击该子设备,进入 子设备 配置界面,对设备属性值进行配置,主要配置以下属性:①最小采集周期,该属性值主要指触摸屏向下位机请求或设置数据的周期,设置值要根据下位机处理能力㊁待处理任务特点及下位机代码响应机制进行确定,一般可在100~5000m s之间进行选择㊂②设备地址,该属性一般用于单台触摸屏与多个控制器进行通信的情况,主要用于下位机身份确认㊂③功能码,设备通道及连接变量部分主要是指触摸屏向下位机申请数据(读请求)或设置数据(写请求)所涉及的变量及寄存器起始地址,这里所述的变量是指定义在触摸屏实时数据库中的变量,用户可以通过触摸屏G U I 元素或脚本程序改变或显示这些变量的值㊂寄存器是指下位机中接收写数据或提供读数据的单元,既可以在下位机中随机定义,也可以视情况定义为地址连续的数组,响应读写命令时要注意顺序㊂设备通道及连接变量一经配置完毕并启用后,触摸屏将按照规定采集周期向下位机发送读写码,读写码遵循M o d b u s协议,具体格式如下(各列依次为:从机地址,功能码,寄存器地址高8位㊁低8位,寄存器数量高8位㊁低852M i c r o c o n t r o l l e r s &E m b e d d e d S y s t e m s 2020年第5期w w w .m e s n e t .c o m .c n位,C R C 校验高8位㊁低8位):0x 10x 1R H 8R L 8R N H 8R N L 8C R C H 8C R C L 80x 10x 2R H 8R L 8R N H 8R N L 8C R C H 8C R C L 80x 10x 3R H 8R L 8R N H 8R N L 8C R C H 8C R C L 80x 10x 4R H 8R L 8R N H 8R N L 8C R C H 8C R C L 80x 10x 5R H 8R L 8R N H 8R N L 8C R C H 8C R C L 80x 10x 6R H 8R L 8R N H 8R N L 8C R C H 8C R C L 80x 10x F R H 8R L 8R N H 8R N L 8C R C H 8C R C L 80x 10x 10R H 8R L 8R N H 8R N L 8C R C H 8C R C L 8其中从机地址一般是指采用R S 485通信时设定的地址,功能码共有8种,其具体含义如表1所列㊂表1 功能码含义功能码功能说明0x 1读从机位状态读从机线圈寄存器,位操作,可读单个或者多个0x 2读离散位状态读离散输入寄存器,位操作,可读单个或多个0x 3读保持寄存器读保持寄存器,字节指令操作,可读单个或者多个0x 4读输入寄存器读输入寄存器,字节指令操作,可读单个或者多个0x 5写单个位(线圈)写单个位或线圈,位操作,只能写一个0x 6写单个保持寄存器写单个保持寄存器,字节指令操作,只能写一个0x F 写多个位(线圈)写多个线圈㊂若数据区的某位值为1表示被请求的相应线圈状态为O N ,若某位值为 0 ,则为状态为O F F 0x 10写多个保持寄存器写多个保持寄存器,字节指令操作,可写多个对于以上功能码,一般只使用其中的两种(读㊁写需各选择一个)即可完成任务,与S TM 32交互用得较多的是0x 3功能码和0x 10功能码,昆仑通态触摸屏的相关读写通道及脚本函数中默认提供这两类功能码㊂2 下位机串行通信口设置如果距离较近,一般下位机采用R S 232与触摸屏通信,否则需要采用R S 485接口进行通信,由于触摸屏发送的数据没有结束标志(一般为\r \n ),为了保证每一次通信数据的完整性,需要对通信方法作特殊处理㊂本文下位机采用S TM 32F 4系列处理器,使用R S 232通信口与触摸屏通信,在每帧数据没有结束标志的情况下,采用串口空闲中断与D MA 相配合进行接收,实验结果表明能够完整地接收每帧数据,具体设置方法如下:(1)指定串口与D M A 关联通道根据S TM 32F 4硬件手册中给出的D MA 1请求映射表(如图1所示),可以看出除串口1外,其余S TM 32F 4的串口收发通道都由D MA 1进行管理,如串口5的接收通道由D MA 1_S t r e a m 0的D MA _C h a n n e l _4进行管理,在使用前,需对数据流0的通道4进行配置,设置好用于存储接收到的数据起始地址,并使能D MA 请求和数据流㊂图1 硬件手册中给出的D M A 1映射表对应的串口需调用库函数U S A R T _I T C o n f i g(U A R T 5,U S A R T _I T _I D L E ,E N A B L E );开启空闲中断㊂每当一轮数据接收完毕会进入串口空闲中断处理函数,在空闲中断处理函数中除对接收到的数据做适当的处理外,如果还想继续接收数据,需要对D MA 的流及其对应通道重新进行设置㊂(2)正确响应触摸屏请求的设置对于昆仑通态触摸屏的定时读请求,如果下位机不能正确进行响应,该请求将以指定的时间间隔连续发送3次,进而由调用!S e t D e v i c e ()脚本函数发送的读或者写请求,无论下位机是否响应,只发送1次,在设计时需要特别注意,以避免因接收到的请求信息次数不同对下位机程序执行流程造成影响㊂另外要注意的一点是尽量不要同时使用D MA 处理串口响应触摸屏请求的数据,如对串口5,使用数据流0的通道4完成数据接收,同时又使用数据流7的通道4处理数据发送,如果不能合理处理中断,将会对触摸屏请求的响应造成影响,比较稳妥的办法是直接通过串口5发送响应数据㊂3 下位机响应触摸屏数据请求下位机对触摸屏读写数据请求进行正确响应,除关系到任务功能能否实现外,还关系到整个系统运行的实时性㊂对于读请求,要考虑通道关联的变量顺序㊁类型等因素,下位机要依据各个通道关联的变量顺序将数据填入响应缓存的对应位置,如果位置顺序错误,则在触摸屏端接收到的数据也不正确,下位机在准备数据时还应考虑到M o d b u s 数据响应格式,如对读多寄存器命令(功能码0x 3)的响应格式如下:敬请登录网站在线投稿(t o u g a o.m e s n e t.c o m.c n)2020年第5期57图10185m测距误差分析图标的解析㊂经大量实验验证该系统具有良好的定位实时性和准确性,在200mˑ300m定位范围内,移动标签位置误差在10c m以下㊂参考文献[1]Q i n S h i,S i h a o Z h a o,X i a o w e i O u i,e t a l.A n c h o r s e l f-l o c a l i z a-t i o n a l g o r i t h m b a s e d o n UW B r a n g i n g a n d i n e r t i a l m e a s u r e-m e n t s[J].T s i n g h u a S c i e n c e a n d T e c h n o l o g y,2019,24(6): 728737.[2]T a k o u a S o l t a n i,I m e n S o l t a n i,T a o u f i k A g u i l i.E l e c t r o m a g n e t-i c m o d e l i n g o f a n a c t i v e i n t e g r a t e d a n t e n n a w i t h a M E S F E T d e v i c e u s i n g M o M-G E C m e t h o d f o r UW B a p p l i c a t i o n s[J]. J o u r n a l o f E l e c t r o m a g n e t i c W a v e s a n d A p p l i c a t i o n s,2019,33 (15):122.[3]S h a n S h a n G a o,J i a L i n L i,H u i M i n Q i a o.C o m p a c t B a n d N o t-c h ed S l o t A n te n n af o r U l t r a-W i d e b a n d(UW B)A p p l i c a t i o n s B a s e d o n S t r o ng C o u p l i n g s S l o t s[J].J o u r n a l o f E l e c t r i c a l E n-g i n e e r i n g a n d T e c h n o l o g y,2019(8):15.[4]Y u a n X u,T a o S h e n,X i Y u a n C h e n,e t a l.P r e d i c t i v e A d a p t i v e K a l m a n F i l t e r a n d I t s A p p l i c a t i o n t o I N S/UW B-i n t e g r a t e dH u m a n L o c a l i z a t i o n w i t h M i s s i n g U W B-b a s e d M e a s-u r e m e n t s[J].I n t e r n a t i o n a l J o u r n a l o f A u t o m a t i o na n d C o m p u t i n g,2019,16(5):604613.[5]F e n g G,S h e n C,L o n g C,e t a l.G D O P i n d e x i nUW B i n d o o r l o c a t i o n s y s t e m e x p e r i m e n t[C]//2015I E E E S e n s o r s,2015.[6]刘琦,沈锋,王锐.基于UW B定位系统硬件平台设计[J].电子科技,2019,32(10):2227.[7]顾慧东,焦良葆,周健.室内UW B通信高精度定位系统设计[J].软件导刊,2019(10):15.[8]徐庆坤,宋中越.基于UW B的自主跟随机器人定位系统的设计[J].计算机工程与设计,2019,40(11):33373341.[9]S h u n y i Z h a o,B i a o H u a n g,F e i L i u.L o c a l i z a t i o n o f I n d o o r M o-b i l e R o b o t U s i n g M i n i m u m V a r i a nc e U n b i a s ed F I R F i l te r [J].I E E E T r a n s a c t i o n s o n A u t o m a t i o n S c i e n c e&E n g i n e e r-i n g,2018,15(2):410419.[10]Y u n P e n g L y u,L e i Z h u,C h o n g H u C h e n g.A N e w D e s i g n o fU l t r a w i d e b a n d S i n g l e-L a y e r90ʎP h a s e S h i f t e r i n t h e V i e w o f G r o u p D e l a y[J].I E E E M i c r o w a v e a n d W i r e l e s s C o m p o-n e n t s L e t t e r s,2019,P P(99):13.[11]M a r c o C h i a n i,A n d r e a G i o r g e t t i,E n r i c o P a o l i n i.S e n s o r R a-d a r f o r O b je c t T r a c k i n g[J].P r o c e e d i n g s of t h e I E E E,2018, 106(6):10221041.[12]潘忠祥,江剑.基于UW B的三边优化算法研究[J].国外电子测量技术,2019(2):2529.[13]裴凌,刘东辉,钱久超.室内定位技术与应用综述[J].导航定位与授时,2017,4(3):110.王玉磊(研究生),主要研究方向为检测技术与仪器仪表;王浩全(教授),主要从事无损检测研究㊂(责任编辑:薛士然收稿日期:2020-01-08)52a d d r f u n c rb y t e D1H D1L D N H D N L C R C H C R C L 0x010x032*N x x x x x x x x x x C R C H C R C L其中,返回字节数2*N中的N是指请求指令中给出的寄存器数量,每个寄存器为16位,2个字节,所以这里应返回2*N个字节的数据,两个字节对应一个变量(寄存器)㊂而对于写功能码,如写单个寄存器指令0x6,其响应数据与发送的指令数据一样,在进行确认时只要对响应数据与发送的指令数据逐个对比即可,如果比较结果完全相同,则认为得到正确的响应㊂对于其他指令的响应,请参考相关M o d b u s协议㊂结语本文采用昆仑通态触摸屏T P C1061H n与S T M32F4控制器通信完成相关工业控制任务,能够快速实现开发任务,有效缩短开发周期,取得了较好的效果㊂参考文献[1]刘鹏,蔡红专,方志东.基于S TM32风光互补控制系统设计[J].计算机产品与流通,2019(9).[2]尹成明.基于P L C实现与台达触摸屏通讯系统研究[J].黑龙江科技信息,2011(18).[3]董宗祥,石红瑞,杨杰.嵌入式智能小车测控系统的设计与实现[J].计算机测量与控制,2010(2).[4]李洁,胡晓东,刘岩.P L C与触摸屏在直流充电桩中的通信研究[J].电工技术,2018(16).[5]尤慧芳.M o d B u s R T U单片机通信程序编写方法[J].工业控制计算机,2009(12).[6]王旭,吴栋,董庆源.基于M o d b u s协议的触摸屏与单片机通讯控制[J].电子制作,2015(9).(责任编辑:薛士然收稿日期:2019-11-18)。
基于ModBus协议的STM32单片机与MCGS通信设计
基于ModBus协议的STM32单片机与MCGS通信设计ModBus是一种常用的通信协议,广泛应用于工业自动化领域。
本文将介绍如何基于ModBus协议设计和实现STM32单片机与MCGS之间的通信。
一、引言在现代工业自动化系统中,通信是不可或缺的一环。
STM32是一款功能强大的单片机,而MCGS是一款常用的人机界面软件,它们之间的通信可以实现对工业设备的控制和监测。
本文旨在介绍如何利用ModBus协议实现STM32单片机和MCGS之间的稳定通信。
二、通信原理ModBus协议是一种基于主从结构的通信协议。
在通信过程中,STM32单片机作为从机,MCGS作为主机。
主机通过发送指令来获取或设置从机的数据。
三、硬件设计1. STM32单片机选择在本设计中,我们选择了一款功能强大且成本较低的STM32F103系列单片机作为通信的从机。
这款单片机具有较多的GPIO口、通信接口和丰富的外设,非常适合工业自动化领域的通信需求。
2. 连接方式STM32单片机与MCGS之间可以通过RS485通信进行连接。
RS485是一种常用的工业通信接口,具有抗干扰能力强的特点。
在连接过程中,需要将STM32的TX引脚与MCGS的RX引脚相连,同时将STM32的RX引脚与MCGS的TX引脚相连。
四、软件设计1. STM32单片机程序设计在STM32单片机程序设计中,首先需要配置串口通信的参数,包括波特率、数据位数、停止位数等。
然后按照ModBus协议规定的格式进行数据的解析和处理。
将接收到的数据根据指令要求进行响应,然后再将响应数据发送给MCGS。
2. MCGS界面设计在MCGS界面设计中,需要添加ModBus通信控件,并进行相应的参数配置。
通过配置从机的地址、寄存器的地址以及读写操作,实现与STM32单片机的通信。
同时,设计合适的界面布局,使用户能够直观地了解设备的状态和实时数据。
五、通信测试在完成硬件和软件设计后,需要进行通信测试,以确保通信的稳定性和准确性。
昆仑通态把读取的485数据转发到plc
昆仑通态把读取的485数据转发到plc昆仑通态是一款用于数据通信和转发的软件,它可以将读取的485数据转发到PLC(可编程逻辑控制器)中。
本文将介绍昆仑通态的功能及其在数据通信中的应用。
我们需要了解485通信协议。
485通信是一种多点通信方式,它可以实现多个设备之间的数据传输。
在工业自动化领域中,很多设备都采用485通信协议,如温度传感器、压力传感器等。
昆仑通态作为一款数据通信软件,能够读取这些设备发送的数据,并将其转发到PLC中进行处理和控制。
昆仑通态的使用非常简便,只需要在软件中进行简单的配置即可实现数据的读取和转发。
首先,我们需要在昆仑通态中设置485通信参数,包括波特率、数据位、停止位等。
这些参数需要和设备的通信参数一致,才能正确读取数据。
接下来,我们需要设置PLC的通信参数,包括PLC的IP地址、端口号等。
通过配置这些参数,昆仑通态可以将读取的数据转发到PLC中。
昆仑通态还提供了丰富的数据处理功能,如数据解析、数据转换等。
在读取到数据后,昆仑通态可以根据设备的协议对数据进行解析,提取出有用的信息。
例如,对于温度传感器,昆仑通态可以将读取到的温度数值提取出来,并将其转换成PLC可以识别的格式。
这样,PLC就可以根据温度数据进行相应的控制操作。
除了数据处理功能,昆仑通态还提供了强大的数据管理功能。
它可以将读取到的数据进行存储和记录,方便用户进行数据分析和查看。
用户可以通过昆仑通态的界面,查看历史数据和实时数据,并进行导出和打印。
昆仑通态的应用范围非常广泛。
它可以应用于各种工业自动化场景,如智能楼宇、工厂自动化等。
在智能楼宇中,昆仑通态可以读取各个房间的温度、湿度等数据,并将其转发到PLC中,实现对空调、照明等设备的智能控制。
在工厂自动化中,昆仑通态可以读取各个生产设备的数据,并将其转发到PLC中,实现对生产线的实时监控和控制。
昆仑通态是一款功能强大的数据通信软件,它能够将读取的485数据转发到PLC中,实现数据的处理和控制。
昆仑通态软硬件同步进化改版
昆仑通态软硬件同步进化改版
佚名
【期刊名称】《《可编程控制器与工厂自动化(PLC FA)》》
【年(卷),期】2006(000)004
【摘要】作为国内目前唯一的软硬件平台生产厂商,昆仑通态经过一年的潜心研发,将其全线产品进行了改版和升级。
【总页数】1页(PI0002)
【正文语种】中文
【中图分类】F426.67
【相关文献】
1.昆仑通态触摸屏与STM32通信方法研究 [J], 曹雪花; 杨立志
2.昆仑通态触摸屏与西门子SMART系列PLC通讯 [J], 孙健; 朱霖; 邵振荣
3.基于Modbus TCP协议的AB控制器与昆仑通态屏通讯 [J], 朱霖;邵振荣;曹镇游
4.北京昆仑通态助力北京科技大学——向ASEA培训中心捐赠17余万元软硬件先进设备 [J],
5.北京昆仑通态助力北京科技大学ASEA培训中心17余万元软硬件先进设备 [J],因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/***********************************************备注:modbus RTU协议,rs485通讯单片机为从机PLC或者PC为上位机*********************************************/#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit rx_led=P0^0;//接收指示灯sbit tx_led=P0^1;//发送指示灯sbit ctrl_485=P3^2;//485接发发送转换控制sbit dm=P1^4;sbit wm=P1^5;sbit led_cs=P1^6;sbit b7=P2^7;//波特率设置位unsigned int crc=0;uchar sendBuf[20],receive_count=0,a[10];uchar send_count= 0,send_num=0,addr_dip=0;uchar aaa,bbb;uint crc16(unsigned char *puchMsg, unsigned int usDataLen);void beginsend(void);void check_modbus(void);void display(uint date);void delay(uint z);uchar code duan[]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7C,0x39,0x5E,0x79,0x71 };//此数组为!!! 0~9 A B C D E F !!!uchar code wei[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};//此数组表示数码管显示的位数void display(uint date) //num 表示在第几位显示words 表示显示的字符{P2=duan[date/100];P1=wei[0];delay(1);P1=0xff;P2=duan[date%100/10];P1=wei[1];delay(1);P1=0xff;P2=duan[date%10];P1=wei[2];delay(1);}/*************延时*****************/void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=113;y>0;y--);}/************串口初始化*****************/ void uart_init(void){TMOD=0x20;//定时器1,模式2SCON=0x50;//串口通讯方式1TH1=0xfd;//波特率9600TL1=0xfd;if(b7==1)PCON=0x00;elsePCON=0x80;TI=0;//发送中断标志位清零RI=0;//接收中断标志位清零TR1=1;//启动定时器1EA=1;ES=1;}/**************定时器0初始化**************/ void timer0_init(void){TMOD=TMOD&0xf0;TMOD=TMOD|0x01;TH0=0; //16位定时计数器TL0=0;ET0=1; //允许定时器中断}void main(void){dm=0;wm=0;led_cs=1;uart_init();timer0_init();ctrl_485=0;//先置为接收while(1){RI=0;delay(1);rx_led=1;tx_led=1;if(P2^0==0)bbb++;if(bbb==10)aaa++;display(aaa);}}void beginsend(void){ctrl_485=1; //开始置位发送状态 TI=0;send_count = 0;SBUF = sendBuf[0];send_num--;}void time0() interrupt 1///定时器中断{TR0=0;RI=0;check_modbus();receive_count=0;}void ser() interrupt 4{if(TI){if(send_count < send_num){TI=0;tx_led=0;SBUF = sendBuf[++send_count]; }else{receive_count=0;ctrl_485=0;TI=0;}else if(RI){RI=0;rx_led=0;TR0=1;a[receive_count++]=SBUF;TH0=0xf4;TL0=0x1e;}}void check_modbus(void){uchar di,addr;if(receive_count>7)////////////////////address 03 00 00 00 01 crc crc{receive_count=0;crc=crc16(a,6);addr=1; //仪表栈号设置为1// addr=P2>>4;// addr=~(addr&0x0f);// addr=addr&0x0f;// di=~(P2&0X0f);// di=di&0x0f;di=aaa;if(a[0]==addr&&a[1]==0x03&&(crc==((a[7]&0x00ff)|(0xff00&(a[6]<<8))))) {sendBuf[0]=a[0];sendBuf[1]=a[1];sendBuf[2]=0x02; //数据长度为2sendBuf[3]=0x00;//数据高八位为0sendBuf[4]=di; //数据低八位为P2口数据crc=crc16(sendBuf,5); //计算5个数据的CRC校验码sendBuf[5]=crc>>8;sendBuf[6]=crc&0xff;send_num=7;beginsend();}}}/***********************CRC校验*************************/ // CRC 高位字节值表unsigned char code auchCRCHi[260] = {0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40} ;// CRC低位字节值表unsigned char code auchCRCLo[260] = {0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,0x43, 0x83, 0x41, 0x81, 0x80, 0x40} ;unsigned int crc16(unsigned char *puchMsg, unsigned int usDataLen) {unsigned char uchCRCHi = 0xFF ; //* 高CRC字节初始化unsigned char uchCRCLo = 0xFF ; //* 低CRC 字节初始化unsigned long uIndex ; // CRC循环中的索引while (usDataLen--) // 传输消息缓冲区{uIndex = uchCRCHi ^ *puchMsg++ ; // 计算CRCuchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ;uchCRCLo = auchCRCLo[uIndex] ;}return (uchCRCHi << 8 | uchCRCLo);}。