quote:以下是引用zzp123在2013-09-14 05:59:26的发言:
我现在的程序运行一段时间就死掉,不是道哪里的问题啊,全部自由口通讯,变频器调用一个中断,仪表调用另一个中断,连个独立的初始化,运行10分钟左右数据就不动了
你牛,能整死机。
你变频一个中断,仪表一个中断什么意思?
一般发送、接收各一个中断就可以了,至于不同的仪表通讯,可以用个计数器,不同的数值可以进行不同区域的数据发送和接收。
一般思路是这样的:
1、初始化通讯数据,包括自由口参数、中断初始化;可以用50ms定时中断连接XMT。发送完数据可以立即接收,但是接收完数据后,一般要有一个缓冲时间后,再发送数据。
2、初始化调用定时中断,启动XMT发送数据,假设用VB0计数;
3、发送完成中断中,分离定时中断;启动RCV接收;同时置位完成 标志位,用以计时。若计时超过1000MS,认为接收超时,此时分离接收中断,并复位数据发送完成标志位,同时启动定时中断。
4、接收完成中断中,启动定时中断;并复位数据发送完成标志位。启动下一次数据发送。
5、关于VB0计数,主要用来区分不同的仪表发送和接收区,且发送区已经可以通过数据快写好报文了。比如VB0=1,XMT的发送地址是VB200,接收地址是VB300;VB0=1,则发送区和接收区分别是VB210和VB310;以此累推……假设十个仪表,需要发送十个数据,则VB0=10的时候,地址对应VB290和VB390。此时注意的是,VB0=10后,在程序再一次发送数据的时候,要先将VB0恢复为0,重新下一轮计数。
说的有点麻烦,不过思路看懂了的话,应该还是很好用的。我已经用了很多程序了,包括CPU224与仪表、变频器和PLC的通讯,都正常。
老手一看就懂,新手可以仔细看下,具体步骤就不说了。思路,才是编程的灵魂!