欧姆龙cp1h与工控机232通讯程序实例求教,(发送和接受数据)谢谢

欧姆龙cp1h与工控机232通讯程序实例求教,(发送和接受数据)谢谢,第1张

硬件配置

PLC CP1H-X40DT-D *2

RS232C通讯扩展 CP1W-CIF01

触摸屏 NB7W-TW00B

I/O扩展 CP1W-40EDT

伺服驱动器 MR-J4\E

探头 GT2-A32

多头放大器 GT2-500

RS232C通讯单元 DL-RS1A

1、6轴伺服控制

2、RS232自由口通讯

3、主从站通讯

分享给大家用于 适合初学者学习或则编程参考吧

可以提供图纸

通过RS232总线与PC进行通信的测试程序(c语言)

/*这是一个使用单片机串行通信口通过RS232总线与PC进行通信的测试程序,无需扩展.可将DB9的第2和第3脚短路,进行自收自发测试.采用串行中断接收,速率:9600,通信方式2,晶振使用:osc=11.0592MHz。使用SW1-SW6键盘发送文本数字1-6,数码管显示接收的ASCII数据*/

void main(void)

{

SCON=0x50

TMOD=0x21

TH1=0xfd

TL1=0xfd

TH0=0xf4

TL0=0x48

ES=1ET0=1EA=1

TR1=1

TR0=1

while(1)

{

if(!key){ Delay(30000)

a=Key_down()

SBUF=table[a]

while(TI==0)

TI=0

}

}

}

uchar Key_down(void)

{ uchar x

if(!sw1)x=1

else if(!sw2)x=2

else if(!sw3)x=3

else if(!sw4)x=4

else if(!sw5)x=5

else if(!sw6)x=6

return(x)

}

void Int_T0(void) interrupt 1

{

TH0=0xf4

TL0=0x48

if(count==5)count=0

else count++

switch(count)

{

case 0:DIG_NUM=0x7f

LED_DISPLAY=buff_led1

break

case 1:DIG_NUM=0xbf

LED_DISPLAY=buff_led2

break

case 2:DIG_NUM=0xdf

LED_DISPLAY=buff_led3

break

case 3:DIG_NUM=0xef

LED_DISPLAY=buff_led4

break

case 4:DIG_NUM=0xf7

LED_DISPLAY=buff_led5

break

case 5:DIG_NUM=0xfb

LED_DISPLAY=buff_led6

break

default:break

}

}

void Int_Serial(void) interrupt 4

{

while(RI==0)

a=SBUFRI=0

buff_led1=buff_led2

buff_led2=buff_led3

buff_led3=buff_led4

buff_led4=buff_led5

buff_led5=buff_led6

buff_led6=a

}

void Delay(int t)

{while(--t)}

这是我自己整理的一个东西。用的是MOXA的API

用这些API,要添加一个api232.dll

PComm 库函数

PComm 库函数是台湾MOXA公司提供的,他为用户提供了基于win32 api的开发接口。 PComm库函数分为7大类

控制函数、数据输入函数、数据输出函数、状态函数、事件驱动函数、传输文件函数、特殊设定函数

上述函数均返回int型数据,若函数调用成功则返回0,否则返回一个负整数。

控制函数主要包括

sio_open(PortNum) 打开串口

sio_close(PortNum) 关闭串口

sio_ioctl(PortNum, baud, mode)设置串口的工作模式,包括 波特率,数据位元,停止位,效验等

sio_flush(portNum,func)清除发送、接收缓冲区 其中func 为0清空输入 ,为1清空输出,为2清空输入输出

sio_SetWriteTimeouts(int port,DWORD TotalTimeouts):设置串口写 *** 作的超时。

sio_lctrl(Portnum,mode) 设置串口RTS/DTS。 待定

数据输入函数主要包括

sio_getch(PortNum) 从输入缓冲区读一个字符

sio_read(PortNum,buf,len) 从输入缓冲区读指定个数的字符

sio_iqueue(Portnum)读取输入缓冲区中的字符长度

数据输出函数主要包括

sio_putch(PortNum) 写一个字符到输出缓冲区

sio_write(PortNum,buf,len)写指定个数的字符到输出缓冲区

状态函数主要包括

sio_lstatus(portNum)获取串口的CTS,DSR,DCD,RI线的状态

sio_getbaud(portNum)获取串口的波特率

sio_getmode(portNum)获取串口的工作模式。对应sio_ioct函数

事件函数主要包括

sio_term_irq(portNum,func,code) 当接收到指定字符时响应事件,func为回调函数名,code为指定的字符

sio_cnt_irq(PortNum,func,count) 当接收到指定个数字元时响应事件,func为回调函数名,count接收的个数

传输文件函数主要包括

sio_FtASCIITx(portNum,fname,func,key)发送一个文本文件

sio_FtASCIIRx(portNum,fname,func,Key,sec)接收一个文本文件

int i,Ret,DataLen

FILE *fp1

uchar RetDataC[30],WriteData[24],PSC[5]

Ret = sio_open(port)

if (Ret != SIO_OK )

return(-1)//打开串口错误

Ret = sio_ioctl (port, B9600, P_NONE | BIT_8 | STOP_1 )

if (Ret != SIO_OK) {

sio_close(port)

return(-2)//设置串口参数失败

}

/*Ret = sio_lctrl (port, C_DTR | C_RTS )

if (Ret != SIO_OK) {

sio_close(port)

return(-2)//设置串口参数失败

}*/

/*Ret = sio_flush(port,2)

if (Ret != SIO_OK){

sio_close(port)

return(-3)//清空 输入和输出缓冲区的数据

}*/


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11595073.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存