工控网首页
>

应用设计

>

通过C语言控制OMRON PLC的RS232通讯

通过C语言控制OMRON PLC的RS232通讯

2004/12/17 21:16:00
一、 引言: 现在在工业现场很少有人再用C语言做串口通讯程序了,但是基于DOS环境的程序还是有它的优势的。DOS系统的单任务环境是系统运行更加稳定、可靠;在一些追求很高的可靠性的系统中还是有一定的价值的。本文通过C语言控制PLC实现简单的物料传送为例子。 二、 硬件介绍: 1、CPM1A采用RS232串口通讯与上位机连接,在PLC的DM区中可以设定串口参数,本文采用默认值: 串口通信格式: 1位---起始位、9600---波特率、7位---数据位、2位---停止位、偶校验 2、C语言中用于串口读写的函数:bioscom,在bios.h头文件中。 Bioscom用法:bioscom(int cmd,char byte,int port) Cmd的值:0 设置通信参数为btye值 1 发送一个字符到串口 2 从串口接收一个字符 3 返回串口端口的状态 byte的值: 0x02 7数据位 0x03 8位数据位 0x00 1个停止位 0x04 2个停止位 0x00 无奇偶校验 0x08奇校验 0x18偶校验 0x80 1200波特率 0xA0 2400波特率 0xC0 4800波特率 0xE0 9600波特率 注意:在对串口初始化时,上述参数值相或附给byte。 Port的值: 0 端口1 1 端口2 三、 完整源代码: #include /* 此头函数请不要删除 */ #include #include #define F1 0x3B /*启动*/ #define F2 0x3C /*停止*/ #define F3 0x3D /*混料*/ #define F4 0x3E /*出料*/ #define F5 0x3F /*退出*/ #define PORT 0 /*定义端口号*/ #define SETTINGS (0x02|0x04|0x18|0xE0) /*设定参数*/ /* 定义发送字符函数send */ void sendPort(int port,char cc) { union{ char ch[2]; int status; }port_status; /*发送一个字符*/ port_status.status=bioscom(1,cc,port); printf("%c",cc); /*判断发送是否正确*/ if(port_status.ch[1]&128) {printf("Send data error detected in serial port"); printf("\r"); } } /* Check-Status 检查端口*/ int check_status(int port) { int status; status=bioscom(3,0,port); if(status & 0x100)return 0; else return 1; } /*发送命令函数*/ void SendOder(char od[]) { int i=0; for(i=0;i<=16;i++) sendPort(PORT,od[i]); } /*应用程序主体*/ main() { int key=1,i,m=1; int check=1; char a[20]="@00WR0000000144*"; /*启动00*/ char b[20]="@00WR0000000441*"; /*混料02*/ char c[20]="@00WR000000084D*"; /*出料03*/ char d[20]="@00WR0000000247*"; /*停止01*/ a[16]=\r; b[16]=\r; c[16]=\r; d[16]=\r; printf("启动:F1 \t混料:F2 \t出料:F3"); printf(" \t停止:F4 \t退出:F5\n"); bioscom(0,SETTINGS,PORT); /*初始化串口*/ while(check!=0) /*检查端口状态*/ { m+=1; check=check_status(PORT); if(m>=1000)break; } while (1) { while (bioskey(1)==0); key=bioskey(0); key=key&0xFF?0:key>>8; if(key==F1) /*启动命令*/ { for(i=0;i<=16;i++) { sendPort(PORT,a[i]); m=1; while(check!=0) { m+=1; check=check_status(PORT); /*检查端口状态*/ if(m>=3000)break; } } } else if(key==F4) /*停止命令*/ { for(i=0;i<=16;i++) { sendPort(PORT,d[i]); m=1; while(check!=0) { m+=1; check=check_status(PORT); if(m>=3000)break; } } } else if(key==F2) /*混料命令*/ { for(i=0;i<=16;i++) { sendPort(PORT,b[i]); m=1; while(check!=0) { m+=1; check=check_status(PORT); if(m>=3000)break; } } } else if(key==F3) /*出料命令*/ { for(i=0;i<=16;i++) { sendPort(PORT,c[i]); m=1; while(check!=0) { m+=1; check=check_status(PORT); if(m>=3000)break; } } } else if(key==F5)exit(1); /*退出命令*/ } getch(); /* 此语句请不要删除*/ } 四、结束语 RS232串口通讯在小型的控制系统同中还是应用广泛的,本文采用C语言控制,主要是给用户提供一个新的控制方式做选择。 1、谭浩强·C程序设计(第二版)
投诉建议

提交

查看更多评论
其他资讯

查看更多

利用VB6.0与莱恩达的智能模块实现通讯设计