现场项目是我用200smart编写的,com0和扩展通讯卡COM1都是自由口通讯,用发送完成中断和接收中断处理数据。扩展COM1是和射频读写头自由口通讯实时读地标卡数据,CPU本体COM0是和moxa的485转wifi模块通讯,用于和上位机进行数据读写,上位机与17个200plc通过各自的无线模块与上位机通讯,上位机发送周期为1秒。
主要想说下COM0通讯,程序中
com0通讯调用的程序块包括 :无线模块485,INT2;IN3,IN4
无线模块485:(发送缓存区赋值、初始化端口和控制字,),
INT2:发送连续的10个数据字节+2个校验字节后等待接收,
IN3: 从缓存区取出35个数据字节+2个校验字节后暂存至VB1701至VB1737后,启动定时中断SMB34,延时20ms
INT4: 定时到后再次启动发送,停计时。
因为通讯中发生过数据错误的情况,所以在新程序中在发送和接收的数据时增加CRC16校验,校验的程序CRC_SEND和CRC_RCV。当接收到的前35个字节计算得出的CRC校验值与接收到的校验字完全一致时将VB1701至VB1735的35个字节传送给VB1901开始的35个字节在主程序中使用。
VB1601至VB1610发送的10个数据字节,在调用CRC_SEN校验后,发送12个字节至上位机
因为改的程序不知道合理不,截图太麻烦,想请高手给留个邮箱,我发程序过去给看看有什么问题没。
还想问下、200smart中通讯负载如何看,有相应的状态字吗?