WinCC中实现串行通讯的两种方法

WinCC中实现串行通讯的两种方法
WinCC中实现串行通讯的两种方法

在WinCC中实现串行通讯的两种方法

概要:为了在WinCC组态软件中实现与串口的通讯,文中介绍了两种方法:一是在WinCC中调用VB编写好的串口通讯程序,进行数据交换,实现对串口的访问;二是在WinCC 图形编辑器中调用ActiveX控件MSComm,编写全局脚本VBS实现对串口的访问。这两种方法很好地解决了组态工程师被WinCC所束缚的串行通讯操作限制问题,拓宽了工程师使用WinCC的灵活性,提高了组态效率。

In order to realize serial communication with ActiveX based on WinCC,two methods are described in this paper.The first method is divided into two steps.First,realize serial communication by programming in Visual Basic,and then call this executive program in WinCC to exchange data.The second method is calling the ActiveX control MSComm directly in the Graphics Designer of WinCC and programming in WinCC Global Scripts to realize serial communication.These two methods are good solutions to the limitations of serial communication operation in WinCC.By these ways,engineers can use WinCC more flexibly,thus improve their configuration efficiency.

正文:

引言

WinCC即Windows Ccontrol Center(视窗控制中心),是一个功能强大的全面开放的上位机监控系统,既可以用于小规模简单的过程监控,也可以用于复杂的工控领域[1]。

WinCC提供了较大的用户编程空间。WinCC提供内置的语言脚本,可以方便地控制每个程序对象。通过OLE ,其他应用程序可集成到过程画面上,并与WinCC 交换相关数据。采用面向工业的ActiveX 控件,用户可以使用已完成的控件来实现复杂的管理与控制功能。基于系统稳定性的考虑,WinCC 提供的这些功能多数还是受限的。WinCC 提供硬件驱动的形式和硬件打交道,但是在实际的工程应用中,往往会用到许多WinCC 没有提供驱动的硬件,用户必须自己写程序来控制这些硬件,还需要编写程序控制实时数据的归档与处理。在WinCC 中并没有集成其他公司的智能仪表的串行通讯程序,因此需要开发新的串行通讯程序。本文介绍在WinCC 中实现串行通讯的两种方法。

1 间接通讯

自动控制系统中,上位机监控部分主要是用于动态流程画面监视、报警报表输出、趋势图分析等。在这个系统中,利用WinCC对整个上位机系统进行组态设计,系统在正常工作时,上位机始终处于WinCC的运行环境中。WinCC提供了OLE ,DDE ,ActiveX ,OPC 服务器和客户机等接口或控件,可以很方便地与其他应用程序交换数据。由于计算机从串行接口接收的数据要与上位机中的WinCC建立连接,因而采用二进制文件形式作为中间桥梁,即将接收的数据按其数据格式存入二进制文件,然后在WinCC中从二进制文件中提取数据[ 5 ]。

该方案可分为两个阶段:

首先,使用VB 语言编写从串口中取数据的可执行程序,采用通讯控件MSComm 实现。通讯实现程序如图 1 所示。

然后,在WinCC中,调用从串口中取数据的可执行程序,将采集的数据写入二进制文件;将数据从二进制文件中一一取出,赋给WinCC中相应的内部变量标签。由于可执行程序采集到的数据在WinCC中需要使用,数据不方便直接传递,因而二进制文件是可执行程序与WinCC之间数据传输的一种较为有效的方式。WinCC中读取数据的程序流程如图 2 所示。图 1 通讯程序实现流程图

图2WinCC 中读取数据的程序流程图

2 直接通讯

在WinCC中的图形编辑器中直接加入ActiveX 控件MSComm 实现串行通讯。WinCC中带有一个Global Script( 全局脚本编辑器) ,它为开发人员提供一个功能强大的工具,用于生成用户的 C 脚本或VB 脚本,生成的脚本可应用于任何地方。这里,就依据Global Script ,通过对ActiveX 控件MSComm 进行控制,编制一个从串口采集数据的通讯程序。上位机工作时,运行这个程序即可实现上位监控系统与串口采集数据的通讯任务。MSComm (即Microsoft Communications Control )是Microsoft 公司提供的简化Windows 下串行通讯编程的ActiveX 控件,它为应用程序提供了通过串行接口收发数据的简便方法。MSComm 控件在串口编程时非常方便,程序员不必花时间去了解较为复杂的API 函数。它在VC 、VB 、Delphi 等语言中均可使用[ 2 ]。

MSComm 控件的主要属性:

a)CommPort 设置并返回通讯端口号。

b)Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。

c)PortOpen 设置并返回通讯端口的状态。也可以打开和关闭端口。

d)Input 从接收缓冲区返回和删除字符。

e)Output 向传输缓冲区写一个字符串。

在WinCC中,VBScript 是基于Visual Basic 的运行脚本语言。脚本本身能访问所有WinCC图形对象的属性和方法,也能访问ActiveX 控件和其他制造商的应用程序对象模型。因而能控制对象的动态性能,方便地建立与其他制造商应用程序的连接[ 1 ]。

由于使用标准的ActiveX 技术和V isual Basic ,因而能够进行快速开发串行通讯。具体实现步骤如下:

1) 首先需要将Mscomm32.ocx 在WinCC中注册。

2) 运行WinCC控制中心,建立两个内部变量,一个串口输出变量COM_OUT ;另一个为串口输入变量:COM1_IN 。两个变量均为16 位文本变量。

3) 在图形编辑器中建立相应的操作界面,在界面中加入ActiveX 控件,然后选择Microsoft Communication Control 6.0 选项。出现电话式的图标,这就是我们需要的串口通讯的控件。

4) 可以在画面中添加一个按钮,在click 事件中编辑VBS 动作,对MSComm 进行初始化。可在VBS 全局脚本编辑器中输入如下程序:

Sub OnLButtonDown(ByV al Item,ByV al Flags,ByV al x,ByV al y)

Dim mscomm

Set mscomm=ScreenItems(“mscomm”)

https://www.360docs.net/doc/9d8000674.html,mPort =2

mscomm.Settings=“9600,N,8,1”

mscomm.InputMode=1

mscomm.portopen=True

End Sub

在ActiveX控件MSComm属性中也有OnComm事件。在该事件下输入VBS动作,对发送或者接收到的字符进行处理。

Sub OnComm(ByV al Item )

……//对发送或者接收到的字符进行处理

End Sub

在将数据赋给Internal tag(内部标签)之后,上位监控系统就可在监控界面需要时,随时用于显示或计算,也可以把这些数据作历史数据归档,以用于报表输出或查看数据的变化趋势图等。

3 结论

串行通讯控件MSComm全面提供用于RS232串行通讯上层开发的所有细则,使得WinCC 与智能仪表间的串行通讯能以较为简捷的方式实现。上述方法曾在自动化控制项目中使用,事实证明,这两种方法不仅是可行的,而且是切实有效的。此外,还能很好地弥补了WinCC 没有提供串口通讯通道驱动这一缺陷,增加了使用WinCC的灵活性,大大提高了组态效率。

参考文献:

[1]深入浅出西门子WinCC V6[M].北京:北京航空航天大学出版社,2004:5,122 135,213.

[2]仵浩等.Visual Basic 串口通讯工程开发实例导航[M].北京:人民邮电出版社,2003:258 324.

[3]马恩铭.利用内嵌ActiveX控件操纵WinCC数据库[J].计算机应用与软件,2005(1). [4]路增立,宋玉林,刘振兵.V isual Basic中串口通讯的应用[J].江苏电器,2003,5. [5]汪美霞,汤晓兵,陈号.MSComm与C在监控系统和智能仪表的串行通讯中的应用[J].山东建筑工程学院学报,2004,2.

终于搞定了WINCC的串口接收,使用的是Microsoft的MSComm控件,采用VBSJ 脚本,比较好用。

注意几点:

1.如果com口已经设置成WINCC与PLC的通讯口,即使此时不用,也不能作为普通的串口通讯使用,会产生错误的代码。

2.在VBS动作中调用wincc内部变量的方法:

Dim objTag 'objTag为定义的中间变量

set objTag=HMIRuntime.Tags("内部变量名")

objTag.read

objTag.vavue=??? '对内部变量进行操作

objTag.write

Dim cnvt

Dim Temp()

Dim obj_s_Com

Dim sOutput

Set cnvt = CreateObject("ADs.ArrayConvert")

Set obj_s_Com = ScreenItems("m_Com")

obj_s_https://www.360docs.net/doc/9d8000674.html,mPort = 1

Redim Temp(2)

Temp(0) = &heb

Temp(1) = &h90

Temp(2) = &h71

Dim v,v1,v2,v3,v4

v = Temp

HMIRuntime.Trace "The V is:" & VarType(v) &" " &TypeName(v) &vbCrLf

'obj_s_Com.Output = v

v1 = cnvt.CvOctetStr2vStr(v)

HMIRuntime.Trace "The V1 is:" & VarType(v1) &" " &TypeName(v1) & " " &vbCrLf

'obj_s_Com.Output = v1

v2= cnvt.CvStr2vOctetStr(v1)

HMIRuntime.Trace "The V2 is:" & VarType(v2) &" " &TypeName(v2) & " " &vbCrLf

'obj_s_Com.Output = v2

v3 = cnvt.CvOctetStr2vHexStr(v)

HMIRuntime.Trace "The V3 is:" & VarType(v3) &" " &TypeName(v3) & " " &vbCrLf

'obj_s_Com.Output = v3

v4 = cnvt.CvHexStr2vOctetStr(v3)

HMIRuntime.Trace "The V4 is:" & VarType(v4) &" " &TypeName(v4) & " " &vbCrLf

obj_s_Com.Output = v4

我们可以发现比如>&H7E的ANSI字码也可以通过串口正常发送。

这样从可行性上来讲,任何不同的串口通讯协议都可以在WINCC中采用MSCOMM 控件加VBS脚本来实现。只要你不嫌麻烦,我们可以用小点数的WINCC来实现更多的外部数据量的采集。

VDS.DLL的下载地址:https://www.360docs.net/doc/9d8000674.html,/kb/250344/en-us https://www.360docs.net/doc/9d8000674.html,/kb/250344/zh-cn

用C#一步步写串口通信分析解析

我们来看具体的实现步骤。 公司要求实现以下几个功能: 1):实现两台计算机之前的串口通信,以16进制形式和字符串两种形式传送和接收。 2):根据需要设置串口通信的必要参数。 3):定时发送数据。 4):保存串口设置。 看着好像挺复杂,其实都是纸老虎,一戳就破,前提是你敢去戳。我尽量讲的详细一些,争取说到每个知识点。 在编写程序前,需要将你要测试的COM口短接,就是收发信息都在本地计算机,短接的方式是将COM口的2、3号针接起来。COM 口各针的具体作用,度娘是这么说的:COM口。记住2、3针连接一定要连接牢固,我就是因为接触不良,导致本身就不通,白白花掉了一大半天时间调试代码。 下面给出主要的操作界面,如下:

顺便,我将所有控件对应的代码名字也附上了,相信对初学者来说,再看下面的代码会轻松很多。控件名字命名的方法是“控件名+作用”的形式,例如“打开串口”的开关按钮,其名字是btnSwitch (btn就是button的简写了)。我认为这种命名控件的方式比较好,建议大家使用,如果你有好的命名方式,希望你能告诉我! 下面我们将各个功能按照从主到次的顺序逐个实现。(我分块给出代码实现,详细代码见链接:《C#串口通信工具》)

一、获取计算机的COM口总个数,将它们列为控件cbSerial的候选项,并将第一个设为cbSerial的默认选项。 这部分是在窗体加载时完成的。请看代码: (很多信息代码的注释里讲的很清楚,我就不赘述了。) [csharp]view plaincopyprint? 1.//检查是否含有串口 2. string[] str = SerialPort.GetPortNames(); 3. if (str == null) 4. { 5. MessageBox.Show("本机没有串口!", "Error"); 6. return; 7. } 8. 9. //添加串口项目 10. foreach (string s in System.IO.Ports.SerialPort.GetPortNames()) 11. {//获取有多少个COM口 12. cbSerial.Items.Add(s); 13. } 14. 15. //串口设置默认选择项

如何构建一个WinCC冗余项目

如何构建一个WinCC冗余项目 The procedure of working with a Wincc redundancy project

摘要本文详细描述了WinCC冗余系统从购买、安装到创建、编辑、诊断的操作过程和需要注意的事情。 关键词 WinCC 冗余 Key Words WinCC redundancy IA&DT Service & Support Page 2-16

目录 1.冗余系统简介 (4) 2.搭建WinCC冗余项目的必要条件 (4) 2.1 软件和授权 (4) 2.2 安装系统环境 (5) 3.组态WinCC冗余系统 (5) 3.1 创建Windows用户 (5) 3.2 创建一个WinCC项目 (6) 3.3 冗余功能设置 (7) 3.4 复制项目到冗余服务器 (9) 3.5 客户机的设置 (11) 3.5.1 客户端没有本地项目 (11) 3.5.2 客户端有本地项目 (12) 3.6 初次启动冗余项目 (14) 3.7 冗余的简单诊断 (15) IA&DT Service & Support Page 3-16

如果需要使用WinCC冗余系统时,请仔细阅读下面的文档,它将解决以下几个问题:(1)WinCC冗余有什么样的功能? (2)需要购买什么样的授权? (3)应该安装在怎么样的系统上? (4)如何为用户配置操作系统的权限? (5)如何创建WinCC的冗余服务器项目? (6)如何创建WinCC的客户机? (7)如何诊断冗余错误和识别冗余工作状态? 除此之外,对于需要引申的内容,该文档还提供了相关内容的链接地址和帮助路径,方便用户更加系统地学习WinCC冗余内容。 1.冗余系统简介 WinCC冗余是两台互联的WinCC并行工作,并基于事件进行同步,提高了系统的可靠性。WinCC冗余具有下列功能: (1)故障自动识别,故障恢复后自动同步变量记录、报警消息、用户归档。 (2)在线同步变量记录、报警消息、用户归档。 (3)服务器故障时,客户端自动切换到可用的服务器。 (4)自动识别伙伴服务器的状态,并实时显现主备服务器的工作状态。 (5)自动生成系统故障信息,及时发现服务器软件故障。 如果项目中有上述需求,WinCC冗余可以方便项目的实施。 2.搭建WinCC冗余项目的必要条件 2.1 软件和授权 授权名称个数安装位置备注 WinCC RT/RC 2 每个服务器上1个至少一个RC WinCC/Redundancy 1 每个服务器上1个一个订货号包含两 个冗余授权WinCC/Server 2 每个服务器上1个多用户项目WinCC RT 128 与客户端的数目相等每个客户机上1个需要客户端 表 01 IA&DT Service & Support Page 4-16

C语言串口通信助手代码

该程序全部由C写成没有C++ 更没用MFC 完全是自娱自乐给需要的人一个参考 #include "stdafx.h" #include #include "resource.h" #include "MainDlg.h" #include #include #include HANDLE hComm;//用于获取串口打开函数的返回值(句柄或错误值)OVERLAPPED m_ov; COMSTAT comstat; DWORD m_dwCommEvents;

TCHAR cRecs[200],cSends[100]; //接收字符串发送字符串 char j=0,*cCom; //接收用统计数据大小变量端口选择 BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); } return FALSE; } /*系统初始化函数*/ BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { HWND hwndCombo1=GetDlgItem(hwnd,IDC_COMBO1); ComboBox_InsertString(hwndCombo1,-1,TEXT("COM1")); ComboBox_InsertString(hwndCombo1,-1,TEXT("COM2"));

VC与c51串口通讯程序

跟着步骤学习 1.建立项目:打开VC++6.0,建立一个基于对话框的MFC应用程序SCommTest 2.在项目中插入MSComm控件选择Project菜单下Add To Project子菜单中的 Components and Controls…选项,在弹出的对话框中双击Registered ActiveX Controls项(稍等一会,这个过程较慢),则所有注册过的ActiveX控件出现在列表框中。选择Microsoft Communications Control, version 6.0,,单击Insert按钮将它插入到我们的Project中来,接受缺省的选项。(如果你在控件列表中看不到Microsoft Communications Control, version 6.0,那可能是你在安装VC6时没有把ActiveX一项选上,重新安装VC6,选上ActiveX就可以了), 这时在ClassView视窗中就可以看到CMSComm类了,(注意:此类在ClassWizard中看不到,重构clw 文件也一样),并且在控件工具栏Controls中出现了电话图标(如图1所示),现在要做的是用鼠标 将此图标拖到对话框中,程序运行后,这个图标是看不到的。 3.利用ClassWizard定义CMSComm类控制对象打开ClassWizard ->Member Viariables选项卡,选择CSCommTestDlg类,为IDC_MSCOMM1 添加控制变量:m_ctrlComm,这时你可以看一看,在对话框头文件中自动 加入了//{{AFX_INCLUDES() #include "mscomm.h" //}}AFX_INCLUDES (这时运行程序,如果有错,那就再从头开始)。 4.在对话框中添加控件向主对话框中添加两个编辑框,一个用于接收显 示数据ID为IDC_EDIT_RXDATA,另一个用于输入发送数据,ID为 IDC_EDIT_TXDATA,再添加一个按钮,功能是按一次就把发送编辑框中的内 容发送一次,将其ID设为IDC_BUTTON_MANUALSEND。别忘记了将接收编辑 框的Properties->Styles中把Miltiline和Vertical Scroll属性选上,发送编辑框若你想输入多行文字,也可选上Miltiline。 再打开ClassWizard->Member Viariables选项卡,选择CSCommTestDlg类,为IDC_EDIT_RXDATA 添加CString变量m_strRXData,为IDC_EDIT_TXDATA添加CString变量m_strTXData。说明: m_strRXData和m_strTXData分别用来放入接收和发送的字符数据。 5.添加串口事件消息处理函数OnComm()打开ClassWizard->Message Maps,选择类CSCommTestDlg,选择IDC_MSCOMM1,双击消息OnComm,将弹出的对话框中将函数名改为OnComm,(好记而已)OK。 这个函数是用来处理串口消息事件的,如每当串口接收到数据,就会产生一个串口接收数据缓冲区中有字符的消息事件,我们刚才添加的函数就会执行,我们在OnComm()函数加入相应的处理代码就能实现自已想要的功能了。请你在函数中加入如下代码: void CSCommTestDlg::OnComm() { // TODO: Add your control notification handler code here VARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed. CString strtemp; if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符 { ////////以下你可以根据自己的通信协议加入处理代码 variant_inp=m_ctrlComm.GetInput(); //读缓冲区 safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量 len=safearray_inp.GetOneDimSize(); //得到有效数据长度 for(k=0;k

C语言串口通信-源代码

#include #include #include #include #define COM232 0x2f8 #define COMINT 0x0b #define MaxBufLen 500 #define Port8259 0x20 #define EofInt 0x20 static int comportaddr; static char intvectnum; static unsigned char maskb; static unsigned char Buffer[MaxBufLen]; static int CharsInBuf,CircIn,CircOut; static void (interrupt far *OldAsyncInt)(); static void interrupt far AsyncInt(void); void Init_COM(int ComPortAddr, unsigned char IntVectNum, int Baud, unsigned char Data, unsigned char Stop, unsigned char Parity) { unsigned char High,Low; int f; comportaddr=ComPortAddr; intvectnum=IntVectNum; CharsInBuf=0;CircIn=0;CircOut=0; f=(Baud/100); f=1152/f; High=f/256; Low=f-High*256; outp(ComPortAddr+3,0x80); outp(ComPortAddr,Low); outp(ComPortAddr+1,High); Data=(Data-5)|((Stop-1)*4); if(Parity==2) Data=Data|0x18; else if(Parity==1) Data=Data|0x8; outp(ComPortAddr+3,Data);

在STEP里面创建WINCC项目完整版

在S T E P里面创建W I N C C项目集团标准化办公室:[VV986T-J682P28-JP266L8-68PNN]

一、从WinCC里调用STEP 7 变量的前提条件从WinCC里调用STEP 7 变量可以将建立变量的工作量减少一半,同时将建立变量的出错概率建设一半,从而减少了相应的排错工作,大大提高了工作效率。从WinCC里调用STEP 7 变量的前提条件是,WinCC的项目文件必须是集成在STEP 7项目中的。在安装所有Simatic 软件前,请查阅软件的安装注意事项,确定操作系统与软件的兼容性。该文档一般位于:CD\Documents\<语言版本>\。要使用WinCC与STEP 7的集成功能,WinCC 和STEP 7必须安装在同一台计算机上,必须在安装WinCC之前安装STEP 7。STEP 7 与WinCC的版本必须一致。WinCC与STEP 7的版本兼容行列表可以在西门子自动化与驱动集团的技术支持与服务网站上获得。请STEP 7安装完毕后,进行WinCC安装。在WinCC安装过程中,请选择“自定义安装”,在communitation 下的所有选项都必须钩选。二、在Simatic Manager里建立新的WinCC 项目在建立新的STEP 7项目后,可以在Simatic Manager里直接建立新的WinCC项目。方法是在Simatic Manager里,右键点击项目名称,选择“Insert New Object\OS”。此时系统会在STEP 7 项目文件里建立一个WinCC项目文件你可以在OS站上点击右键,选择“Re name”来修改WinCC项目名称。可以通过在名称上点击右键,选择“Open Object”打开并编辑这个WinCC项目 三、把现成的WinCC项目集成到STEP 7 项目中按如下步骤把已有WinCC项目文件插入STEP 7项目文件 A. 在STEP 7项目文件中插入一个OS站,然后把它改名为已有的WinCC项目名称。B. 在STEP 7项目里删除因仅插入OS站而产生的WinCC项目文件,其位置在STEP 7 项目文件夹里的wincproj文件夹下,例如:d:\siemens\STEP7\S7proj\STEP7_Integration\wincproj\Name of the OS C. 最后在项目复制器里用’Save as’把已有的WinCC项目文件存储到STEP 7项目路径下。项目复制器位于开始菜单项"Start > SIMATIC > WinCC > Tools"。注意:对于集成STEP 7项目里的WinCC项目,你也可以使用压缩工具(Packer)来归档WinCC项目。四、把变量(符号表,共享DB,背景DB)从STEP 7传送到WinCC里 STEP项目文件里的符号表,共享DB里的变量可以一次性的传入继承的WinCC项目文件。具体步骤如下: A、为需要传输的变量打上“传输标志” 在需要传输的变量上点击右键,从关联菜单中选择“Special Object Properties \ Operator Control and Monitoring…”,打开Operator Control and Monitoring对话框,激活复选框“Operator Control and Monitoring”,并点击“OK”关闭对话框。此时该变量前将显示绿色小旗如需对成批变量进行该操作,可以使用“Shift+鼠标左键”进行批选择,或者使用“Ctrl +鼠标左键”对成批选择的变量进行个别增减。为共享DB的变量做注释在需要传输的变量上点击右键,从关联菜单中选择“Object Properties”,打开Properties 对话框,在对话框第一行的Attribute 中输入 S7_m_c ,Value 为ture,并点击“OK”键退出。此时被选中变量前被用红色小旗标志. 为背景DB的变量做注释打开相应的FB,在需要传输的变量上点击右键,从关联菜单中选择“Object Properties”,打开Properties 对话框在Attribute页第一行输入 S7_m_c ,Value 为ture并点击“OK”键退出开启共享和背景DB的操作和监视功能 DB里的变量被标志后,必须启动DB的“Operater control and monitor”功能才能启动变量传输。 在simatic maneger 窗口中右击所需传送变量的DB,在弹出的菜单中选择 special object- >operetor control and monitoring,在接下来的对话框中将Operater control and monitor复选框钩上。选中该复选框后,“WinCC Attributes”页被显示,其中列举了所有被标准过的变量。 B、将被标志的变量传送到WinCC项目文件中在SIMATIC Manager的菜单中选中选项“Options\OS\Compling…”在弹出的对话框中直接点next 直到开始编译。编译完成后,弹出integration2对话框,选择第一项,并用“OK”键确认。编译完成后系统会提示编译是否成功,如果失败会弹出相应的记录文件。编译成功后,打开WinCC项目文件。可以看到,系统已经在变量管理器里自动生成了相应的WinCC变量。在WinCC里需要变量引用的位置进行变量选择,出现变量选择对话框后,选中对话框右上角的“STEP 7 Symbol Server”复选框。此时,对话框右侧变量选择列表中将显示“STEP 7 Symbol Server”列表。从改列表中可以显示STEP 7符号表和共享数据块里的所有变量

串口通信

一. 实验目的及实验环境 <1>实验环境 Java eclipse下 <2>实验目的 了解串行通信的背景知识后,通过三线制制作一条串口通信线(PC-PC),并编程实现两台PC间通过RS-232C通信。要求两台PC机能进行实时的字符通信,并了解工业自动化控制中的基本通信方式。 二.实验内容 1、检查PC是否具有串行通信接口,并按其针脚类准备一条串口通信线缆。 2、串口包的安装,下载javacomm20-win32.zip并解压,将win32com.dll复制到\bin目录下;将comm.jar复制到\lib;把https://www.360docs.net/doc/9d8000674.html,m.properties 也同样拷贝到\lib目录下,再将上面提到的文件放到JRE相应的目录下就可以了。 三、方案设计 1、将实验所需RS-232缆线准备好,并将JAVA串口包复制到相应地目录下。 2、查找有关串口通信的书籍以及在网上查找相应地串口通信代码。 3、用JAVA编程软件JCreator编写代码。 四.测试数据及运行结果 图一主界面

图二发送消息 图三接收消息 五.总结 1、实验过程中遇到的问题及解决办法; 串口包的安装配置比较难完成,最后在网上看各种博客和论坛,才将问题解决。还有一些代码问题,最后找同学调试好了。 2、对设计及调试过程的心得体会。 通过本次串口实验,我对串口通信的知识了解的更透彻,这是在刚开始对串口通信知识不了解的情况下就编程而造成许多错误之后才得到的结果。在网上查找资料的时候也接触到了不少其他的编程语言例如VB,delphi,C#等,这也让我对这些从没有学过的语言有所了解,我想这些知识对以后的实验工作都有帮助。我也进一步发现了自己动手能力和自学能力都得到很多的进步,同时也对串口的发送与接收信息有了进一步的了解。 六.附录:源代码

如何在WinCC项目中监控S7 300400 PLC中的定时器及计数器

如何在WinCC项目中监控S7 300/400 PLC中的定时器及计数器 How to Monitor and Control the TIMER and COUNTER of S7 300/400 PLC in WinCC Project

摘要 本文详细描述了如何利用WinCC的类型转换功能来实现在WinCC项目中监控S7 300/400 PLC中的TIME,S5TIME数据类型变量及定时器和计数器的值。 关键词WinCC, 类型转换 , TIME, S5TIME, 定时器,计数器 Key Words WinCC, Type Conversion, TIME, S5TIME, TIMER, COUNTER IA&DT Service & Support Page 2-17

目录 1.在WinCC项目中监控S7 300/400 PLC中的TIME类型变量 (4) 1.1关于TIME数据类型 (4) 1.2具体步骤 (5) 2. 在WinCC项目中监控300/400PLC中的S5TIME类型变量 (8) 2.1 关于S5TIME数据类型 (8) 2.2 具体步骤 (9) 2.3定时器的监控 (12) 3.在WinCC项目中监控S7 300/400 PLC中的计数器值 (13) 3.1 关于计数器 (13) 3.2 具体步骤 (13) IA&DT Service & Support Page 3-17

WinCC中变量的数据类型可能会不同于自动化系统中所使用的数据类型。因此,当组态外部变量时,除了要定义该变量的数据类型,还必须对所有数字型数据类型执行类型转换。类型转换定义如何从WinCC格式转换到AS格式,该定义适用于双向传送。 下表显示哪些WinCC数据类型支持类型转换: 数据类型 类型转换 二进制变量 否 无符号8位数 是 有符号8位数 是 无符号16位数 是 有符号16位数 是 无符号32位数 是 有符号32位数 是 浮点数32位IEEE 754 是 浮点数64位IEEE 754 是 文本变量8位字符集 否 文本变量16位字符集 否 原始数据类型 否 有关类型转换的详细信息,您可在WinCC信息系统中的“通讯”>“过程通 讯”>“WinCC过程通讯”>“外部变量”中找到。 下面我们分别说明如何利用WinCC的类型转换功能来实现在WinCC项目中监控 300/400PLC中的TIME,S5TIME数据类型变量及定时器和计数器的值。 1.在WinCC项目中监控S7 300/400 PLC中的TIME类型变量 1.1关于TIME数据类型 TIME为带符号的32位IEC时间数据类型,时间增量为1ms,取值范围为T#- 24D_20H_31M_23S_648MS至T#24D_20H_31M_23S_647MS。 IA&DT Service & Support Page 4-17

VB串口通信程序代码

vb中怎样用mscomm控件实现串口通信 本问分两部分均来自https://www.360docs.net/doc/9d8000674.html, 第一部分jessezappy(晶晶) ================================================================================== If MSComm1.PortOpen Then MSComm1.PortOpen = False https://www.360docs.net/doc/9d8000674.html,mPort = 1 '假定是用COM1口 ' 设定传输速率等,可依照您的需求更改 MSComm1.Settings = "9600,N,8,1" MSComm1.PortOpen = True '---------初始化Modem------------- MSComm1.Output = "ATZ" MSComm1.Output = "AT&F" MSComm1.Output = "ATE0" MSComm1.Output = "ATM1" MSComm1.Output = "ATQ0" MSComm1.Output = "ATV0" '--------------------------拨号------------- MSComm1.Output ="ATDT163" '拨163 '---------------------------接通后 MSComm1.Output ="SDFJDKSJLKFA" '发送字符串 '--------------------- Private Sub MSComm1_OnComm() '用串口事件捕捉数据.. If MSComm1.InBufferCount Then ' 通讯埠中假如有资料的话, 则读取进来 InStringB = InStringB & MSComm1.Input ' 如果资料中有Chr(13) 和Chr(10) 的话, 则显示出来 If InStr(InStringB, vbCrLf) Then instring = instring & InStringB AddText Text3, InStringB, False InStringB = "" End If End If END SUB

用SerialPort类设计串口通讯程序

使用SerialPort类设计串口通讯程 一.概述 输送带控制模块的核心技术是与PLC的串口通讯,在Visual Studio 6.0中编写串口通讯程序,一般都使用Microsoft Communication Control(简称MSComm)的通讯控件,只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。但在https://www.360docs.net/doc/9d8000674.html,技术广泛应用的今天,Visual https://www.360docs.net/doc/9d8000674.html,没有将此控件加入控件库,所以人们采用了许多方法在Visual https://www.360docs.net/doc/9d8000674.html,来编写串口通讯程序:第一种方法是通过采用Visual Studio 6.0中原来的MSComm控件这是最简单的,最方便的方法,但需要注册;第二种方法是采用微软在.NET推出了一个串口控件,基于.NET的P/Invoke调用方法实现;第三种方法是自己用API写串口通信,虽然难度高,但可以方便实现自己想要的各种功能。 现在微软推出了最新版本的Visual Studio 2005开发工具,可以不再采用第三方控件的方法来设计串口通讯程序。NET Framework 2.0类库包含了SerialPort类,方便地实现了所需要串口通讯的多种功能,为了使MSComm编程方法快速转换到以SerialPort类为核心的串口通讯的设计方法,这里着重讨论了Visual Studio 6.0的MSComm控件和SerialPort类设计方法的异同点。 二.SerialPort常用属性、方法和事件 1.命名空间 System.IO.Ports命名空间包含了控制串口重要的SerialPort类,该类提供了同步I/O 和事件驱动的I/O、对管脚和中断状态的访问以及对串行驱动程序属性的访问,所以在程序代码起始位置需加入Using System.IO.Ports。 2.串口的通讯参数 串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位),在MSComm 中相关的属性是CommPort和Settings。SerialPort类与MSComm有一些区别: 通讯端口号 [PortName]属性获取或设置通信端口,包括但不限于所有可用的COM 端口,请注意该属性返回类型为String,不是https://www.360docs.net/doc/9d8000674.html,mPort的short类型。通常情况下,PortName正常返回的值为COM1、COM2……,SerialPort类最大支持的端口数突破了CommPort控件中CommPort 属性不能超过16的限止,大大方便了用户串口设备的配置。 通讯格式 SerialPort类对分别用[BaudRate]、[Parity] 、[DataBits]、[StopBits]属性设置通讯格式中的波特率、校验位、数据位和停止位,其中[Parity]和[StopBits]分别是枚举类型Parity、StopBits,Parity 类型中枚举了Odd(奇)、Even(偶)、Mark、None、Space,Parity枚举了None、One、OnePointFive、Two。 SerialPort类提供了七个重载的构造函数,既可以对已经实例化的SerialPort对象设置上述相关属性的值,也可以使用指定的端口名称、波特率和奇偶校验位数据位和停止位直接初始化SerialPort 类的新实例。

C#中串口通信编程

本文将介绍如何在.NET平台下使用C#创建串口通信程序,.NET 2.0提供了串口通信的功能,其命名 空间是System.IO.Ports。这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信。 我们将使用标准的RS 232 C 在PC间通信。它工作在全双工模式下,而且我们不打算使用任何的握手或流控制器,而是使用无modem连接。 命名空间 System.IO.Ports命名空间中最重用的是SerialPort 类。 创建SerialPort 对象 通过创建SerialPort 对象,我们可以在程序中控制串口通信的全过程。 我们将要用到的SerialPort 类的方法: ReadLine():从输入缓冲区读一新行的值,如果没有,会返回NULL WriteLine(string):写入输出缓冲 Open():打开一个新的串口连接 Close():关闭 Code: //create a Serial Port object SerialPort sp = new SerialPort (); 默认情况下,DataBits 值是8,StopBits 是1,通信端口是COM1。这些都可以在下面的属性中重新设置: BaudRate:串口的波特率 StopBits:每个字节的停止位数量 ReadTimeout:当读操作没有完成时的停止时间。单位,毫秒 还有不少其它公共属性,自己查阅MSDN。

串口的硬件知识 在数据传输的时候,每个字节的数据通过单个的电缆线传输。包包括开始位,数据,结束为。一旦 开始位传出,后面就会传数据,可能是5,6,7或8位,就看你的设定了。发送和接收必须设定同样 的波特率和数据位数。 无猫模式 没有Modem模式的电缆只是简单地交叉传送和接收线。同样DTR & DSR, 和 RTS & CTS也需要交叉。RS232针图 这里,我们三条线。互连2和3(一段的2pin连接3pin),连接两端的5pin。 [示例程序] 主程序

WinCC实例教程

WinCC 视频教程知识点总结 第一讲组态软件基础 一、WinCC简介 1、WinCC 西门子视窗控制中心SIMATIC WinCC(Windows Control Center)是在计算机上对PLC 控制的运行设备进行状态监控的软件,是PC上的监控软件。 运行该软件,可以动画监视现场设备的运行状况,监视相应的运行参数,以及更改、设置系统的运行数据。 2、WinCC的特点 (1)开放性 WinCC对用户所添加的任何形式的扩充是绝对开放,该绝对开放性是通过WinCC的模块结构及其强大的编程接口来获取的。 (2)将应用软件集成到WinCC中 WinCC提供了一些方法将其他应用程序和应用程序块统一地集成到用于过程控制的用户界面中。OLE应用程序窗口和OLE自定义控制或Active控制可以集成到WinCC应用软件中。 (3)WinCC中的数据管理 WinCC的数据库为Windows SQL,从属于WinCC,该数据库用于存储所有面向列表的组态数据(如变量列表和消息文本),以及当前过程数据(如消息,测量值和用户数据记录等)该数据库具有服务器功能。

(4)在项目开始之前规定组态分类 a、文件夹名称 除一些特殊字符(例如\)之外,文件夹名称允许使用所有的字符。还允许使用数字0~9. b、变量名称 变量名称可以多于8个字符。但应尽量避免太长的名称。WinCC项目的变量名称必须是唯一的。如果变量名称还包含了其他信息,这对用户将非常有用。 c、画面名称 确定画面名称时应注意其长度的影响,太长的名称(文件名)不容易识别(列表框中的选择,脚本中的调用等)。根据经验表明,长度最好不超过28个字符,画面名称应遵守以下限制条件:①最大长度为255个字符;②不使用某些特殊字符(例如\);③画面名称中的字母不区分大小写。 二、WinCC软件的安装 1、安装S7-300/400PLC编程软件STEP7及PLCSIM; 2、安装数据库软件SQL Server 2000; 3、安装消息列队(软件操作); 4、安装WinCC(建议不选典型安装,选择全部安装)。 三、WinCC管理器 1、WinCC项目管理器的结构 WinCC项目管理器的用户界面由以下元素组成:标题栏、菜单栏、工具栏、状态栏、浏览窗口和数据窗口:

构建一个WinCC冗余项目

如果需要使用WinCC冗余系统时,请仔细阅读下面的文档,它将解决以下几个问题: (1)WinCC冗余有什么样的功能? (2)需要购买什么样的授权? (3)应该安装在怎么样的系统上? (4)如何为用户配置操作系统的权限? (5)如何创建WinCC的冗余服务器项目? (6)如何创建WinCC的客户机? (7)如何诊断冗余错误和识别冗余工作状态? 除此之外,对于需要引申的内容,该文档还提供了相关内容的链接地址和帮助路径,方便用户更加系统地学习WinCC冗余内容。 1.冗余系统简介 WinCC冗余是两台互联的WinCC并行工作,并基于事件进行同步,提高了系统的可靠性。WinCC冗余具有下列功能: (1)故障自动识别,故障恢复后自动同步变量记录、报警消息、用户归档。 (2)在线同步变量记录、报警消息、用户归档。 (3)服务器故障时,客户端自动切换到可用的服务器。 (4)自动识别伙伴服务器的状态,并实时显现主备服务器的工作状态。 (5)自动生成系统故障信息,及时发现服务器软件故障。 如果项目中有上述需求,WinCC冗余可以方便项目的实施。 2.搭建WinCC冗余项目的必要条件 2.1 软件和授权 表01 2.2 安装系统环境 建议使用Windows Server 2003或者Windows Server 2003 R2 对于单用户的冗余系统,也可使用Windows XP操作系统。

更详细的兼容性列表,可以参考: 8795716 3.组态WinCC冗余系统 3.1 创建Windows用户 在两台服务器上,创建相同的用户名和密码。 步骤: 计算机管理里面打开本地用户和组?管理工具?(1)在Windows开始 图01 (2)创建一个新用户或者使用默认的Administrator (3)对于新建用户,在隶属于中,为用户分配Administrator,SIMATIC HMI和SQLServer2005MSSQLUSER$本地计算机名称$WinCC三个用户组。对于默认Administrator用户,检查是否属于上述三个组。

51单片机与串口通信代码

51单片机与串口通信代码 2011年04月22日 17:18 本站整理作者:佚名用户评论(0) 关键字:串口通信(35) 串口调试 1. 发送:向总线上发命令 2. 接收:从总线接收命令,并分析是地址还是数据。 3. 定时发送:从内存中取数并向主机发送. 经过调试,以上功能基本实现,目前可以通过上位机对单片机进行实时控制。 程序如下: //这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收 //和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的 #i nclude #i nclude #i nclude #define INBUF_LEN 4 //数据长度 unsigned char inbuf1[INBUF_LEN]; unsigned char checksum,count3 , flag,temp,ch; bit read_flag=0; sbit cp=P1^1; sbit DIR=P1^2; int i; unsigned int xdata *RAMDATA; /*定义RAM地址指针*/ unsigned char a[6] ={0x11,0x22,0x33,0x44,0x55,0x66} ; void init_serialcomm(void) { SCON=0x50; //在11.0592MHz下,设置串行口波特率为9600,方式1,并允许接收

PCON=0x00; ES=1; TMOD=0x21; //定时器工作于方式2,自动装载方式 TH0=(65536-1000)%256; TL0=(65536-1000)/256; TL1=0xfd; TH1=0xfd; ET0=1; TR0=1; TR1=1; // TI=0; EA=1; // TI=1; RAMDATA=0x1F45; } void serial () interrupt 4 using 3 { if(RI) { RI=0; ch=SBUF; TI=1; //置SBUF空 switch(ch) { case 0x01 :printf("A"); TI=0;break; case 0x02 :printf("B"); TI=0;break; case 0x03 :printf("C"); TI=0;break;

串口通信代码

串口通信代码 TMSCOMN::~TMSCOMN() { if(hComs != INVALID_HANDLE_VALUE) { CloseHandle(hComs); hComs = INVALID_HANDLE_VALUE; } }; void TMSCOMN::CloseComs() { if(hComs != INVALID_HANDLE_VALUE) { CloseHandle(hComs); hComs = INVALID_HANDLE_VALUE; } }; AnsiString TMSCOMN::GetComError() { AnsiString Errors; if(ComReg==0) Errors = AnsiString("串口设备与串口工作良好"); else if(ComReg==1) Errors = AnsiString("串口未打开"); else Errors = AnsiString(" 串口设备与串口未连接上"); return Errors; }; void TMSCOMN::SetRs232Coms(int NoComs,int Bps) { AnsiString ComNo; DCB dcb; COMMTIMEOUTS TimeOuts; char str[100]; ComErr = AnsiString(""); if(hComs != INVALID_HANDLE_VALUE) { CloseHandle(hComs); hComs = INVALID_HANDLE_VALUE; } ComNo = AnsiString("COM")+AnsiString(NoComs+1);

串口通讯代码

using System; using System.Collections.Generic; using https://www.360docs.net/doc/9d8000674.html,ponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; //导入串口的命名空间 namespace _01_SerialPort { public partial class Form1 : Form { public delegate void showReceiveDelegate(string text); //当采用响应模式,应申明一个委托,实现不同线程的控件实验 SerialPort com = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One);//初始化构造函数 public Form1() { InitializeComponent(); } ///

///窗体加载 /// /// /// private void Form1_Load(object sender, EventArgs e) { cmbPort.SelectedIndex = 0; cmbBaudRate.SelectedIndex = 0; cmbDataBits.SelectedIndex = 0; cmbStopBits.SelectedIndex = 0; cmbParity.SelectedIndex = 0; } /// ///串口打开与关闭 /// /// /// private void btnOpen_Click(object sender, EventArgs e) { if (btnOpen.Text == "打开串口") { try { if (!com.IsOpen) { com.PortName = cmbPort.Text; com.BaudRate = int.Parse(cmbBaudRate.Text); com.DataBits = int.Parse(cmbDataBits.Text); switch (cmbStopBits.SelectedIndex) { case 0: com.StopBits = StopBits.One; break; case 1: com.StopBits = StopBits.Two; break;

相关文档
最新文档