用户登录
用户注册

分享至

vc实现以太网通信的上位机软件设计 研究 以太网上位机

  • 作者: 暗影19931011
  • 来源: 51数据库
  • 2020-04-15

vc实现以太网通信的上位机软件设计 研究

VC++怎样编程实现上位机与下位机的通信

一般来说,测试上下位机通信。

先使用工具测试你的下位机,完全通信成功后,在用来调试你的上位机。

不然你话,你都不知道错误在哪里。

加入下位机不是开发的,根本就无法证明是否是下位机的错误。

先使用串口精灵之类的调试你的开发板。

确认是 OK 了之后,在调试你的程序。

//如果你的程序功底足够深,就可以通过你的程序确定是上,还是下位机的问题了。

...

三菱Q系列PLC与上位机的以太网通讯数据格式是怎样的?

上位机可以用专用的组态软件,也可以用VB或VC自己写监控界面,如果使用专用的组态软件通讯部分已经是集成好了的,而如果自己用VB,VC写界面就需要使用三菱的软件包进行通讯。

PLC与PC机之间实现通道,可使二者互补功能上的不足,PLC用于控制方面既方便又可靠,而PC机在图形显示、数据处理、打印报表以及中文显示等方面有很强的功能。

因此,各PLC制造厂家纷纷开发了适用于本公司的各种型号PLC与PC机通信的接口模块。

三菱公司开发的FX-232AW接口模块用于FX2系列PLC与计算机通信。

还有与以太网连接的接口模块AJ71E71、与MAP网连接的接口模块AJ71M51-S1、与FAIS MAP网连接的接口模块AJ71M51M1等。

不同的通信方式,有着不同的成本价格和不同的适用范围。

在此介绍一种通过PC机的RS-232口与PLC进行通信的实现方法。

FX2系列PLC的编程接口采用RS-422标准,而计算机的串行口采用RS-232标准。

因此,作为实现PLC计算机通信的接口电路,必须将RS-422标准转换成RS-232标准。

RS-232与RS-422标准在信号的传送、逻辑电平均不相同。

RS-232采用单端接收器和单端发送器,只用一根信号线来传送信息,并且根据该信号线上电平相对于公共的信号地电平的大小来决定逻辑的“1”(-3~-15V)和“0”(+3~+15V); RS-422标准是一种以平衡方式传输的标准,即双端发送和双端接收,根据两条传输线之间的电位差值来决定逻辑状态。

RS-422电路由发送器、平衡连接电缆、电缆终端负载和接收器组成。

它通过平衡发送器和差动接收器将逻辑电平和电位差之间进行转换(+2V表示“0”,-2V表示“1”)。

选用MAXIM公司的MAX202实现RS-232与TTL之间的电平转换。

MAX202内部有电压倍增电路和转换电路,仅需+5V电源就可工作,使用十分方便;选用MAX490实现RS-485与TTL之间的转换。

每片MAX490有一对发送器/接收器,由于通信采用全双工方式,故需两片MAX490,另外只需外接4只电容即可。

PLC的RS-422接口配接DB-25型连接器,而PC机一般用DB-9型连接器。

硬件电路图如图1所示。

将RS-232的RS、CS短接,这样对计算机发送数据来说,PLC总是处于就绪状态。

也就是说,计算机在任何时候都可以将数据送到PLC内。

又由于DR、ER交叉连接,因此,对计算机接收数据来说,必须等待至PLC处于准备就绪状态。

2 通信装置的软件描述 2.1 FX2系列PLC与计算机之间通信协议 FX2系列PLC与计算机之间的通信采用RS-232标准,其传输速率固定为9600bps,奇偶校验位采用偶校验。

数据格式如图2所示。

数据以帧为单位发送和接收。

一个多字符帧由力所示的五部分组成,其中和校验值是将命令码ETX之间的的呢字符的ASCII码(十六进制数)相加,取得所得和的最低二位数。

STX和ETX分别表示该字符帧的起始标起和结束标志。

FX2系列与计算机之间的通信是以主机发出的初始命令,PLC对其作出响应的方式进行通信的。

共有0、1、7、8四种命令,上位机实现对PLC的读写和强行置位。

通过ENQ、ACK和NAK,上位机协调与PLC的通信应答。

2.2 通信过程 采用Bland C编写主机与PLC的通信程序。

首先必须对COM1口进行初始化,波特率为9600bps,奇偶校验位采用偶校验,七位有效数据。

通信的初始化检测过程如图4所示。

当计算机接收到来自PLC的应答字符ACK后,就可以进入数据通信了。

通信的时序图如图5所示。

计算机可对PLC内各软设备进行读、写和强制ON/OFF操作。

除开PLC的计时器和计数器的设定值采用常数时,以及文件寄存器内的数据,FX2系列PLC的所有开关量输入、输出以及各软件设备对计算机都是透明的。

其操作时的多字符帧的格式如图3所示。

但不同的操作在“多个字符”项内有所不同。

例如,计算机对PLC的软设备Y20~Y37进行读操作,查装置地址表为00A2,读取2字节数据。

其状态如图6(a)所示,主机发出的命令格式如图6(b)所示,PLC返回的信息如图6(c)所示。

如传送的命令有错误,PLC返回NAK信号,本次操作失败,重新进行。

为了保证主机与PLC的通信准确无误,上位机也必须按通信协议进行和校。

如接收的信息有误,则重新读取。

如重复3次仍不行,则显示错误信息。

使用C语言很容易实现以上编程。

主机还可向PLC写数据,进行单点的强近置位和复位。

对于运行在控制和实验室环境飞速下本方案运行可靠、性价比高、体积小、但是对于通信距离长,环境恶劣的发问,需加光电隔离等措施。

我用的是S7

我来说下我做过的USB通信,我没有做过DSP跟上位机的通信,我只做过ARM类的STM32跟上位机的数据传递,虽然做过但是也不是很 懂,只是略知一二,我来说说我怎么做的吧,我是这么实现的:USB是个很复杂的协议,你如果完全搞懂,我估计没有几个月专心钻研是不行的,但是如果只是能实现你的这个功能,我估计不是很复杂。

首先来说说USB通信:USB通信传输方式分为四种:控制,中断,批量,同步传输四种,这个你可以看看网上资料,然后我用STM32通信,因为数据量不是很大,我用的是中断传输方式,但是DSP数据量应该会比较大,不知道中断传输行不行,但是一般问题不大。

传输方式说完了,再说说USB设备类型,你每次插usb设备到电脑上的时候就会有提示,这是一个什么设备,USB设备类型就是说的这个意思,是鼠标还是键盘还是别的什么的,如果你选用标准的类,你就不用自己写上位机(PC)的驱动程序,但是如果不用标准的类,就是用自定义的类就要自己写上层的设备驱动程序,就是所谓的DDK,WDM,WDF什么的,你没写过这方面的还真有点棘手,但是也不一定要写驱动程序,你可以试试有个类叫HID类,这个类在USB通信的时候用的还挺多的,不过这个类也有缺点,这个地方还要说一点,USB还分低速,全速,高速三种,不太了解DSP,不知道他支持什么模式,但是USB2.0的全速应该至少可以支持的。

USB2.0全速模式HID用中断方式每秒最多可以传输64KB的数据,不知道能不能达到你的要求,但是我估计一般问题不大了,如果你这歀DSP能支持高速模式,每秒用这种方式可以传输高达22MB的数据,这个速度一般问题不大了。

你可以照着我说的思路,去网上搜搜人家写好的程序,肯定有人做过DSP的USB通信,然后你按照自己的要求改一改,主要应该是USB的设备描述符部分要自己修改,然后可能还要根据自己的电路改改配置什么的,上位机软件网上有源代码的多的是,然后自己摸索摸索,我估计你要是编程水平还可以的话,只是摸索USB,一两个星期完全没有问题,祝你好运!

VC 或 C C++中是否由函数可以做计算机上位机通讯程序

(1) 打开串口 Win32系统把文件的概念进行了扩展。

无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用API函数CreateFile来打开或创建的。

该函数的原型为: HANDLE CreateFile( LPCTSTR lpFileName,DWORD dwDesiredAccess,DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes,DWORD dwCreationDistribution,DWORD dwFlagsAndAttributes,HANDLE hTemplateFile); lpFileName:将要打开的串口逻辑名,如“COM1”; dwDesiredAccess:指定串口访问的类型,可以是读取、写入或二者并列; dwShareMode:指定共享属性,由于串口不能共享,该参数必须置为0; lpSecurityAttributes:引用安全性属性结构,缺省值为NULL; dwCreationDistribution:创建标志,对串口操作该参数必须置为OPEN_EXISTING; dwFlagsAndAttributes:属性描述,用于指定该串口是否进行异步操作,该值为FILE_FLAG_OVERLAPPED,表示使用异步的I/O;该值为0,表示同步I/O操作; hTemplateFile:对串口而言该参数必须置为NULL; 同步I/O方式打开串口的示例代码: HANDLE hCom; //全局变量,串口句柄 hCom=CreateFile("COM1",//COM1口 GENERIC_READ|GENERIC_WRITE, //允许读和写0, //独占方式 NULL,OPEN_EXISTING, //打开而不是创建0, //同步方式 NULL); if(hCom==(HANDLE)-1) { AfxMessageBox("打开COM失败!"); return FALSE; } return TRUE; 重叠I/O打开串口的示例代码: HANDLE hCom; //全局变量,串口句柄 hCom =CreateFile("COM1", //COM1口 GENERIC_READ|GENERIC_WRITE, //允许读和写0, //独占方式 NULL,OPEN_EXISTING, //打开而不是创建 FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, //重叠方式 NULL); if(hCom ==INVALID_HANDLE_VALUE) { AfxMessageBox("打开COM失败!"); return FALSE; } return TRUE; (2)、配置串口 在打开通讯设备句柄后,常常需要对串口进行一些初始化配置工作。

这需要通过一个DCB结构来进行。

DCB结构包含了诸如波特率、数据位数、奇偶校验和停止位数等信息。

在查询或配置串口的属性时,都要用DCB结构来作为缓冲区。

一般用CreateFile打开串口后,可以调用GetCommState函数来获取串口的初始配置。

要修改串口的配置,应该先修改DCB结构,然后再调用SetCommState函数设置串口。

DCB结构包含了串口的各项参数设置,下面仅介绍几个该结构常用的变量: typedef struct _DCB{ ………//波特率,指定通信设备的传输速率。

这个成员可以是实际波特率值或者下面的常量值之一:DWORD BaudRate; CBR_110,CBR_300,CBR_600,CBR_1200,CBR_2400,CBR_4800,CBR_9600,CBR_19200, CBR_38400, CBR_56000, CBR_57600, CBR_115200, CBR_128000, CBR_256000, CBR_14400 DWORD fParity; // 指定奇偶校验使能。

若此成员为1,允许奇偶校验检查 … BYTE ByteSize; // 通信字节位数,4—8 BYTE Parity; //指定奇偶校验方法。

此成员可以有下列值:EVENPARITY 偶校验 NOPARITY 无校验 MARKPARITY 标记校验 ODDPARITY 奇校验 BYTE StopBits; //指定停止位的位数。

此成员可以有下列值:ONESTOPBIT 1位停止位 TWOSTOPBITS 2位停止位 ONE5STOPBITS 1.5位停止位 ……… } DCB; winbase.h文件中定义了以上用到的常量。

如下:#define NOPARITY 0#define ODDPARITY 1#define EVENPARITY 2#define ONESTOPBIT 0#define ONE5STOPBITS 1#define TWOSTOPBITS 2#define CBR_110 110#define CBR_300 300#define CBR_600 600#define CBR_1200 1200#define CBR_2400 2400#define CBR_4800 4800#define CBR_9600 9600#define CBR_14400 14400#define CBR_19200 19200#define CBR_38400 38400#define CBR_56000 56000#define CBR_57600 57600#define CBR_115200 115200#define CBR_128000 128000#define CBR_256000 256000 GetCommState函数可以获得COM口的设备控制块,从而获得相关参数: BOOL GetCommState( HANDLE hFile, //标识通讯端口的句柄 LPDCB lpDCB //指向一个设备控制块(DCB结构)的指针); SetCommState函数设置COM口的设备控制块:BOOL SetCommState( HANDLE hFile, LPDCB lpDCB ); 除了在BCD中的设置外,程序一般还需要设置I/O缓冲区的大小和超时。

Windows用I/O缓冲区来暂存串口输入和输出的数据。

如果通信的速率较高,则应该设置较大的缓冲区。

调用SetupComm函数可以设置串行口的输入和输出缓冲区的大小。

BOOL SetupComm( HANDLE hFile,// 通信设备的句柄 DWORD dwInQueue,// 输入缓冲区的大小(字节数) DWORD dwOutQueue// 输出缓冲区的大小(字节数)); 在用ReadFile和WriteFile读写串行口时,需要考虑超时问题。

超时的作用是在指定的时间内没有读入或发送指定数量的字符,ReadFile或WriteFile的操作仍然会结束。

要查询当前的超时设置应调用GetCommTimeouts函数,该函数会填充一...

转载请注明出处51数据库 » vc实现以太网通信的上位机软件设计 研究

软件
前端设计
程序设计
Java相关