ketangsz
級(jí)別: 探索解密
精華主題: 0
發(fā)帖數(shù)量: 30 個(gè)
工控威望: 149 點(diǎn)
下載積分: 392 分
在線時(shí)間: 73(小時(shí))
注冊(cè)時(shí)間: 2011-07-04
最后登錄: 2024-01-03
查看ketangsz的 主題 / 回貼
樓主  發(fā)表于: 2015-08-14 20:49
因?yàn)樗麄兛梢钥刂?軸,弄了兩個(gè)來(lái)試。這兩個(gè)有點(diǎn)很不爽的地方是內(nèi)存高低位是反的(相對(duì)三菱)。接觸摸屏問(wèn)題就來(lái)了,要交換高低位屏上顯示才正確。參數(shù)多啊,痛苦呢。哪位大師有什么好招?還是我搞錯(cuò)了?還是要用他們的專用屏?我習(xí)慣用維倫,便宜啊。
lvpretend
級(jí)別: 論壇先鋒
精華主題: 0
發(fā)帖數(shù)量: 1258 個(gè)
工控威望: 1428 點(diǎn)
下載積分: 3680 分
在線時(shí)間: 322(小時(shí))
注冊(cè)時(shí)間: 2015-07-20
最后登錄: 2024-05-22
查看lvpretend的 主題 / 回貼
1樓  發(fā)表于: 2015-08-14 21:56
觸摸屏不能自己按對(duì)應(yīng)PLC換過(guò)來(lái)嗎?
如果用的MODBUS通用格式,就做個(gè)HMI數(shù)據(jù)交換的緩沖區(qū)吧,其實(shí)用緩沖區(qū)交換數(shù)據(jù)也便于調(diào)試。
ketangsz
級(jí)別: 探索解密
精華主題: 0
發(fā)帖數(shù)量: 30 個(gè)
工控威望: 149 點(diǎn)
下載積分: 392 分
在線時(shí)間: 73(小時(shí))
注冊(cè)時(shí)間: 2011-07-04
最后登錄: 2024-01-03
查看ketangsz的 主題 / 回貼
2樓  發(fā)表于: 2015-08-15 21:17
維倫跟麥格米特是modbus通訊的,屏不會(huì)自動(dòng)換高低位。做緩沖區(qū)大概是個(gè)什么意思?用屏內(nèi)部存儲(chǔ)器加宏指令反相嗎?
lvpretend
級(jí)別: 論壇先鋒
精華主題: 0
發(fā)帖數(shù)量: 1258 個(gè)
工控威望: 1428 點(diǎn)
下載積分: 3680 分
在線時(shí)間: 322(小時(shí))
注冊(cè)時(shí)間: 2015-07-20
最后登錄: 2024-05-22
查看lvpretend的 主題 / 回貼
3樓  發(fā)表于: 2015-08-15 21:31
引用
引用第2樓ketangsz于2015-08-15 21:17發(fā)表的  :
維倫跟麥格米特是modbus通訊的,屏不會(huì)自動(dòng)換高低位。做緩沖區(qū)大概是個(gè)什么意思?用屏內(nèi)部存儲(chǔ)器加宏指令反相嗎?

PLC來(lái)做更方便些,把需要與觸摸屏交換的數(shù)據(jù)從PLC的各個(gè)不同的地址映射到PLC中一個(gè)連續(xù)的空間,數(shù)據(jù)量應(yīng)該不算太多,然后用子程序把這個(gè)連續(xù)空間全部逐個(gè)交換高低16位到另外一個(gè)連續(xù)空間,供觸摸屏調(diào)用。再用相同的方法把觸摸屏發(fā)出的數(shù)據(jù)交換回來(lái)。
這樣結(jié)構(gòu)清晰,不容易出錯(cuò),也不影響PLC主體程序。
彭萬(wàn)生
級(jí)別: 工控俠客
精華主題: 0
發(fā)帖數(shù)量: 1893 個(gè)
工控威望: 2102 點(diǎn)
下載積分: 131755 分
在線時(shí)間: 1278(小時(shí))
注冊(cè)時(shí)間: 2013-08-04
最后登錄: 2024-04-17
查看彭萬(wàn)生的 主題 / 回貼
4樓  發(fā)表于: 2015-08-15 21:45
3樓說(shuō)的很在理
靜芳
級(jí)別: 工控俠客
精華主題: 0
發(fā)帖數(shù)量: 947 個(gè)
工控威望: 3026 點(diǎn)
下載積分: 3279 分
在線時(shí)間: 203(小時(shí))
注冊(cè)時(shí)間: 2010-02-05
最后登錄: 2024-09-18
查看靜芳的 主題 / 回貼
5樓  發(fā)表于: 2015-08-16 09:06
真麻煩
ketangsz
級(jí)別: 探索解密
精華主題: 0
發(fā)帖數(shù)量: 30 個(gè)
工控威望: 149 點(diǎn)
下載積分: 392 分
在線時(shí)間: 73(小時(shí))
注冊(cè)時(shí)間: 2011-07-04
最后登錄: 2024-01-03
查看ketangsz的 主題 / 回貼
6樓  發(fā)表于: 2015-08-22 16:31
網(wǎng)絡(luò)的好處就是你都不知道我是誰(shuí),你就已經(jīng)幫我了,感謝網(wǎng)絡(luò),感謝大家的回復(fù)。 我是從學(xué)校開始學(xué)三菱PLC,所以現(xiàn)在很難習(xí)慣跟三菱編程指令差太遠(yuǎn)的控制器。但對(duì)國(guó)內(nèi)的控制器這塊還是希望有自己品牌的東西。做工控的人應(yīng)該都理解我們倒騰來(lái)倒騰去,全都是在使用別人的技術(shù),別人的東西,別人賺大頭,我們沒辦法。所以我買過(guò)國(guó)產(chǎn)矩形的48點(diǎn)PLC,支持6軸。這個(gè)確實(shí)是硬件軟件都比較獨(dú)立的控制器,指令多,功能強(qiáng)。很遺憾項(xiàng)目緊,我沒把握用上去。針對(duì)樓上的回答,我又查了手冊(cè),確實(shí)矩形的32位元件高低位是不用去交換的。只是他的MOV只有16位的指令,對(duì)于32位數(shù)需要高低位分別傳送。發(fā)幾張圖,大家碰到這個(gè)問(wèn)題,耐心點(diǎn)就好。解釋big endian little endian——http://blog.csdn.net/sunshine1314/article/details/2309655
ketangsz
級(jí)別: 探索解密
精華主題: 0
發(fā)帖數(shù)量: 30 個(gè)
工控威望: 149 點(diǎn)
下載積分: 392 分
在線時(shí)間: 73(小時(shí))
注冊(cè)時(shí)間: 2011-07-04
最后登錄: 2024-01-03
查看ketangsz的 主題 / 回貼
7樓  發(fā)表于: 2015-08-22 16:34
Big Endian 和 Little Endian

Peter Lee 2008-04-20

一、字節(jié)序
來(lái)自:http://ayazh.gjjblog.com/archives/1058846/

談到字節(jié)序的問(wèn)題,必然牽涉到兩大CPU派系。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列采用big endian方式存儲(chǔ)數(shù)據(jù),而x86系列則采用little endian方式存儲(chǔ)數(shù)據(jù)。那么究竟什么是big endian,什么又是little endian呢?

     其實(shí)big endian是指低地址存放最高有效字節(jié)(MSB),而little endian則是低地址存放最低有效字節(jié)(LSB)。

     用文字說(shuō)明可能比較抽象,下面用圖像加以說(shuō)明。比如數(shù)字0x12345678在兩種不同字節(jié)序CPU中的存儲(chǔ)順序如下所示:

Big Endian

   低地址                                            高地址
   ----------------------------------------->
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     12     |      34    |     56      |     78    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Little Endian

   低地址                                            高地址
   ----------------------------------------->
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     78     |      56    |     34      |     12    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     從上面兩圖可以看出,采用big endian方式存儲(chǔ)數(shù)據(jù)是符合我們?nèi)祟惖乃季S習(xí)慣的。而little endian,!@#$%^&*,見鬼去吧 -_-|||

     為什么要注意字節(jié)序的問(wèn)題呢?你可能這么問(wèn)。當(dāng)然,如果你寫的程序只在單機(jī)環(huán)境下面運(yùn)行,并且不和別人的程序打交道,那么你完全可以忽略字節(jié)序的存在。但是,如果你的程序要跟別人的程序產(chǎn)生交互呢?在這里我想說(shuō)說(shuō)兩種語(yǔ)言。C/C++語(yǔ)言編寫的程序里數(shù)據(jù)存儲(chǔ)順序是跟編譯平臺(tái)所在的CPU相關(guān)的,而JAVA編寫的程序則唯一采用big endian方式來(lái)存儲(chǔ)數(shù)據(jù)。試想,如果你用C/C++語(yǔ)言在x86平臺(tái)下編寫的程序跟別人的JAVA程序互通時(shí)會(huì)產(chǎn)生什么結(jié)果?就拿上面的0x12345678來(lái)說(shuō),你的程序傳遞給別人的一個(gè)數(shù)據(jù),將指向0x12345678的指針傳給了JAVA程序,由于JAVA采取big endian方式存儲(chǔ)數(shù)據(jù),很自然的它會(huì)將你的數(shù)據(jù)翻譯為0x78563412。什么?竟然變成另外一個(gè)數(shù)字了?是的,就是這種后果。因此,在你的C程序傳給JAVA程序之前有必要進(jìn)行字節(jié)序的轉(zhuǎn)換工作。

     無(wú)獨(dú)有偶,所有網(wǎng)絡(luò)協(xié)議也都是采用big endian的方式來(lái)傳輸數(shù)據(jù)的。所以有時(shí)我們也會(huì)把big endian方式稱之為網(wǎng)絡(luò)字節(jié)序。當(dāng)兩臺(tái)采用不同字節(jié)序的主機(jī)通信時(shí),在發(fā)送數(shù)據(jù)之前都必須經(jīng)過(guò)字節(jié)序的轉(zhuǎn)換成為網(wǎng)絡(luò)字節(jié)序后再進(jìn)行傳輸。ANSI C中提供了下面四個(gè)轉(zhuǎn)換字節(jié)序的宏。

big endian:最高字節(jié)在地址最低位,最低字節(jié)在地址最高位,依次排列。
little endian:最低字節(jié)在最低位,最高字節(jié)在最高位,反序排列。

endian指的是當(dāng)物理上的最小單元比邏輯上的最小單元小時(shí),邏輯到物理的單元排布關(guān)系。咱們接觸到的物理單元最小都是byte,在通信領(lǐng)域中,這里往往是bit,不過(guò)原理也是類似的。

一個(gè)例子:
如果我們將0x1234abcd寫入到以0x0000開始的內(nèi)存中,則結(jié)果為
                big-endian     little-endian
0x0000     0x12              0xcd
0x0001     0x34              0xab
0x0002     0xab              0x34
0x0003     0xcd              0x12


目前應(yīng)該little endian是主流,因?yàn)樵跀?shù)據(jù)類型轉(zhuǎn)換的時(shí)候(尤其是指針轉(zhuǎn)換)不用考慮地址問(wèn)題。


二、Big Endian 和 Little Endian名詞的由來(lái)
這兩個(gè)術(shù)語(yǔ)來(lái)自于 Jonathan Swift 的《《格利佛游記》其中交戰(zhàn)的兩個(gè)派別無(wú)法就應(yīng)該從哪一端--小端還是大端--打開一個(gè)半熟的雞蛋達(dá)成一致。:)
“endian”這個(gè)詞出自《格列佛游記》。小人國(guó)的內(nèi)戰(zhàn)就源于吃雞蛋時(shí)是究竟從大頭(Big-Endian)敲開還是從小頭(Little-Endian)敲開,由此曾發(fā)生過(guò)六次叛亂,其中一個(gè)皇帝送了命,另一個(gè)丟了王位。
我們一般將endian翻譯成“字節(jié)序”,將big endian和little endian稱作“大尾”和“小尾”。

在那個(gè)時(shí)代,Swift是在諷刺英國(guó)和法國(guó)之間的持續(xù)沖突,Danny Cohen,一位網(wǎng)絡(luò)協(xié)議的早期開創(chuàng)者,第一次使用這兩個(gè)術(shù)語(yǔ)來(lái)指代字節(jié)順序,后來(lái)這個(gè)術(shù)語(yǔ)被廣泛接納了

三、Big Endian 和 Little Endian優(yōu)劣
來(lái)自:Dr. William T. Verts, April 19, 1996
Big Endian
判別一個(gè)數(shù)的正負(fù)很容易,只要取offset0處的一個(gè)字節(jié)就能確認(rèn)。
Little Endian
長(zhǎng)度為1,2,4字節(jié)的數(shù),排列方式都是一樣的,數(shù)據(jù)類型轉(zhuǎn)換非常方便。

四、一些常見文件的字節(jié)序
來(lái)自:Dr. William T. Verts, April 19, 1996

Common file formats and their endian order are as follows:
Adobe Photoshop -- Big Endian
BMP (Windows and OS/2 Bitmaps) -- Little Endian
DXF (AutoCad) -- Variable
GIF -- Little Endian
IMG (GEM Raster) -- Big Endian
JPEG -- Big Endian
FLI (Autodesk Animator) -- Little Endian
MacPaint -- Big Endian
PCX (PC Paintbrush) -- Little Endian
PostScript -- Not Applicable (text!)
POV (Persistence of Vision ray-tracer) -- Not Applicable (text!)
QTM (Quicktime Movies) -- Little Endian (on a Mac!) (PeterLee注Big Endian in my opinion)
Microsoft RIFF (.WAV & .AVI) -- Both
Microsoft RTF (Rich Text Format) -- Little Endian
SGI (Silicon Graphics) -- Big Endian
Sun Raster -- Big Endian
TGA (Targa) -- Little Endian
TIFF -- Both, Endian identifier encoded into file
WPG (WordPerfect Graphics Metafile) -- Big Endian (on a PC!)
XWD (X Window Dump) -- Both, Endian identifier encoded into file

五、比特序
來(lái)自:http://ayazh.gjjblog.com/archives/1058846/

我在8月9號(hào)的《Big Endian和Little Endian》一文中談了字節(jié)序的問(wèn)題。可是有朋友仍然會(huì)問(wèn),CPU存儲(chǔ)一個(gè)字節(jié)的數(shù)據(jù)時(shí)其字節(jié)內(nèi)的8個(gè)比特之間的順序是否也有big endian和little endian之分?或者說(shuō)是否有比特序的不同?

     實(shí)際上,這個(gè)比特序是同樣存在的。下面以數(shù)字0xB4(10110100)用圖加以說(shuō)明。


Big Endian

   msb                                                         lsb
   ---------------------------------------------->
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   1  |   0  |   1  |   1  |   0  |   1  |   0  |   0  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Little Endian

   lsb                                                         msb
   ---------------------------------------------->
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   0  |   0  |   1  |   0  |   1  |   1  |   0  |   1  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     實(shí)際上,由于CPU存儲(chǔ)數(shù)據(jù)操作的最小單位是一個(gè)字節(jié),其內(nèi)部的比特序是什么樣對(duì)我們的程序來(lái)說(shuō)是一個(gè)黑盒子。也就是說(shuō),你給我一個(gè)指向0xB4這個(gè)數(shù)的指針,對(duì)于big endian方式的CPU來(lái)說(shuō),它是從左往右依次讀取這個(gè)數(shù)的8個(gè)比特;而對(duì)于little endian方式的CPU來(lái)說(shuō),則正好相反,是從右往左依次讀取這個(gè)數(shù)的8個(gè)比特。而我們的程序通過(guò)這個(gè)指針訪問(wèn)后得到的數(shù)就是0xB4,字節(jié)內(nèi)部的比特序?qū)τ诔绦騺?lái)說(shuō)是不可見的,其實(shí)這點(diǎn)對(duì)于單機(jī)上的字節(jié)序來(lái)說(shuō)也是一樣的。

     那可能有人又會(huì)問(wèn),如果是網(wǎng)絡(luò)傳輸呢?會(huì)不會(huì)出問(wèn)題?是不是也要通過(guò)什么函數(shù)轉(zhuǎn)換一下比特序?嗯,這個(gè)問(wèn)題提得很好。假設(shè)little endian方式的CPU要傳給big endian方式CPU一個(gè)字節(jié)的話,其本身在傳輸之前會(huì)在本地就讀出這個(gè)8比特的數(shù),然后再按照網(wǎng)絡(luò)字節(jié)序的順序來(lái)傳輸這8個(gè)比特,這樣的話到了接收端不會(huì)出現(xiàn)任何問(wèn)題。而假如要傳輸一個(gè)32比特的數(shù)的話,由于這個(gè)數(shù)在littel endian方存儲(chǔ)時(shí)占了4個(gè)字節(jié),而網(wǎng)絡(luò)傳輸是以字節(jié)為單位進(jìn)行的,little endian方的CPU讀出第一個(gè)字節(jié)后發(fā)送,實(shí)際上這個(gè)字節(jié)是原數(shù)的LSB,到了接收方反倒成了MSB從而發(fā)生混亂。