计算机与PLC通讯的格式和实现方法(2) 点击:2145 | 回复:12



串口通讯

    
  • 精华:3帖
  • 求助:0帖
  • 帖子:73帖 | 356回
  • 年度积分:0
  • 历史总积分:1788
  • 注册:2007年7月09日
发表于:2007-11-28 14:50:00
楼主
另外,在进行上述四类操作以前,首先要对端口进行初始化操作,即设定通讯协议(包括设置通讯波特率、数据位数、数据停止位及奇偶校验)。在WINDOWS的SDK中定义了一个结构DCB,该结构详细地说明了如何对通讯端口进行控制,所以通讯端口的初始化也是围绕着对这个结构的正确设置为中心进行的。用VC++语言实现端口初始化如下:
  BOOL CSerial::Open(int nPort)
{
  //nPort 为微型计算机串行通讯口端口号。nport=1为端口1;nPort=2为端口2。
  char szPort\[15\];
  DCB dob;
  m_hIDComDev=CreateFile(szPort, GENERIC_READ│GENERIC_WRITE,O,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL│FILE_FLAG_OVERLAPPED,NULL);
  dcb.DCB1ength=sizeof(DCB);
  GetCommState(m_hIDComDev,&dcb);//取得通讯资源当前设置
  dcb.BaudRate=9600;//设定波特率为9600
  dcb.ByteSize=7;//7数据位
  dcb.Parity=2;//偶校验
  dcb.StopBits=0;//设定1个停止位
  if(SetCommState(m_hIDComDev,&dcb)return(TRUE);
  else return(FALSE);//设置端口,若设置成功则返回TRUE,否则返回FALSE

  需要说明的是CSerial是一个用于串行通讯的类,它包含了进行串行通讯的所需的函数。除上述端口初始化成员函数Open外,还包括另两个重要成员函数:一个是endData,把数据从一个缓冲区发送到串行端口。另一个是ReadData,从端口的接收缓冲区中读入数据。
  其次,在每进行一次上述四类操作中的一种操作以前,还要进行握手联络。对PLC发请求讯号ENQ(代码为OX05),然后读PLC 的响应讯号。如果读到的响应讯号为ACK(代码为OX06),则表示PLC已准备就绪,等待接收通讯数据。握手联络VC++语言示PLC已准备就绪,等待接收通讯数据。握手联络VC++语言实现为:
BOOL CNTJD1g::ReadFromPLC(char *Read_char char *Read_address,int Read_bytes)
{
  CSerial Serial;//用于串行通讯的类
  char read_BUFFER;
  if(Serial.Open(2)//初始化串行口通讯口COM2
  { Serial.SendData(&ENQ_request,1);//发送联络讯号
   Sleep(1000);//等待1秒钟
   Serial.ReadData(&read_BUFFER,1);//读取PLC响应讯号
  if(read_BUFFER==ACK)
  { 如果PLC响应讯号等于ACK,则进行上述四种操作:}}
  Serial.Close()://操作完毕后,关闭通讯口
}



要吃饭的电工

  • 精华:0帖
  • 求助:0帖
  • 帖子:118帖 | 1116回
  • 年度积分:0
  • 历史总积分:1856
  • 注册:2004年7月13日
发表于:2007-11-29 19:56:00
1楼

牛德玉

  • 精华:0帖
  • 求助:2帖
  • 帖子:6帖 | 185回
  • 年度积分:0
  • 历史总积分:638
  • 注册:2006年12月09日
发表于:2007-12-01 20:00:00
2楼
学习了.

AB菜鸟

  • 精华:0帖
  • 求助:0帖
  • 帖子:14帖 | 228回
  • 年度积分:0
  • 历史总积分:361
  • 注册:2003年10月26日
发表于:2007-12-03 13:37:00
3楼
学习中……

梦游雨中

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 176回
  • 年度积分:0
  • 历史总积分:474
  • 注册:2007年10月27日
发表于:2007-12-03 16:58:00
4楼
学习哦~~~~

heidai

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 1835回
  • 年度积分:0
  • 历史总积分:2824
  • 注册:2007年5月23日
发表于:2007-12-03 17:19:00
5楼
学习

左晟

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 22回
  • 年度积分:0
  • 历史总积分:156
  • 注册:2007年7月26日
发表于:2007-12-04 22:54:00
6楼
初级学习中`

jiangjichao

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 16回
  • 年度积分:0
  • 历史总积分:130
  • 注册:2007年10月02日
发表于:2007-12-30 09:07:00
7楼
正在学习。

miao_chuan

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:1
  • 注册:2007年12月30日
发表于:2007-12-30 09:58:00
8楼
学习学习学习学习

鸿浩

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 30回
  • 年度积分:0
  • 历史总积分:38
  • 注册:2007年3月01日
发表于:2007-12-30 21:40:00
9楼
学习

lishuai

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 96回
  • 年度积分:0
  • 历史总积分:145
  • 注册:2007年6月04日
发表于:2008-01-04 22:56:00
10楼
学习!但遗憾的是不会VC++

lishuai

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 96回
  • 年度积分:0
  • 历史总积分:145
  • 注册:2007年6月04日
发表于:2008-01-04 22:56:00
11楼
学习!但遗憾的是不会VC++

东北风

  • 精华:6帖
  • 求助:0帖
  • 帖子:95帖 | 520回
  • 年度积分:0
  • 历史总积分:1407
  • 注册:2006年8月07日
发表于:2008-04-03 08:30:49
12楼
好文章!我现在正需要这样的资料。

热门招聘
相关主题

官方公众号

智造工程师