搜索
bottom↓
回复: 78

新年献礼,上传MODBUS程序,希望大家指正(声明:部分程序直接拷贝的论坛上前辈的),优点是着重

[复制链接]

出0入0汤圆

发表于 2008-1-8 09:23:53 | 显示全部楼层 |阅读模式
点击此处打开电路图ourdev_200557.pdf(文件大小:43K)

M64,14.7456M晶振
定时器中断时间为1s,如果发送间隔大于T1.5但小于T3.5的数据丢弃
与其他前辈的区别就是着重在时间上,其他的关于数据结构协议上的程序,参考论坛上的其他前辈的程序
如果参考其他前辈的程序冒犯了,请告之,我就删除

另外如果AMORK 和其他前辈同意并且确实有价值的话,我就将论坛上相关的整理成一个完整的程序给大家测试



SIGNAL(SIG_UART0_RECV)
{
        Com0_Receive_Data_Buffer[Com0_Receive_Cout]=UDR0;
        if(Com0_Receive_Cout<18)           Com0_Receive_Cout++;
    Uart_Fin = 5;
        Rcvflag = 2;
        Uart_Start = 1;
}
SIGNAL (SIG_UART0_TRANS)
{
         Com0_Send_Data_Pointer++;
        Com0_Send_Data_Bytes--;
        if(Com0_Send_Data_Bytes>0)
      UDR0=*Com0_Send_Data_Pointer;
        else
        UCSR0B|=( 1<<RXEN0 );
}
INTERRUPT(SIG_OVERFLOW0)
{
          TCNT0 = 240; //reload counter value
        flag1ms = 1;
}
void timeProc(void)
{
        wdt_reset();
        if(flag1ms == 1)
        {
                flag1ms = 0;
                if(Uart_Start == 1)//串口开始接收数据
                {
                        if(Rcvflag>0) Rcvflag--;//1.5T的变量
                        if(Uart_Fin>0) Uart_Fin--;3.5T的变量
                        if(Rcvflag == 0)//&Icirc;&acute;&frac12;á&Ecirc;&oslash;&para;&ordf;&AElig;ú//1.5T的时间到了,记录长度
                        {
                                Com0_Receive_Cout15 = Com0_Receive_Cout;
                        }
                        if((Uart_Fin == 0)&&(Uart_Send==0))//&frac12;á&Ecirc;&oslash;//3.5T的时间到
                        {
                                if(Com0_Receive_Data_Buffer[0]==Com0_Send_Data_Buffer[0])/////
                                {
                                        if(Com0_Receive_Cout15 == Com0_Receive_Cout)//判断接收的过程中有没有超过T1.5
                                        {
                                                Uart_End = 5;
                                                Uart_Send = 1;
                                        }       
                                        else
                                        {
                                                Com0_Receive_Cout = 0;
                                        }
                                }
                                else
                                {
                                        Com0_Receive_Cout = 0;
                                        Uart_Start =0;
                                }
                        }
                        if(Uart_End > 0)//一桢数据结束,延长>T3.5发送
                        {
                                Uart_End--;
                                if(Uart_End == 0)
                                {
                                        Com0_Receive_CRCcouter=Com0_Receive_Cout;
                                        Com0_Receive_Cout = 0;
                                        Com0_Communication( ) ;//该部分可参考论坛上的相关程序
                                        Uart_Start =0;
                                        Uart_Send = 0;
                                }
                        }
                }
        }
}
void main (void)
{
        unsigned char Sumad,kk;
        cli();
        initTimer();
        sei();
        while(1)
        {
                timeProc();
                                       
        }
}
void initTimer(void)
{
        TCCR0 = 0x00; //stop
        TCNT0 = 240; //set count
        TIMSK |=0X01;
        TCCR0 = 0x07; //start timer

}
void Com0_Communication(void)
{
        unsigned short crcresult;
        unsigned char   temp[2];
        crcresult= getCRC16(Com0_Receive_Data_Buffer,Com0_Receive_CRCcouter-2);
        temp[1]=crcresult & 0xff;
        temp[0]=(crcresult >> 8) & 0xff;
        if((Com0_Receive_Data_Buffer[Com0_Receive_CRCcouter-1]==temp[0])&&(Com0_Receive_Data_Buffer[Com0_Receive_CRCcouter-2]==temp[1]))
        {
        PORTB^=0x20;
                switch(Com0_Receive_Data_Buffer[1])
        {
            case 0x01:
                                                Modbus_Function_1();
                                                break;  
            case 0x03:
                        Modbus_Function_3();
                        break;  
            case 0x05:
                        Modbus_Function_5();
                        break;            
            case 0x02:
                        Modbus_Function_2();
                        break;
                        case 0x10:
                                                Modbus_Function_16();
                                                break;      
            default:
                                        {
                                                Com0_Send_Data_Buffer[1]=0xFF;
                                                Com0_Send_Data_Buffer[2]=2;
                                                Com0_Send_Data_Bytes=5;
                                                Com0_Send_Data_Buffer[3]=0x00;
                                                Com0_Send_Data_Buffer[4]=0x06;
                    }
        }
    }
    else
    {
        ////show   error!
        Com0_Send_Data_Buffer[1]=0xFF;
        Com0_Send_Data_Buffer[2]=2;
        Com0_Send_Data_Bytes=5;
        Com0_Send_Data_Buffer[3]=0x00;
        Com0_Send_Data_Buffer[4]=0x07;  
    }
   crcresult= getCRC16(Com0_Send_Data_Buffer,Com0_Send_Data_Bytes);
   Com0_Send_Data_Buffer[Com0_Send_Data_Bytes]=crcresult & 0xff;
   Com0_Send_Data_Buffer[Com0_Send_Data_Bytes+1]=(crcresult >> 8) & 0xff;
   Com0_Send_Data_Bytes=Com0_Send_Data_Bytes+2;
   Com0_Send_Data_Pointer=Com0_Send_Data_Buffer;
   UDR0=*Com0_Send_Data_Pointer;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2008-1-8 09:37:33 | 显示全部楼层
ding,支持!

出0入0汤圆

发表于 2008-1-8 13:13:48 | 显示全部楼层
强烈支持楼主公布全部源程序!

出0入0汤圆

发表于 2008-1-8 13:14:43 | 显示全部楼层
谢谢 留个记号

出0入0汤圆

发表于 2008-1-8 14:32:20 | 显示全部楼层
不顶!
定时器中断时间为1s,怎么出理T1.5和T3.5??一般BAUD<=19.2K,T3.5<=1.75MS

出0入0汤圆

发表于 2008-1-8 15:58:07 | 显示全部楼层
是salve还是master?

出0入0汤圆

发表于 2008-1-8 17:00:25 | 显示全部楼层
T0是8位定时器,不可能定时1S中断的,楼主的笔误而已,应该是1MS。看楼主的程序,像是salve的。

出0入0汤圆

 楼主| 发表于 2008-1-10 11:22:36 | 显示全部楼层
是的,不好意思,象6楼说的一样我写错了,是1ms,SLAVE

出0入8汤圆

发表于 2008-1-10 17:50:03 | 显示全部楼层
阿莫发话啊

出0入0汤圆

发表于 2008-1-10 23:40:46 | 显示全部楼层
收下以后看

出0入0汤圆

 楼主| 发表于 2008-1-11 15:15:51 | 显示全部楼层
先谢谢啊莫了!能置COOL我太感动了,不过我不会上穿图片,先上传一下看看,不行再上传PDF格式的
点击此处打开ourdev_200557.pdf(文件大小:43K)



S1:8位的拨码开关
HCF4021B :并入串出芯片
以上两个为地址设置

B0505隔离电源模块:5V如5V出

用于给485提供隔离电源

另外:程序中还缺少485芯片的输入输出控制程序,原因是我公司485的输入输出控制是在别的电路中实现的,所以程序中没有。

应用的时候自己加上就可以了
头像被屏蔽

出0入0汤圆

发表于 2008-1-11 15:20:52 | 显示全部楼层
谢谢【10楼】 lcqqcl  !

电路图已经帮你更新到楼主位。 本贴当之无愧的COOL!

出0入0汤圆

 楼主| 发表于 2008-1-11 15:27:12 | 显示全部楼层
啊莫,你的谢谢两个字让我当之有愧,在您这里学习了不少东西,应该我们谢谢您!

开个玩笑:给点分数奖励吧    :)
头像被屏蔽

出0入0汤圆

发表于 2008-1-11 15:31:10 | 显示全部楼层
放心啊。迟些实施专家分时,你这个原创性的COOL贴,分数会比较高的。

(转载的COOL贴分数会低些)。

出0入0汤圆

 楼主| 发表于 2008-1-11 15:34:09 | 显示全部楼层
好的,先谢谢了,主要是我以前有个置COOL的了,但是没赶上加分,所以这次希望能赶上,可别说我小气就行  :)
头像被屏蔽

出0入0汤圆

发表于 2008-1-11 15:38:48 | 显示全部楼层
专家分我们会“秋后算帐”,旧的COOL贴会重新整理,没有电路图的或审核不严的会取消COOL贴。 同时在审核时,会按一定的标准打分。

比如原创COOL帖是30-100专家分。 转载的COOL帖只能得10个专家分。

以后的发贴得分就基本没有用处。按专家分排名,更客观更有激励。

出0入0汤圆

发表于 2008-1-11 17:53:52 | 显示全部楼层
不错的东西啊!

出0入8汤圆

发表于 2008-1-12 08:34:57 | 显示全部楼层
好贴,留个记号!!希楼主传上完整程序以便测试!!

出0入0汤圆

发表于 2008-1-16 20:38:50 | 显示全部楼层
等待楼主的完整程序.以便测试

出0入0汤圆

发表于 2008-1-17 23:33:06 | 显示全部楼层
谢谢

出0入0汤圆

发表于 2008-1-18 13:24:53 | 显示全部楼层
关注。。。

出0入0汤圆

发表于 2008-1-18 16:06:07 | 显示全部楼层
等待楼主的完整程序.以便测试

出0入0汤圆

 楼主| 发表于 2008-1-24 09:13:02 | 显示全部楼层
最近仔细看了MODBUS协议,发现该函数的错误应答的数据有点问题,就改了一下,可能也不是很完善,但可以肯定比上面的要正确(相对来说),请AMORK给更新一下吧

声明:仅下面这两个函数是我在本网站上的相关资料改的,如又异议,通知我,我删除


void Com0_Communication(void)
{
        unsigned short crcresult;
        unsigned char   temp[2];
        crcresult= getCRC16(Com0_Receive_Data_Buffer,Com0_Receive_CRCcouter-2);
        temp[1]=crcresult & 0xff;
        temp[0]=(crcresult >> 8) & 0xff;
        if((Com0_Receive_Data_Buffer[Com0_Receive_CRCcouter-1]==temp[0])&&(Com0_Receive_Data_Buffer[Com0_Receive_CRCcouter-2]==temp[1]))
        {
        switch(Com0_Receive_Data_Buffer[1])
        {
            case 0x01:
                                                Modbus_Function_1();
                                                break;  
            case 0x03:
                        Modbus_Function_3();
                        break;  
            case 0x05:
                        Modbus_Function_5();
                        break;            
            case 0x02:
                        Modbus_Function_2();
                        break;
                        case 0x10:
                                                Modbus_Function_16();
                                                break;      
            default:
                        {
                                Com0_Send_Data_Buffer[1]=Com0_Receive_Data_Buffer[1]+0x80;
                                Com0_Send_Data_Buffer[2]=1;
                                Com0_Send_Data_Bytes=3;
                               
            }
        }
    }
    else
    {
        ////show   error!
        Com0_Send_Data_Buffer[1]=0xFF;
        Com0_Send_Data_Buffer[2]=3;
        Com0_Send_Data_Bytes=5;
        
    }
   crcresult= getCRC16(Com0_Send_Data_Buffer,Com0_Send_Data_Bytes);
   Com0_Send_Data_Buffer[Com0_Send_Data_Bytes]=crcresult & 0xff;
   Com0_Send_Data_Buffer[Com0_Send_Data_Bytes+1]=(crcresult >> 8) & 0xff;
   Com0_Send_Data_Bytes=Com0_Send_Data_Bytes+2;
   Com0_Send_Data_Pointer=Com0_Send_Data_Buffer;
   UDR0=*Com0_Send_Data_Pointer;
}

这个功能是读线圈的状态的,给大家看一下,这样就能运行了,并且能够通过MODBUS调试软件调试了,可以说是一个最小的系统了吧
有问题在这里留言
void Modbus_Function_1(void)
{  
    unsigned char  a, b,c,i;
    unsigned int temp;
    Com0_Send_Data_Buffer[1]=0x01;
   if((Com0_Receive_Data_Buffer[4]==0)&&(Com0_Receive_Data_Buffer[5]<6))
        {
                if((Com0_Receive_Data_Buffer[2]==0)&&(Com0_Receive_Data_Buffer[3]<6)&&((Com0_Receive_Data_Buffer[3]+Com0_Receive_Data_Buffer[5])<6 ))
                {
                        a=Com0_Receive_Data_Buffer[3]>>3; //&iquest;&ordf;&Ecirc;&frac14;&micro;&Oslash;&Ouml;·&sup3;&yacute;&Ograve;&Ocirc;8
            b=Com0_Receive_Data_Buffer[3]&0x07; //&iquest;&ordf;&Ecirc;&frac14;&micro;&Oslash;&Ouml;·&sup3;&yacute;&Ograve;&Ocirc;8&micro;&Auml;&Oacute;à&Ecirc;&yacute;
            c=Com0_Receive_Data_Buffer[5]+b; //&Oacute;&ETH;°ü&ordm;&not;&Ocirc;&Uacute;&Ccedil;°&Ograve;&raquo;&cedil;&ouml;&raquo;&yacute;&acute;&aelig;&AElig;÷&micro;&Auml;&sup2;&Icirc;&Ecirc;&yacute;
            Com0_Send_Data_Buffer[2]=Com0_Receive_Data_Buffer[5]>>3; //&Ograve;&ordf;·&cent;&Euml;&Iacute;&micro;&Auml;&raquo;&yacute;&acute;&aelig;&AElig;÷&micro;&Auml;&Ecirc;&yacute;&Aacute;&iquest;
            if(Com0_Receive_Data_Buffer[5]&0x07) //&Oacute;à&Ecirc;&yacute;
                Com0_Send_Data_Buffer[2]+=1;
            Com0_Send_Data_Bytes=Com0_Send_Data_Buffer[2]+3;
            if(c&0x07)
                                c=(c>>3)+1;
            else
                                c=c>>3;
            for(i=0;i<c;i++)
            {
                temp=Coil_state[a];
                a++;
                temp+=(Coil_state[a]<<8);
                temp>>=b;
                Com0_Send_Data_Buffer[i+3]=temp&0xff;
            }
            Com0_Send_Data_Buffer[i+3]=temp>>8;
            Com0_Send_Data_Buffer[i+3]<<=(8-Com0_Receive_Data_Buffer[5]&0x07);
            Com0_Send_Data_Buffer[i+3]>>=(8-Com0_Receive_Data_Buffer[5]&0x07);
                }
                else
                {
                        Com0_Send_Data_Buffer[1]=0x81;
                        Com0_Send_Data_Buffer[2]=2;
                        Com0_Send_Data_Bytes=3;
                }
        }
        else
        {
                Com0_Send_Data_Buffer[1]=0x81;
                Com0_Send_Data_Buffer[2]=3;
        Com0_Send_Data_Bytes=3;
    }
}

出0入0汤圆

发表于 2008-1-24 13:18:14 | 显示全部楼层
做个记号

出0入0汤圆

发表于 2008-1-29 22:09:00 | 显示全部楼层
做个记号,以后也要掺和Modbus

出0入0汤圆

发表于 2008-2-1 17:32:53 | 显示全部楼层
hao,xuexi xia

出0入0汤圆

发表于 2008-7-23 10:35:38 | 显示全部楼层
请问
  if((Com0_Receive_Data_Buffer[4]==0)&&(Com0_Receive_Data_Buffer[5]<6))
        {
                if((Com0_Receive_Data_Buffer[2]==0)&&(Com0_Receive_Data_Buffer[3]<6)&&((Com0_Receive_Data_Buffer[3]+Com0_Receive_Data_Buffer[5])<6 ))  
                {

的作用是什么呢

出0入0汤圆

 楼主| 发表于 2008-7-24 11:49:58 | 显示全部楼层
数据的长度,要读取数据的长度,根据自己的实际应用可以修改

出0入0汤圆

发表于 2008-7-24 16:24:59 | 显示全部楼层
喔!做个记号。
  
 lcqqcl,你的程序测试过:功能码=16《预置多个寄存器》,给从机一次性写120个寄存器数据没有?

出0入0汤圆

发表于 2008-7-25 07:52:46 | 显示全部楼层
标记!

出0入0汤圆

发表于 2008-7-25 11:06:43 | 显示全部楼层
谢谢 lcqqcl 的回复

(Com0_Receive_Data_Buffer[4]==0)&&(Com0_Receive_Data_Buffer[5]<6)

buffer的4 5应该是No of Coils Hi和Lo


(Com0_Receive_Data_Buffer[2]==0)&&(Com0_Receive_Data_Buffer[3]<6)

buffer的2 3应该是Starting address的Hi和Lo


Com0_Receive_Data_Buffer[3]+Com0_Receive_Data_Buffer[5])<6 理解不了

这个两个部分相加的 意义何在呢?

出0入0汤圆

 楼主| 发表于 2008-7-25 11:12:31 | 显示全部楼层
这两个想加是限制读的开始地址和数据数量:
例如我最多只能读4个输入状态那么:
开始地址        数量      想加
1               4          5
2               3          5
3               2          5
4               1          5

出0入0汤圆

发表于 2009-3-12 20:49:26 | 显示全部楼层
程序还不是很完善,不过非常谢谢!自己在编功能函数

出0入0汤圆

发表于 2009-4-10 13:21:36 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-16 16:26:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-12-16 16:21:34 | 显示全部楼层
请问
if(Com0_Receive_Cout15 == Com0_Receive_Cout)//判断接收的过程中有没有超过T1.5
怎么保证中间没有出现过T1.5的停顿?谢谢!

我的理解是,在每次接收到新的字符时,RcvFlag和Uart_Fin都重新计时,RcvFlag总比Uart_Fin提前归零,
那么如果Uart_Fin == 0,那么RcvFlag肯定为0。
那么在timeProc()中,在执行
if(Com0_Receive_Cout15 == Com0_Receive_Cout)//判断接收的过程中有没有超过T1.5
前,肯定执行
if(Rcvflag == 0)//1.5T的时间到了,记录长度
{
  Com0_Receive_Cout15 = Com0_Receive_Cout;
}
是不是就不能达到排除出现t1.5停顿的可能?

出0入0汤圆

发表于 2009-12-16 20:37:37 | 显示全部楼层
kankan

出0入0汤圆

发表于 2010-2-4 14:02:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-2-4 14:06:12 | 显示全部楼层
学习

出0入0汤圆

发表于 2010-2-4 16:25:16 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-2-7 09:27:17 | 显示全部楼层
回复【楼主位】lcqqcl 自学AVR的农民
-----------------------------------------------------------------------

出0入0汤圆

发表于 2010-3-5 19:14:10 | 显示全部楼层
MODBUS中规定,两个字符之间的空闲间隔大于1.5个字符时间,则报文帧认为不完整丢弃

其中1.5个字符间隔是指的前一个字符结束到后一个字符到来之前的时间是吧??另外AVR中字符接收完成中断从上一个字符接收完成中断到下一个字符接收完成中断的时间间隔是不是应不小于2.5个字符间隔就认为接收正确??

出0入0汤圆

发表于 2010-3-15 22:26:32 | 显示全部楼层
严重关注。

出0入0汤圆

发表于 2010-5-22 03:28:52 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-8 17:15:34 | 显示全部楼层

好贴 (原文件名:好贴.jpg)

出0入0汤圆

发表于 2010-7-9 10:53:10 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-7-10 16:10:02 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-11 11:59:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-19 16:08:34 | 显示全部楼层
再找MODBUS 资料,呵呵O(∩_∩)O~

出0入0汤圆

发表于 2010-8-26 12:32:26 | 显示全部楼层
m

出0入0汤圆

发表于 2010-8-26 13:17:42 | 显示全部楼层
3.5字符静止时间好象不是这样产生了吧!

   正确的做法是:
     进入接收中断后,立即开启定时中断,当中断溢出后,表示一帧包接收完毕,然后关闭定时中断。

出0入0汤圆

发表于 2010-8-28 21:53:46 | 显示全部楼层
好贴,留个记号!!希楼主传上完整程序以便测试!!

出0入0汤圆

发表于 2010-9-1 22:03:00 | 显示全部楼层
不正常响应处理有问题
MODBUS中规定:
若从机接收查询,发现有 (LRC 或CRC) 通讯错误,此时,依靠主机处理程序给出查询超时事件。
LZ程序中是这样处理的:
        ////show   error!  
        Com0_Send_Data_Buffer[1]=0xFF;  
        Com0_Send_Data_Buffer[2]=3;  
        Com0_Send_Data_Bytes=5;

出0入0汤圆

发表于 2010-9-6 13:15:21 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-20 19:04:49 | 显示全部楼层
学习啦,十分感谢。。。

出0入0汤圆

发表于 2011-1-20 20:18:04 | 显示全部楼层
回复【36楼】wacc1314
请问
if(com0_receive_cout15 == com0_receive_cout)//判断接收的过程中有没有超过t1.5  
怎么保证中间没有出现过t1.5的停顿?谢谢!
我的理解是,在每次接收到新的字符时,rcvflag和uart_fin都重新计时,rcvflag总比uart_fin提前归零,
那么如果uart_fin == 0,那么rcvflag肯定为0。
那么在timeproc()中,在执行
if(com0_receive_cout15 == com0_receive_cout)//判断接收的过程中有没有超过t1.5
前,肯定执行
if(rcvflag == 0)//1.5t的时间到了,记录长度  
{  
  com0_receive_cout15 = com0_receive_cout;  
}
是不是就不能达到排除出现t1.5停顿的可能?

-----------------------------------------------------------------------

详细的看了下lz的程序,我有和wacc1314 同样的困惑,找程序这样设计,我理解不出如何排除了停顿的可能,还望lz解释一下,谢谢。。。

出0入0汤圆

发表于 2011-1-20 20:31:42 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-28 14:36:00 | 显示全部楼层
正在学modbus

出0入0汤圆

发表于 2011-2-23 16:50:20 | 显示全部楼层
看看。谢谢

出0入0汤圆

发表于 2011-2-23 21:17:47 | 显示全部楼层
mark~~~~~~~谢谢分享~

出0入0汤圆

发表于 2011-2-23 23:56:18 | 显示全部楼层
看看,学习。

出0入0汤圆

发表于 2011-2-24 10:29:00 | 显示全部楼层
3Q,MARK!

出0入0汤圆

发表于 2011-3-1 18:32:50 | 显示全部楼层
modbus mark

出0入0汤圆

发表于 2011-3-9 21:08:59 | 显示全部楼层
最近正好要写,先看了!

出0入0汤圆

发表于 2011-3-24 16:12:13 | 显示全部楼层
最近正在学习modbus,很有帮助。

出0入0汤圆

发表于 2011-4-23 19:00:56 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-9 23:04:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-10 17:16:38 | 显示全部楼层
收下了。学习一下

出0入0汤圆

发表于 2011-6-15 09:27:11 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2011-6-15 09:37:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-15 09:38:52 | 显示全部楼层
多谢分享,过段时间要搞ModBus,学习先!

出0入0汤圆

发表于 2011-7-22 11:42:49 | 显示全部楼层
好好学习

出0入0汤圆

发表于 2012-1-24 22:57:57 | 显示全部楼层
谢谢

出0入0汤圆

发表于 2012-1-25 11:54:20 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-1-25 14:18:54 | 显示全部楼层
又学到新的东西啦, 谢谢各位电工

出0入0汤圆

发表于 2012-1-27 14:57:07 | 显示全部楼层
mark

出0入0汤圆

发表于 2013-6-24 12:06:35 | 显示全部楼层
mark。
  
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 23:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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