威纶通官方论坛

关于触摸屏与单片机MODBUS通讯

  [复制链接]
发表于 2012-4-13 19:00:55 | 显示全部楼层
例子是屏做主机,单片机做人机吗?
发表于 2012-4-13 19:22:04 | 显示全部楼层
最好给个屏作从机的例子
发表于 2012-4-27 12:39:47 | 显示全部楼层
楼主,你们的这个例子(参考网站上www.weinview.cn 范例下载D40:与单片机通讯示例)有BUG,比如在通讯过程中,拔掉通讯线,然后再插上去,就有可能再也通讯不上了。此时必须重新复位单片机才能通讯上。我猜情况应该是通讯了一半,断线了,插上去后,单片机再也收不到完整的MODBUS帧了,所以也不会回数给触摸屏。
发表于 2012-4-30 16:40:13 | 显示全部楼层
D40例子用232接口通讯,可以返回数据,485通讯不能返回数据,程序中没有给出R/T控制,大家自己加上吧,做做实验还行
发表于 2012-5-1 10:05:02 | 显示全部楼层
T0= RECIEVE;
P3.4口是R/T控制
发表于 2012-5-14 20:54:54 | 显示全部楼层
最近在研究 屏与单片机通讯 看了论坛D40代码  其中有句uchar  data *port _at_ 0x7F ; 不懂  请大家指教
发表于 2012-5-28 14:56:24 | 显示全部楼层
版主,你好!我将例程分别烧到了MT6070iH和1T的单片机,可以通讯得上,但是出现了旋钮自动复位的现象,即在触摸屏上点击旋钮TS_0,其会自动返回之前的状态,不能保持切换的状态,而离线模拟的时候则不会。想咨询下这是由上面原因造成的呢?单片机这边的程序有什么要修改的吗?(论坛中貌似有帖提到程序有点小问题,但是不知道该哪里)谢谢~
发表于 2012-5-29 19:51:31 | 显示全部楼层
SlaveOutputBuf[0]=~P2; // send data of master force coil val
   SlaveOutputBuf[1]=~P0;
   i=CommBuf[2]+3;
   for(CommIndex=3;CommIndex<i;CommIndex++) // send data Reg to Master
   CommBuf[CommIndex]=SlaveOutputBuf[CommIndex-3]; // hight 8 bit is first send
   crc16tem=crc16(CommBuf,CommIndex); // then send low 8 bit data
   CommBuf[CommIndex++]=(uchar)(crc16tem & 0x00ff); // send crccheck low 8 bit is front
   CommBuf[CommIndex]=(uchar)(crc16tem>>8); // then send hight 8 bit
   CommIndexEnd=CommIndex;
   CommIndex=0;
   SBUF=CommBuf[CommIndex++];
   break;
   case ForceSingleCoil:
   // SlaveInputBuf[0]=CommBuf[4]; // get data 0x00 or 0xff

   if (CommBuf[4]==0xff)

     {
      switch(CommBuf[3])
{
case 0:
  LED0=0;
break;
case 1:
  LED1=0;
   break;
case 2:
  LED2=0;
   break;
case 3:
  LED3=0;
   break;
case 4:
  LED4=0;
   break;
case 5:
  LED5=0;
   break;
case 6:
  LED6=0;
   break;
case 7:
  LED7=0;
   break;
   
   case 8:
  LED8=0;
break;
case 9:
  LED9=0;
   break;
case 10:
  LED10=0;
   break;
case 11:
  LED11=0;
   break;
case 12:
  LED12=0;
   break;
case 13:
  LED13=0;
   break;
case 14:
  LED14=0;
   break;
case 15:
  LED15=0;
   break;

}
}
else

{
switch(CommBuf[3])
{
case 0:
  LED0=1;
   break;
case 1:
  LED1=1;
   break;
case 2:
  LED2=1;
   break;
case 3:
  LED3=1;
   break;
case 4:
  LED4=1;
   break;
case 5:
  LED5=1;
   break;
case 6:
  LED6=1;
   break;
case 7:
  LED7=1;
   break;
case 8:
  LED8=1;
break;
case 9:
  LED9=1;
   break;
case 10:
  LED10=1;
   break;
case 11:
  LED11=1;
   break;
case 12:
  LED12=1;
   break;
case 13:
  LED13=1;
   break;
case 14:
  LED14=1;
   break;
case 15:
  LED15=1;
   break;
  }
}

// LED0=!LED0;
ForceCoilBuf[count]=CommBuf[4];
forceval=CommBuf[4];
CommBuf[CommIndexSlaveID]=SlaveID; // 0
CommBuf[CommIndexFunction]=ForceSingleCoil; // 1
CommIndex=2;
// CommBuf[CommIndex++]=0x00;
// CommBuf[CommIndex++]=0x01;
// CommBuf[CommIndex++]=0x00;
// CommBuf[CommIndex++]=0xff;
// forcesendF=1;
CommBuf[CommIndex++]=CommBuf[CommIndexStartAdrHi]; // 2
CommBuf[CommIndex++]=CommBuf[CommIndexStartAdrLo]; // 3
CommBuf[CommIndex++]=CommBuf[CommIndexNoPointHi]; // 4
CommBuf[CommIndex++]=CommBuf[CommIndexNoPointLo]; // 5
crc16tem=crc16(CommBuf,CommIndex); // then send low 8 bit data
CommBuf[CommIndex++]=(uchar)(crc16tem & 0x00ff); // send crccheck low 8 bit is front
CommBuf[CommIndex]=(uchar)(crc16tem>>8); // then send hight 8 bit
CommIndexEnd=CommIndex;
CommIndex=0;
SBUF=CommBuf[CommIndex++];
count=0;
break;
看看有什么不一样,
发表于 2012-5-29 19:53:40 | 显示全部楼层
uchar idata SlaveOutputBuf[MaxRegLen]; // Hight 8 bit of word is front,Low 8 bit is back

uchar idata SlaveInputBuf[MaxRegLen];

uchar  data *port _at_ 0x7F ;

/* exp data define */
//#define SlaveAdr XBYTE [0xD800]
sbit LED0=P2^0;
sbit LED1=P2^1;
sbit LED2=P2^2;
sbit LED3=P2^3;
sbit LED4=P2^4;
sbit LED5=P2^5;
sbit LED6=P2^6;
sbit LED7=P2^7;
sbit  LED8=P0^0;
sbit  LED9=P0^1;
sbit LED10=P0^2;
sbit LED11=P0^3;
sbit LED12=P0^4;
sbit LED13=P0^5;
sbit LED14=P0^6;
sbit LED15=P0^7;

uchar idata ForceCoilBuf[10];
uchar count=0;
uchar forceval=0x00;
//bit forcesendF=0;
/* Table Of CRC Values for high-order byte */
uchar code auchCRCHi[] = {
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
发表于 2012-5-31 19:49:44 | 显示全部楼层
谢谢分享,真是需要之时。顶顶顶顶顶顶顶!
发表于 2012-7-16 19:26:38 | 显示全部楼层
版主不是校验员
发表于 2012-8-3 21:54:07 | 显示全部楼层
谢谢提供的资料
发表于 2012-8-16 11:40:58 | 显示全部楼层
PC与触摸屏通讯时,PC设备的PLC类型选的是Free Protocol,如果是采用MODBUS通讯协议让avr128单片机与触摸屏通讯,那设置设备属性时,PLC类型是指通讯方式吗?是根据所选方式是ASCII或RTU相应选择MODBUS ASCII或MODBUS RTU吗?
发表于 2012-9-11 21:49:31 | 显示全部楼层
上面的51单片机MODBUS示例.rar (版主怎么在触摸屏设置1X    0x    地址
发表于 2012-9-20 19:58:22 | 显示全部楼层
触摸屏做从站(modbus server),单片机做主站该怎么做啊?有例子吗?有没有人做过啊?
发表于 2012-9-21 14:48:04 | 显示全部楼层
谢谢下载看看
发表于 2012-9-25 20:19:29 | 显示全部楼层
学习中,不错,太感谢了。
发表于 2012-11-10 22:33:09 | 显示全部楼层
很高深,不懂。都是高手高手高高手,顶一下!!
发表于 2013-1-5 19:33:00 | 显示全部楼层
非常感谢楼主!正在搜集资料研究此问题,谢谢!
发表于 2013-1-22 11:16:10 | 显示全部楼层
太好了,感谢感谢
您需要登录后才可以发帖 登录 | 注册

本版积分规则

回复帖子

Archiver|小黑屋|威纶通官网 ( 粤ICP备06054553号 )

GMT+8, 2024-4-26 08:07

Powered by Discuz! X3.4

© 2001-2023 Comsenz Inc.

快速回复 返回顶部 返回列表